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:

c
for (int i = 0; i < n; i++) {
    /* akses arr[i] */
}

Tiga bagian kunci pola tersebut:

  1. Inisialisasi int i = 0 — indeks mulai dari 0 (elemen pertama).
  2. Kondisi i < n — loop berjalan selama i kurang dari jumlah elemen n. Penggunaan < (bukan <=) menghindari akses arr[n] yang out-of-bounds.
  3. 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.

c
#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:

text
Iterasi maju: 12 7 25 3 18 9
Iterasi mundur: 9 18 3 25 7 12
Nilai maksimum: 25
Total: 74

Mari kita telaah baris-baris kode di atas:

  1. Baris 7 (for (int i = 0; i < 6; i++)): loop iterasi maju. Loop mencetak elemen indeks 0 sampai 5. Kondisi i < 6 memastikan i maksimum bernilai 5—tepat indeks terakhir yang valid untuk array berukuran 6.
  2. Baris 13 (for (int i = 5; i >= 0; i--)): loop iterasi mundur. Inisialisasi i = 5 (elemen terakhir), kondisi i >= 0, dan inkremen i--. Loop mencetak elemen dari akhir ke awal.
  3. Baris 19 (int maks = data[0];): inisialisasi variabel maks dengan elemen pertama. Asumsi awal: elemen pertama adalah maksimum sementara.
  4. Baris 20-22 (for (int i = 1; ...) if (data[i] > maks) maks = data[i];): loop dimulai dari indeks 1 (bukan 0, karena data[0] sudah menjadi maks). Setiap elemen dibandingkan dengan maks; bila lebih besar, maks diperbarui.
  5. Baris 26-30 (for (int i = 0; i < 6; i++) total += data[i];): pola akumulator. Variabel total diinisialisasi 0 sebelum loop, lalu setiap elemen ditambahkan ke total. 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.

c
#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:

text
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.