Kalkulator z historią
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 56 z 56.
Wyzwanie
ŚredniZbuduj kalkulator, który przetwarza strumień wyrażeń, obsługuje błędy i na końcu przedstawia historię dla każdego operatora.
Odczytaj jeden wiersz wejścia: listę wyrażeń a:op:b rozdzielonych przecinkami. Operatorami są +, -, *, /. Zdefiniuj wyliczenie CalcError: Error z przypadkami parse, divideByZero, unknownOp.
Dla każdego wyrażenia, w podanej kolejności:
- W przypadku powodzenia wypisz
= <n> - Dla każdego przypadku błędu wypisz
parse,divZerolubunknownOp
Po wierszach dotyczących poszczególnych wyrażeń wypisz po jednym wierszu dla każdego operatora, który zakończył się powodzeniem co najmniej raz, w ustalonej kolejności +, -, *, /:
<op>: count=<n> sum=<total>count oznacza, ile razy użycie danego operatora zakończyło się powodzeniem; sum to suma tych poprawnie obliczonych wyników.
Dla wejścia 3:+:5,10:/:0,7:*:2,9:%:2,12:-:4,8:+:2 wynik to:
= 8
divZero
= 14
unknownOp
= 8
= 10
+: count=2 sum=18
-: count=1 sum=8
*: count=1 sum=14Spróbuj swoich sił
let exprs = readLine()!.components(separatedBy: ",")
let order = ["+", "-", "*", "/"]
// TODO: enum CalcError; func compute(...) throws -> Int;
// przejdź przez pętlę, użyj do/try, wypisz wynik; zbuduj historię dla każdego operatora;
// raport końcowy w ustalonej kolejności, tylko dla operatorów, których operacje się powiodły
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słówPoćwicz samodzielnie: Edytor online Swift