Langsung ke konten
Belajar C++

Array & Loop

35 menit Pemula

Tujuan Pembelajaran

  • Mengiterasi array menggunakan for loop
  • Menginput array dari user dengan cin
  • Menghitung rata-rata, mencari max/min, dan menjumlahkan elemen
  • Melakukan linear search sederhana
  • Menggunakan range-based for loop dengan array

Array & Loop

Di pelajaran sebelumnya, kamu mengakses elemen array satu per satu: arr[0], arr[1], arr[2]… Kalau ada 100 elemen, masa kamu tulis 100 baris? Tentu tidak!

Kombinasi array + loop adalah pola paling sering dipakai di programming. Hampir setiap program yang berurusan dengan banyak data menggunakan pola ini.

Analogi: Guru Memeriksa Tugas

Bayangkan guru kelas memeriksa tugas 30 siswa. Guru tidak akan bilang: “Buka buku Andi… sekarang buku Budi… sekarang buku Citra…” satu per satu. Guru akan bilang: “Untuk setiap buku tugas di tumpukan ini, periksa dan beri nilai.” Itulah array + loop!

Contoh 1: Mencetak Semua Elemen Array

#include <iostream>

int main() {
    int nilai[] = {85, 90, 78, 92, 88, 76, 95};
    int panjang = sizeof(nilai) / sizeof(nilai[0]);

    std::cout << "=== Daftar Nilai ===" << std::endl;

    for (int i = 0; i < panjang; i++) {
        std::cout << "Siswa " << i + 1 << ": " << nilai[i] << std::endl;
    }

    return 0;
}

Output:

=== Daftar Nilai ===
Siswa 1: 85
Siswa 2: 90
Siswa 3: 78
Siswa 4: 92
Siswa 5: 88
Siswa 6: 76
Siswa 7: 95

Perhatikan pola for (int i = 0; i < panjang; i++). Ini adalah pola paling standar untuk menelusuri array. Mulai dari index 0, lanjut selama i masih < panjang array, tambah 1 setiap iterasi. Hafalkan pola ini!

Contoh 2: Input Array dari User

#include <iostream>

int main() {
    const int JUMLAH = 5;
    int nilai[JUMLAH];

    std::cout << "Masukkan nilai " << JUMLAH << " siswa:" << std::endl;

    for (int i = 0; i < JUMLAH; i++) {
        std::cout << "Siswa " << i + 1 << ": ";
        std::cin >> nilai[i];
    }

    std::cout << std::endl;
    std::cout << "=== Nilai yang dimasukkan ===" << std::endl;

    for (int i = 0; i < JUMLAH; i++) {
        std::cout << "Siswa " << i + 1 << ": " << nilai[i] << std::endl;
    }

    return 0;
}

Output (contoh input):

Masukkan nilai 5 siswa:
Siswa 1: 85
Siswa 2: 92
Siswa 3: 78
Siswa 4: 90
Siswa 5: 88

=== Nilai yang dimasukkan ===
Siswa 1: 85
Siswa 2: 92
Siswa 3: 78
Siswa 4: 90
Siswa 5: 88

Contoh 3: Hitung Total dan Rata-rata

#include <iostream>

int main() {
    int nilai[] = {85, 90, 78, 92, 88};
    int panjang = sizeof(nilai) / sizeof(nilai[0]);

    int total = 0;

    for (int i = 0; i < panjang; i++) {
        total += nilai[i];
    }

    double rataRata = static_cast<double>(total) / panjang;

    std::cout << "Total nilai : " << total << std::endl;
    std::cout << "Jumlah siswa: " << panjang << std::endl;
    std::cout << "Rata-rata   : " << rataRata << std::endl;

    return 0;
}

Output:

Total nilai : 433
Jumlah siswa: 5
Rata-rata   : 86.6

Gunakan static_cast<double>(total) sebelum dibagi supaya hasilnya desimal. Kalau total / panjang saja (int / int), hasilnya dipotong jadi integer!

