18. Perulangan — Solusi PR
File solusi .go ada di
exercises/18/homework/solutions/.
Soal 1 — Menghitung sampai 20
Soal. Cetak 1 sampai 20 dengan for yang
hanya punya kondisi.
Cara berpikir. Bentuk ini butuh nilai awal sebelum perulangan, kondisi berhenti, dan perubahan di dalam isi perulangan. Mulai dari 1, berhenti setelah 20, tambah 1 setiap putaran.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
i := 1
for i <= 20 {
fmt.Println(i)
i++
}
}Kesalahan umum.
- Lupa
i++. Kondisinya tetap benar selamanya, jadi perulangan tidak pernah berakhir. Tekan Ctrl + C untuk menghentikannya. - Memakai
i < 20, lalu kehilangan 20.<=menyertakan titik akhirnya.
Soal 2 — Tabel perkalian 7
Soal. Cetak 7 * i = result untuk
i dari 1 sampai 12.
Cara berpikir. for tiga bagian dari 1
sampai 12. Setiap putaran mencetak satu baris dari i dan
7*i.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
for i := 1; i <= 12; i++ {
fmt.Printf("7 * %d = %d\n", i, 7*i)
}
}Kesalahan umum.
- Menulis
i < 12. Itu berhenti di 11 dan kehilangan baris terakhir. - Tertukar antara
7*i(yang dicetak) dani(penghitung).
Soal 3 — Berhenti di ambang batas
Soal. Tambahkan 1, 2, 3, ... ke sebuah total. Berhenti begitu melebihi 100. Cetak penghitung dan totalnya.
Cara berpikir. Dua variabel: penghitung yang naik 1
setiap putaran, dan total yang naik sebesar penghitung. Pemeriksaan
keluar, total > 100, masuk ke dalam sebagai
if dengan break, yang cocok dengan
for kosong. Kedua variabel dideklarasikan sebelum
perulangan, karena baris terakhir mencetaknya sesudah perulangan.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
i := 1
total := 0
for {
total += i
if total > 100 {
break
}
i++
}
fmt.Printf("Stopped at i = %d with total = %d\n", i, total)
}Jumlah 1+2+...+14 = 105 adalah total pertama di atas
100, jadi outputnya:
Stopped at i = 14 with total = 105
Kesalahan umum.
- Menulis
i++sebelum menambah ketotal. Itu menambahkaniberikutnya, bukan yang sekarang. Urutkan dengan sengaja. - Menaruh
breaksetelahi++. Makaiyang tercetak satu lebih besar dari nilai yang membuat total melewati 100. Keduanya bisa jalan; yang penting disengaja. - Menulis
for i := 1; ; i++lalu mencetakisetelah perulangan. Variabel yang dideklarasikan di barisfortidak ada setelah perulangan, dan Go berhenti denganundefined: i.
Tantangan — Jumlah 1..N
Soal. Baca n, jumlahkan 1..n dengan
perulangan for, bandingkan dengan rumus
n * (n + 1) / 2.
Cara berpikir. Perulangan for dari 1
sampai dan termasuk n menambahkan setiap penghitung ke
total. Rumus untuk n bilangan bulat positif pertama adalah
n * (n + 1) / 2. Cetak keduanya, pastikan cocok.
Solusi yang dikerjakan.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter a positive whole number n: ")
text, _ := reader.ReadString('\n')
n, _ := strconv.Atoi(strings.TrimSpace(text))
total := 0
for i := 1; i <= n; i++ {
total += i
}
fmt.Printf("Sum from 1 to %d is %d\n", n, total)
fmt.Println("Formula gives", n*(n+1)/2)
}Output, dengan mengetik 10:
Enter a positive whole number n: 10
Sum from 1 to 10 is 55
Formula gives 55
Kedua angka adalah int, jadi / adalah pembagian bilangan
bulat. Di sini itu aman, karena n * (n + 1) selalu genap.
Mengetik teks memberikan 0, seperti peringatan Bab 15, dan
perulangannya sama sekali tidak berjalan:
Enter a positive whole number n: abc
Sum from 1 to 0 is 0
Formula gives 0
Kesalahan umum.
- Menulis
i < n. Itu berhenti din - 1dan memberikan jawaban yang salah. Pakaii <= nuntuk menyertakann. - Lupa mengisi
totaldengan0sebelum perulangan. Mendeklarasikannya di dalam perulangan juga salah, karena ia mulai lagi dari0setiap putaran dan tidak ada setelahnya. - Menulis rumus tanpa tanda kurung. Urutan operasi itu penting, dan
1/2bernilai0pada pembagian bilangan bulat:
n := 10
fmt.Println(n*n + 1/2) // 100Selesai?
Sekarang kamu bisa mengulang pekerjaan dengan setiap bentuk
for. Berikutnya, Perulangan bersarang
menyusun perulangan untuk membuat kisi, dan Pola
perulangan menamai pekerjaan yang paling sering dilakukan
perulangan. Lalu mini-proyek Bagian 4, Game Tebak Angka dan Batu-Gunting-Kertas,
menggabungkan keputusan dan pengulangan.