Array, Record, sorting : Elektro Unud (MSU)
Page 1 of 13
ARRAY Array : variabel berindeks (punya beberapa tempat, tergantung deklarasinya) Variabel : mempunyai hanya 1 tempat Deklarasi Array arrInt : array [1..10] of integer; Cara pengaksesan elemen array arrInt[1] := 2; artinya mengassign 2 ke array arrInt yang indeksnya 1. x := arrInt[‘C’]; artinya mengassign nilai array yang berindex ‘c’ ke variabel x. program cobaarray; var tab : array [1..5] of integer; i : integer; begin tab[1] := 5; tab[2] := 4; tab[3] := 3; tab[4] := 2; tab[5] := 1; write('Masukkan integer[1..5] '); read (i); if (i > 0) and (i <= 5) then writeln ('Isi tab[', i, '] : ', tab[i]) else writeln ('masukan tidak valid'); end. program conditional2; var arrHari : array [1..7] of string; idx : integer; begin arrHari[1] := ‘Minggu’; arrHari[2] := ‘Senin’; arrHari[3] := ‘Selasa’; arrHari[4] := ‘Rabu’; arrHari[5] := ‘Kamis’; arrHari[6] := ‘Jumat’; arrHari[7] := ‘Sabtu’; writeln(‘Masukkan indeks 1..7 : ’); readln(idx);
Array, Record, sorting : Elektro Unud (MSU)
Page 2 of 13
writeln (‘Hari ini hari ’ + arrHari[idx]); end. Var
Begin
Batas : real; I,J,Jumlah : word; Cari : array[1..100] of char; Batas : sqrt(100); Jumlah :=0; For I:= 2 to 100 do Begin If cari[i] <>’*’ then Begin Write(I:5); Jumlah :=jumlah +1; If I < batas then Begin J:=I; While J <100 do Begin J:=J+I; Cari[J] := ‘*’; End; End; End;
End; Writeln; Writeln (‘ditemukan sejumlah ‘,jumlah); End.
Array Dimensi 2 Æ mewakili suatu table atau matrik yaitu indeks pertama dapat menunjukkan baris dan indeks kedua menunjukkan kolom dari table/matrik. Bentuk deklarasi Nama-larik=array[tipe-indeks1] of array[tipe indeks2] of tipe larik Atau Nama-larik=array[tipe-indeks1, tipe indeks2] of tipe larik Contoh : Var
Array, Record, sorting : Elektro Unud (MSU)
Begin
Page 3 of 13
Table : array[1..3,1..2] of byte; I,J : byte; Tabel[1,1] : = 15; Tabel[1,2] : = 35; Tabel[2,1] : = 25; Tabel[2,2] : = 75; Tabel[3,1] : = 65; Tabel[3,2] : = 95; For I := 1 to 3 Do Begin For J := 1 to 2 Do Write (Tabel[I,J]:6); Writeln; End;
End. Alternatif Deklarasi Type Var
X = array [1..3,1..2] of byte; Tabel : x;
Latihan : Buatlah program untuk menampilkan hasil penjualan barang-barang kebutuhan pokok (beras, gandum, kedelai, terigu) untuk 3 tahun anggaran ( 2000,2001,2002) Contoh 2 Perkalian Matrik Uses Crt; Type Larik = array[1..25,1..25] of real; Var I,J,K : byte; M,N,L :byte; A,B,C : larik; Begin ClrScr; Write (‘Jumlah Baris Matrik 1’); readln(M); Write (‘Jumlah kolom Matrik 1/Baris Matrik 2’); readln(N); Write (‘Jumlah Kolom Matrik 2’); readln(L); Writeln; {input isi matrik 1} For I:= 1 to M Do Begin For J:= 1 to N Do
Array, Record, sorting : Elektro Unud (MSU)
Begin End;
Page 4 of 13
Write (‘Nilai [‘,I,’,’,J, ‘] ? ‘); readln (A[I,J]);
End; {input isi matrik 2} For I:= 1 to N Do Begin For J:= 1 to L Do Begin Write (‘Nilai [‘,I,’,’,J, ‘] ? ‘); readln (B[I,J]); End; End; {perkalian Matriks} For I:= 1 To M Do Begin For J:= 1 To N Do Begin C[I,J]:=0; For K :=1 To L Do C[I,J]:= C[I,J]+A[I,K]*B[K,J] ; End; End; {Mencetak Hasil Perkalian } Clrscr; Writeln; For I := 1 to M Do Begin For J := 1 To L Do Write (C[I,J] :9:2); Writeln; End; End. Latihan : kerjakan untuk penjumlahan Matriks RECORD Tipe data terstruktur untuk beberapa item data yang masing-masing dapat memiliki tipe data yang berbeda. Masing-masing item data disebut field. Misal Record langganan terdiri dari field kode_langganan, nama_langganan, telp,utang, dll. Contoh : Type
Lgn = record Kode : integer; Nama : string [35]; Alamat : string [45]
Array, Record, sorting : Elektro Unud (MSU)
Var
End;
Page 5 of 13
Utang : real ;
Langganan : lgn; Cara lain deklarasi Var langganan : record Kode : integer; Nama : string [35]; Alamat : string [45] Utang : real ; End; Memakai Tipe Data Record Pengenal-record.pengenal-field[.pengenal-field] Pengenal record Æ langganan Pengenal field Æ kode, nama, alamat, utang Jika Field nama akan diisi suatu nilai misal ’JONI’ maka ditulis dengan Langganan.nama := ’JONI’; Contoh : Type Hasil = Record Jarijari :real; Keliling : real; Luas : real ; End; Var Lingkaran : Hasil; Begin Write (’Jari-jari Lingkaran’); readln(Lingkaran.Jarijari); Lingkaran.keliling := 2*3.14*Lingkaran.Jarijari; Lingkaran.luas := 3.14 * sqr(Lingkaran.Jarijari); Writeln (’Keliling Lingkaran ’, Lingkaran.keliling); Writeln (’Luas Lingkaran ’, Lingkaran.luas); End. Statement WITH Æ penyederhanaan penulisan Begin With Lingkaran Do Begin Write (’Jari-jari Lingkaran’); readln(Jarijari); Keliling := 2*3.14*Jarijari;
Array, Record, sorting : Elektro Unud (MSU)
End;
Page 6 of 13
Writeln (’Keliling Lingkaran ’, keliling);
End. Contoh Implementasi Banyak Record Type DataMhs = Record Nomor : integer; Nama : string[20]; IP : real ; End; Var JumlahMhs.,I,J : byte; Mahasiswa : array [1..50] of DataMhs; Begin Write(’Jumlah mahasiswa:’); readln(JumlahMhs); For I:= 1 to JumlahMhs Do Begin With Mahasiswa [I] Do Begin Write (‘Nomor mahasiswa :‘); readln (Nomor); Write (‘Nama mahasiswa :‘); readln (Nama); Write (‘IP mahasiswa :‘); readln (IP); End; End; For I:= 1 to JumlahMhs Do Begin With Mahasiswa[I] Do Writeln(Nomor :5, nama:20, IP:11:2); End; End. PENGURUTAN DENGAN METODE BUBBLE SORT Proses Pengurutan • • •
Bubble Sort adalah nama yang diberikan pada prosedur untuk mengatur sekelompok bilangan dengan urutan dari kecil ke besar. Untuk mengurutkan bilangan diperlukan variabel array yang digunakan untuk menampung semua bilangan yang akan diurutkan. Proses pengurutan dilakukan dengan membandingkan semua elemen array satu persatu.
Dalam metode bubble sort, pengurutan demulai dengan membandingkan elemen pertama untuk mendapatkan angka terbesar. Lalu angka tersebut ditempatkan pada elemen terakhir. Bubble Sort tidak lain adalah pengulangan prosedur hingga bilangan – bilangan yang ada tersusun menurut urutan dari yang kecil ke yang besar. Contoh Buble Sort 6 5 8 3
Array, Record, sorting : Elektro Unud (MSU)
Page 7 of 13
Putara Pertama : 6
5
8
3
5
6
8
3
5
6
8
3
5
6
3
8
Pada akhir proses pertama ini, bilangan yang terbesar menempati tempat yang sesuai. Putaran Kedua : 5
6
3
8
5
6
3
8
5
3
6
8
5
3
6
8
Pada akhir proses kedua ini, bilangan terbesar kedua menempatkan tempat yang sesuai. Putaran Ketiga : 5
3
6
8
3
5
6
8
3
5
6
8
3
5
6
8
Bila proses ini dilanjutkan, tidak ada pertukaran tempat lagi bagi bilangan – bilangan tersebut, sebab bilangan tersebut telah selesai disusun. Lakukan tracing terhadap program di bawah ini, lakukan perbaikan jika ditemukan kesalahan Program Penggunaan_Array_Untuk_Sortir_Buble_Sort; Uses Crt; Var nil1 : Array[1..100] of Integer; n,i,j,dum : Integer; Begin ClrScr; Write('mau isi berapa data acak (integer) ='); readln(n); For i := 1 to n Do Begin Write('Data Ke ',i,':');Readln(nil1[i]); End; {* penyapuan proses} for i:= 1 to n-1 do begin for j:= i to n do begin if nil1[j]
Array, Record, sorting : Elektro Unud (MSU)
end.
Page 8 of 13
end; writeln; writeln('Hasil Sortir'); for i := 1 to n do write(nil1[i]:3); readln;
Perbaikan program (optimalisasi Æ pada perulangan ke- j (untuk suatu nilai i pada nilai j yang pertama) tidak perlu membandingkan dirinya sendiri for j:=( i+1) to n do begin if nil1[j]
Program Penggunaan_Array_Untuk_Sortir_Buble_Sort2; Uses Crt; Var nil1 : Array[1..100] of Integer; n,i,j,k,dum,terbesar : Integer; Begin ClrScr; Write('mau isi berapa data acak (integer) ='); readln(n); For i := 1 to n Do Begin Write('Data Ke ',i,':');Readln(nil1[i]); End;
Array, Record, sorting : Elektro Unud (MSU)
{* penyapuan proses} for i:= 1 to n do begin for j:= 1 to (n-1) do begin if nil1[j] > nil1[(j+1)] then begin dum:=nil1[j]; nil1[j]:=nil1[(j+1)]; nil1[(j+1)]:=dum; end; end; writeln('selesai sorting putaran ke',i); for k:=1 to n do write(nil1[k]:3); writeln;
end.
end; writeln; writeln('Hasil Sortir'); for i := 1 to n do write(nil1[i]:3); readln;
Page 9 of 13
Array, Record, sorting : Elektro Unud (MSU)
Page 10 of 13
SUB PROGRAM
A. Parameter Formal dan Aktual Parameter formal adalah parameter yang terdapat pada pendeklarasian judul subprogram, baik pada fungsi maupun prosedur. Contoh : Function Tambah ( A, B : real) : real; A dan B Æ parameter formal Parameter aktual adalah parameter pada pemanggilan fungsi atau prosedur. Contoh : Hasil := Tambah(Bil1, Bil2); Bil1 dan Bil2 Æ parameter aktual
B. Variabel Lokal dan Global Variabel lokal adalah variabel yang dideklarasikan di suatu fungsi atau prosedur, tetapi hanya dikenali oleh fungsi atau prosedur tersebut dan bagian pernyataan program utama tidak dapat mengakses variabel ini. Variabel global adalah variabel yang dideklarasikan pada bagian deklarasi program utama. Baik fungsi atau prosedur dapat mengakses variabel ini.
C. Fungsi Mempunyai sifat memberikan nilai pada saat dipanggil. Umumnya mempunyai argumen atau parameter yang ditulis di dalam tanda kurung. Deklarasinya adalah : FUNCTION nama_fungsi(daftar_parameter) : tipe; Bagian_deklarasi; Bagian_pernyataan; ♦ daftar_parameter Æ berisi sejumlah parameter, bentuknya : daf_parameter_1 : tipe_1; .... ; daf_parameter_n : tipe_n; ♦ tipe Æ tipe dari hasil fungsi ♦ Jika fungsi tidak memiliki parameter, tanda ( ) tidak perlu disertakan. D. Prosedur Mempunyai sifat tidak memberikan nilai saat dipanggil. Deklarasinya adalah : PROCEDURE nama(daftar_parameter); Bagian deklarasi; Bagian pernyataan; Pembuatan daftar_parameter, bagian deklarasi dan bagian pernyataan seperti pada pembuatan fungsi. E. Contoh 1. Program yang menggunakan fungsi sederhana Program Fungsi1; { ---------------------------------------------------- } { Contoh pembuatan fungsi yang sederhana } { --------------------------------------------------- }
Array, Record, sorting : Elektro Unud (MSU)
Page 11 of 13
Uses WinCrt; Var Bil1, Bil2, Hasil : integer; Function Tambah(A , B : integer) : integer; Begin Tambah := A + B; End; { Akhir dari fungsi Tambah } Begin { Program Utama } Write (‘Masukkan nilai bilangan pertama : ‘); Readln (Bil1); Write (‘Masukkan nilai bilangan kedua : ‘); Readln (Bil2); Hasil := Tambah(Bil1, Bil2); { Pemanggilan fungsi } Writeln(‘Hasil penjumlahan = ‘, Hasil); End. Jika program diatas dieksekusi, hasilnya adalah :
2. Program yang menggunakan fungsi sederhana yang melibatkan variabel lokal dan global dengan nama yang sama Program Fungsi2; { ---------------------------------------------------- } { Contoh pembuatan fungsi yang sederhana } { yang melibatkan variabel lokal dan global } { dengan nama yang sama } { -------------------------------------------------- } Uses WinCrt; Var Bil1, Bil2, Hasil : integer; { Variabel global } Function Tambah(A , B : integer) : integer; Var Hasil : integer; { Variabel lokal } Begin Hasil := A + B; Tambah := Hasil; End; { Akhir dari fungsi Tambah } Begin { Program Utama } Write (‘Masukkan nilai bilangan pertama : ‘); Readln (Bil1); Write (‘Masukkan nilai bilangan kedua : ‘); Readln (Bil2); Hasil := 23; Writeln (Tambah(Bil1, Bil2)); { Pemanggilan fungsi } Writeln (‘Hasil = ‘, Hasil); End.
Array, Record, sorting : Elektro Unud (MSU)
Page 12 of 13
Jika program diatas dieksekusi, hasilnya adalah :
3. Program yang menggunakan fungsi sederhana yang melibatkan variabel lokal dan global Program Fungsi3; { ---------------------------------------------------- } { Contoh pembuatan fungsi yang sederhana } { yang melibatkan variabel lokal dan global } { -------------------------------------------------- } Uses WinCrt; Var Bil1, Bil2, Hasil : integer; { Variabel global } Function Tambah(A , B : integer) : integer; Begin Hasil := A + B; Tambah := Hasil; End; { Akhir dari fungsi Tambah } Begin { Program Utama } Write (‘Masukkan nilai bilangan pertama : ‘); Readln (Bil1); Write (‘Masukkan nilai bilangan kedua : ‘); Readln (Bil2); Hasil := 23; Writeln (Tambah(Bil1, Bil2)); { Pemanggilan fungsi } Writeln (‘Hasil = ‘, Hasil); End. Jika program diatas dieksekusi, hasilnya adalah :
4. Program yang menggunakan sebuah prosedur Program Prosedur; Uses WinCrt; Var Celcius, Fahrenheit : Real;
12
Array, Record, sorting : Elektro Unud (MSU)
Page 13 of 13
Procedure CelKeFahren; {-------------------------------------} { Konversi dari Celcius ke Fahrenheit } {-------------------------------------} Begin Fahrenheit := ((9/5)*Celcius)+32; End; Begin Writeln('Konversi dari Celcius ke Fahrenheit'); Write('Celcius = '); Readln(Celcius); CelKeFahren; Writeln('Fahrenheit = ',Fahrenheit:0:2); End. Jika program diatas dieksekusi, hasilnya adalah :
13