50% menganggap dokumen ini bermanfaat (2 suara)
250 tayangan38 halaman

Pemrograman Dasar - 09 Array

Array merupakan variabel yang dapat menyimpan banyak nilai dengan indeks. Dokumen ini menjelaskan konsep dan implementasi array pada bahasa Pascal beserta contoh soal dan penyelesaiannya menggunakan array.

Diunggah oleh

Dwiki Farhan Hafizh
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
50% menganggap dokumen ini bermanfaat (2 suara)
250 tayangan38 halaman

Pemrograman Dasar - 09 Array

Array merupakan variabel yang dapat menyimpan banyak nilai dengan indeks. Dokumen ini menjelaskan konsep dan implementasi array pada bahasa Pascal beserta contoh soal dan penyelesaiannya menggunakan array.

Diunggah oleh

Dwiki Farhan Hafizh
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 38

Array

Tim Olimpiade Komputer Indonesia

1/38
Pendahuluan

Melalui dokumen ini, kalian akan:


• Memahami konsep array.
• Mengimplementasikan array pada bahasa Pascal.
• Menggunakan array untuk penyelesaian beberapa contoh
masalah.

2/38
Bagian 1

Konsep Array

3/38
Motivasi

• Pak Dengklek memiliki sebuah tumpukan berisi N kartu, yang


dipenuhi 1 ≤ N ≤ 100.
• Setiap kartu bertuliskan suatu bilangan bulat.
• Sekarang Pak Dengklek ingin tahu urutan angka-angka pada
kartu tersebut bila tumpukan kartu itu dibalik.
• Contoh: jika diberikan 5 kartu dengan angka-angka dari
atasnya [1, 5, 3, 20, 4], maka setelah dibalik urutannya
menjadi: [4, 20, 3, 5, 1].
• Bantulah Pak Dengklek menentukan urutan angka-angka
tersebut setelah tumpukan kartu dibalik!

4/38
Solusi?
• Sederhana, idenya adalah dengan menampung seluruh
bilangan terlebih dahulu, baru dicetak dalam urutan terbalik.
• Misalnya jika N selalu 3, kita bisa membuat 3 variabel
(misalnya a, b, c), lalu:
readln(a);
readln(b);
readln(c);

writeln(c);
writeln(b);
writeln(a);

• Sayangnya nilai N tidak tetap! Dibutuhkan suatu mekanisme


lain untuk menggunakan dan mengakses variabel!

5/38
Pengertian Array

Array
Variabel dengan satu nama, tetapi mengandung banyak nilai.
Akses nilai-nilainya dilakukan dengan indeks.

Perhatikan contoh berikut!


indeks 1 2 3 4 5 6 7 8 9 10
A 3 10 11 23 35 12 31 53 0 19
• A[1] = 3
• A[2] = 10
• A[5] = 35

6/38
Penjelasan

• Pada contoh sebelumnya, kita memiliki sebuah variabel


bernama A.
• A memiliki 10 nilai, yang masing-masing dapat diakses
dengan indeks.
• Untuk mengakses nilai A yang ke-x, digunakan A[x].
• Lebih jauh lagi, sebenarnya A[x] bisa dianggap sebagai sebuah
variabel yang berdiri sendiri.
• Konsep inilah yang disebut sebagai array!

7/38
Bagian 2

Implementasi Array Pada Pascal

8/38
Deklarasi
• Karena array merupakan variabel, diperlukan deklarasi seperti
variabel lainnya.
• Format deklarasi array adalah:
<nama>: array[<nilai awal>..<nilai akhir>] of <tipe>;

• Dengan:
• <nama> adalah nama dari array (aturan penamaan sama
seperti variabel biasanya)
• <nilai awal> dan <nilai akhir> adalah rentang indeks array
yang terdefinisi (boleh saja negatif).
• <tipe> adalah tipe data dari array.
• Tentu saja, tipe data di sini bisa berupa longint, double,
string, boolean atau suatu record.

