Menu
Coddy logo textTech

Powtórka — bezpieczny kalkulator

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

challenge icon

Wyzwanie

Średni

Zbuduj mały kalkulator odporny na nieprawidłowe dane wejściowe.

Zdefiniuj CalcError: Error z przypadkami: parse, divideByZero, unknownOp.

Zdefiniuj funkcję compute(_ a: String, _ op: String, _ b: String) throws -> Int zgłaszającą błędy, która:

  • Parsuje a i b jako liczby całkowite, zgłaszając .parse, jeśli parsowanie którejkolwiek z nich się nie powiedzie
  • Zgłasza .unknownOp, gdy op nie jest jednym z +, -, *, /
  • Zgłasza .divideByZero, gdy op == "/" i b == 0
  • W przeciwnym razie zwraca wynik jako liczbę całkowitą

Odczytaj jeden wiersz danych wejściowych: listę wyrażeń a:op:b rozdzielonych przecinkami. Przetwórz je po kolei za pomocą do/catch. Wypisz jeden wiersz dla każdego wyrażenia:

  • = <n> w przypadku powodzenia
  • parse error, div by zero lub unknown op dla każdego przypadku błędu

Po wierszach dotyczących poszczególnych wyrażeń wypisz jeden wiersz podsumowania: OK: <n> z liczbą wyrażeń przetworzonych pomyślnie.

Dla danych wejściowych 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4 wynikiem jest:

= 8
div by zero
parse error
unknown op
= 8
OK: 2

Spróbuj swoich sił

let exprs = readLine()!.components(separatedBy: ",")

// TODO: enum CalcError; func compute(...) throws -> Int;
// przejdź przez pętlę, użyj do/try, wypisz wynik dla każdego expr; na koniec wypisz 'OK: <n>'

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Edytor online Swift