Ini struk yang bakal dicetak program kasirmu di akhir pelajaran ini:
Warung Bu Sri
--------------------
Nasi goreng x 1 = 15000
Es teh x 2 = 8000
--------------------
Total: 23000
Bayar: 50000
Kembalian: 27000
Pembeli memesan satu nasi goreng dan dua es teh, lalu membayar 50000. Program yang mencetaknya membaca pesanan satu per satu, mencari harganya di menu, menjumlah semuanya, lalu menghitung kembalian.
Gak ada perintah baru di pelajaran ini. Daftar, pencarian, perulangan, fungsi, prosedur, dan JIKA sudah kamu kenal semua. Yang baru cuma pekerjaannya: merakit potongan-potongan itu jadi satu program yang utuh, kayak kasir beneran.
Rencananya dulu
Pelajaran Memecah Masalah bilang: langkah dulu, kode belakangan. Ini rencana kasirnya:
- Simpan nama menu dan harganya.
- Tulis kepala struk.
- Baca pesanan satu per satu sampai pembeli bilang
selesai. Untuk tiap pesanan: cari harganya, tulis barisnya, tambahkan ke total. - Tulis totalnya.
- Baca uang bayar, lalu tulis kembaliannya, atau berapa kurangnya.
Tiap langkah sudah pernah kamu kerjakan di pelajaran lain. Bagian berikutnya membahasnya satu per satu, masing-masing sebagai program kecil yang bisa kamu jalankan sendiri.
Menu dan harganya
Menunya dua daftar yang berpasangan, kayak di pelajaran Mencari Data: nama di menu, harga di harga, dengan urutan yang sama. Untuk mencari harga, cari dulu nomor menunya:
FUNGSI cariPosisi(daftar, nama)
UNTUK i ← 0 SAMPAI PANJANG(daftar) - 1
JIKA daftar[i] = nama MAKA
KEMBALIKAN i
AKHIR JIKA
AKHIR UNTUK
KEMBALIKAN -1
AKHIR FUNGSI
menu ← ["Nasi goreng", "Mie ayam", "Es teh", "Kopi"]
harga ← [15000, 12000, 4000, 5000]
posisi ← cariPosisi(menu, "Es teh")
TULIS "Es teh", harga[posisi]
TULIS "Bakso", cariPosisi(menu, "Bakso")
Es teh 4000
Bakso -1
Es teh ada di nomor 2, jadi harganya harga[2], 4000. Bakso gak ada di menu, jadi hasilnya -1. Daftar menu dikirim lewat parameter daftar, karena fungsi gak bisa melihat variabel di luarnya.
Membaca pesanan sampai "selesai"
Banyaknya pesanan gak ketahuan di awal. Pola dari pelajaran Mengulang Selama dipakai lagi: baca sekali sebelum perulangan, lalu baca lagi di baris terakhir isinya. Tiap pesanan dua baris input, nama menunya lalu jumlahnya. Dengan input Es teh, 2, Kopi, 1, selesai:
BACA nama
SELAMA nama ≠ "selesai" LAKUKAN
BACA jumlah
TULIS "Pesanan:", nama, jumlah
BACA nama
AKHIR SELAMA
TULIS "Pesanan ditutup"
Pesanan: Es teh 2
Pesanan: Kopi 1
Pesanan ditutup
Di pelajaran Mengulang Selama, tanda berhentinya 0. Di sini yang dibaca nama, jadi tanda berhentinya kata selesai, yang gak mungkin jadi nama menu.
Baris struk dan totalnya
Tiap pesanan jadi satu baris: nama, jumlah, dan subtotalnya. Totalnya dijumlah sambil jalan, dimulai dari 0 di luar perulangan. Garis pemisahnya prosedur dari pelajaran Prosedur:
PROSEDUR garis()
TULIS "--------------------"
AKHIR PROSEDUR
total ← 0
garis()
subtotal ← 4000 * 2
TULIS "Es teh", "x", 2, "=", subtotal
total ← total + subtotal
subtotal ← 5000 * 1
TULIS "Kopi", "x", 1, "=", subtotal
total ← total + subtotal
garis()
TULIS "Total:", total
--------------------
Es teh x 2 = 8000
Kopi x 1 = 5000
--------------------
Total: 13000
Tiga baris tengah per pesanan itu yang nanti masuk ke dalam SELAMA, dengan harga dari cariPosisi dan jumlah dari BACA.
Bayar dan kembalian
Uang yang pas juga harus diterima, jadi syaratnya >=, bukan >. Dengan input 20000 untuk belanja 23000:
total ← 23000
BACA bayar
TULIS "Bayar:", bayar
JIKA bayar >= total MAKA
TULIS "Kembalian:", bayar - total
SELAIN ITU
TULIS "Uang kurang:", total - bayar
AKHIR JIKA
Bayar: 20000
Uang kurang: 3000
Kalau pembeli bayar pas 23000, yang tercetak Kembalian: 0.
Merakit dan menguji
Di latihan, kerangkanya sudah ada: menunya, prosedur garis, dan perulangan yang membaca pesanan. Kamu mengisi tiga bagian: isi cariPosisi, apa yang terjadi dengan tiap pesanan di dalam SELAMA, dan bagian bayar di bawahnya. Kerjakan satu per satu, jalankan tiap selesai satu bagian, dan lihat struknya bertambah.
Programmu dijalankan tiga kali, masing-masing menguji batas yang beda. Satu pembeli memesan menu pertama dan bayar lebih. Satu memesan menu yang gak ada dan menu terakhir, lalu bayar pas. Satu lagi memesan tiga menu dan uangnya kurang. Kalau ada yang meleset, tab Tabel jejak di Playground menunjukkan isi total dan posisi di tiap putaran.
⚠️ Struk yang meleset
- Fungsi yang membaca
menulangsung.FUNGSI cariPosisi(nama)yang memakaimenudi dalamnya berhenti dengan "Baris 3:menugak kelihatan di dalam fungsicariPosisi." Kirim daftarnya lewat parameter:cariPosisi(menu, nama). - Harga diambil sebelum dicek. Untuk Bakso,
posisijadi -1, danharga[posisi]berhenti dengan "Baris 3:hargacuma punya 4 isi (0 sampai 3), tapiposisiisinya -1." Komputer juga mengingatkan bahwa -1 biasanya artinya "gak ketemu", bukan nomor isi. CekJIKA posisi = -1dulu, dan tulisBakso gak ada di menu. - Lupa
BACA namadi akhir perulangan.namagak pernah berubah, jadiBACA jumlahikut menelan nama menu berikutnya:Es teh x Kopi,Es teh x selesai, lalu "Baris 3: BACA butuh input lagi, tapi input-nya cuma 5 baris dan sudah terpakai semua." - Tanda berhenti yang beda huruf.
SELAMA nama ≠ "Selesai"gak pernah berhenti untuk inputselesai, sampai input-nya habis: "Baris 3: BACA butuh input lagi, tapi input-nya cuma 5 baris dan sudah terpakai semua." Tulis persis"selesai". total ← 0di dalam perulangan. Totalnya diulang dari 0 tiap pesanan, jadi yang tercetak cuma subtotal terakhir. Gak ada pesan error. Taruh di atasSELAMA.- Teks ditambah angka.
TULIS "Total: Rp" + totalberhenti dengan "Baris 2: teks gak bisa langsung ditambah angka." Pakai koma,TULIS "Total:", total.
TL;DR: Kasir warung itu gabungan semua yang sudah kamu pelajari: menu dan harga di dua daftar yang berpasangan, cariPosisi untuk mencari nomor menunya, SELAMA nama ≠ "selesai" untuk membaca pesanan sebanyak apa pun, subtotal dan total yang dijumlah sambil jalan, prosedur garis untuk struknya, dan JIKA bayar >= total untuk kembalian. Mulai dari rencana, rakit satu bagian, jalankan, lalu lanjut ke bagian berikutnya.