9/38
Contoh Deklarasi
Berikut ini adalah contoh deklarasi array pada Pascal:
var
tabel: array[0..100] of boolean;
frekuensi: array[-1000..1000] of longint;

• Untuk contoh array tabel, hanya tabel[0], tabel[1], tabel[2],


..., tabel[100] yang terdefinisi.
• Mengakses nilai tabel[-1], tabel[-2], atau tabel[500] akan
menyebabkan runtime error. Sementara mengakses nilai
frekuensi[-1] atau frekuensi[-100] sama sekali tidak
bermasalah.
• Untuk itu, tentukan rentang indeks yang akan kalian gunakan
saat deklarasi dengan tepat (sesuai kebutuhan).

10/38
Array dan Variabel

• Karena suatu elemen dari array juga bisa dianggap variabel,


tentu saja kita bisa melakukan perintah readln padanya.
• Sebagai contoh, jika kita memiliki array bernama tabel yang
terdefinisi dari 1 sampai dengan 100, kita bisa melakukan:
readln(tabel[2]);

11/38
Array dan Variabel (lanj.)

• Jika diberikan 5 bilangan, dan kita perlu menyimpan


masing-masing bilangan di tabel, kita bisa melakukan:
readln(tabel[1]);
readln(tabel[2]);
readln(tabel[3]);
readln(tabel[4]);
readln(tabel[5]);

• Tentu saja hal ini sangat tidak efisien!


• Untungnya, kita sudah mempelajari sebuah teknik yang
sangat penting, yaitu perulangan.

12/38
Array dan Variabel (lanj.)

• Proses membaca 5 bilangan pada 5 baris kini bisa dilakukan


dengan cara:
for i := 1 to 5 do begin
readln(tabel[i]);
end;

• Untuk kasus umum, yaitu ketika diberikan N bilangan, cukup


ganti angka 5 dengan variabel N.
for i := 1 to N do begin
readln(tabel[i]);
end;

13/38
Array dan Variabel (lanj.)

• Demikian pula untuk pencetakan secara terbalik, kita bisa


menggunakan perulangan sebagai berikut:
for i := N downto 1 do begin
writeln(tabel[i]);
end;

• Sekarang masalah Pak Dengklek terpecahkan!

14/38
Contoh Solusi: balik.pas
Berikut contoh solusi lengkap untuk permasalahan motivasi:
var
N, i: longint;
tabel: array[1..100] of longint;

begin
readln(N);

for i := 1 to N do begin
readln(tabel[i]);
end;

for i := N downto 1 do begin


writeln(tabel[i]);
end;
end.

15/38
Array dan Memori

• Setiap elemen pada array membutuhkan memori, bergantung


pada tipe data yang digunakan.
• Total memori yang dibutuhkan untuk sebuah array sama
dengan banyaknya elemennya dikali ukuran memori satu
elemennya.
• Sebagai contoh, array dengan 100 elemen dan memiliki tipe
longint membutuhkan memori sebesar 100 × 4 byte = 400
byte,

16/38
Rentang Array

• Pada balik.pas, dideklarasikan array sebesar 100 elemen (dari


1 sampai dengan 100), padahal bisa jadi hanya digunakan
sebagian saja.
• Cara ini memang ”boros” memori, tetapi ingat bahwa kita
harus mendeklarasikan array tersebut di awal, yang mana
pada saat itu tidak diketahui berapa nilai N.
• Dengan demikian, cara yang paling mudah adalah
mendeklarasikannya sebesar nilai N maksimal yang mungkin.

17/38
Contoh Soal: Ujian Harian
Deskripsi:
• Pak Dengklek menyelenggarakan ujian harian setelah selesai
mengajarkan N ekor bebeknya mengenai konsep array.
• Setiap bebek ke-i mendapatkan nilai sebesar hi , yang
merupakan bilangan bulat.
• Untuk menentukan lulus atau tidaknya seekor bebek, nilai
bebek tersebut harus tidak kurang dari nilai rata-rata dari
seluruh bebek.
• Tentukan banyaknya bebek yang lulus ujian!
Batasan:
• 1 ≤ N ≤ 100
• 1 ≤ hi ≤ 100, untuk 1 ≤ i ≤ N

