15. Mendapatkan input — Solusi PR
File solusi .lua ada di
exercises/15/homework/solutions/.
Soal 1 — Sapa berdasarkan nama
Soal. Tampilkan prompt dengan io.write,
baca jawaban dengan io.read, lalu sapa dengan tanda
seru.
Cara berpikir. Tiga baris: tulis promptnya, baca jawabannya, cetak sapaannya. Tanda seru masuk ke dalam string, setelah variabelnya.
Solusi.
io.write("First name: ")
local name = io.read()
print("Hello, " .. name .. "!")Kesalahan umum.
- Lupa spasi di akhir prompt.
"First name:"membuat kursor menempel langsung ke titik dua;"First name: "adalah cara yang benar.
Soal 2 — Jumlah dua angka
Soal. Baca dua angka; cetak
a + b = c.
Cara berpikir. Dua prompt, dua kali baca,
masing-masing dibungkus dengan tonumber. Susun keluarannya
dari tiga angka menggunakan ...
Solusi.
io.write("First number: ")
local a = tonumber(io.read())
io.write("Second number: ")
local b = tonumber(io.read())
local c = a + b
print(a .. " + " .. b .. " = " .. c)Kesalahan umum.
- Melewati
tonumber. Nilainya tetap berupa string, jadia + bgagal dengan error attempt to perform arithmetic on a string value. - Membungkus
tonumberdi sekitar prompt, bukan jawabannya.tonumber("First number: ")menghasilkannil, sehingga bugnya baru muncul satu baris kemudian.
Soal 3 — Tahun menuju pensiun
Soal. Hitung 65 - age dan cetak kalimat
dengan label.
Cara berpikir. Prompt, baca, kurangi, cetak.
Perhatikan urutannya: 65 - age, bukan
age - 65.
Solusi.
io.write("Your current age: ")
local age = tonumber(io.read())
local years_left = 65 - age
print("You have " .. years_left .. " years until retirement.")Kesalahan umum.
- Menulis
age - 65, yang akan mencetak angka negatif untuk semua orang yang belum berusia 65 tahun. Pengurangan tidak komutatif — urutan itu penting.
Tantangan — BMI
Soal. Minta masukan tinggi dan berat badan (desimal), hitung BMI, cetak hasilnya dengan satu angka di belakang koma.
Cara berpikir. Dua prompt, dua kali baca, keduanya
melalui tonumber. weight / (height * height)
menghasilkan bilangan desimal; string.format("%.1f", bmi)
menampilkan satu angka setelah koma.
Solusi.
io.write("Height in metres (e.g. 1.78): ")
local height = tonumber(io.read())
io.write("Weight in kg (e.g. 72.5): ")
local weight = tonumber(io.read())
local bmi = weight / (height * height)
print(string.format("BMI: %.1f", bmi))Kesalahan umum.
- Lupa tanda kurung di
height * height. Tanpa kurung,weight / height * heightberjalan dari kiri ke kanan: dibagi dengan tinggi, lalu dikalikan lagi — keduanya saling menghapus dan hasilnya kembali ke nilai berat badan. - Memasukkan tinggi dalam sentimeter (seperti
178) bukan dalam meter (1.78). BMI menggunakan meter, sesuai yang tertulis di prompt awal.
Selesai?
Semua bab di Bagian 3 sudah selesai. Mini-proyek — Character Sheet — menggunakan semua konsep dari bab 11 sampai 15.