ARRAY DAN RECORD Materi 6
ARRAY • Sebuah struktur data yang terdiri atas banyak variabel dengan tipe data sama, dimana masing-masing elemen variabel mempunyai nilai indeks. Setiap elemen array mampu untuk menyimpan satu jenis data (yaitu: variabel). • Cara Pendefinisian Contoh: type A = array [1..6] of integer;; 1
2
3
4
5
6
Secara logika pendefinisian array di atas merupakan sekumpulan kotak, dimana tiap kotak mempunyai nilai indeks integer 1, 2, 3, ...,6 tiap elemen array ditandai dengan: A[1], A[2], A[3], A[ A[4], A[5], A[6] untuk mengisi elemen array misal A[1]:=4;. 2
SIFAT ARRAY Array merupakan struktur data yang statis, statis yaitu jumlah elemen yang ada harus ditentukan terlebih dahulu dan tak bisa diubah saat program berjalan. Untuk menyatakan array dalam PASCAL kita harus terlebih dahulu Mendefinisikan jumlah elemen array . Contoh: const N=10; type A= array [1..N] of integer; 3
Array Satu Dimensi Type nama_array = ARRAY[bawah..atas] of tipe_data; var variabel_array : nama_array; Atau var variabel_array : ARRAY[bawah..atas] of tipe_data; #jika kita ingin membuat beberapa array dengan tipe/jenis yang sama, kita lebih baik jika mendeklarasikan dengan type selanjutnya dengan deklarasi var.
Contoh Program Array 1 dimensi program INT_ARRAY; uses wincrt; const N=10; type int_array = ARRAY [1..N] of integer; var bil : int_array; indeks : integer; BEGIN writeln('masukkan sepuluh bilangan integer.'); for indeks := 1 to 10 do begin readln(bil[indeks]); { loop untuk memasukkan elemen array } end; writeln('Isi dari array ini adalah'); { tampilkan setiap elemen } for indeks := 1 to 10 do begin writeln('bil[', indeks:2,'] adalah ',bil[indeks] ); End END. 4
Array Multidimensi
Dalam array multidimensi terdiri atas baris (row) dan kolom (column). Index pertama adalah baris dan yang kedua adalah kolom. Sintaks: • Type nama_array =ARRAY[bawah..atas, bawah..atas atas] of tipe_data; var variabel_array: nama_array; atau • SYNTAX var variabel_array: ARRAY [bawah..atas atas, bawah..atas] of tipe_data;
ARRAY [ 1..5, 1..5] A[1,1]
A[1,2]
A[2,1]
A[2,2]
A[3,1] A[4,1] A[5,1]
A[1,3]
A[1,4]
A[1,5] A[2,5]
A[3,3]
A[3,5] A[4,4]
A[4,5] A[5,5]
# Pernyataan berikut membentuk suatu array integer dengan nama bilangan , 10 x 10 elemen (100). type matriks = ARRAY [1..10, 1..10] of integer; var AKU: matriks; 5
Contoh Program Procedure ISI_MATRIK(AKU:matriks; m,n:integer);); var i,j: integer; {faktor pengulang} begin for i:=1 to m do begin for j:=1 to n do begin gotoxy(x+2i.y+2y); read(A[i,j]); end; readln ; {ini memungkinkan kita menulis tiap baris elemen} elemen end;
6
Memproses Array Misal diberikan deklarasi suatu array sebagai berikut : VARX : ARRAY [1..10] OF integer; Untuk keperluan membaca variabel X (input) kita tidak bisa melakukan seperti sebuah data bernilai tunggal, yaitu READ (X). (X) Sebab jika kita membaca/input suatu variabel berjenis array berarti kita membaca elemen-elemen array tersebut. Untuk itu diperlukan suatu bentuk perulangan seperti berikut : FOR I := 1 TO 10 DO READ ( X[1] ); Demikian pula halnya untuk keperluan memproses elemen-elemennya, harus ditunjukkan elemen yang akan diproses. 7
Contoh 1: Misal terdapat 10 bilangan integer positif yang berbeda disimpan di dalam suatu array B. Tentukan integer yang terbesar diantara 10 integer tersebut dengan suatu program Pascal. Penyelesaiannya : PROGRAM MAKS ; VAR B : ARRAY [1..10] OF integer; I,J,MAX : integer; Begin FOR I := 1 TO 10 DO READ(B[I});; MAX := B[1]; FOR J := 2 TO 10 DO IF MAX <= B[J] THEN MAX := B[I}; B[I} WRITE (MAX); End. 8
Contoh 2: Dari soal contoh 1 di atas, buat program yang menghitung rata-rata dari 10 bilangan tersebut. Penyelesaiannya : PROGRAM RATA_RATA; TYPE INDEKS = 1..10; VAR A : ARRAY [INDEKS] OF INTEGER; I : INTEGER; TOTAL : INTEGER; RATA2 : REAL; BEGIN Total := 0; FOR I := 1 TO 10 DO BEGIN READ (A[I]); TOTAL := TOTAL + A[I]; END; RATA2 := TOTAL / 10; WRITE (RATA2); END. 9
RECORD
• Record dapat dikatakan sebagai suatu kumpulan data item yang masing-masing mempunyai jenis data berbeda. • Data item yang merupakan elemen record biasanya disebut dengan FIELD. Bentuk Umum: TYPE identifier = RECORD Nama_field_1 : jenis; Nama_field_2 : jenis; …………………….. …………………….. nama_field_n : jenis; END; 10
Contoh : 1. VAR nilai : RECORD Nilai_1 : integer; Nilai_2 : integer; END; 2. TYPE date = RECORD Tanggal : 1..31; Bulan : 1…12; Tahun : 1900..2000; END; VAR event1,event2 : ARRAY [1..10] OF date;
3. TYPE account = RECORD cust_no : integer; cust_type : char; cust_balance : real; END END; VAR customer : account;
11
MEMPROSES VARIABEL BERJENIS RECORD Perhatikan deklarasi variabel berikut : TYPE nilai : RECORD Nilai1 : real; Nilai2 : real; END; VAR x,y : nilai; # Untuk memproses variabel x dan / atauy dilakukan dengan cara menyebutkan field designatornya, yg terdiri dari atas : Nama_record.nama_field Pada deklarasi diatas yang dimaksud dengan field designatornya adalah : x.nilai1 x.nilai2 y.nilai1 y.nilai2 Jadi jika ingin membaca variabel x atau y atau keduanya, maka bentuk statement-nya adalah : READ (x.nilai1, x.nilai2, y.nilai1, y.nilai2);
Selanjutnya, misal ingin dibuat program sederhana untuk menjumlahkan dua bilangan kompleks a dan b yang hasilnya disimpan di c. Secara aljabar penjumlahan dua bilangan kompleks adalah sebagai berikut : a = x1 + iy1 b = x2 + iy2 + c = (x1 + x2 ) + I(y1 + y2) Maka bentuk garis besar programnya adalah sebagai berikut : Program contoh ; Type bk = record Bag_nyata : integer; Bag_imajiner : integer; End; Var a,b,c : bk; Begin Read (a.bag_nyata, a.bag_imajiner, b.bag_nyata, b.bag_imajiner); c.bag_nyata := a.bag_nyata + b.bag_imajiner; c.bag_imajiner := a.bag_imajiner + b.bag_imajiner; writeln(c.bag_nyata,’ +’,’i’,c.bag_imajiner); End. 12
STATEMENT “WITH”
Selain cara yang telah disebutkan diatas, untuk memproses suatu record dapat digunakan statement WITH. Dengan statement ini penulisannya akan lebih sederhana. Bentuk Umum: WITH nama_record DO statement Perhatikan deklarasi dibawah ini : TYPE x = RECORD No : integer; Kode : char; Juml : integer; Harga : real; END; VAR p,q : x;
Untuk membaca variabel p dan q di samping dengan memanfaatkan statement WITH bentuknya menjadi : WITH p,q DO read (no, kode, juml, harga); Bandingkan jika digunakan cara sebelumnya : Read (p.no, p.kode, p.juml, p.harga, q.no, q.kode, q.juml, q.harga);
13
CONTOH : Pernyataan seperti : Data.npm :=‘22297566’ Data.Nama:=‘Abdul Kadir’ Data.Fakultas:=‘Teknik’ Dapat diganti dengan : WITH Data Do Begin npm :=‘22297566’ Nama:=‘Abdul Kadir’ Fakultas:=‘Teknik’ end;
Apabila di dalam pernyataan WITH terdapat lebih dari satu record, haruslah pada kedua record tersebut tidak ada field dengan nama yang sama. Sebagai contoh : Type BarangX BarangX=RECORD Batu Batu:integer; Kayu Kayu:real; END; BarangY BarangY=RECORD Batu Batu:string[10]; Kayu Kayu:char; END; Var brg_X brg_X:barangX; brg_Y brg_Y:barangY;
14
d) Fungsi standar INT Bentuk umum : INT(x:real):real; Digunakan untuk menghasilkan nilai integer dari x. hasil dari fungsi adalah tipe real dengan nilai yang berupa pembulatan ke bawah (nilai pecahan dibuang) dari nilai x. Contoh : Begin X:=9.99; Write(‘Nilai yang akan dibulatkan = ‘ ,X); Writeln(‘Nilai pembulatannya = ‘,Int(X):3:2); (X):3:2); End. Hasil : Nilai yang akan dibulatkan = 9.99 Nilai pembulatannya = 9.00 15
e) Fungsi standar FRAC Bentuk umum : FRAC(x:):real; Digunakan untuk mendapatkan nilai pecahan dari argumen x. Argumen x dapat bernilai real maupun integer dan hasil dari fungsi adalah real. Contoh : Begin X:=9.99; Write(‘Nilai X = ‘,X, ‘Nilai pecahannya = ‘,Frac(X):4:3); End. Hasilnya : Nilai X = 9.99 Nilai pecahannya = 0.990 16
f) Fungsi standar SQR Bentuk umum : SQR(x); Digunakan untuk menghitung nilai pangkat kuadrat dari argumen X. Argumen X dapat berbentuk tipe Real atau Integer dan hasil Fungsinya akan sama dengan tipe argumennya. Contoh : Program Misal5; Var X : Real; Begin Write(‘Nilai yang akan dikuadratkan ?’); Readln(X); Readln Writeln(‘Nilai kuadratnya =’, SQR(X):9:2); End. Output : Nilai yang akan dikuadratkan ? 5 Nilai kuadratnya = 25.00 17
Karena kedua variabel record brg_X dan brg_Y memiliki nama field yang sama, Jika misalnya kemudian dikenakan pernyataan : WITH brg_X, brg_Y Do Begin writeln(batu); writeln(kayu); End; dapat menyebabkan hasil tidak seperti yang diharapkan. diharapkan
18
Record yang Bervariasi • Suatu record dengan field yang bisa Bentuk umum Record Varian : berubah pada saat program berjalan. Hal TYPE namarecord = RECORD Nama_field_1 : jenis; yang perlu diperhatikan adalah bahwa Nama_field_2 : jenis; beberapa field yang berada dalam record …………………….. tidak pernah muncul dalam serempak, serempak nama_field_n : jenis; hanya akan ada satu field yang terpakai Case Tagfield: jenis Of dalam satu saat. nama_tagfield : (Nama_field:jenis); • Record varian akan memberikan fasilitas nama_tagfield: (Nama_field_1, Nama_field_2:jenis); untuk menentukan field yang diperlukan …………………….. pada saat program berjalan (RUN-TIME), TIME), nama_tagfield: (Nama_field_n:jenis); berdasarkan keperluannya. END;
19
Contoh : Type status=(T,P,J); gaji=RECORD napeg :string[25]; nopeg :string[10]; bagian :string[15]; CASE stat :status OF T:(gaji:integer); P:(gajiperjam,jmlmax:integer)); J:(upahperjam,lembur:integer integer); end;
20
Array tipe record type barang=RECORD namabrg:string[20]; jmlbrg:byte; hargabrg:real; total:real; end; var jual:array [1..10] of barang i,j:integer; tot1:real; Begin I:=1; write(‘Nama barang :’);readln(jual[i].nmbrg); Repeat write(‘Jumlah barang :’);readln(jual[i].jmlbrg); write(‘Harga barang :’);readln(jual[i].hrgbrg); jual[i].total:=jual[i].jmlbrg* jual[i]. jual[i].hrg.brg; inc (I); write(‘Nama barang :’);readln(jual[i].nmbrg); until (jual[i].nmbrg=‘0’) or (I=11);
dec(i); dec clrscr clrscr; writeln (‘------------------------------------------------------------’); writeln (‘No nama barang jumlah harga total’); writeln (‘------------------------------------------------------------’); for j:=1 to I do begin gotoxy gotoxy(1,j+3);write (j); gotoxy gotoxy(5,j+3);write(jual[i].nmbrg); gotoxy gotoxy(26,j+3);write(jual[i].jmlbrg:10); gotoxy gotoxy(37,j+3);write(jual[i].hrgbrg:10:2); gotoxy gotoxy(48,j+3);write(jual[i].total:10:2); tot tot1:=tot1 + jual[j].total ; end end; writeln (‘------------------------------------------------------------’); writeln Total :’,tot1:10:2’); writeln(‘ writeln (‘------------------------------------------------------------’); end end.
21
Array dalam record Type barang= RECORD nmbrg:string[20]; jmlbrg:array[1..3]of byte; hrgbrg:real; total:real; end; var jual:barang; tbarang, i:integer; Begin clrscr; write(‘Nama Barang :’);readln(jual.nmbrg); for i:=1to 3 do otal Harga Barang = ‘, jual.total:10:2); end.
begin write(‘Jumlah barang ’,I,’ : ’);readln(jual.jmlbrg[i]); tbarang:=tbarang+jual.jmlbrg[i]; end; write(‘Harga barang :’);readln(jual.hrgbrg); jual.total:=tbarang*jual.hrgbrg; writeln(‘Total Harga Barang = ‘, jual.total:10:2); end. 22
SET (HIMPUNAN)
Set adalah kumpulan dari nilai-nilai yang memiliki kesamaan sifat, yaitu tipe data yang sama dan urutan penulisannya tidak diperhatikan. diperhatikan Setiap obyek dalam himpunan disebut dengan anggota atau elemen himpunan. himpunan Contoh : 1. Huruf vokal dalam alfabet 2. kendaraan bermotor 3. binatang menyusui 4. bilangan genap 1 sampai 100 5. dan sebagainya Set termasuk ke dalam tipe data terstruktur, terstruktur terdiri dari sejumlah elemen yang bertipe sama dan harus bertipe data ordinal yang memiliki nilai terletak antara 0 sampai 255. Berbeda dengan tipe data array, tipe data SET tidak mengenal elemen pertama, elemen kedua dan seterusnya. Pada tipe data SET tidak terdapat elemen yang bernilai sama. 23
Deklarasi SET (Himpunan) ( Dapat dideklarasikan dalam deklarasi tipe data : Type variabel_set = SET OF tipe_data;; Dapat pula dideklarasikan dalam deklarasi var data : Var variabel_set = SET OF tipe_data;
24
Contoh : Type kata = set of char; {tipe dasar} huruf besar =‘A’..’Z’; {subrange} Perintah = set of hurufbesar ; Hari = (senin,selasa,rabu,kamis,jumat,sabtu,minggu senin,selasa,rabu,kamis,jumat,sabtu,minggu); {enumerasi} Hari2 = set of Hari; Pilihan = set of 1..7 {subrange dalam bentuk bilangan}; bilangan Var hurufkecil :set of‘a’..’z’; kapital : hurufbesar; hariseminggu : hari2; Kalimat : kata; Dalam keadaan awal, suatu variabel yang bertipe data SET belum terisi. Variabel tersebut merupakan suatu variabel kosong, dinyatakan dengan tanda[ ]. 25
Contoh program memberikan nilai untuk tipe data SET : Program SET1; type Hari = (senin,selasa,rabu,kamis,jumat,sabtu,minggu senin,selasa,rabu,kamis,jumat,sabtu,minggu); {enumerasi} Hari2 = set of Hari; var hariseminggu:hari2; begin hariseminggu:=[selasa, kamis,sabtu]; end.
26
Operasi SET (Himpunan) (
1. Operasi Penjumlahan Disebut juga operasi penggabungan (UNION), Operatornya (+). Contoh : A:= [‘B’,’F’,’J’,’L’]; A:= A + [‘a’,’B’,’b’,’c’,’d’,’e’,’f’,’j’,’k’,’l’];
maka nilai A sekarang adalah [‘B’,’F’,’J’,’L’,‘a’,’b’,’c’,’d’,’e’,’f’,’j’,’k’,’l’] Maka nilai W adalah [1,2,3]
2. Operasi Pengurangan Disebut juga operasi selisih SET, operatornya (-). Misal : SET1 - SET2, menghasilkan elemen yang merupakan anggota SET1 yang bukan anggota SET2. Contoh : A:=[1,2,3,4,5]; B:=[4,5,6,7]; W:=A-B; 27 Maka nilai W adalah [1,2,3]
3. Operasi Perkalian Disebut juga operasi Intersection (irisan), operatornya (*). Misal : SET1 - SET2, menghasilkan elemen yang merupakan anggota SET1 dan sekaligus merupakan anggota SET2. Contoh : 2. D:=[1,2,3,4,5]; 1. A:=[1,2,3,4,5]; E:=[6,7,8,9,10]; B:=[1,3,5,6,7]; F:=A*B; C:=A*B; Maka nilai F adalah [ ] Maka nilai C adalah [1,3,5] 28
Perbandingan dalam SET (Himpunan)
Contoh : 1. [3,4,5]=[4,5,3] hasil TRUE 2. [c,d]=[d,g,c] hasil FALSE 3. [2,4]< >[2,3] hasil TRUE 4. f in [‘a’..’z’] hasil TRUE
5. [2,1] < = [1,2,3] hasil TRUE 6. [5,6,7] > = [7,6] hasil TRUE 7. 3 in [4,5,3,2] hasil TRUE 8. [2,1] > = [1,2] hasil TRUE
29
Contoh Program Perbandingan SET
Program Set1; Uses crt; Type kbil=set of byte; var kbil1,kabil2:kabil; a,b:byte; begin clrscr; write(‘Tentukan batas bawah :’);readln(a); {Input Himpunan Pertama} write(‘Tentukan batas Atas:’);readln(b); Kbil1:=[a..b]; write(‘Tentukan batas bawah :’);readln(a); {Input Himpunan Kedua} write(‘Tentukan batas Atas:’);readln(b); Kbil2:=[a..b]; if kbil1= kbil2 then writeln(‘Himpunan 1 sama dengan Himpunan 2’); if kbil1 < > kbil2 then writeln(‘Himpunan 1 tidak sama dengan Himpunan 2’); if kbil1< = kbil2 then writeln(‘Himpunan 1 anggota dari Himpunan 2’); if kbil1> = kbil2 then writeln(‘Himpunan 1 mempunyai anggota Himpunan 2’); end.
30
Contoh Program Operator IN
Program set2; uses crt; type karakter= set of char; var kapital : karakter; hidup : karakter; jumlahh,jumlahk : integer; kalimat : string; i:integer; begin clrscr; kapital:=[‘A’..’Z’]; hidup:=[‘A’,’E’,’I’,’O’,’U’,’a’,’e’,’i’,’o’,’u’]; jumlahh:=0;
jumlahk:=0; writeln(‘Masukkan suatu kalimat :’); readlne (kalimat); for I:=1 to length(kalimat) do begin if kalimat[i] in kapital then inc(jumlahk); if kalimat[i] in hidup then inc(jumlahh); end; writeln(‘Jumlah kapital =‘,jumlahk); writeln(‘Jumlah huruf hidup =‘,jumlahh); end.
31
Aplikasi Penggunaan SET dalam Program
Program bacakarakter; uses crt; type karakter=set of char; var pilihan:char; function bacakar(pesan:string;pilihansah:karakter):char; ):char; var ch:char; begin write(pesan); repeat ch:=upcase(readkey); until(ch in pilihansah); writeln(ch); bacakar:=ch; end;
{Program utama} Begin clrscr; repeat Pilihan:=bacakar(‘Anda :(T)ulis Halo, (B)el,(S)elesai’,[‘T’,’B’,’S’]); Case pilihan of ‘T’:writeln(‘Hallo...’); ‘B’:writeln(‘bel’+ #7); ‘S’:writeln(‘Terimakasih’); end; Until pilihan =‘S’; end.
32
TERIMAKASIH Lilis Setyowati
33