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.
Thử thách
Trung bìnhXâ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,divZerohoặcunknownOpcho 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=14Tự 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
1Chuỗi chuyên sâu
Đếm và chỉ sốChữ hoa, chữ thường và xóa khoảng trắngTìm kiếm trong chuỗiTách và nối chuỗiThay thế chuỗi conÔn tập: Kiểm tra tên người dùng4Tập hợp
Tạo tập hợpPhép hợp và phép giaoPhép trừ và hiệu đối xứngTập con và tập hợp conÔn tập: Bộ lọc thẻ7Dự án: Theo dõi thói quen
Tổng quan dự ánĐánh dấu hoàn thành10Dự án: bộ máy trắc nghiệm
Tổng quan dự ánĐặt câu hỏiTự luyện tập: Playground Swift