18/38
Contoh Soal: Ujian Harian (lanj.)

Format masukan:
• Baris pertama berisi sebuah bilangan bulat N.
• N baris berikutnya berisi nilai ujian bebek. Baris ke-i ini
merupakan hi .
Format keluaran:
• Sebuah baris yang menyatakan banyaknya bebek yang lulus
ujian.

19/38
Contoh Soal: Ujian Harian (lanj.)
Contoh masukan:
3
5
6
7

Contoh keluaran:
2

Penjelasan
Nilai rata-rata dari seluruh bebek adalah 6, dan terdapat 2 ekor
bebek yang nilainya tidak kurang dari 6.

20/38
Petunjuk

• Salah satu solusinya adalah melalui dua tahap:


1. Hitung rata-ratanya.
2. Hitung banyaknya bebek yang nilainya tidak kurang dari
rata-rata.
• Sebisa mungkin, hindari penggunaan floating-point!
• Ingat bahwa tipe data floating-point kurang bisa menyatakan
bilangan secara akurat; nilai 1/3*3 bisa jadi
0.999999999999999 atau 1.0000000000001.
• Pengoperasian tipe data integer oleh komputer jauh lebih
cepat daripada pengoperasian tipe data floating-point!

21/38
Contoh Solusi: lulus.pas

var
N, i, total, lulus: longint;
h: array[1..100] of longint;
begin
readln(N);
for i := 1 to N do begin
readln(h[i]);
end;

total := 0;
for i := 1 to N do begin
total := total + h[i];
end;

22/38
Contoh Solusi: lulus.pas (lanj.)

lulus := 0;
for i := 1 to N do begin
(* trik menghindari pembagian *)
if (h[i]*N >= total) then begin
lulus := lulus + 1;
end;
end;

writeln(lulus);
end.

23/38
Bagian 3

Penggunaan Array Lanjutan

24/38
Array Dua Dimensi

• Struktur array bisa juga membentuk sebuah tabel dua


dimensi.
• Perhatikan contoh deklarasi berikut:
matriks: array[1..2, 1..5] of longint;

• Kini kita mendapatkan variabel bernama matriks[a][b], yang


terdefinisi untuk 1 ≤ a ≤ 2 dan 1 ≤ b ≤ 5.

25/38
Array Dua Dimensi (lanj.)

• Akses suatu elemen dapat dilakukan dengan dua cara, yaitu


matriks[a][b] atau matriks[a,b].
• Tabel berikut menunjukkan struktur dari array matriks:
1 2 3 4 5
1
2
• Aturan perhitungan memori tetap sama; banyaknya elemen
dikali memori per elemennya.
Pada kasus ini: 2 × 5 × 4 byte = 40 byte.

26/38
Contoh Soal:
Cokelat Bebek
Deskripsi:
• Pak Ganesh datang bertamu ke peternakan bebek Pak
Dengklek.
• Pada peternakan bebek Pak Dengklek, terdapat kandang
bebek yang tersusun atas petak-petak N baris dan N kolom.
• Pak Dengklek memberi di,j gram cokelat* ke kandang di baris
ke-i dan kolom ke-j.
• Pak Ganesh memberi gi,j gram cokelat* ke kandang di baris
ke-i dan kolom ke-j.
• Tentukan berapa gram cokelat yang diperoleh setiap bebek di
kandangnya!
Batasan:
• 1 ≤ N ≤ 100
• 0 ≤ di,j , hi,j ≤ 10, untuk 1 ≤ i, j ≤ N
*Catatan: bebek-bebek suka cokelat!
27/38
Contoh Soal:
Cokelat Bebek (lanj.)
• Sebagai contoh, misalkan N = 3.
• Kemudian berikut adalah cokelat yang diberikan Pak
Dengklek (D) dan Pak Ganesh (G ):
   
