Array
Array
ARRAY
Tujuan Pembelajaran:
Pada bab ini mahasiswa dikenalkan dengan struktur data array. Array atau larik
merupakan suatu struktur data dalam pemrograman yang untuk tujuan tertentu. Array
dibentuk dari tipe data atau struktur data lainnya yang ada dalam C/C++. Dalam
implementasinya, untuk dapat menggunakan array, mahasiswa terlebih dahulu perlu
memahami cara kerja looping dengan baik.
BAB VI
ARRAY
Array atau sering juga disebut dengan larik merupakan sekumpulan variabel yang
memiliki tipe data yang sama dan diidentifikasi dengan menggunakan satu nama saja. Atau,
dalam kalimat yang lain, satu nama variabel atau pengenal yang digunakan untuk sekumpulan
data yang memiliki tipe data yang sama. Artinya jika salah satu anggota array memiliki tipe
data integer maka anggota array lainnya juga bertipe integer, jika salah satu anggota array
memiliki tipe data karakter maka anggota array lainnya juga karakter.
Seperti halnya sebuah variabel, array akan menempati suatu lokasi memori tertentu di
dalam komputer. Areal memori ini biasanya saling berhubungan dan berurutan. Anggota dari
sebuah array disebut sebagai elemen array. Elemen tertentu dalam array dapat diakses melalui
indeks milik array tersebut. Setiap elemen dalam array akan memiliki nomor indeks yang
berbeda. Nomor indeks berbentuk urutan bilangan integer positif yang dimulai dari angka nol.
Ilustrasi untuk array yang memiliki enam elemen bertipe integer ditunjukkan dalam Gambar
26.
nomor indeks
alamat memory
x[0] 7 2293436
x[1] -2365 2293440
x[2] 123 2293404
x[3] 0 2293448
x[4] 234556 2293452
x[5] -542 2293456
Bentuk array dapat dibedakan menurut ukuran atau dimensinya, mulai dari dimesi satu
sampai beberapa dimensi sesuai dengan kebutuhan dalam pemrograman. Secara visual, array
sering digambarkan dalam bentuk tabel. Array satu dimensi digambarkan sebagai tabel satu
kolom dengan banyak baris, array dua dimensi digambarkan sebagai tabel dengan banyak
kolom dan banyak baris, array 3 dimensi digambarkan sebagai tabel dengan banyak kolom
dan baris yang berlapis-lapis dan seterusnya.
Tidak ada aturan khusus kapan array satu dimensi, dua dimensi dan seterusnya mesti
digunakan dalam sebuah program. Penggunaan ini biasanya disesuaikan dengan kebutuhan
program yang dibuat.
Terkadang ada keadaan dimana kita perlu menggunakan array dalam suatu program.
Dengan memanfaatkan array, program yang dihasilkan akan menjadi lebih sederhana dan
lebih mudah untuk dipahami. Sebagai contoh misalkan kita diminta untuk membuat program
untuk membuat :
Berasumsi jika dalam satu kelas terdiri dari 20 orang siswa yang akan dicatat tinggi
badannya. Artinya dalam program akan diperlukan 20 variabel yang masing-masing akan
menyimpan data untuk satu orang siswa. Misalkan tinggi badan dicatat dalam satuan cm dan
selalu berupa bilangan bulat, maka variabel yang digunakan dapat dideklarasikan sebagai
berikut:
dapat dibayangkan kesulitan yang akan muncul jika jumlah data siswa yang akan dicatat
diubah misalnya menjadi 100 orang atau lebih. Namun hal ini bisa dengan mudah diatasi
dengan menggunakan array. Array untuk mencatat data 20 orang siswa dapat dideklarasikan
sebagai:
int tgSiswa[20];
tipe_data nama_array[jumlah_elemen];
jadi, array dideklarasikan dalam tipe data dimana tipe data ini adalah salah satu tipe data yang
dikenal dalam C/C++. Kemudian nama array yang cara penamaannya sama dengan penamaan
variabel dan jumlah elemen dari array yang ditulis diantara tanda kurung siku ( [...] ). Jumlah
elemen array ini adalah bilangan bulat positif.
Dalam C/C++, isi memory tidak dibersihkan dari penggunaan sebelumnya ketika
variabel atau array baru dideklarasikan/diciptakan. Oleh karena itu, dalam prakteknya
sebaiknya melakukan inisialisasi untuk semua variabel yang digunakan termasuk array.
Ada dua cara untuk melakukan inisialisasi pada array. Pertama adalah ketika
melakukan deklarasi dan yang kedua setelah deklarasi array. Pada cara pertama yaitu dengan
memberikan suatu nilai tertentu yang dipisahkan dengan tanda koma untuk setiap elemen
array. Deretan nilai ini diletakkan dalam kurung kurawal.
setiap nilai dalam tanda kurung kurawal yang berada di sebelah kanan tanda sama dengan
akan menjadi nilai awal untuk elemen array yang bersesuaian. Artinya tgSiswa[0] akan disi
Cara deklarasi array lainnya untuk memberikan nilai awal adalah dengan memberikan
nilai default yang sama untuk semua elemen array. Misalkan untuk contoh sebelumnya,
seluruh elemen pada tgSiswa diberi nilai awal 0, maka deklarasinya dapat ditulis sebagai:
cara deklarasi kedua ini dapat dengan lebih cepat dilakukan karena berapapun jumlah elemen
dari array, cukup diberikan satu nilai tunggal dalam kurung kurawal disebelah tanda sama
dengan. Maka seluruh elemen array akan memiliki nilai awal yang diberikan tersebut.
Cara pemberian nilai awal yang lainnya adalah dengan menggunakan looping,
misalnya for() loop. Perhatikan program berikut:
#include <stdio.h>
main()
{
int i, tgSiswa[5];
Pada program ini terlihat variabel yang dideklarasikan adalah i yang digunakan sebagai
indeks dan array tgSiswa yang memiliki 5 elemen. Loop i yang berfungsi sebagai indeks
array yang memiliki nilai berturut-turut 0, 1, 2, 3 dan 4 yang seluruhnya berjumlah 5, sesuai
dengan jumlah elemen array. Kemudian setiap elemen array diisi dengan nilai 0.
Selanjutnya, untuk mencetak seluruh isi dari array juga diperlukan sebuah looping
lainnya. Berikut adalah modifikasi dari program sebelumnya untuk melakukan pemberian
nilai dan pencetakan isi semua elemen array.
main()
{
int i, tgSiswa[5];
//dalam C++
#include <iostream>
using namespace std;
main()
{
int i, tgSiswa[5];
Berbeda dengan program sebelumnya dimana seluruh elemen array diisi dengan nilai 0, pada
program ini elemen array diisi dengan nilai indeks dikalikan dengan 2 yang ditunjukkan
dengan perintah tgSiswa[i] = i*2; sehingga output dari program ini jika dijalankan
adalah:
//dalam C
#include <stdio.h>
main()
{
int i, tgSiswa[10];
//dalam C++
#include <iostream>
using namespace std;
main()
{
int i, tgSiswa[10];
Perhatikan, Kesalahan yang umum terjadi dalam penggunaan array adalah karena tidak
memperhitungkan indeks ke-0. Kesalahan pemrograman ini sering disebut sebagai off-by-one
error, yang terjadi karena program mengakses data diluar batasan yang disediakan. Misalkan
kita memiliki array dengan 5 elemen, kemudian statemen mengakses array tersebut dengan
angka indeks 5, maka saat itulah kesalahan program terjadi. Hal ini terjadi karena indeks
terakhir untuk array dengan 5 elemen adalah 4.
Off-by-one error biasanya terjadi ketika program dijalankan dan tidak ditemui pada saat
kompilasi program. Hal ini terjadi karena off-by-one error merupakan kesalahan pada logika
program, bukan kesalahan dalam penulisan sintak.
Contoh kasus:
Buatlah sebuah program untuk mencatat rata-rata suhu harian selama dua minggu, kemudian
hitunglah suhu terendah dan tertinggi serta rata-rata suhu dua mingguannya. Data suhu dicatat
dalam bilangan pecahan dan dimasukkan melalui keyboard. Bentuk output yang ditampilkan
adalah:
1. Data suhu selama 2 minggu
2. Suhu minimum dan maksimum
3. Suhu rata-rata selama 2 minggu
1. Definisikan variabel yang diperlukan untuk data suhu, suhu minimum, suhu maksimum,
serta variabel pendukung lainnya
2. Masukkan data suhu harian selama 2 minggu
3. Periksa suhu terendah dan tertinggi
4. Jumlahkan seluruh suhu harian
5. Hitung suhu rata-rata dua mingguan
6. Cetak suhu minimal, maksimal dan rata-rata
7. Selesai
Flowchart untuk penyelesaian contoh kasus ini ditunjukkan pada Gambar 28. Data
suhu harian disimpan dalam array suhu[] dan dimasukkan dengan menggunakan looping
for() dimana variabel j digunakan sebagai indeks. Setelah semua data dimasukkan, beri
nilai awal untuk variabel suhuMin dan suhuMax dengan data pertama yang dimasukkan
tadi yaitu suhu[0] serta variabel jumlah diberi nilai awal 0.
Input
suhuMin >
suhu[ j ] true suhuMin = suhu[ j ]
suhu[ j ]
suhuMax <
suhuMin = suhu[ 0 ] true suhuMax = suhu[ j ]
suhu[ j ]
suhuMax = suhu[ 0 ]
jumlah += suhu[ j ]
jumlah = 0
j
A B B C
Cetak
xRata = jumlah/14
suhuMin
Cetak
suhu[ j ]
Cetak
xRata
j
C End
Gambar 28. Flowchart perhitungan min, max dan rata-rata suhu dua mingguan
//dalam C
#include <stdio.h>
main()
{
float suhu[14]={0};
float suhuMin, suhuMax, jumlah, xRata;
int j;
suhuMin = suhu[0];
suhuMax = suhu[0];
jumlah = 0.0;
//pencetakan
printf("\n\nData suhu yang dimasukkan adalah:\n");
for(j=0; j<14; j++)
printf("%4.2f\t", suhu[j]);
main()
{
float suhu[14]={0};
float suhuMin, suhuMax, jumlah, xRata;
int j;
suhuMin = suhu[0];
suhuMax = suhu[0];
jumlah = 0.0;
//pencetakan
cout<<"\n\nData suhu yang dimasukkan adalah:\n";
for(j=0; j<14; j++)
cout << suhu[j] << "\t";
tipe_data nama_array[jumlah_baris][jumlah_kolom];
sehingga
int aDua[3][3];
berarti mendeklarasikan array bertipe integer dengan nama aDua yang memiliki 9 elemen
yang terdiri dari 3 baris dan 3 kolom. Gambar 29 menunjukkan ilustrasi untuk array aDua
yang memiliki 9 elemen tersebut.
Pada Gambar 29 terlihat bahwa array memiliki 3 baris yaitu baris ke-0, ke-1 dan ke-2
serta 3 kolom yaitu kolom ke-0, ke-1 dan ke-2. Untuk mengakses elemen array adalah dengan
menyebutkan nama array beserta indek baris dan kolomnya. Sehingga aDua[0][0] berarti
elemen pada baris ke-0 kolom ke-0, aDua[0][1] berarti elemen pada baris ke-0 kolom ke-
1, aDua[1][0] berarti elemen pada baris ke-1 kolom ke-0 dan seterurnya hingga
aDua[2][2] yang berarti elemen pada baris ke-2 kolom ke-2 yang merupakan elemen
terakhir dari array aDua.
Seperti halnya dengan array satu dimensi, pada array dua dimensi juga perlu dilakukan
inisialisasi atau pemberian nilai awal sebelum array tersebut digunakan. Untuk melakukan
inisialisasi dapat dilakukan secara langsung ketika array dideklarasikan atau dengan
menggunakan looping. Dalam hal penggunaan mekanisme looping, diperlukan dua buah loop
yang masing-masing bertindak sebagai indeks baris dan sebagai indeks kolom pada array.
Setiap kelompok nilai dalam kurung kurawal merupakan nilai awal untuk setiap baris dalam
array. Dalam hal ini aDua[0][0] diberi nilai 0, aDua[0][1] diberi nilai 1 dan
aDua[0][2] diberi nilai 2. Secara lengkap nilai awal untuk setiap elemen array aDua dapat
dilihat pada Tabel 18.
Elemen Nilai
aDua[0][0] 0
aDua[0][1] 1
aDua[0][2] 2
aDua[1][0] 0
aDua[1][1] 1
aDua[1][2] 2
aDua[2][0] 0
aDua[2][1] 1
aDua[2][2] 2
Jika menggunakan looping, struktur looping yang digunakan untuk menangani array
dua dimensi adalah nested looping dengan dua buah loop. Satu loop digunakan sebagai indeks
baris dan satu loop untuk indeks kolom. Berikut adalah contoh penggalan program untuk
menangani array dua dimensi.
int aDua[3][3];
int i, j;
Pada contoh ini nested looping digunakan untuk melakukan pemberian nilai awal elemen
array aDua. Variabel i digunakan sebagai indeks baris dan variabel j digunakan sebagai
indeks kolom. Sedangkan nilai yang diberikan untuk setiap elemen array adalah sama dengan
j. Jika program ini dijalankan maka isi setiap elemen array aDua sesuai urutan pengisian
nilainya adalah seperti ditunjukkan pada Tabel 19.
Elemen Nilai
aDua[0][0] 0
aDua[0][1] 1
aDua[0][2] 2
aDua[1][0] 0
aDua[1][1] 1
aDua[1][2] 2
aDua[2][0] 0
aDua[2][1] 1
aDua[2][2] 2
Jika struktur looping pada potongan program sebelumnya digunakan kembali tetapi dengan
mempertukarkan fungsi baris kolomnya sehingga variabel i yang tadinya merupakan indeks
baris digunakan sebagai indeks dan variabel j yang tadinya merupakan indeks kolom
digunakan sebagai indeks baris. Untuk mengaplikasikan hal ini cukup dengan mengganti
perintah
aDua[i][j] = (i+j);
menjadi
aDua[j][i] = (i+j);
Setelah modifikasi kecil ini dilakukan, maka isi setiap elemen array aDua sesuai urutan
pengisian nilainya adalah seperti ditunjukkan pada Tabel 20.
Elemen Nilai
aDua[0][0] 0
aDua[1][0] 1
aDua[2][0] 2
aDua[0][1] 0
Perhatikan Gambar 30 yang mengilustrasikan perbedaan isi elemen array aDua sesuai Tabel
19 dan Tabel 20.
Matriks biasanya ditulis dengan menggunakan kurung siku atau kurung kurawal.
Misalkan A adalah matriks ordo 3x3, maka matriks dapat ditulis sebagai:
a11 adalah elemen matrik A pada baris pertama kolom pertama, a12 adalah elemen matriks A
pada baris pertama kolom kedua, a21 adalah elemen matriks A pada baris kedua kolom pertama
dan seterusnya hingga a33 yang merupakan elemen baris ketiga kolom ketiga.
Seperti halnya sebuah bilangan atau variabel, operasi matematika seperti penjumlahan,
pengurangan dan perkalian juga dapat dilakukan pada matrik. Namun karena terdiri dari
banyak elemen maka untuk melakukan operasi matematika terdapat beberapa aturan yang
harus diikuti.
Misalkan kita memiliki dua buah matriks A dan B. Operasi penjumlahan matrik A dan
B baru bisa dilakukan jika memenuhi syarat matrik A dan B memiliki ordo yang sama. Artinya
jika A adalah matrik 3x3 maka B juga harus 3x3. Jika ordo matrik A berbeda dengan matrik
B maka operasi penjumlahan atau pengurangan tidak dapat dilakukan.
11 12 13 11 12 13 11 + 11 12 + 12 13 + 31
21 22 23 + 21 22 23 = 21 + 21 22 + 22 23 + 32
31 32 33 31 32 33 31 + 31 32 + 32 33 + 33
11 12 13 11 12 13 11 − 11 12 − 12 13 − 31
21 22 23 − 21 22 23 = 21 − 21 22 − 22 23 − 32
31 32 33 31 32 33 31 − 31 32 − 32 33 − 33
a 11 a 12 a 13
a a 22 a 23
21
a 31 a 32 a 33
Flowchart program untuk operasi penjumlahan matriks 3x3 ditunjukkan pada Gambar 33.
Input
C[ i ][ j ] = A[ i ][ j ] + B[ i ][ j ]
A[ i ][ j ]
j j
i i
Input Cetak
B[ i ][ j ] C[ i ][ j ]
j j
i i
A
End
Pada flowchart Gambar 33 terlihat bahwa terdapat empat buah nested loop, masing-masing
untuk input data matriks A, input data matriks B, operasi penjumlahan matriks A dan matriks
//Dalam C
#include <stdio.h>
main()
{
int i, j, A[3][3], B[3][3], C[3][3];
//Cetak matriks C
printf("\nHasil penjumlahan matriks A dan B:\n");
for(i=0; i<3; i++)
{
for(j=0;j<3; j++)
printf("%5d", C[i][j]);
printf("\n");
}
}
main()
{
int i, j, A[3][3], B[3][3], C[3][3];
//Cetak matriks C
cout<< "\nHasil penjumlahan matriks A dan B:" <<endl;
for(i=0; i<3; i++)
{
for(j=0;j<3; j++)
cout << C[i][j] << "\t";
Bentuk output dari program ini jika dijalankan dan data yang dimasukkan berturut-turut 3, 5,
6, 7, 8, 9, 3, 4, 6, 6, 8, 6, 4, 9, 9, 10, 12, 17 adalah:
Dalam bahasa C/C++ dimungkinkan untuk menggunakan array yang lebih besar dari
dua dimensi. Bentuk umum untuk mendeklarasikan array multi dimensi adalah:
Namun demikian array lebih dari tiga dimensi relatif jarang digunakan. Selain alasan
kompleksitas dalam penanganan indeksnya, jumlah memory komputer yang digunakan juga
menjadi pertimbangan. Sebagai contoh, array empat dimensi dengan tipe data integer dengan
ukuran [10][6][9][4] akan membutuhkan ruang memori sebesar 10*6*9*4*4 atau 4320 byte
jika diasumsikan tipe data integer menggunakan memory sebesar 4 byte. Jika array dengan
ukuran yang sama tetapi dengan tipe data double maka jumlah memory yang dibutuhkan
adalah 17280 byte, dengan asumsi bahwa tipe data double menggunakan 8 byte memory.
Ruang memory yang digunakan untuk array akan meningkat secara eksponensial menurut
jumlah dimensinya.