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 height atau width 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.Floor mengubah x. Tidak. Fungsi itu memberimu nilai baru dan membiarkan aslinya.
  • Lupa import. Go berhenti dengan undefined: math.
  • Memberikan variabel int. math.Floor menerima float64, jadi Go berhenti dengan cannot 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) + 1 sekali dan memakai angka yang sama untuk kedua dadu. Kedua lemparan harus berupa panggilan terpisah.
  • Lupa + 1. rand.Intn(6) memberikan 0 sampai 5, bukan 1 sampai 6.
  • Mengimpor "rand". Nama lengkap package-nya "math/rand", dan kodenya memanggilnya rand.

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. Gunakan a*a, atau math.Pow pada nilai float64.
  • Mencetak c dengan fmt.Println dan melihat 5, bukan 5.00. Matematikanya benar; %.2f mengatur 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.