1 3 0 2 1 7
D = 6 2 4 G = 0 0 1
2 1 5 1 1 2
• Maka total cokelat yang didapatkan setiap kandang adalah:
 
3 4 7
6 2 5
3 2 7

28/38
Contoh Soal:
Cokelat Bebek (lanj.)
Format masukan:
• Baris pertama berisi sebuah bilangan bulat N.
• N baris berikutnya berisi N bilangan. Bilangan di baris ke-i
dan kolom ke-j ini adalah di,j .
• N baris sisanya berisi N bilangan. Bilangan di baris ke-i dan
kolom ke-j ini adalah gi,j .
Format keluaran:
• N baris yang berisi N bilangan. Bilangan di baris ke-i dan
kolom ke-j ini adalah total makanan yang ada di kandang
baris ke-i dan kolom ke-j.

29/38
Contoh Soal:
Cokelat Bebek (lanj.)
Contoh masukan:
3
1 3 0
6 2 4
2 1 5
2 1 7
0 0 1
1 1 2

Contoh keluaran:
3 4 7
6 2 5
3 2 7

30/38
Petunjuk

• Salah satu cara yang mudah adalah membuat tiga array dua
dimensi, masing-masing untuk menampung makanan yang
diberikan Pak Dengklek (D), Pak Ganesh (G ), dan hasil
akhirnya (hasil).
• Tentu saja hubungannya adalah hasil[i][j] = D[i][j] + G [i][j],
untuk 1 ≤ i, j ≤ N.

31/38
Solusi: cokelat.pas

Pertama, mari kita deklarasikan variabel yang akan digunakan:


var
N: longint;
D, G, hasil: array[1..100, 1..100] of longint;
i, j: longint;

32/38
Solusi: cokelat.pas (lanj.)
Kemudian baca masukan sesuai dengan format yang diberikan:
begin
readln(N);
for i := 1 to N do begin
for j := 1 to N do begin
read(D[i][j]);
end;
readln;
end;

for i := 1 to N do begin
for j := 1 to N do begin
read(G[i][j]);
end;
readln;
end;

33/38
Solusi: cokelat.pas (lanj.)
Lakukan penjumlahan, lalu cetak hasilnya:
for i := 1 to N do begin
for j := 1 to N do begin
hasil[i][j] := D[i][j] + G[i][j];
end;
end;

for i := 1 to N do begin
for j := 1 to N do begin
write(hasil[i][j]);
if (j < N) then begin
write(’ ’);
end;
end;
writeln;
end;
end.

34/38
Solusi: cokelat 2.pas
Nilai array D dan G sebenarnya tidak perlu disimpan, kita bisa
menghemat memori dengan langsung menjumlahkannya.
var
N: longint;
temp: longint;
hasil: array[1..100, 1..100] of longint;
i, j: longint;

begin
readln(N);

for i := 1 to N do begin
for j := 1 to N do begin
read(temp);
hasil[i][j] := temp;
end;
readln;
end;
35/38
Solusi: cokelat 2.pas (lanj.)
for i := 1 to N do begin
for j := 1 to N do begin
read(temp);
hasil[i][j] := hasil[i][j] + temp;
end;
readln;
end;

for i := 1 to N do begin
for j := 1 to N do begin
write(hasil[i][j]);
if (j < N) then
write(’ ’);
end;
writeln;
end;
end.

36/38
Array Multidimensi

• Tidak hanya sampai dua dimensi, dimensi tiga, empat, atau


lebih pun bisa.
• Sebagai contoh:
data: array[1..2, 1..50, 1..50] of longint;

• Kita akan mendapatkan variabel data[i][j][k] yang terdefinisi


untuk 1 ≤ i ≤ 2, dan 1 ≤ j, k ≤ 50.
• Akses elemen juga bisa dilakukan dengan data[i, j, k].

37/38
Selanjutnya...

• Mempelajari tentang fungsi dan prosedur.

38/38

Anda mungkin juga menyukai