Mengelola Banyak Data dalam C++
Memahami array, menyimpan banyak nilai dalam satu variabel, mengakses setiap elemen, dan mengolah sekumpulan data menggunakan perulangan.
Bayangkan kamu diminta membuat program untuk mencatat nilai lima orang murid. Program tersebut harus menerima nilai dari pengguna, menyimpan semuanya, kemudian menghitung nilai rata-rata dan menentukan nilai tertinggi.
Jika kita menggunakan materi sebelumnya, yaitu variabel, kita mungkin akan membuat lima variabel terpisah seperti nilai1, nilai2, nilai3, nilai4, dan nilai5.
int nilai1 = 85;
int nilai2 = 90;
int nilai3 = 78;
int nilai4 = 88;
int nilai5 = 92;
Cara tersebut sebenarnya dapat digunakan. Namun, bayangkan jika jumlah murid bukan lima, melainkan 30, 100, atau bahkan 1.000 orang. Kita harus membuat dan mengelola variabel satu per satu. Program akan menjadi panjang dan sulit dikembangkan.
Di sinilah kita membutuhkan cara untuk menyimpan banyak data dengan lebih terstruktur. Dalam C++, salah satu cara paling dasar untuk melakukannya adalah menggunakan array.
1. Apa Itu Array?
Array adalah struktur data yang digunakan untuk menyimpan sejumlah elemen dengan tipe data yang sama dalam satu nama variabel. Setiap elemen di dalam array memiliki posisi yang disebut indeks.
Dengan array, kita tidak perlu membuat banyak variabel dengan nama berbeda. Kita cukup membuat satu array, kemudian menyimpan berbagai nilai di dalamnya.
Contoh sederhana
Misalnya kita ingin menyimpan lima nilai murid. Kita dapat menggunakan satu array bernama nilai.
int nilai[5] = {85, 90, 78, 88, 92};
Perhatikan bahwa nilai merupakan nama array, sedangkan angka 5 menunjukkan jumlah elemen yang disediakan.
Secara sederhana, array dapat dibayangkan seperti deretan kotak penyimpanan. Setiap kotak menyimpan satu nilai, tetapi seluruh kotak tersebut berada dalam satu kelompok yang sama.
Ilustrasi array
| Indeks | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| Nilai | 85 | 90 | 78 | 88 | 92 |
Setiap kolom menggambarkan satu elemen array. Indeks digunakan untuk menentukan elemen yang ingin diakses.
2. Memahami Indeks Array
Setelah mengetahui bahwa array memiliki beberapa elemen, pertanyaan berikutnya adalah: bagaimana cara membedakan satu elemen dengan elemen lainnya?
C++ menggunakan indeks untuk menunjukkan posisi elemen. Hal yang perlu diperhatikan adalah indeks array dimulai dari angka 0, bukan 1.
Artinya, jika sebuah array memiliki lima elemen, indeksnya adalah 0, 1, 2, 3, dan 4.
| Indeks | Elemen | Nilai |
|---|---|---|
| 0 | nilai[0] | 85 |
| 1 | nilai[1] | 90 |
| 2 | nilai[2] | 78 |
| 3 | nilai[3] | 88 |
| 4 | nilai[4] | 92 |
Misalnya kita ingin mengambil nilai elemen pertama, kita menuliskan nilai[0]. Jika ingin mengambil elemen ketiga, kita menggunakan nilai[2].
#include <iostream>
using namespace std;
int main() {
int nilai[5] = {85, 90, 78, 88, 92};
cout << nilai[0] << endl;
cout << nilai[2] << endl;
return 0;
}
Hasil program:
85
78
Program tersebut menampilkan nilai pada indeks 0 dan indeks 2. Dengan demikian, kita dapat mengambil elemen tertentu tanpa harus menampilkan seluruh isi array.
nilai[5] berarti mencoba mengakses elemen di luar batas array. Hal ini dapat menyebabkan perilaku program yang tidak terdefinisi.
Mengapa indeks dimulai dari 0?
Indeks array berkaitan dengan posisi elemen relatif terhadap alamat awal penyimpanan array. Indeks 0 berarti elemen berada tepat pada posisi awal. Indeks 1 berarti satu posisi elemen setelahnya, dan seterusnya.
Untuk tahap awal, cukup ingat bahwa jumlah elemen dan indeks terakhir tidak sama. Jika jumlah elemen adalah 5, indeks terakhir adalah 4.
3. Membuat dan Mengisi Array
Sebelum menggunakan array, kita perlu mendeklarasikannya. Deklarasi merupakan proses memperkenalkan variabel kepada program, termasuk menentukan tipe data, nama, dan kapasitas array.
Bentuk umum deklarasi array adalah:
tipe_data nama_array[jumlah_elemen];
Contohnya:
int nilai[5];
Artinya, kita membuat array bernama nilai yang menyediakan lima tempat untuk menyimpan data bertipe int.
Mengisi array sejak deklarasi
Kita juga dapat langsung memberikan nilai ketika array dibuat. Proses ini disebut inisialisasi.
int nilai[5] = {85, 90, 78, 88, 92};
Kelima nilai tersebut akan ditempatkan secara berurutan mulai dari indeks 0 sampai indeks 4.
Mengisi array satu per satu
Jika array belum memiliki nilai, kita dapat mengisinya melalui indeks masing-masing.
int nilai[3];
nilai[0] = 80;
nilai[1] = 85;
nilai[2] = 90;
Setelah proses tersebut, array memiliki tiga elemen yang berisi 80, 85, dan 90.
Inisialisasi tanpa menuliskan jumlah elemen
Jika kita memberikan seluruh nilai ketika deklarasi, C++ dapat menentukan jumlah elemen berdasarkan banyaknya nilai yang diberikan.
int nilai[] = {80, 85, 90, 95};
Pada contoh tersebut, jumlah elemen array adalah empat.
Apa yang terjadi jika hanya sebagian elemen diinisialisasi?
Dalam inisialisasi agregat seperti berikut:
int nilai[5] = {80, 90};
Dua elemen pertama berisi 80 dan 90. Elemen yang tidak disebutkan akan diinisialisasi menjadi nol.
Hasilnya adalah 80, 90, 0, 0, dan 0.
4. Mengubah Nilai dan Mengakses Elemen Array
Array tidak hanya digunakan untuk menyimpan nilai. Kita juga dapat mengambil dan mengubah nilai pada posisi tertentu.
Misalnya, sebuah program menyimpan nilai lima murid. Kemudian, nilai murid pertama perlu diperbaiki karena sebelumnya terjadi kesalahan input.
#include <iostream>
using namespace std;
int main() {
int nilai[3] = {80, 75, 90};
cout << "Nilai awal: " << nilai[0] << endl;
nilai[0] = 95;
cout << "Nilai setelah diubah: "
<< nilai[0] << endl;
return 0;
}
Hasil program:
Nilai awal: 80
Nilai setelah diubah: 95
Perhatikan instruksi nilai[0] = 95;. Instruksi tersebut mengubah isi elemen pada indeks 0 dari 80 menjadi 95.
5. Menggunakan Perulangan untuk Mengelola Array
Sekarang kita sudah dapat membuat array, mengisi elemen, dan mengambil nilai tertentu. Namun, bagaimana jika kita ingin menampilkan seluruh isi array?
Kita memang dapat menuliskan setiap elemen secara manual:
cout << nilai[0] << endl;
cout << nilai[1] << endl;
cout << nilai[2] << endl;
cout << nilai[3] << endl;
cout << nilai[4] << endl;
Akan tetapi, cara tersebut menjadi tidak praktis jika jumlah elemen sangat banyak. Kita membutuhkan instruksi yang dapat dijalankan berulang kali.
Materi perulangan yang sudah dipelajari sebelumnya dapat digunakan untuk menyelesaikan masalah tersebut.
Menggunakan for
Perulangan for sangat cocok digunakan ketika jumlah pengulangan sudah diketahui. Misalnya, kita ingin menampilkan lima elemen array.
#include <iostream>
using namespace std;
int main() {
int nilai[5] = {85, 90, 78, 88, 92};
for (int i = 0; i < 5; i++) {
cout << "Nilai ke-" << i + 1
<< ": " << nilai[i] << endl;
}
return 0;
}
Hasil program:
Nilai ke-1: 85
Nilai ke-2: 90
Nilai ke-3: 78
Nilai ke-4: 88
Nilai ke-5: 92
Mengapa perulangan tersebut dapat menampilkan semua elemen?
Memahami cara kerjanya
Variabel i dimulai dari angka 0 karena indeks array juga dimulai dari 0.
Kondisi i < 5 membuat perulangan berjalan selama nilai i masih kurang dari 5.
Instruksi nilai[i] mengambil elemen sesuai nilai indeks saat itu.
Instruksi i++ menaikkan nilai indeks satu angka hingga seluruh elemen selesai diproses.
Menggunakan while
Selain for, kita juga dapat menggunakan while untuk mengakses seluruh elemen array.
int nilai[5] = {85, 90, 78, 88, 92};
int i = 0;
while (i < 5) {
cout << nilai[i] << endl;
i++;
}
Hasilnya sama. Perbedaannya terletak pada cara penulisan struktur perulangan. Pada while, inisialisasi indeks dan kenaikannya ditulis secara terpisah.
6. Memasukkan Data ke Dalam Array
Sejauh ini, nilai array masih ditentukan langsung melalui kode program. Dalam program yang digunakan oleh orang lain, tentu kita ingin pengguna dapat memasukkan datanya sendiri.
Misalnya, kita ingin membuat program yang meminta pengguna memasukkan lima nilai. Setiap nilai kemudian disimpan ke dalam array.
#include <iostream>
using namespace std;
int main() {
int nilai[5];
for (int i = 0; i < 5; i++) {
cout << "Masukkan nilai ke-" << i + 1 << ": ";
cin >> nilai[i];
}
cout << "\nData nilai yang dimasukkan:\n";
for (int i = 0; i < 5; i++) {
cout << nilai[i] << endl;
}
return 0;
}
Contoh ketika program dijalankan:
Masukkan nilai ke-1: 80
Masukkan nilai ke-2: 85
Masukkan nilai ke-3: 90
Masukkan nilai ke-4: 75
Masukkan nilai ke-5: 95
Data nilai yang dimasukkan:
80
85
90
75
95
Perhatikan bagian cin >> nilai[i];. Instruksi tersebut menerima input dari pengguna, kemudian menyimpannya pada elemen array yang ditunjuk oleh indeks i.
Karena instruksi tersebut berada di dalam perulangan, pengguna diminta memasukkan nilai sebanyak lima kali.
7. Mengolah Data di Dalam Array
Array akan semakin bermanfaat ketika kita menggunakannya untuk melakukan pengolahan data. Setelah data tersimpan, program dapat menghitung jumlah, rata-rata, nilai tertinggi, maupun nilai terendah.
A. Menghitung jumlah seluruh nilai
Misalnya, kita memiliki lima nilai. Untuk menghitung jumlahnya, kita dapat menggunakan sebuah variabel bernama total.
int nilai[5] = {80, 85, 90, 75, 95};
int total = 0;
for (int i = 0; i < 5; i++) {
total = total + nilai[i];
}
cout << "Jumlah seluruh nilai: " << total;
Hasilnya:
Jumlah seluruh nilai: 425
Variabel total dimulai dari nol. Setiap kali perulangan berjalan, nilai pada elemen array ditambahkan ke dalam total.
Jika dijabarkan, prosesnya seperti berikut:
| Proses | Nilai yang ditambahkan | Total |
|---|---|---|
| Awal | - | 0 |
| 1 | 80 | 80 |
| 2 | 85 | 165 |
| 3 | 90 | 255 |
| 4 | 75 | 330 |
| 5 | 95 | 425 |
B. Menghitung rata-rata
Setelah mengetahui jumlah seluruh nilai, kita dapat menghitung rata-ratanya. Rumus dasarnya adalah jumlah seluruh nilai dibagi banyaknya data.
Dalam C++, kita dapat menuliskannya seperti berikut:
int nilai[5] = {80, 85, 90, 75, 95};
int total = 0;
for (int i = 0; i < 5; i++) {
total += nilai[i];
}
double rataRata = static_cast<double>(total) / 5;
cout << "Rata-rata: " << rataRata;
Hasilnya:
Rata-rata: 85
Mengapa menggunakan double dan static_cast? Kita ingin hasil pembagian dapat memiliki angka desimal. Dengan mengubah total menjadi double, pembagian dilakukan menggunakan tipe bilangan pecahan.
C. Mencari nilai tertinggi
Selanjutnya, bagaimana jika kita ingin mengetahui nilai paling tinggi di antara seluruh data?
Salah satu caranya adalah menganggap elemen pertama sebagai nilai tertinggi sementara. Kemudian, program membandingkannya dengan elemen-elemen berikutnya.
int nilai[5] = {80, 85, 90, 75, 95};
int tertinggi = nilai[0];
for (int i = 1; i < 5; i++) {
if (nilai[i] > tertinggi) {
tertinggi = nilai[i];
}
}
cout << "Nilai tertinggi: " << tertinggi;
Hasilnya:
Nilai tertinggi: 95
Program dimulai dengan menganggap nilai pada indeks 0 sebagai nilai tertinggi. Selanjutnya, setiap nilai dibandingkan. Jika ditemukan nilai yang lebih besar, variabel tertinggi diperbarui.
D. Mencari nilai terendah
Prinsipnya hampir sama dengan mencari nilai tertinggi. Perbedaannya adalah kondisi perbandingannya.
int nilai[5] = {80, 85, 90, 75, 95};
int terendah = nilai[0];
for (int i = 1; i < 5; i++) {
if (nilai[i] < terendah) {
terendah = nilai[i];
}
}
cout << "Nilai terendah: " << terendah;
Hasilnya:
Nilai terendah: 75
8. Array Dua Dimensi
Sejauh ini kita menggunakan array satu dimensi, yaitu sekumpulan elemen yang tersusun dalam satu deretan. Namun, ada kondisi ketika data lebih mudah disusun dalam bentuk baris dan kolom.
Misalnya, sekolah ingin mencatat nilai tiga murid untuk dua mata pelajaran. Data tersebut dapat disusun seperti tabel.
| Murid | Informatika | Matematika |
|---|---|---|
| Murid 1 | 85 | 90 |
| Murid 2 | 80 | 88 |
| Murid 3 | 92 | 87 |
Untuk menyimpan data berbentuk baris dan kolom seperti itu, kita dapat menggunakan array dua dimensi.
Bentuk umum deklarasinya adalah:
tipe_data nama_array[jumlah_baris][jumlah_kolom];
Contohnya:
int nilai[3][2] = {
{85, 90},
{80, 88},
{92, 87}
};
Angka 3 menunjukkan jumlah baris, sedangkan angka 2 menunjukkan jumlah kolom.
Untuk mengambil nilai Informatika murid pertama, kita dapat menggunakan nilai[0][0]. Sementara itu, nilai Matematika murid ketiga berada pada nilai[2][1].
Mengakses seluruh elemen array dua dimensi
Karena memiliki baris dan kolom, kita dapat menggunakan dua perulangan. Perulangan pertama mengatur baris, sedangkan perulangan kedua mengatur kolom.
#include <iostream>
using namespace std;
int main() {
int nilai[3][2] = {
{85, 90},
{80, 88},
{92, 87}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
cout << nilai[i][j] << " ";
}
cout << endl;
}
return 0;
}
Hasil program:
85 90
80 88
92 87
Perulangan luar mengatur baris, sedangkan perulangan dalam mengakses setiap kolom pada baris tersebut. Teknik ini sering disebut nested loop atau perulangan bersarang.
Apakah array dua dimensi selalu berbentuk tabel?
Array dua dimensi sering digambarkan sebagai tabel karena memiliki baris dan kolom. Namun, secara konsep, array dua dimensi adalah struktur penyimpanan yang membutuhkan dua indeks untuk mengakses elemen.
Contoh penggunaannya antara lain menyimpan nilai beberapa murid untuk beberapa mata pelajaran, data kursi dalam ruangan, atau papan permainan berbentuk kotak-kotak.
9. Kesalahan yang Perlu Dihindari
Ketika mulai menggunakan array, ada beberapa kesalahan yang cukup sering terjadi. Kesalahan tersebut perlu dipahami agar program tidak menghasilkan data yang salah atau berperilaku tidak terduga.
1. Menggunakan indeks di luar batas
int nilai[5];
nilai[5] = 90; // Salah
Array tersebut hanya memiliki indeks 0 sampai 4. Indeks 5 berada di luar batas yang disediakan.
2. Menggunakan kondisi perulangan yang keliru
for (int i = 0; i <= 5; i++) {
cout << nilai[i];
}
Kondisi i <= 5 menyebabkan perulangan berjalan sampai indeks 5. Jika array hanya memiliki lima elemen, kondisi yang benar adalah i < 5.
3. Menggunakan elemen sebelum diisi
int nilai[3];
cout << nilai[0];
Elemen array lokal tersebut belum diinisialisasi. Program seharusnya mengisi elemen sebelum menggunakannya.
4. Menganggap kapasitas array dapat berubah
Array bawaan yang digunakan dalam contoh-contoh sebelumnya memiliki jumlah elemen tetap setelah dibuat. Jika kita membuat int nilai[5];, kapasitasnya adalah lima elemen.
Jika membutuhkan jumlah elemen yang dapat berubah, C++ menyediakan struktur data lain seperti vector.
10. Contoh Program: Mengelola Nilai Murid
Sekarang kita akan menggabungkan beberapa konsep yang sudah dipelajari. Kita akan membuat program sederhana untuk menyimpan nilai lima murid, menampilkan seluruh nilai, menghitung jumlah dan rata-rata, serta mencari nilai tertinggi dan terendah.
Program ini menggunakan array untuk menyimpan data dan perulangan untuk memproses setiap elemen.
#include <iostream>
using namespace std;
int main() {
const int JUMLAH = 5;
int nilai[JUMLAH];
int total = 0;
int tertinggi, terendah;
// Memasukkan data
for (int i = 0; i < JUMLAH; i++) {
cout << "Masukkan nilai murid ke-"
<< i + 1 << ": ";
cin >> nilai[i];
}
// Menentukan nilai awal
tertinggi = nilai[0];
terendah = nilai[0];
// Mengolah data
for (int i = 0; i < JUMLAH; i++) {
total += nilai[i];
if (nilai[i] > tertinggi) {
tertinggi = nilai[i];
}
if (nilai[i] < terendah) {
terendah = nilai[i];
}
}
// Menghitung rata-rata
double rataRata =
static_cast<double>(total) / JUMLAH;
// Menampilkan hasil
cout << "\n===== HASIL PENGOLAHAN =====\n";
for (int i = 0; i < JUMLAH; i++) {
cout << "Nilai murid ke-" << i + 1
<< ": " << nilai[i] << endl;
}
cout << "\nJumlah nilai: " << total;
cout << "\nRata-rata: " << rataRata;
cout << "\nNilai tertinggi: " << tertinggi;
cout << "\nNilai terendah: " << terendah;
return 0;
}
Contoh hasil program
Masukkan nilai murid ke-1: 80
Masukkan nilai murid ke-2: 85
Masukkan nilai murid ke-3: 90
Masukkan nilai murid ke-4: 75
Masukkan nilai murid ke-5: 95
===== HASIL PENGOLAHAN =====
Nilai murid ke-1: 80
Nilai murid ke-2: 85
Nilai murid ke-3: 90
Nilai murid ke-4: 75
Nilai murid ke-5: 95
Jumlah nilai: 425
Rata-rata: 85
Nilai tertinggi: 95
Nilai terendah: 75
Memahami bagian penting program
Agar tidak hanya menyalin kode, mari kita pahami kembali fungsi beberapa bagian utama program tersebut.
Konstanta jumlah data
const int JUMLAH = 5;
Konstanta JUMLAH menyimpan angka lima sebagai jumlah data yang akan dikelola. Dengan cara ini, kita tidak perlu menuliskan angka 5 berulang kali di berbagai bagian program.
Array untuk menyimpan nilai
int nilai[JUMLAH];
Array nilai menyediakan lima tempat untuk menyimpan nilai murid.
Perulangan untuk menerima input
for (int i = 0; i < JUMLAH; i++) {
cin >> nilai[i];
}
Perulangan meminta pengguna memasukkan nilai dan menyimpannya ke dalam setiap elemen array.
Perulangan untuk mengolah data
total += nilai[i];
if (nilai[i] > tertinggi) {
tertinggi = nilai[i];
}
Setiap elemen dijumlahkan, kemudian dibandingkan dengan nilai tertinggi sementara. Prinsip serupa digunakan untuk mencari nilai terendah.
11. Latihan Pemahaman
Setelah mempelajari array, cobalah mengerjakan beberapa latihan berikut untuk memastikan bahwa kamu memahami konsep dan cara penggunaannya.
Latihan 1 — Mengenali indeks
Perhatikan kode berikut:
int angka[4] = {10, 20, 30, 40};
(- ) Berapa jumlah elemen array tersebut?
(- ) Apa nilai yang tersimpan pada indeks 2?
(- ) Apa indeks terakhir array tersebut?
(- ) Apa yang terjadi jika program mencoba mengakses angka[4]?
Latihan 2 — Menampilkan data
Buat program C++ yang memiliki array berisi lima angka. Gunakan perulangan for untuk menampilkan seluruh angka tersebut.
Latihan 3 — Menghitung jumlah
Buat program yang meminta pengguna memasukkan lima angka. Simpan angka tersebut ke dalam array, kemudian hitung jumlah seluruh angka.
Latihan 4 — Mencari nilai terbesar
Modifikasi program latihan sebelumnya agar dapat menampilkan angka terbesar yang dimasukkan pengguna.
Latihan 5 — Array dua dimensi
Buat array dua dimensi yang menyimpan nilai tiga murid untuk dua mata pelajaran. Tampilkan seluruh nilai menggunakan dua perulangan bersarang.
12. Tantangan: Program Pengolahan Data
Sebagai tantangan, buatlah program yang dapat mengelola data nilai murid dengan ketentuan berikut:
Ketentuan program
(- ) Program dapat menerima nilai dari lima murid.
(- ) Seluruh nilai disimpan dalam sebuah array.
(- ) Program menampilkan kembali seluruh nilai yang telah dimasukkan.
(- ) Program menghitung jumlah dan rata-rata nilai.
(- ) Program menentukan nilai tertinggi dan terendah.
(- ) Program menampilkan keterangan apakah rata-rata mencapai 75 atau belum.
Kerjakan tantangan ini tanpa langsung menyalin program pada pembahasan sebelumnya. Cobalah menyusun langkah penyelesaian terlebih dahulu, kemudian terjemahkan menjadi kode C++.
Petunjuk jika mengalami kesulitan
Mulailah dengan membuat array untuk menyimpan nilai. Gunakan perulangan pertama untuk menerima input, kemudian perulangan berikutnya untuk menghitung total dan mencari nilai tertinggi maupun terendah.
Setelah memperoleh rata-rata, gunakan percabangan if untuk menentukan apakah rata-rata mencapai 75.
Jika belum memahami percabangan, pelajari kembali materi membuat program yang dapat mengambil keputusan.
13. Penutup
Dari satu variabel menjadi sekumpulan data
Array memungkinkan kita menyimpan banyak nilai dalam satu nama variabel. Setiap elemen memiliki indeks yang dimulai dari 0, sehingga kita dapat mengakses dan mengubah data berdasarkan posisinya.
Dengan menggabungkan array dan perulangan, kita dapat melakukan berbagai pekerjaan seperti menerima input, menampilkan data, menghitung jumlah, mencari rata-rata, serta menentukan nilai tertinggi dan terendah.
Konsep ini menjadi dasar penting sebelum mempelajari struktur data yang lebih kompleks dalam pemrograman.
Pada materi berikutnya, kita akan mempelajari cara mengolah data berbentuk teks menggunakan string. Jika array digunakan untuk menyimpan sekumpulan elemen, string membantu kita bekerja dengan rangkaian karakter seperti nama, kalimat, dan kata.
0 comments:
Posting Komentar