Menu
CoddyTech

Máy tính có lịch sử

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

challenge icon

Thử thách

Trung bình

Xây dựng một máy tính xử lý một luồng biểu thức, xử lý lỗi và báo cáo lịch sử theo từng toán tử ở cuối.

Đọc một dòng đầu vào: danh sách các biểu thức a:op:b được phân tách bằng dấu phẩy. Các toán tử là +, -, *, /. Định nghĩa một enum CalcError: Error với các trường hợp parse, divideByZero, unknownOp.

Với mỗi biểu thức, theo thứ tự:

  • In ra = <n> nếu thành công
  • In ra parse, divZero hoặc unknownOp cho từng trường hợp lỗi

Sau các dòng cho từng biểu thức, in một dòng cho mỗi toán tử thành công ít nhất một lần, theo thứ tự cố định +, -, *, /:

<op>: count=<n> sum=<total>

count là số lần toán tử đó thành công; sum là tổng các kết quả thành công đó.

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

= 8
divZero
= 14
unknownOp
= 8
= 10
+: count=2 sum=18
-: count=1 sum=8
*: count=1 sum=14

Tự làm thử

let exprs = readLine()!.components(separatedBy: ",")
let order = ["+", "-", "*", "/"]

// TODO: enum CalcError; func compute(...) throws -> Int;
// Dùng vòng lặp, do/try, in kết quả; lưu lịch sử cho từng phép toán;
// Báo cáo cuối theo thứ tự cố định, chỉ gồm các phép toán thành công

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

Tự luyện tập: Playground Swift