ARRAY Array atau larik adalah struktur data yang mengacu pada sebuah/sekumpulan elemen yang diakses melalui indeks. Dapat juga dikatakan bahwa array adalah wadah yang dapat menyimpan sejumlah nilai skalar. Array memiliki tipe terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe yang sama. Nilai-nilai data disebut elemen. Letak atau urutan dari suatu elemen array ditunjukkan oleh suatu index/subscript.Bahasa C elemen pertama dari suatu array ditunjukan dimulai dari index nol.Suatu array dapat berdimensi satu atau lebih. Karakteristik Array
Illustrasi Posisi Array Array di bawah ini mengandung 5 elemen DEKLARASI ARRAY Deklarasi Array menggunakan tanda[ ] (bracket) Bentuk umum Deklarasi Array 1 Dimensi: tipe_data nama_variable[n]; Ket: tipe_data : menyatakan tipe data yang digunakan nama_variable : nama array n : jumlah elemen atau ukuran array maximum Array merupakan struktur data statis, artinya jumlah elemen array harus sudah diketahui sebelum program dieksekusi. Jumlah elemen array tidakdapat diubah, ditambah, atau dikurangi selama pelaksanaan program. Mendefinisikan banyaknya elemen array (ukuran array) berarti memesan sejumlah tempat di memori. Komputer mengalokasikan sejumlah lokasi memori sebanyak elemen array yang bersangkutan. Mendefenisikan tipe elemen array berarti menetapkan tipe nilai yang dapat disimpan oleh array. Tipe elemen array dapat berupa tipe data sederhana (integer, real, char, boolean, string), tipe data array berbentuk (tipe data terstrukutur seperti record), atau bahkan tipe array yang lain. 3 Hal yang harus diketahui dalam mendeklarasikan array :
float Nil_Akhir[6]; • Jumlah elemen Array • Nama Array • Tipe data elemen Array int LARIK[25]; Contoh Deklarasi Array Dimensi Satu char huruf[9]; int umur[10]; int kondisi[2] = {0,1} int arr_dinamis[ ] = {1,2,3} Tanda
[ ] disebut juga “elemen yang ke- ...“. Misalnya kondisi[0] berarti array
kondisi elemen yang ke nol. Array yang sudah dipesan, misalnya 10 tempat tidak harus
diisi semuanya, bisa saja hanya diisi 5 elemen saja, baik secara berurutan
maupun tidak. Namun pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan
di memori tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan
terpesan dan dibiarkan kosong. Kita tidak dapat mendeklarasikan array dinamis
tanpa inisialisasi! NILAI ARRAY Mengisi nilai ke dalam elemen array Contoh: Nil_Akhir[3]=100 Jika akan diisi dengan suatu nilai Artinya Nil_Akhir[3]<----- 100 nama array index diisioleh //manual pengisian Nil_Akhir[0] = 25; Nil_Akhir[1] = 50; Nil_Akhir[2] = 100; … … dst //Pengisian dengan looping for (int c=0; c<25; C++) { cout<<“Nil_Akhir[“<<c<<“]= ”; cin>>Nil_Akhir[c]; } Contoh Program Array 1 Dimensipengisian dengan looping //mengisikan array proses pengulangan #include<iostream> using namespace std; int main() { //mendeklarasikan array A dengan 10 buah elemen //bertipe integer int A[10]; for(int C=0; C<10; C++) { cout <<"A["<<C<<"] = "; cin >> A[C]; } return 0; } Menampilkan nilai pada array #include<iostream> using namespace std; int main() { int A[5]; for(int C=0; C<5; C++) { cout << "A[" << C <<"] = "; cin >> A[C]; } cout <<'\n'; cout <<"menampilkan nilai yang telah dimasukkan adalah" << endl; for (int J=0; J<5; J++){ cout << "Nilai yang terdapat pada elemen ke- "; cout << J+1 <<": "<< A[J] << endl; } return 0; } INISIALISASI Inisialisasi adalah mengisikan nilai awal (default) pada elemen array sehingga jika elemen bersangkutan tidak diisi dengan nilai baru, maka nilai yang digunakan adalah nilai yang telah ada. Inisialisasi Array Dimensi 1 int X[3]; Artinya: int X 0 1 2 x[0], x[1], x[2] array X memiliki tipe data integer, mempunyai jumlah elemen sebanyak 3 elemen. Bentuk Umum Inisialisasi Array tipe_data nama_array[jumlah elemen]={nilai array1, nilai array2, …}; Contoh: int X[3]={5,3,7}; artinya array x bertipe integer, mempunyai 3 elemen yaitu x[0] bernilai 5 x[1] bernilai 3 x[2] bernilai 7 Program Inisialisasi nilai pada elemen Array #include<iostream> using namespace std; int main(){ //mendeklarasikan array dan //langsung menginisilaisasikan //nilainya int A[5] = {10, 20, 30, 40, 50}; //menampilkan nilai yang //terdapat pada elemen array cout<<"Sebelum dilakukan perubahan nilai" << endl; cout<<"A[0]= "<<A[0]<<endl; cout<<"A[1]= "<<A[1]<<endl; cout<<"A[2]= "<<A[2]<<endl; cout<<"A[3]= "<<A[3]<<endl; cout<<"A[4]= "<<A[4]<<endl; //mengubah elemen ke-1 dan ke-2 A[0]=12; A[1]=25; //menampilkan kembali nilai yang //terdapat pada //elemen array cout<<"setelah dilakukan perubahan nilai " << endl; cout<<" A[0]= "<<A[0]<<endl; cout<<"A[1]= "<<A[1]<<endl; cout<<"A[2]= "<<A[2]<<endl; cout<<"A[3]= "<<A[3]<<endl; cout<<"A[4]= "<<A[4]<<endl; return 0; } ARRAY DIMENSI SATU Pengaksesan Array Dimensi Satu Subscript/index array pada C++ selalu dimulai dari Nol(0) Bentuk Umum Pengaksesan: nama_array[Subscript/Index] A[4] {mengacu elemen ke 4 array A} NamaMHS[2] {mengacu elemen ke 2 dari array NamaMHS} A[i] {mengacu elemen ke –i dari larik A,asalkan nilai i sudah terdefinisikan} NamaMHS[i+1] {asalkan nilai i sudah terdefinisikan} Mengambil nilai di elemen Contoh: Mengambil nilai yang terdapat pada elemen ke 10 dan menampung nilai tersebut kedalam sebuah variabel yang bertipe int juga(misal x), x = LARIK[9]; elemen ke 10 nama array nilai yang terdapat pada elemen ke 10 Pemetaan (Mapping) Array DimensiSatuKe Storage @A[ i ] = B + ( i – 1 ) * L Ket: @A[ i ] : Posisi Array yang dicari B :Posisi awal array di memori I :Subscribe/index array yang dicari L :Ukuran/besarmemorisuatutipe data Perlu diketahui juga bahwa i – 1 akan menghasilkan bilangan desimal, maka bilangan desimal itu diubah menjadi bilangan heksadesimal. Contoh : Suatu array A dideklarasikan dalam bahasa C++ sebagai berikut; int A[5]; dengan alamatawal berada di 0011(H) dan ukuran besar memori tipe data integer tersebut 2. tentukan berapa alamat array A[3] ? Penyelesaian Dik: int A[5] B : 0011(H) L : 2 i : 3 Dit: A[3]? Jawab:
A[3] = 0011(H) + ( 3 – 1 ) * 2 = 0011(H) + 4(D) = 0011(H) + 4(H) = 0015(H) Pada contoh seperti di atas,
maka kita pun dapat mencari alamat array lainnya. ARRAY MULTIDIMENSI Array Dimensi Dua Array dua dimensi adalah array yang terdiri dari dua buah subscript, yaitu baris dan kolom. Bentuk array dimensi 2 dapat berupa matrik atau table. Berikut ini merupakan ilustrasi dari array dua dimensi. Deklarasi Array Dimensi 2 tipe_data nama_array[jumlah_elemen_baris][jumlah_elemen_kolom]; Contoh: int data_jual[3][3]; jumlah kolom jumlah baris nama array tipe data elemen array Data jual dengan tipe integer memiliki 3 baris dan 3 kolom Inisialisasi Array Dimensi 2 Bentuk Umum: tipe_data nama_array[jml_elemen_baris][jml_elemen_kolom]={nilai_array}; int data[2][4]; artinya:
int data Contoh: int data[2][4]={{1,3,5,7},{2,4,6,8}}; Artinya: data[1, 1] bernilai 1, data[1, 2] bernilai 3, data[1, 3] bernilai 5 dst… Bentuk Umum Pengaksesan Array Dimensi 2 Nama_array[index_baris, index_kolom]; Contoh: data[2, 2]<---- 100 artinya: pada baris ke 2 kolom ke 2 di isi dengan nilai100 #include <iostream> #include <conio.h> #include <iomanip> using namespace std; int main() { int baris,kolom; int i,j; int data[10][10]; cout<<"Jumlah Baris (1..10) : "; cin>>baris; cout <<"Jumlah Kolom (1..10) : "; cin>>kolom; for(i=0;i<=baris-1;i++) for(j=0;j<=kolom-1;j++) { cout << "Nilai Baris " << i+1 << ", Kolom " << j+1 << " : " ; cin >> data[i][j]; } cout << "Data Matriks : \n"; cout << endl; for (i=0;i<=baris-1;i++) { for(j=0;j<=kolom-1;j++) cout << setw(8) << data[i][j]; cout << "\n"; } return 0; } Pemetaan (Mapping) Array DimensiDuaKe Storage Terbagi dua cara pandang (representasi) yang berbeda : 1. Secara Kolom Per Kolom (Column Major Order/CMO) @M[i][j] = M[1, 1] + {(j - 1) * K + (i - 1)} * L 2. Secara Baris Per Baris (Row Major Order / RMO) @M[i][j] = M[1, 1] + {(i - 1) * N + (j - 1)} * L Keterangan : @ M[ i, j] = Posisi Array yang dicari, M[ 1,1 ] = Posisi alamat awal index I = Baris, j = kolom, L = Ukuran memory type data K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris Penggambaran secara logika / Cara Pandang Misal : int M[3][2]; (Array dengan 3 Baris & 2 Kolom) Berdasarkan Cara pandang : N= Banyaknya/ Jumlah elemen per baris = 2
ContohSoal Jika suatu variable x dengan struktur data array dimensi dua yang bertipe real dengan ukuran 4 kali 3 dengan alamat awal x[1, 1]=0011(H) dan ukuran type data dimemori adalah 4, tentukan berapa alamat array x[3, 2] berdasarkan cara pandang baris dan kolom. Jawab secara baris per baris Penyelesaian : Dik: real X[4][3]; L= 4 N = 3 M[1, 1]= 0011(H) Dit: Alamat array x[3, 2]=? Ø Secara Baris Per Baris (Row Major Oder / RMO) @M[i][j] = M[1, 1] + {(i - 1) * N + (j - 1)} * L X[3, 2] = 0011(H ) + {(3 – 1) * 3 + (2 – 1)} * 4 = 0011(H) + 28 (D ) 1C ( H) = 0011(H) + 1C ( H) = 002D(H ) i = Baris, j = kolom, L = Ukuran memory type data K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris M[ 1] [ 1 ] = Posisi alamat awal index Jawab secara kolom per kolom Penyelesaian : K = 4 Ø Secara Kolom Per Kolom (Coloumn Major Oder / CMO) @M[i][j] = M[1, 1] + {(j - 1) * K + (i - 1)} * L X[3, 2] = 0011(H) + {(2 – 1) * 4 + (3 – 1)} * 4 = 0011(H) + 24 (D) 18 (H) = 0011(H) + 18 (H) = 0029(H) M[ 0, 0 ] = Posisi alamat awal index I = Baris, j = kolom, L = Ukuran memory type data K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris
Array DimensiTiga (Three Dimensional Array) Deklarasi Type_Data Nama_Variabel [index1] [index2] [index3]; Misal : int A [3][4][2]; Penggambaran secara Logika :
Pemetaan (Mapping) Array Dimensi 3 Ke Storage Rumus : @M[m][n][p] = M[1, 1, 1] + {((m-1)*(jum.elemen2*jum.elemen3)) + ((n-1)*(jum.elemen3)) + ((p-1)* L Contoh Soal Suatu Array A dideklarasikan sebagai berikut : shortint A [3][4][2], dengan alamat awal index A[1, 1, 1] berada di 0011( H) dan ukuran type data shortint = 1 Tentukan berapa alamat array di A[2, 3, 2] ? Jawab Penyelesaian : 1. Tentukan jumlah elemen array A [3][4][2] = (3) * (4) * (2) = 24 2. @M[m][n][p] = M[1, 1, 1]+{((m-1)*(jum.elemen2*jum.elemen3))+((n-1)*(jum.elemen3)) + ((p-1)}* L A[2, 3, 2] = 0011(H ) + {((2–1) * 4 * 2) + ((3-1) * 2) + (2-1)} * 1 = 0011(H ) + {8 + 4 + 1 } * 1 = 0011(H) + {13} * 1 = 0011(H ) + 13 ( D) D = 0011(H ) + D (H ) = 001E( H) |