Menu
CoddyTech

Kalkulator dengan Riwayat

Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 56 dari 56.

challenge icon

Tantangan

Sedang

Buat kalkulator yang memproses aliran ekspresi, menangani error, dan melaporkan riwayat tiap operator di akhir.

Baca satu baris input: daftar ekspresi a:op:b yang dipisahkan dengan koma. Operatornya adalah +, -, *, /. Definisikan enum CalcError: Error dengan kasus parse, divideByZero, unknownOp.

Untuk setiap ekspresi, secara berurutan:

  • Cetak = <n> jika berhasil
  • Cetak parse, divZero, atau unknownOp untuk setiap kasus error

Setelah baris untuk setiap ekspresi, cetak satu baris untuk setiap operator yang berhasil setidaknya sekali, dengan urutan tetap +, -, *, /:

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

count adalah berapa kali operator tersebut berhasil, sedangkan sum adalah total dari hasil yang berhasil.

Untuk input 3:+:5,10:/:0,7:*:2,9:%:2,12:-:4,8:+:2, output-nya adalah:

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

Coba sendiri

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

// TODO: buat enum CalcError; func compute(...) throws -> Int;
// buat perulangan, gunakan do/try, cetak hasil; susun riwayat tiap operator;
// buat laporan akhir dengan urutan tetap, hanya untuk operator yang berhasil

Semua pelajaran di Logika dan Alur

Latihan sendiri: Playground Swift