Menu
Coddy logo textTech

Повторение — Безопасный калькулятор

Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 48 из 56.

challenge icon

Задание

Средне

Создайте крошечный калькулятор, защищенный от некорректного ввода.

Определите CalcError: Error со следующими случаями (cases): parse, divideByZero, unknownOp.

Определите выбрасывающую исключения функцию compute(_ a: String, _ op: String, _ b: String) throws -> Int, которая:

  • Парсит a и b как целые числа, выбрасывая .parse, если какой-либо из них не удается преобразовать
  • Выбрасывает .unknownOp, когда op не является одним из +, -, *, /
  • Выбрасывает .divideByZero, когда op == "/" и b == 0
  • В противном случае возвращает целочисленный результат

Прочитайте одну строку ввода: список выражений a:op:b, разделенных запятыми. Обработайте каждое по порядку с помощью do/catch. Выводите по одной строке на каждое выражение:

  • = <n> при успехе
  • parse error, div by zero или unknown op для каждого случая ошибки

После строк для каждого выражения выведите одну итоговую строку: OK: <n> с количеством успешно вычисленных выражений.

Для ввода 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4 вывод будет следующим:

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

Попробуйте сами

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

// TODO: enum CalcError; func compute(...) throws -> Int;
// цикл, do/try, вывод результата для каждого выражения; в конце вывод 'OK: <n>'

Все уроки раздела Логика и управление потоком