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
Contoh Array 1 Dimensi (1) 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}; printf("%d printf("%d printf("%f printf("%d printf("%c printf("%f return 0;
0 0 0 0 0.000000 0.000000 0 2293672 a b c 1.500000 2.600000
%d\n", blt_gb[0], blt_gb[1]); %d\n", kar_gb[0], kar_gb[1]); %f\n", pch_gb[0], pch_gb[1]); %d\n", blt[0], blt[1]); %c %c\n", kar[0], kar[1], kar[2]); %f\n", pch[0], pch[1]);
} Algoritma dan Pemrograman II
Array
4
Contoh Array 1 Dimensi (2) 10 20 0 0 int main() { a b 0 int blt[4] = {10, 20}; 1.500000 0 char kar[3] = {'a', 'b'}; float pch[2] = {1.5}; printf("%d %d %d %d\n", blt[0], blt[1], blt[2], blt[3]); 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]
10
20
0
Algoritma dan Pemrograman II
0
kar[0] kar[1] kar[2]
„a‟
„b‟
0
pch[0] pch[1]
1.5
0 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
Algoritma dan Pemrograman II
Sampah memori
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 10 20 30 40 50 maka harus berubah menjadi 20 30 40 50 10. Gunakan satu array saja. [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50
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? [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50
10 [0]
[1]
[2]
[3]
[4]
10 20 30 40 50
50 Algoritma dan Pemrograman II
[5]
Pindahkan 10, 50 akan tertimpa.
Pindahkan 50, 10 akan tertimpa.
[6]
Array
8
Latihan Array (1) : Rotasi Satu ke Kiri [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 10
Algoritma dan Pemrograman II
20 30 40 50
Array
9
Latihan Array (1) : Rotasi Satu ke Kiri [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 10
10
Algoritma dan Pemrograman II
20 30 40 50
20
30 40 50
Array
10
Latihan Array (1) : Rotasi Satu ke Kiri [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 10
20 30 40 50
10
20
10
20 30
Algoritma dan Pemrograman II
30 40 50 40 50
Array
11
Latihan Array (1) : Rotasi Satu ke Kiri [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 10
20 30 40 50
10
20
10
20 30
10
20 30 40
Algoritma dan Pemrograman II
30 40 50 40 50 50
Array
12
Latihan Array (1) : Rotasi Satu ke Kiri [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 10
20 30 40 50
10
20
10
20 30
10
20 30 40
10
20 30 40 50
Algoritma dan Pemrograman II
30 40 50 40 50 50
Array
13
Latihan Array (1) : Rotasi Satu ke Kiri [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 10
20 30 40 50
10
20
30 40 50
10
20 30
10
20 30 40
10
20 30 40 50
40 50 50
20 30 40 50 10 Algoritma dan Pemrograman II
Array
14
Latihan Array (1) : Rotasi Satu ke Kiri read (byk_data) i0 while (i < byk_data) read (bil [i]) ii+1 endwhile temp bil [0] i1 while (i < byk_data) bil [i – 1] bil [i] ii+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 ? 10 20 30 40 50 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. [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 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. [0]
[1]
[2]
[3]
[4]
[5]
[6]
10 20 30 40 50 60
60 50 40 30 20 10 Algoritma dan Pemrograman II
Array
18
Latihan Array (2) : Membalik isi array n=6
[0]
[1]
[2]
[3]
[4]
[5]
[6]
i
j
0
5
10 20 30 40 50 60 tukar
Algoritma dan Pemrograman II
Array
19
Latihan Array (2) : Membalik isi array n=6
[0]
[1]
[2]
[3]
[4]
[5]
[6]
i
j
0
5
1
4
10 20 30 40 50 60 tukar 60 20 30 40 50 10 tukar
Algoritma dan Pemrograman II
Array
20
Latihan Array (2) : Membalik isi array n=6
[0]
[1]
[2]
[3]
[4]
[5]
[6]
i
j
0
5
1
4
2
3
10 20 30 40 50 60 tukar 60 20 30 40 50 10 tukar 60 50 30 40 20 10 tukar
Algoritma dan Pemrograman II
Array
21
Latihan Array (2) : Membalik isi array n=6
[0]
[1]
[2]
[3]
[4]
[5]
[6]
i
j
0
5
1
4
2
3
3
2
10 20 30 40 50 60 tukar 60 20 30 40 50 10 tukar 60 50 30 40 20 10 tukar 60 50 40 30 20 10 stop
Algoritma dan Pemrograman II
Array
22
Latihan Array (2) : Membalik isi array void tukar(int *a, int *b) { int c = *a; jumlah data ? 5 *a = *b; bilangan ? 10 20 30 40 50 *b = c; 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 ? 10 20 30 40 50 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 Algoritma dan Pemrograman II
B[0][1] = 4 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 30 40 0
Algoritma dan Pemrograman II
0 0 0
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