Menu
Coddy logo textTech

Kalkulator z historią

Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 56 z 56.

challenge icon

Wyzwanie

Średni

Zbuduj 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, divZero lub unknownOp

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=14

Spró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

Poćwicz samodzielnie: Edytor online Swift