13. Angka dan matematika — Solusi PR
File solusi .go ada di
exercises/13/homework/solutions/.
Soal 1 — Luas persegi panjang
Soal. Kalikan lebar dan tinggi; cetak hasilnya dengan label.
Cara berpikir. Perkalian memakai *.
Simpan hasilnya di variabel ketiga, atau pakai langsung di dalam
fmt.Println.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
width := 6
height := 4
area := width * height
fmt.Println("Area:", area)
}Output:
Area: 24
Kesalahan umum.
- Menulis
width x heightatauwidth times height. Keduanya bukan Go; operator perkalian adalah*.
Soal 2 — Floor dan ceil
Soal. Tampilkan 3.7,
math.Floor(3.7), dan math.Ceil(3.7) dalam tiga
baris, ditambah komentar yang menjelaskan perbedaannya.
Cara berpikir. Floor membulatkan ke
bawah; Ceil membulatkan ke atas. Keduanya
mengembalikan float64 dengan nilai bulat. Untuk bilangan positif,
Floor membuang desimalnya; Ceil menambah satu
kecuali angkanya sudah bulat.
Solusi yang dikerjakan.
package main
import (
"fmt"
"math"
)
func main() {
x := 3.7
fmt.Println(x)
fmt.Println(math.Floor(x))
fmt.Println(math.Ceil(x))
// Floor membulatkan KE BAWAH ke bilangan bulat; Ceil membulatkan KE ATAS.
}Output:
3.7
3
4
Kesalahan umum.
- Mengira
math.Floormengubahx. Tidak. Fungsi itu memberimu nilai baru dan membiarkan aslinya. - Lupa import. Go berhenti dengan
undefined: math. - Memberikan variabel int.
math.Floormenerima float64, jadi Go berhenti dengancannot use n (variable of type int) as float64 value in argument to math.Floor.
Soal 3 — Lempar dua dadu
Soal. Lempar dua dadu enam sisi secara terpisah. Cetak masing-masing dan totalnya.
Cara berpikir. rand.Intn(6) + 1
memberikan angka dari 1 sampai 6. Panggil dua kali — sekali per dadu —
lalu jumlahkan kedua variabelnya.
Solusi yang dikerjakan.
package main
import (
"fmt"
"math/rand"
)
func main() {
die1 := rand.Intn(6) + 1
die2 := rand.Intn(6) + 1
total := die1 + die2
fmt.Println("Die 1:", die1)
fmt.Println("Die 2:", die2)
fmt.Println("Total:", total)
}Kesalahan umum.
- Memanggil
rand.Intn(6) + 1sekali dan memakai angka yang sama untuk kedua dadu. Kedua lemparan harus berupa panggilan terpisah. - Lupa
+ 1.rand.Intn(6)memberikan0sampai5, bukan1sampai6. - Mengimpor
"rand". Nama lengkap package-nya"math/rand", dan kodenya memanggilnyarand.
Tantangan — Hipotenusa
Soal. Dari dua sisi pendek segitiga siku-siku,
hitung hipotenusa dengan math.Sqrt, dan cetak ketiga nilai
dengan hipotenusa ditampilkan dua desimal.
Cara berpikir. Matematikanya: c = akar
kuadrat dari a*a + b*b. a dan b
adalah int, jadi a*a + b*b adalah int, dan
math.Sqrt menerima float64. Konversi seluruh jumlahnya
dengan float64(...). Untuk tampilannya, gunakan
%.2f.
Solusi yang dikerjakan.
package main
import (
"fmt"
"math"
)
func main() {
a := 3
b := 4
c := math.Sqrt(float64(a*a + b*b))
fmt.Println("a =", a)
fmt.Println("b =", b)
fmt.Printf("c = %.2f\n", c)
}Untuk a := 3, b := 4, outputnya:
a = 3
b = 4
c = 5.00
Kesalahan umum.
- Tidak menulis konversi. Go berhenti dengan
cannot use a * a + b * b (value of type int) as float64 value in argument to math.Sqrt. - Menulis
a^2 + b^2.^bukan pangkat di Go. Kodenya bisa dikompilasi dan menghasilkan angka yang salah. Gunakana*a, ataumath.Powpada nilai float64. - Mencetak
cdenganfmt.Printlndan melihat5, bukan5.00. Matematikanya benar;%.2fmengatur jumlah desimal dan selalu menampilkan dua.
Selesai?
Dua bab lagi sebelum mini-proyek: Bekerja dengan teks membuat kamu bisa mencari, mengganti, dan memformat string, dan Mendapatkan input mengubah keyboard menjadi nilai. Lalu proyek lembar karakter merangkum seluruh Bagian 3.