Data Array dalam C++
2010 Suyanto
BAB 4 ARRAY (LARIK) 1. Definisi Array Array merupakan kumpulan dari nilai-nilai data yang bertipe sama dalam urutan tertentu yang menggunakan nama yang sama. Letak atau posisi dari elemen array ditunjukkan oleh suatu index. Dilihat dari dimensinya array dapat dibagi menjadi Array dimensi satu, array dimensi dua dan array multi-dimensi. Array adalah suatu struktur data yang terdiri dari sejumlah elemen yang memiliki tipe data yang sama. Elemen-elemen array tersusun secara sekuensial dalam memori komputer. Array (Larik) adalah suatu himpunan hingga elemen, terurut dan homogen. Terurut artinya, elemen tersebut dapat diidentifikasikan sebagai elemen pertama, kedua, ketiga dan seterusnya hingga elemen ke-n. Sedang homogen artinya bahwa setiap elemen data dalam array mempunyai tipe yang sama. Posisi masing-masing komponen dalam larik dinyatakan sebagai nomor index. Array adalah kumpulan data bertipe sama yang menggunakan nama sama. Dengan menggunakan array, sejumlah variabel dapat memakai nama yang sama. Antara satu variabel dengan variabel lain di dalam array dibedakan berdasarkan subscript. Sebuah subscript berupa bilangan di dalam kurung siku atau biasa disebut dengan indek. Pemahaman lain mengenai array (larik) adalah sebagai berikut : Array adalah suatu tipe data terstuktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya bisa statis ataupun dinamis dan diberi suatu nama tertentu.
Praktikum Struktur Data dengan Turbo C++
Hal 1
Data Array dalam C++
2010 Suyanto
Elemen-elemen array tersusun secara berderet dan sekuensial di dalam memori sehingga memiliki alamat yang bersebelahan/berdampingan. Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi. Elemen-elemen array bertipe data sama tapi bisa bernilai sama atau berbeda-beda. Keuntungan struktur data Larik: 1. Paling mudah pengoperasiannya 2. Ekonomis dalam pemakaian memori, bila semua elemen terisi. 3. Akses ke setiap elemen memerlukan waktu yang sama. Kerugiannya: Memboroskan tempat jika banyak elemen yang tidak digunakan. 2. Pengaksesan Array Elemen-elemen array dapat diakses oleh program menggunakan suatu indeks tertentu. Pengaksesan elemen array dapat dilakukan berurutan atau random berdasarkan indeks tertentu secara langsung. Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan dengan mengeset nilai atau menampilkan nilai pada indeks yang dimaksud. Dalam C, tidak terdapat error handling terhadap batasan nilai indeks, apakah indeks tersebut berada di dalam indeks array yang sudah didefinisikan atau belum. Hal ini merupakan tanggung jawab programmer. Sehingga jika programmer mengakses indeks yang salah, maka nilai yang dihasilkan akan berbeda atau rusak karena mengakses alamat memori yang tidak sesuai. 3. Array Dimensi Satu Array dimensi satu tidak lain adalah kumpulan elemen-elemen identik yang tersusun dalam satu baris. Elemen-elemen tersebut memiliki tipe data yang sama, tetapi isi dari elemen tersebut boleh berbeda. Praktikum Struktur Data dengan Turbo C++
Hal 2
Data Array dalam C++
2010 Suyanto
Setiap elemen array dapat diakses melalui indeks. Indeks array secara default dimulai dari 0. Untuk mendeklarasikan Array dengan notasi sebagai berikut : tipe_data nama_array[ukuran];
Contoh : int bil[6]; maka dalam memori komputer akan terbentuk sederet barisan memori linier yang dialokasikan untuk variabel bilangan, yang digambarkan sebagai berikut : bil[0]
bil[1]
bil[2]
bil[3]
bil[4]
bil[5]
bil[6]
0
1
2
3
4
5
6
Bil index
Untuk memberi nilai terhadap variabel array, bisa dilakukan dengan beberapa cara, antara lain : 1. Pemberian nilai langsung serentak Contoh : int bil[6]={25,8,73,2,6,83}; 2. Pemberian nilai satu-satu berdasarkan nomor indexnya Contoh: bil[0]=25; bil[2]=73; bil[4]=6; bil[1]=8; bil[3]=2; bil[5]=83; Praktikum Struktur Data dengan Turbo C++
Hal 3
Data Array dalam C++
2010 Suyanto
3. Pemberian nilai melalui input data / perintah masukan Contoh : for(i=0;i<=5;i++) { printf(“Masukkan Bilangan ke %d : “,i);scanf(“%d”,&bil*i+); } Dengan dua cara pemberian nilai diatas ( 1 dan 2), maka bilangan-bilangan tersebut akan mengisi variabel bil sesuai index nya, dan dapat digambarkan sebagai berikut : bil[0]
bil[1]
bil[2]
bil[3]
bil[4]
bil[5]
bil
25
8
73
2
6
83
index
0
1
2
3
4
5
Sedangkan cara ketiga, nilai yang akan disimpan tergantung dari si user, jadi tidak bisa ditentukan sebelum program tersebut dijalankan. Penting untuk Diingat! String juga sebenarnya merupakan array yang bertipe karakter. Jumlah elemen array menyatakan jumlah string.
Praktikum Struktur Data dengan Turbo C++
Hal 4
Data Array dalam C++
2010 Suyanto
Contoh Program Array Dimensi Satu /* Program 4.1 Praktikum Struktur Data Materi : Type Data Array Kasus : Menentukan bilangan terbesar dari bilangan-bilangan yang tersimpan dalam variabel array. */ #include<stdio.h> #include
void main() { int bil[15] ; int x,Max ; clrscr(); //Memberi nilai variabel array bil[1]=17; bil[2]=23; bil[3]=20;bil[4]=10;bil[5]=15; bil[6]=5; bil[7]=33; bil[8]=95;bil[9]=8;bil[10]=88; // Menampilkan Bilangan dari var Array for(x=1;x<=10;x++) { printf("Bilangan Array ke %2d adalah : %2d\n",x,bil[x]); } //Menentukan Bilangan Terbesar Max=0; for(x=1;x<=10;x++) { if(bil[x] > Max) Max = bil[x]; } printf("\nBilangan Terbesarnya adalah : %d",Max); getch(); }
Tugas 4.1 : Buat Program Untuk Menentukan Bilangan Terkecil dari Angka yang Dimasukkan melalui piranti masukan! Praktikum Struktur Data dengan Turbo C++
Hal 5
Data Array dalam C++
2010 Suyanto
4. Array 2 Dimensi Jika array satu dimensi digambarkan sebagai barisan memori linier, maka array dua dimensi digambarkan sebagai sebuah tabel. Sebuah tabel mempunyai beberapa baris dan beberapa kolom yang mana isi elemennya bertipe sama, sehingga dapat digambarkan sebagai berikut:
0 1 2
0 10 23 12
1 55 33 45
2 22 34 56
3 12 54 76
4 23 56 76
Data diatas merupakan gambaran array dua dimensi dengan jumlah baris 3 dan jumlah kolom 5. Untuk mendeklarasikan Array dua dimensi dengan notasi sebagai berikut : tipe_data nama_array[m][n]; Dimana
m n
: jumlah baris dan : jumlah kolom
Penting untuk Diingat! Indek di Turbo C++ secara default dimulai dari 0 (nol). Cara mengakses array dua dimensi sama saja dengan array sati dimensi, yaitu dengan menuliskan kedua indeknya dalam kurung siku. Contoh : printf(“%d”,matrik[1][2]);
artinya perintah tersebut befungsi untuk mencetak matrik pada elemen baris ke-1 dan kolom ke-2. Contoh pemberian nilai dan pengkasesan array dua dimensi dapat dilihat pada contoh program berikut : Praktikum Struktur Data dengan Turbo C++
Hal 6
Data Array dalam C++
2010 Suyanto
/* Program 4.2 Praktikum Struktur Data Materi : Array Dua Dimensi Kasus : Operasi Matrik */ #include<stdio.h> #include void main() { int MatrikA[2][3],MatrikB[2][3],MatrikC[2][3]; int x,y; clrscr(); MatrikA[0][0]=1; MatrikA[0][1]=2; MatrikA[0][2]=3; MatrikA[1][0]=4; MatrikA[1][1]=5; MatrikA[1][2]=6; MatrikB[0][0]=11; MatrikB[0][1]=12; MatrikB[0][2]=13; MatrikB[1][0]=14; MatrikB[1][1]=15; MatrikB[1][2]=16; printf("Matrik A :\n"); for(x=0;x<=1;x++) // Baris Matrik { printf("| "); for(y=0;y<=2;y++) //Kolom Matrik { printf("%d ",MatrikA[x][y]); } Praktikum Struktur Data dengan Turbo C++
Hal 7
Data Array dalam C++
2010 Suyanto
printf("| \n"); } printf("\nMatrik B :\n"); for(x=0;x<=1;x++) // Baris Matrik { printf("| "); for(y=0;y<=2;y++) //Kolom Matrik { printf("%d ",MatrikB[x][y]); } printf("| \n");; } printf("\n\nPenambahan dari Matrik A & B = Matrik C\n"); for(x=0;x<=1;x++) // Baris Matrik *) for(y=0;y<=2;y++) // Kolom Matrik *) MatrikC[x][y] = MatrikA[x][y] + MatrikB[x][y]; printf("\nMatrik C :\n"); for(x=0;x<=1;x++) // Baris Matrik { printf("| "); for(y=0;y<=2;y++) //Kolom Matrik { printf("%d ",MatrikC[x][y]); } printf("| \n");; } getch(); }
Tugas 4.2 : Buat Program Penambahan & Perkalian Matrik Ukuran 2 x 3 yang nilai-nilainya didapat dari pemasukan data!
Praktikum Struktur Data dengan Turbo C++
Hal 8
Data Array dalam C++
2010 Suyanto
5. Panjang Array Panjang suatu larik/array dapat ditentukan dengan rumus sebagai berikut : 1. Array 1 Dimensi
L = UB – LB +1
2. Array 2 Dimensi
L = (UB1 – LB1 + 1) * (UB2 – LB2 + 1)
Adapun untuk menentukan Alamat Awal (Base Address ) dari penyimpanan data dalam storage dirumuskan sebagai berikut : 1. Array 1 Dimensi Dimisalkan array A(LB:UB), dengan Base Array = B, dan Size setiap cellnya = S
AlamatAwal(x) = B + S(x – LB) 2. Array 2 Dimensi Dimisalkan array A(LB1:UB1 , LB2:UB2), dengan Base Array = B, dan Size setiap cellnya = S, maka alamatnya dirumuskan sebagai berikut : AlamatAwal(i, j) = B+((i –LB1)*(UB2-LB2+1)*S)+((j – LB2)*S)
Praktikum Struktur Data dengan Turbo C++
Hal 9
Data Array dalam C++
2010 Suyanto
Dimana L = Length Array, UB = Upper Bound (Batas Atas) , LB = Lower Bound (Batas Bawah) dari array yang bersangkutan. /* Program 4.3 Praktikum Struktur Data Materi : Array Kasus : Program ini adalah program untuk menentukan Ukuran dan Alamat Awal dari penyimpanan data Array */ #include<stdio.h> #include //prototype fungsi sendiri void Input_Dimensi_Satu(); void Input_Dimensi_Dua(); void Input_Base_Location(); void Size_Dimensi_Satu(); void Size_Dimensi_Dua(); void Address_Dimensi_Satu(); void Address_Dimensi_Dua(); const Kol = 15; int LowerBound, UpperBound,LowerBound1, UpperBound1, LowerBound2, UpperBound2, Size, Dimensi, Pilih, BaseLoc, BaseAddress, Alamat, SizeElemen; //(* Program Utama Menu Array *) void main() { clrscr(); do { textbackground(0); clrscr(); textbackground(5); gotoxy(Kol, 4);printf("+------------------------------------+\n"); gotoxy(Kol, 5);printf("| MENU UTAMA DATA ARRAY |\n"); Praktikum Struktur Data dengan Turbo C++
Hal 10
Data Array dalam C++
2010 Suyanto
gotoxy(Kol, 6);printf("+------------------------------------+\n"); gotoxy(Kol, 7);printf("| 1. Size Array Satu Dimensi |\n"); gotoxy(Kol, 8);printf("| 2. Size Array Dua Dimensi |\n"); gotoxy(Kol, 9);printf("| 3. Address Awal Array Satu Dimensi|\n"); gotoxy(Kol,10);printf("| 4. Address Awal Array Dua Dimensi |\n"); gotoxy(Kol,11);printf("| 5. Selesai |\n"); gotoxy(Kol,12);printf("+------------------------------------+\n"); gotoxy(Kol,13);printf("| Pilihan Anda [1..5] : [ ] |\n"); gotoxy(Kol,14);printf("+------------------------------------+\n"); gotoxy(Kol+26,13);scanf("%d",&Pilih); textbackground(0); clrscr(); switch (Pilih) { case 1 : Size_Dimensi_Satu();break; //(* Panggil Prosedur *) case 2 : Size_Dimensi_Dua();break; //(* Panggil Prosedur *) case 3 : Address_Dimensi_Satu();break; //(* Panggil Prosedur *) case 4 : Address_Dimensi_Dua();break; //(* Panggil Prosedur *) } }while(Pilih<5); } //kumpulan fungsi-fungsi yang akan dipanggil void Input_Dimensi_Satu() { printf("\nMasukkan Batas Bawah printf("\nMasukkan Batas Atas } void Input_Dimensi_Dua() { printf("Masukkan Batas printf("Masukkan Batas printf("Masukkan Batas printf("Masukkan Batas }
Bawah 1 Atas 1 Bawah 2 Atas 2
Praktikum Struktur Data dengan Turbo C++
: ");scanf("%d",&LowerBound); : ");scanf("%d",&UpperBound);
: : : :
");scanf("%d",&LowerBound1); ");scanf("%d",&UpperBound1); ");scanf("%d",&LowerBound2); ");scanf("%d",&UpperBound2);
Hal 11
Data Array dalam C++
void Input_Base_Location() { printf("Masukkan Base Location printf("Masukkan Size Tiap Elemen } void Size_Dimensi_Satu() { Input_Dimensi_Satu();
2010 Suyanto
: ");scanf("%d",&BaseLoc); : ");scanf("%d",&SizeElemen);
// Panggil Prosedure
//Panjang/Size/Length Array Size = (UpperBound - LowerBound) + 1; printf("Size/Length Array : %d",Size); getch(); } void Size_Dimensi_Dua() { Input_Dimensi_Dua(); //(* Panggil Prosedur *) //(* Panjang/Size/Length Array *) Size =(UpperBound1-LowerBound1 + 1)*(UpperBound2 - LowerBound2 + 1); printf("\nSize/Length Array getch();
: %d",Size);
} void Address_Dimensi_Satu() { Input_Dimensi_Satu(); //(* Panggil Prosedure *) Input_Base_Location(); printf("Masukkan Alamat Awal yang dicari : ");scanf("%d",&Alamat); BaseAddress = BaseLoc + SizeElemen * (Alamat - LowerBound); printf("Base Address dari Alamat %d adalah : %d",Alamat,BaseAddress); getch(); }
Praktikum Struktur Data dengan Turbo C++
Hal 12
Data Array dalam C++
2010 Suyanto
void Address_Dimensi_Dua() { int Alamat1, Alamat2; Input_Dimensi_Dua(); //(* Panggil Prosedure *) Input_Base_Location(); printf("Masukkan Alamat Awal 1 yang dicari : ");scanf("%d",&Alamat1); printf("Masukkan Alamat Awal 2 yang dicari : ");scanf("%d",&Alamat2); BaseAddress = BaseLoc + ((Alamat1-LowerBound1)*(UpperBound2LowerBound2+1)* SizeElemen)+((Alamat2-LowerBound2)*SizeElemen); printf("Base Address dari Alamat (%d , %d) adalah : %d",Alamat1,Alamat2,BaseAddress); getch(); }
Praktikum Struktur Data dengan Turbo C++
Hal 13