Contoh 4: Cari Nilai Maksimum dan Minimum

#include <iostream>

int main() {
    int suhu[] = {30, 35, 28, 32, 27, 33, 31};
    int panjang = sizeof(suhu) / sizeof(suhu[0]);

    int maks = suhu[0];  // Anggap elemen pertama adalah maks
    int mini = suhu[0];  // Anggap elemen pertama adalah min

    for (int i = 1; i < panjang; i++) {
        if (suhu[i] > maks) {
            maks = suhu[i];
        }
        if (suhu[i] < mini) {
            mini = suhu[i];
        }
    }

    std::cout << "=== Suhu Seminggu ===" << std::endl;
    for (int i = 0; i < panjang; i++) {
        std::cout << "Hari " << i + 1 << ": " << suhu[i] << " C" << std::endl;
    }
    std::cout << "---------------------" << std::endl;
    std::cout << "Suhu tertinggi: " << maks << " C" << std::endl;
    std::cout << "Suhu terendah : " << mini << " C" << std::endl;

    return 0;
}

Output:

=== Suhu Seminggu ===
Hari 1: 30 C
Hari 2: 35 C
Hari 3: 28 C
Hari 4: 32 C
Hari 5: 27 C
Hari 6: 33 C
Hari 7: 31 C
---------------------
Suhu tertinggi: 35 C
Suhu terendah : 27 C

Kenapa mulai loop dari i = 1 dan bukan i = 0? Karena kita sudah memakai suhu[0] sebagai nilai awal maks dan min. Jadi perbandingan cukup dimulai dari elemen kedua (index 1).

Contoh 5: Linear Search — Cari Elemen Tertentu

#include <iostream>
#include <string>

int main() {
    std::string siswa[] = {"Andi", "Budi", "Citra", "Dewi", "Eka"};
    int panjang = sizeof(siswa) / sizeof(siswa[0]);

    std::string cari;
    std::cout << "Cari nama siswa: ";
    std::cin >> cari;

    bool ditemukan = false;
    int posisi = -1;

    for (int i = 0; i < panjang; i++) {
        if (siswa[i] == cari) {
            ditemukan = true;
            posisi = i;
            break;  // Sudah ketemu, tidak perlu lanjut
        }
    }

    if (ditemukan) {
        std::cout << cari << " ditemukan di posisi " << posisi + 1 << std::endl;
    } else {
        std::cout << cari << " tidak ditemukan!" << std::endl;
    }

    return 0;
}

Output (contoh input “Citra”):

Cari nama siswa: Citra
Citra ditemukan di posisi 3

Output (contoh input “Fajar”):

Cari nama siswa: Fajar
Fajar tidak ditemukan!

Contoh 6: Range-Based For Loop

Cara modern dan lebih bersih untuk menelusuri array:

#include <iostream>
#include <string>

int main() {
    std::string buah[] = {"Mangga", "Jeruk", "Apel", "Durian", "Rambutan"};

    std::cout << "=== Buah Favorit ===" << std::endl;

    // Range-based for loop — simpel dan elegan!
    for (std::string b : buah) {
        std::cout << "- " << b << std::endl;
    }

    // Bisa juga pakai auto
    std::cout << std::endl << "=== Dengan auto ===" << std::endl;
    for (auto b : buah) {
        std::cout << "- " << b << std::endl;
    }

    return 0;
}

Output:

=== Buah Favorit ===
- Mangga
- Jeruk
- Apel
- Durian
- Rambutan

=== Dengan auto ===
- Mangga
- Jeruk
- Apel
- Durian
- Rambutan

for (auto b : buah) dibaca: “untuk setiap elemen b di dalam buah”. Keyword auto membuat compiler otomatis menentukan tipe datanya. Ini lebih praktis daripada menulis std::string secara eksplisit.

Contoh 7: Program Rapor Nilai Siswa

