Di bab ini program kita belajar nyimpen banyak data sekaligus pakai array. Dari yang tadinya cuma 3 mahasiswa, sekarang bisa 5, 10, 100, tanpa bikin 100 variabel. Program Data Nilai Mahasiswa makin mirip beneran!
Array Itu Deretan Kotak Bernomor
Di bab 1 kita kenal variabel = kotak berlabel. Nah, kalau kita butuh 5 kotak buat 5 nilai, apa kita bikin 5 variabel kayak nilai1, nilai2, nilai3…? Coba bayangin kalau nilainya 100, udah pusing duluan.
Di sinilah array masuk. Array itu satu variabel yang berisi deretan kotak bernomor. Bayangin lemari arsip: satu lemari, banyak laci, tiap laci punya nomor.
int nilai[5]; // satu array berisi 5 kotak bertipe intstring nama[3]; // satu array berisi 3 kotak bertipe stringYang paling penting dan sering bikin orang baru bingung: nomor indeksnya mulai dari 0, bukan 1. Jadi array int nilai[5] punya kotak dengan nomor 0, 1, 2, 3, dan 4, total 5.
nilai[0] nilai[1] nilai[2] nilai[3] nilai[4] ?? ?? ?? ?? ??Buat ngisi kotaknya, kita pakai nomor indeks dengan kurung siku:
int nilai[5];
nilai[0] = 80;nilai[1] = 90;nilai[2] = 85;nilai[3] = 70;nilai[4] = 95;Atau kalau mau langsung diisi sekaligus pas deklarasi, ini namanya inisialisasi:
int nilai[3] = {80, 90, 85};Nah, perhatiin: {80, 90, 85} itu otomatis masuk ke nilai[0], nilai[1], nilai[2]. Nilai pertama = indeks 0, terus ke bawah.
Untuk ngambil nilainya, sama aja, sebut indeksnya:
cout << nilai[0] << endl; // cetak 80cout << nilai[2] << endl; // cetak 85⚠️ Hati-hati: Index Out of Bounds
Ini salah satu lubang klasik di C++. Kalau array luarnya int nilai[5], maka indeks yang sah cuma 0 sampai 4. Kalau kita coba akses nilai[5] atau nilai[10], C++ nggak akan memperingatkan; dia cuma baca atau ngisi memori yang bukan punya array itu. Hasilnya bisa nilai sampah, crash, atau program ngebug misterius.
Beda dari bahasa lain yang langsung teriak “IndexError!”, C++ percaya kita tau apa yang kita lakuin. Jadi disiplin: selalu pastikan indeks di dalam batas 0 sampai ukuran-1.
Ngeloparin Array: Kerja Bak Air Mengalir
Karena indeks array itu angka berurutan (0, 1, 2, 3, …), for adalah pasangannya yang sempurna. Ini pola paling umum di seluruh dunia C++:
const int JUMLAH = 5;int nilai[JUMLAH];
// ngisifor (int i = 0; i < JUMLAH; i++) { cout << "Nilai ke-" << (i + 1) << ": "; cin >> nilai[i];}
// nampilinfor (int i = 0; i < JUMLAH; i++) { cout << "Nilai ke-" << (i + 1) << " = " << nilai[i] << endl;}Perhatiin dua hal penting:
const int JUMLAH = 5;dipake buat ukuran array. Kenapa? Karena ukuran array di C++ harus angka yang diketahui dari awal, dan pakaiJUMLAHsekali aja bikin kode gampang diubah (ganti 5 jadi 100 = ganti satu tempat doang). PlusJUMLAHini dipake di loop, jadi ukuran dan loop selalu konsisten, nggak bakal kebablasan.i < JUMLAHdi kondisi loop yang ngejamin kita nggak nyentuh indeks di luar batas. Loop jalan darii = 0sampaii = 4; pasi = 5, kondisi5 < 5jadi false dan loop berhenti. Aman.
Kalau kita liat (i + 1) di dalam output, itu cuma biar tampilannya mulai dari 1 (buat manusia) meskipun indeks aslinya mulai dari 0.
Program Berkelanjutan: Nyimpen 5 Mahasiswa
Oke, upgrade program kita. Bab sebelumnya cuma bisa 3 mahasiswa, dan datanya langsung diproses lalu ilang. Sekarang dengan array, kita bisa nyimpen data 5 mahasiswa terus nampilin lagi kapan aja.
#include <iostream>using namespace std;
int main() { const int JUMLAH = 5; string nama[JUMLAH]; float ipk[JUMLAH];
for (int i = 0; i < JUMLAH; i++) { cout << "--- Mahasiswa ke-" << (i + 1) << " ---" << endl; cout << "Nama: "; cin >> nama[i]; cout << "IPK : "; cin >> ipk[i]; }
cout << "\n=== Data Mahasiswa ===" << endl; for (int i = 0; i < JUMLAH; i++) { cout << (i + 1) << ". " << nama[i] << " (IPK " << ipk[i] << ")" << endl; }
return 0;}Yang baru di sini:
- Ada dua array paralel:
string nama[JUMLAH]danfloat ipk[JUMLAH]. Ini pola “dua array sejajar”:nama[i]danipk[i]di indeks yang sama itu milik mahasiswa yang sama.nama[0](“Budi”) pasangannyaipk[0](3.75). - Loop input muter 5 kali; tiap muter ngisi
nama[i]danipk[i]. - Loop tampil muter 5 kali lagi, nyetak semua data yang udah kesimpen. Ini yang ngebuktiin array “nyimpen”: datanya bertahan.
Contoh jalannya:
--- Mahasiswa ke-1 ---Nama: BudiIPK : 3.75--- Mahasiswa ke-2 ---Nama: AniIPK : 2.5... (dan seterusnya)
=== Data Mahasiswa ===1. Budi (IPK 3.75)2. Ani (IPK 2.5)3. Citra (IPK 2.8)... (dan seterusnya)Kelemahan program ini: dua array paralel itu rapuh. Coba bayangin someday harus nyimpen 10 atribut per mahasiswa, 10 array paralel? Nggak kebayang. Dan kode input/tampil sekarang numpuk di main, bakal makin panjang tiap tambah fitur. Bab 05 akan bungkus logika jadi fungsi, dan bab 06 bakal rapiin datanya pake struct. Sabar ya, pelan-pelan kece!
Latihan Soal: Analisis Nilai Tugas
Dosen kita baru aja ngasih 10 nilai tugas dan mau kita jadi “asisten” yang ngolah nilainya. Bikinkan program yang:
- Menerima 10 nilai tugas (
int) ke dalam satu array. - Menampilkan semua nilai yang tadi diinput.
- Menampilkan nilai tertinggi, nilai terendah, dan rata-ratanya.
Contoh jalannya:
Masukkan 10 nilai tugas:Nilai ke-1: 80Nilai ke-2: 90... (sampai 10)
=== Hasil Analisis ===Semua nilai: 80 90 85 70 95 88 92 60 75 81Nilai tertinggi : 95Nilai terendah : 60Rata-rata : 81.6💡 Hint: buat cari nilai tertinggi, mulai dari
tertinggi = nilai[0], terus bandingin satu-satu pakeif. Loop + if = senjata kombo kita di bab ini.