Mengakses satu elemen array bermanfaat, tetapi kekuatan sejati array muncul saat kita memproses seluruh elemen secara sistematis. Operasi seperti menjumlahkan, mencari nilai ekstrem, menghitung elemen yang memenuhi kondisi, atau memfilter elemen—semuanya memerlukan iterasi. Bahasa C menyediakan konstruksi loop for, while, dan do-while yang sangat cocok untuk mengiterasi array berbasis indeks. Pada chapter ini kita akan menelusuri pola iterasi yang paling sering muncul beserta jebakan khas seperti off-by-one error.
Pola Dasar Iterasi #
Pola iterasi array paling umum menggunakan loop for:
for (int i = 0; i < n; i++) {
/* akses arr[i] */
}Tiga bagian kunci pola tersebut:
- Inisialisasi
int i = 0— indeks mulai dari0(elemen pertama). - Kondisi
i < n— loop berjalan selamaikurang dari jumlah elemenn. Penggunaan<(bukan<=) menghindari aksesarr[n]yang out-of-bounds. - Inkremen
i++— indeks naik satu per satu setiap iterasi.
Iterasi Maju, Mundur, dan Pencarian Maksimum #
Contoh berikut mendemonstrasikan tiga operasi sekaligus: iterasi maju, iterasi mundur, pencarian nilai maksimum, dan penjumlahan.
#include <stdio.h>
int main(void) {
int data[6] = {12, 7, 25, 3, 18, 9};
/* Iterasi maju dengan for */
printf("Iterasi maju: ");
for (int i = 0; i < 6; i++) {
printf("%d ", data[i]);
}
printf("\n");
/* Iterasi mundur */
printf("Iterasi mundur: ");
for (int i = 5; i >= 0; i--) {
printf("%d ", data[i]);
}
printf("\n");
/* Mencari nilai maksimum */
int maks = data[0];
for (int i = 1; i < 6; i++) {
if (data[i] > maks) {
maks = data[i];
}
}
printf("Nilai maksimum: %d\n", maks);
/* Menghitung total */
int total = 0;
for (int i = 0; i < 6; i++) {
total += data[i];
}
printf("Total: %d\n", total);
return 0;
}Output yang Dihasilkan:
Iterasi maju: 12 7 25 3 18 9
Iterasi mundur: 9 18 3 25 7 12
Nilai maksimum: 25
Total: 74Mari kita telaah baris-baris kode di atas:
- Baris 7 (
for (int i = 0; i < 6; i++)): loop iterasi maju. Loop mencetak elemen indeks0sampai5. Kondisii < 6memastikanimaksimum bernilai5—tepat indeks terakhir yang valid untuk array berukuran 6. - Baris 13 (
for (int i = 5; i >= 0; i--)): loop iterasi mundur. Inisialisasii = 5(elemen terakhir), kondisii >= 0, dan inkremeni--. Loop mencetak elemen dari akhir ke awal. - Baris 19 (
int maks = data[0];): inisialisasi variabelmaksdengan elemen pertama. Asumsi awal: elemen pertama adalah maksimum sementara. - Baris 20-22 (
for (int i = 1; ...) if (data[i] > maks) maks = data[i];): loop dimulai dari indeks1(bukan0, karenadata[0]sudah menjadimaks). Setiap elemen dibandingkan denganmaks; bila lebih besar,maksdiperbarui. - Baris 26-30 (
for (int i = 0; i < 6; i++) total += data[i];): pola akumulator. Variabeltotaldiinisialisasi0sebelum loop, lalu setiap elemen ditambahkan ketotal. Hasil akhirnya jumlah seluruh elemen.
Pola Lanjutan: Filter dan Pasangan #
Selain menjumlahkan, iterasi sering dipakai untuk memfilter elemen, menghitung elemen yang memenuhi kondisi, atau memproses elemen yang berdekatan. Contoh berikut menampilkan tiga pola tersebut.
#include <stdio.h>
int main(void) {
int arr[8] = {5, 3, 8, 1, 9, 2, 7, 4};
/* Pola: filter elemen genap */
printf("Genap: ");
for (int i = 0; i < 8; i++) {
if (arr[i] % 2 == 0) {
printf("%d ", arr[i]);
}
}
printf("\n");
/* Pola: hitung elemen yang memenuhi kondisi */
int hitung = 0;
for (int i = 0; i < 8; i++) {
if (arr[i] > 5) {
hitung++;
}
}
printf("Elemen > 5: %d\n", hitung);
/* Pola: akses elemen berdekatan (pasangan) */
for (int i = 0; i < 7; i++) {
printf("(%d,%d) ", arr[i], arr[i + 1]);
}
printf("\n");
return 0;
}Output yang Dihasilkan:
Genap: 8 2 4
Elemen > 5: 3
Pasangan: (5,3) (3,8) (8,1) (1,9) (9,2) (2,7) (7,4)Pada contoh di atas, pola filter memakai kondisi arr[i] % 2 == 0 untuk memilih elemen genap. Pola hitung menggunakan akumulator hitung++ yang hanya dipicu bila kondisi terpenuhi. Pola pasangan memanfaatkan akses arr[i] dan arr[i + 1] secara simultan—perhatikan batas loop i < 7 (bukan i < 8) karena kita mengakses indeks i + 1 yang maksimum harus 7.