Contoh yang lebih lengkap menggabungkan banyak teknik:

#include <iostream>
#include <string>

int main() {
    const int JUMLAH_SISWA = 5;
    std::string nama[JUMLAH_SISWA];
    int nilai[JUMLAH_SISWA];

    // Input data
    std::cout << "=== INPUT DATA SISWA ===" << std::endl;
    for (int i = 0; i < JUMLAH_SISWA; i++) {
        std::cout << "Nama siswa " << i + 1 << " : ";
        std::cin >> nama[i];
        std::cout << "Nilai siswa " << i + 1 << ": ";
        std::cin >> nilai[i];
        std::cout << std::endl;
    }

    // Hitung statistik
    int total = 0;
    int maks = nilai[0];
    int mini = nilai[0];
    int idxMaks = 0;
    int idxMin = 0;

    for (int i = 0; i < JUMLAH_SISWA; i++) {
        total += nilai[i];
        if (nilai[i] > maks) {
            maks = nilai[i];
            idxMaks = i;
        }
        if (nilai[i] < mini) {
            mini = nilai[i];
            idxMin = i;
        }
    }

    double rataRata = static_cast<double>(total) / JUMLAH_SISWA;

    // Tampilkan rapor
    std::cout << "=============================" << std::endl;
    std::cout << "      RAPOR KELAS" << std::endl;
    std::cout << "=============================" << std::endl;

    for (int i = 0; i < JUMLAH_SISWA; i++) {
        std::cout << nama[i] << "\t: " << nilai[i];
        if (nilai[i] >= 90) std::cout << " (A)";
        else if (nilai[i] >= 80) std::cout << " (B)";
        else if (nilai[i] >= 70) std::cout << " (C)";
        else std::cout << " (D)";
        std::cout << std::endl;
    }

    std::cout << "-----------------------------" << std::endl;
    std::cout << "Rata-rata  : " << rataRata << std::endl;
    std::cout << "Tertinggi  : " << nama[idxMaks] << " (" << maks << ")" << std::endl;
    std::cout << "Terendah   : " << nama[idxMin] << " (" << mini << ")" << std::endl;

    return 0;
}

Output (contoh):

=== INPUT DATA SISWA ===
Nama siswa 1 : Andi
Nilai siswa 1: 85

Nama siswa 2 : Budi
Nilai siswa 2: 92

Nama siswa 3 : Citra
Nilai siswa 3: 78

Nama siswa 4 : Dewi
Nilai siswa 4: 95

Nama siswa 5 : Eka
Nilai siswa 5: 88

=============================
      RAPOR KELAS
=============================
Andi	: 85 (B)
Budi	: 92 (A)
Citra	: 78 (C)
Dewi	: 95 (A)
Eka	: 88 (B)
-----------------------------
Rata-rata  : 87.6
Tertinggi  : Dewi (95)
Terendah   : Citra (78)

Contoh 8: Modifikasi Semua Elemen

Bagaimana kalau guru mau menambah bonus 5 poin ke semua nilai?

#include <iostream>

int main() {
    int nilai[] = {75, 82, 68, 90, 71};
    int panjang = sizeof(nilai) / sizeof(nilai[0]);

    std::cout << "Sebelum bonus:" << std::endl;
    for (int i = 0; i < panjang; i++) {
        std::cout << "Siswa " << i + 1 << ": " << nilai[i] << std::endl;
    }

    // Tambah bonus 5 poin
    for (int i = 0; i < panjang; i++) {
        nilai[i] += 5;

        // Pastikan tidak melebihi 100
        if (nilai[i] > 100) {
            nilai[i] = 100;
        }
    }

    std::cout << std::endl << "Sesudah bonus (+5):" << std::endl;
    for (int i = 0; i < panjang; i++) {
        std::cout << "Siswa " << i + 1 << ": " << nilai[i] << std::endl;
    }

    return 0;
}

Output:

