20. Pola perulangan — Solusi PR

File solusi .go ada di exercises/20/homework/solutions/.

Soal 1 — Faktorial

Soal. Kalikan 1 sampai 5.

Cara berpikir. Akumulasi, tetapi dengan *=, bukan +=. Mulai hasil kali dari 1. Kalau mulai dari 0, jawabannya 0, karena apa pun dikali nol adalah nol.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    product := 1
    for i := 1; i <= 5; i++ {
        product *= i
    }
    fmt.Println(product)
}

Output:

120

Soal 2 — Hitung kelipatan

Soal. Hitung angka dari 1 sampai 50 yang habis dibagi 7.

Cara berpikir. Pola hitung: pemeriksaannya i%7 == 0, dan penghitungannya hits++.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    hits := 0
    for i := 1; i <= 50; i++ {
        if i%7 == 0 {
            hits++
        }
    }
    fmt.Println(hits)
}

Output, menghitung 7, 14, 21, 28, 35, 42, dan 49:

7

Soal 3 — Kuadrat besar pertama

Soal. Temukan angka pertama yang kuadratnya di atas 200.

Cara berpikir. Pola cari. first mulai dari -1, nilai yang tidak mungkin menjadi jawaban, dan perulangan berhenti pada kecocokan pertama.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    first := -1
    for i := 1; i <= 100; i++ {
        if i*i > 200 {
            first = i
            break
        }
    }
    fmt.Println(first)
}

14 × 14 adalah 196, dan 15 × 15 adalah 225, jadi outputnya:

15

Kesalahan umum.

  • Lupa break, sehingga perulangan terus berjalan dan first berakhir pada kecocokan terakhir, bukan pertama.
  • Mendeklarasikan first di dalam perulangan. Variabelnya lalu tidak ada setelah perulangan, dan Go berhenti dengan undefined: first.

Tantangan — Statistik rentang dalam satu jalan

Soal. Total, jumlah angka genap, dan tanda habis dibagi 9 dari satu perulangan.

Cara berpikir. Tiga variabel sebelum perulangan, satu baris atau satu if untuk masing-masing di dalamnya, dan tiga cetakan sesudahnya.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    total := 0
    evens := 0
    hasNine := false

    for i := 1; i <= 20; i++ {
        total += i
        if i%2 == 0 {
            evens++
        }
        if i%9 == 0 {
            hasNine = true
        }
    }

    fmt.Println("total", total)
    fmt.Println("evens", evens)
    fmt.Println("divisible by 9", hasNine)
}

Output, dengan tanda berubah di 9 dan tetap true sampai 18:

total 210
evens 10
divisible by 9 true

Kesalahan umum.

  • Menulis tiga perulangan terpisah atas rentang yang sama. Satu kali jalan mengerjakan ketiganya, itulah gunanya mengenali pola.
  • Memakai else if di antara kedua pemeriksaan. Sebuah angka bisa genap dan habis dibagi 9 sekaligus, seperti 18, jadi keduanya harus berupa dua if terpisah.

Selesai?

Bab-bab Bagian 4 sudah selesai. Kamu bisa membuat cabang dengan if dan switch, bernalar tentang benar dan salah dengan &&, ||, dan !, mengulang dengan setiap bentuk for, menyusun perulangan bersarang untuk kisi, dan memilih pola perulangan yang tepat. Bagian 4 punya dua mini-proyek untuk menyatukannya: Game Tebak Angka dan Batu-Gunting-Kertas.