ALGORITMA & PEMROGRAMAN II ARRAY I Gede Agus Suwartane Array 1
Array Koleksi data dimana setiap elemen memakai nama dan tipe yang sama dan setiap elemen diakses dengan membedakan indeks array-nya. Ciri array : Homogen : menampung sejumlah data yang setipe / sejenis Statis : banyaknya elemen yang ditampung tetap Masing-masing elemen data array diakses dengan menggunakan indeks Indeks dimulai dari 0 s/d n-1 (n : banyaknya data yang dapat ditampung) Menempati lokasi memori yang menyatu (contigious) Dikirim ke function selalu by reference, yang dikirim adalah alamat awal memori array Algoritma dan Pemrograman II Array 2
Deklarasi Array 1 Dimensi Contoh : int blt[4]; char kar[ ] = {'a', 'b', 'c'}; float pch[2] = {1.5, 2.6}; Algoritma dan Pemrograman II Array 3
int blt_gb[2]; char kar_gb[2]; float pch_gb[2]; int main() { int blt[4]; char kar[ ] = {'a', 'b', 'c'}; float pch[2] = {1.5, 2.6}; } Contoh Array 1 Dimensi (1) 0 0 0 0 0.000000 0.000000 0 2293672 a b c 1.500000 2.600000 printf("%d %d\n", blt_gb[0], blt_gb[1]); printf("%d %d\n", kar_gb[0], kar_gb[1]); printf("%f %f\n", pch_gb[0], pch_gb[1]); printf("%d %d\n", blt[0], blt[1]); printf("%c %c %c\n", kar[0], kar[1], kar[2]); printf("%f %f\n", pch[0], pch[1]); return 0; Algoritma dan Pemrograman II Array 4
Contoh Array 1 Dimensi (2) int main() { int blt[4] = {10, 20}; char kar[3] = {'a', 'b'}; float pch[2] = {1.5}; printf("%d %d %d %d\n", blt[0], blt[1], blt[2], blt[3]); } 10 20 0 0 a b 0 1.500000 0 printf("%c %c %d\n", kar[0], kar[1], kar[2]); printf("%f %d\n", pch[0], pch[1]); return 0; blt[0] blt[1] blt[2] blt[3] kar[0] kar[1] kar[2] pch[0] pch[1] 10 20 0 0 a b 0 1.5 0 Algoritma dan Pemrograman II Array 5
BATAS INDEKS LARIK Compiler tidak memeriksa batas indeks sebuah larik pada saat diakses. Pemrogram yang harus menjaganya. Program berikut ini tidak menyebabkan syntax error dan run-time error. int main() { int larik [3] = {10, 20, 30}, i; for (i = 0; i < 5; i++) printf("%d ", larik[i]); return 0; } 10 20 30 2293672 38 Sampah memori Algoritma dan Pemrograman II Array 6
Latihan Array (1) : Rotasi Satu ke Kiri Tulis program untuk mengentri sejumlah bilangan ke dalam sebuah array lalu rotasi bilangan-bilangan tersebut ke kiri satu posisi. Jika susunan elemen data array adalah maka harus berubah menjadi 20 30 40 50 10. Gunakan satu array saja. 20 30 40 50 10 Algoritma dan Pemrograman II Array 7
Latihan Array (1) : Rotasi Satu ke Kiri Data mana yang pertama dipindahkan? 10? 50? 10 Pindahkan 10, 50 akan tertimpa. 50 Pindahkan 50, 10 akan tertimpa. Algoritma dan Pemrograman II Array 8
Latihan Array (1) : Rotasi Satu ke Kiri Algoritma dan Pemrograman II Array 9
Latihan Array (1) : Rotasi Satu ke Kiri Algoritma dan Pemrograman II Array 10
Latihan Array (1) : Rotasi Satu ke Kiri Algoritma dan Pemrograman II Array 11
Latihan Array (1) : Rotasi Satu ke Kiri Algoritma dan Pemrograman II Array 12
Latihan Array (1) : Rotasi Satu ke Kiri Algoritma dan Pemrograman II Array 13
Latihan Array (1) : Rotasi Satu ke Kiri 20 30 40 50 10 Algoritma dan Pemrograman II Array 14
Latihan Array (1) : Rotasi Satu ke Kiri read (byk_data) i 0 while (i < byk_data) read (bil [i]) i i + 1 endwhile temp bil [0] i 1 while (i < byk_data) bil [i 1] bil [i] i i + 1 endwhile bil [byk_data 1] temp cetak bilangan Algoritma dan Pemrograman II Array 15
Latihan Array (1) : Rotasi Satu ke Kiri int main() { int bil[100], byk_data, i, temp; } printf("jumlah data? "); scanf("%d", &byk_data); printf("bilangan? "); for (i = 0; i < j_data; i++) scanf("%d", &bil[i]); temp = bil[0]; for (i = 1; i < byk_data; i++) bil[i - 1] = bil[i]; bil[byk_data - 1] = temp; for (i = 0; i < byk_data; i++) printf ("%d ", bil[i]); return 0; jumlah data? 7 bilangan? 60 70 20 30 40 50 60 70 10 Algoritma dan Pemrograman II Array 16
Latihan Array (2) : Membalik isi array Tulis program untuk membalik elemen data larik sehingga data pertama menjadi data terakhir, data kedua menjadi data kedua akhir dan seterusnya. Misalkan larik semula berisi elemen data 10 20 30 40 50 60 maka elemen data larik harus berubah menjadi 60 50 40 30 20 10. Gunakan satu larik saja. 60 60 50 40 30 20 10 Algoritma dan Pemrograman II Array 17
Latihan Array (2) : Membalik isi array data pertama menjadi data terakhir tukar data pertama dengan data terakhir tukar data[0] dengan data [n-1] data kedua menjadi data kedua akhir tukar data kedua dengan data kedua akhir tukar data[1] dengan data [n-2] dan seterusnya. 60 60 50 40 30 20 10 Algoritma dan Pemrograman II Array 18
Latihan Array (2) : Membalik isi array i j n = 6 tukar 60 0 5 Algoritma dan Pemrograman II Array 19
Latihan Array (2) : Membalik isi array i j n = 6 tukar 60 0 5 60 20 30 40 50 10 tukar 1 4 Algoritma dan Pemrograman II Array 20
Latihan Array (2) : Membalik isi array i j n = 6 tukar 60 0 5 60 20 30 40 50 10 tukar 1 4 60 50 30 40 20 10 tukar 2 3 Algoritma dan Pemrograman II Array 21
Latihan Array (2) : Membalik isi array i j n = 6 tukar 60 0 5 60 20 30 40 50 10 tukar 1 4 60 50 30 40 20 10 tukar 2 3 stop 60 50 40 30 20 10 3 2 Algoritma dan Pemrograman II Array 22
Latihan Array (2) : Membalik isi array void tukar(int *a, int *b) { int c = *a; *a = *b; *b = c; jumlah data? 5 bilangan? 50 40 30 20 10 } int main() { int bil[100], j_data, i, j; printf("jumlah data? "); scanf("%d", &j_data); printf("bilangan? "); for (i = 0; i < j_data; i++) scanf("%d", &bil[i]); for (i = 0, j = j_data - 1; i < j; i++, j--) tukar (&bil[i], &bil[j]); for (i = 0; i < j_data; i++) printf("%d ", bil[i]); return 0; } jumlah data? 6 bilangan? 60 60 50 40 30 20 10 Algoritma dan Pemrograman II Array 23
Array 2 Dimensi Seakan-akan disusun dalam baris dan kolom. Menggunakan dua indeks. type array_name [ row_size ] [ column_size ]; row_size menyatakan jumlah baris larik column_size menyatakan jumlah kolom larik Contoh : int B[2][3] = {{2, 4, 1}, {5, 3, 7}} 0 1 2 0 2 4 1 1 5 3 7 B[1][0] = 5 B[0][1] = 4 Algoritma dan Pemrograman II Array 24
Contoh Array 2 Dimensi (1) int main() { int B[2][3] = {1, 2, 3, 4, 5}; int i, j; for (i = 0; i < 2; i++){ for (j = 0; j < 3; j++) printf("%d ", B[i][j]); printf("\n"); } return 0; } 1 2 3 4 5 0 Algoritma dan Pemrograman II Array 25
Contoh Array 2 Dimensi (2) int main() { int i, j, larik [3][4] = { {10, 20, 30 }, {}, {30, 40} }; } for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) printf("%2d ", larik[i][j]); printf("\n"); } return 0; 10 20 30 0 0 0 0 0 30 40 0 0 Algoritma dan Pemrograman II Array 26
Array 3 Dimensi type array_name [ row] [ column ] [slice]; int a[4][2][3]; // 4 baris, 2 kolom, 3 lapis Algoritma dan Pemrograman II Array 27
Tugas Buatlah algoritma dan program dalam bahasa C/C++ untuk kasus sbb : 1. Menginput dan menampilkan data array 2 dimensi dimana banyaknya baris dan kolom serta isi array diinput oleh user 2. Menampilkan banyaknya bilangan genap kelipatan 5 yang ada pada suatu array 1 dimensi 3. Menentukan bilangan terbesar dan bilangan terkecil yang terdapat pada array 2 dimensi dengan ordo 5x7 4. Menjumlahkan 2 buah matriks 5. Mengalikan 2 buah matriks Algoritma dan Pemrograman II Array 28
Referensi / Sumber 1. Thompson Susabda Ngoen. Algoritma dan Struktur Data : Bahasa C. 2. Kristanto, Andri. 2003. Algoritma dan Pemrograman dengan C++. Penerbit Graha Ilmu : Yogyakarta 3. Munir, Rinaldi. 2001. Algoritma dan Pemrograman Buku II. Penerbit Informatika : Bandung Algoritma dan Pemrograman II Array 29