Menu
CoddyTech

Ôn tập: Máy tính an toàn

Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 48 trên 56.

challenge icon

Thử thách

Trung bình

Tạo một máy tính nhỏ an toàn trước dữ liệu đầu vào không hợp lệ.

Định nghĩa CalcError: Error với các trường hợp: parse, divideByZero, unknownOp.

Định nghĩa hàm có thể ném ngoại lệ compute(_ a: String, _ op: String, _ b: String) throws -> Int để:

  • Phân tích a và b thành số nguyên, ném .parse nếu một trong hai không thành công
  • Ném .unknownOp khi op không phải là một trong các toán tử +, -, *, /
  • Ném .divideByZero khi op == "/" và b == 0
  • Nếu không, trả về kết quả dạng số nguyên

Đọc một dòng đầu vào duy nhất: danh sách các biểu thức a:op:b, phân tách bằng dấu phẩy. Xử lý lần lượt từng biểu thức bằng do/catch. In ra một dòng cho mỗi biểu thức:

  • = <n> nếu thành công
  • parse error, div by zero hoặc unknown op cho từng trường hợp lỗi

Sau các dòng cho từng biểu thức, in ra một dòng tổng kết: OK: <n> với số lượng biểu thức đã xử lý thành công.

Với đầu vào 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4, đầu ra là:

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

Tự làm thử

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

// TODO: enum CalcError; func compute(...) throws -> Int;
// Dùng vòng lặp, do/try, in ra kết quả cho từng expr; cuối cùng in ra 'OK: <n>'

Tất cả bài học trong Logic và luồng thực thi

Tự luyện tập: Playground Swift