Menu
Coddy logo textTech

Powtórzenie – przetwarzanie listy

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 50 z 65.

challenge icon

Wyzwanie

Łatwy

Utwórz elastyczny system przetwarzania danych, który demonstruje funkcje wyższego rzędu poprzez zbudowanie konfigurowalnego procesora list. Twój program utworzy różne funkcje przetwarzające i użyje głównej funkcji przetwarzającej, która może zastosować dowolną operację do listy danych.

  1. Wczytaj ciąg znaków zawierający liczby oddzielone przecinkami (np. "10,20,30,40")
  2. Wczytaj ciąg znaków określający typ pierwszej operacji ("multiply", "add" lub "subtract")
  3. Wczytaj ciąg znaków określający wartość używaną przy pierwszej operacji (np. "3")
  4. Wczytaj ciąg znaków określający typ drugiej operacji ("multiply", "add" lub "subtract")
  5. Wczytaj ciąg znaków określający wartość używaną przy drugiej operacji (np. "5")
  6. Podziel pierwsze wejście na pojedyncze liczby i zamień każdą z nich na liczbę całkowitą
  7. Utwórz trzy funkcje wykonujące operacje:
    • multiplyBy — przyjmuje dwie liczby całkowite i zwraca pierwszą pomnożoną przez drugą
    • addTo — przyjmuje dwie liczby całkowite i zwraca ich sumę
    • subtractFrom — przyjmuje dwie liczby całkowite i zwraca różnicę pierwszej i drugiej
  8. Utwórz główną funkcję o nazwie processListWithOperation, która przyjmuje trzy parametry:
    • Listę liczb całkowitych
    • Funkcję, która przyjmuje dwie liczby całkowite i zwraca liczbę całkowitą
    • Wartość całkowitą używaną przy operacji
  9. Funkcja processListWithOperation powinna zastosować podaną funkcję do każdej liczby z listy, używając podanej wartości, i zwrócić nową listę z wynikami
  10. Zastosuj pierwszą operację do pierwotnej listy, a następnie zastosuj drugą operację do wyniku pierwszej operacji
  11. Wyświetl wyniki w dokładnie takim formacie, jak pokazano poniżej

Na przykład, jeśli dane wejściowe to "2,4,6", "multiply", "3", "add" i "10", twój program powinien wyświetlić:

Advanced List Processor
=======================
Original list: [2, 4, 6]
First operation: multiply by 3
After first operation: [6, 12, 18]
Second operation: add 10
Final result: [16, 22, 28]
Processing completed successfully

Jeśli dane wejściowe to "15,25,35", "subtract", "5", "multiply" i "2", twój program powinien wyświetlić:

Advanced List Processor
=======================
Original list: [15, 25, 35]
First operation: subtract 5
After first operation: [10, 20, 30]
Second operation: multiply by 2
Final result: [20, 40, 60]
Processing completed successfully

Twój program musi demonstrować funkcje wyższego rzędu, przekazując do processListWithOperation odpowiednią funkcję wykonującą operację, zależnie od danych wejściowych określających typ operacji. Użyj instrukcji warunkowych, aby ustalić, którą funkcję przekazać dla każdej operacji. Funkcja processListWithOperation powinna przejść przez listę wejściową, zastosować do każdego elementu podaną funkcję z użyciem podanej wartości i zebrać wyniki w nowej liście. Zastosuj operacje kolejno, używając wyniku pierwszej operacji jako wejścia dla drugiej.

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Wczytaj dane wejściowe
  String? numbersInput = stdin.readLineSync();
  String? firstOperation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondOperation = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // Przekształć tekst wejściowy w listę liczb całkowitych
  List<int> originalList = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
  int firstOpValue = int.parse(firstValue!);
  int secondOpValue = int.parse(secondValue!);
  
  // TODO: Napisz swój kod poniżej
  // Utwórz trzy funkcje operacji: multiplyBy, addTo, subtractFrom
  // Utwórz funkcję processListWithOperation
  // Wykonaj operacje po kolei i zapisz wyniki
  
  // Wyświetl wyniki w wymaganym formacie
  print('Advanced List Processor');
  print('=======================');
  print('Original list: $originalList');
  // Wyświetl pierwszą operację i jej wynik
  // Wyświetl drugą operację i wynik końcowy
  print('Processing completed successfully');
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online