Mengumpulkan nilai satu per satu

Satu wadah yang isinya bertambah setiap putaran, dan kenapa nilai awalnya menentukan segalanya.

Sebaiknya baca lebih dulu: Menukar isi dua wadah.

Satu wadah yang terus ditambahi

Wadah yang isinya terus ditambahi seperti itu disebut akumulator. Bentuknya selalu sama: satu variabel diberi nilai awal, lalu di dalam loop ia diisi ulang dengan dirinya sendiri ditambah sesuatu.

SET total = 0
FOR EACH harga IN daftar
  SET total = total + harga
END
OUTPUT total
Baris ketiga membaca total dan menulis total dalam satu baris. Yang dibaca nilai lamanya, yang ditulis nilai barunya.

IngatPada SET total = total + harga, sisi kanan dihitung lebih dulu memakai nilai lama, baru hasilnya disimpan. Bukan dua hal yang terjadi bersamaan.

Melihatnya bertambah langkah demi langkah

SET total = 0
FOR EACH harga IN daftar
  SET total = total + harga
END
OUTPUT total
total0
hargabelum ada

total dimulai dari 0. Nilai awal ini bukan formalitas; kita akan lihat akibatnya kalau salah.

Langkah 1 dari 8
Daftar berisi 5, 3, dan 8. Langkahi satu satu dan perhatikan total berubah tiga kali, bukan sekali.

Nilai awal yang salah

Sekarang bagian yang paling sering menjadi bug. Nilai awal akumulator harus cocok dengan operasinya. Untuk penjumlahan, nilai awal yang benar adalah nol, sebab menambahkan nol tidak mengubah apa pun. Untuk perkalian, nilai awal nol justru menghancurkan seluruh hasil.

Perkalian dimulai dari nol

SET hasil = 0
FOR EACH angka IN daftar
  SET hasil = hasil * angka
END

Perkalian dimulai dari satu

SET hasil = 1
FOR EACH angka IN daftar
  SET hasil = hasil * angka
END

Nol dikali apa pun tetap nol. Kolom kiri akan mengeluarkan nol untuk daftar apa pun, termasuk daftar berisi angka besar. Nilai awal yang benar adalah nilai yang tidak mengubah hasil operasinya: nol untuk tambah, satu untuk kali.

Periksa pemahaman

Daftar berisi 4 dan 6. Kode berbunyi SET total = 10, lalu loop menambahkan setiap elemen ke total. Apa yang dikeluarkan?

Ringkasan

  • Akumulator adalah satu variabel yang dibaca dan ditulis pada baris yang sama di dalam loop.
  • Sisi kanan dihitung dengan nilai lama, lalu hasilnya menimpa nilai itu.
  • Nilai awal wajib netral terhadap operasinya: nol untuk penjumlahan, satu untuk perkalian.
  • Akumulator yang tidak direset akan membawa sisa perhitungan sebelumnya, dan hasilnya tetap tampak masuk akal.