Sebelum bonus:
Siswa 1: 75
Siswa 2: 82
Siswa 3: 68
Siswa 4: 90
Siswa 5: 71

Sesudah bonus (+5):
Siswa 1: 80
Siswa 2: 87
Siswa 3: 73
Siswa 4: 95
Siswa 5: 76

Kesalahan Umum

1. Off-by-one di loop

int arr[5] = {10, 20, 30, 40, 50};

// SALAH — i <= 5 akan akses arr[5] yang di luar batas!
for (int i = 0; i <= 5; i++) {
    std::cout << arr[i];  // Crash saat i = 5!
}

// BENAR — i < 5 berhenti di arr[4]
for (int i = 0; i < 5; i++) {
    std::cout << arr[i];
}

Ingat aturan emas: kalau index mulai dari 0, kondisinya pakai < (bukan <=). Jadi for (int i = 0; i < panjang; i++), bukan i <= panjang.

2. Range-based for tidak bisa ubah elemen asli

int angka[] = {1, 2, 3, 4, 5};

// SALAH — x adalah SALINAN, bukan elemen asli
for (int x : angka) {
    x *= 2;  // Hanya mengubah salinan, array asli tidak berubah!
}

// BENAR — pakai referensi (&) untuk mengubah elemen asli
for (int& x : angka) {
    x *= 2;  // Sekarang array asli ikut berubah
}

3. Lupa inisialisasi variabel akumulator

// SALAH — total tidak diinisialisasi, isinya sampah!
int total;
for (int i = 0; i < 5; i++) {
    total += arr[i];  // Menambah ke nilai sampah
}

// BENAR
int total = 0;  // Selalu inisialisasi ke 0!
for (int i = 0; i < 5; i++) {
    total += arr[i];
}

Latihan

Latihan 1: Buat program yang meminta user memasukkan 7 suhu harian. Lalu tampilkan:

  • Semua suhu yang dimasukkan
  • Suhu rata-rata
  • Suhu tertinggi dan terendah
  • Berapa hari yang suhunya di atas rata-rata

Latihan 2: Buat program yang menyimpan 10 angka dalam array, lalu hitung dan tampilkan:

  • Jumlah bilangan genap dan ganjil
  • Total bilangan genap dan total bilangan ganjil

Latihan 3: Buat program “Cari Harga” untuk toko. Simpan 5 nama barang dan harganya di dua array paralel. Minta user memasukkan nama barang yang dicari, lalu tampilkan harganya (atau pesan “Barang tidak ditemukan”).

Untuk Latihan 1, hitung rata-rata dulu, lalu gunakan loop kedua untuk menghitung berapa hari yang suhunya di atas rata-rata.

Pola Loop Array

Apa kondisi yang benar untuk iterasi array int arr[5] menggunakan for loop agar tidak terjadi out-of-bounds?

Hitung Total Array

Lengkapi program berikut untuk menjumlahkan semua elemen array. Output harus: 433
C++
Output
Klik "Run" untuk menjalankan kode...

Ringkasan

PolaKodeKegunaan
Traverse arrayfor (int i = 0; i < n; i++)Menelusuri semua elemen
Input arraystd::cin >> arr[i] di dalam loopIsi array dari user
Total/Rata-ratatotal += arr[i], lalu total / nStatistik dasar
Cari maks/minBandingkan setiap elemen dengan maks/min saat iniNilai ekstrem
Linear searchLoop + if (arr[i] == target)Cari elemen tertentu
Range-based forfor (auto x : arr)Cara modern menelusuri array
Modifikasi elemenfor (int& x : arr) dengan referensiUbah isi array
AkumulatorVariabel total = 0 sebelum loopKumpulkan hasil

Array + loop adalah kombinasi yang akan kamu pakai terus-menerus. Kuasai pola-pola di atas, dan kamu sudah siap menghadapi banyak problem programming! Selanjutnya, kita akan naik level ke array 2 dimensi — array di dalam array!