diktat Algoritma Pemroraman II

(1)

DIKTAT

ALGORITMA PEMROGRAMAN II

DISUSUN UNTUK MENUNJANG

PERKULIAHAN ALGORITMA PEMROGRAMAN II

Disusun oleh

Yuli Praptomo PHS, S.Kom.

STMIK EL RAHMA YOGYAKARTA

2009


(2)

Modul 1

ARRAY

DEFINISI

Array atau Larik adalah :

Type data terstruktur yang terdiri dari sejumlah elemen dimana setiap elemennya mempunyai tipe data yang sama atau sejenis (setype).

Larik dimanipulasikan dengan memanfaatkan index (subscript) dari tiap elemen larik tersebut. Array Dimensi Satu

Array bisa dideklarasikan pada bagian deklarasi type atau bagian deklarasi Var. Bentuk 1 :

Var

NamaArray : Array[TypeIndex] Of TypeLarik; Bentuk 2 :

Type

NamaType = Arrat[TypeIndex] Of Type Larik; Var

NamaVarArray : NamaType; NamaLarik : Nama Variable bertype Array.

Type Larik : Type datanya. Type larik dapat berupa integer, real, char, string atau record.

TypeIndex : data bertype ordinal seperti char, byte, integer atau enumerated. Type Index dapat berupa NamaType atau Sub Range Langsung.

Contoh deklarasi : Type

Daftar_nilai : array [1..5] of integer; Var

Nilai : daftar_nilai;

Atau dapat ditulis pada bagian var saja : Var

Nilai : array [1..5] of integer; Dari deklarasi diatas mempunyai arti :

Variable array yang bernama Nilai mempunyai 5 buah elemen (dengan indeks 1 sampai 5) dan masing-masing elemen bertipe integer.

Dari deklarasi Array diatas dapat direpresentasikan didalam memori sebagai berikut :

… … … … …

1 2 3 4 5

Nilai

Elemen array yang masing-masing harus bertipe integer, sesuai tipe yang dideklarasikan


(3)

Tiap kotak disebut dengan elemen array, berfungsi seperti halnya variable, dapat diisi dengan sebuah data dari type tertentu sesuai yang dideklarasikan. Tiap kotak mempunyai ‘nomor’ / ‘alamat’ yang disebut dengan index yang berfungsi untuk memberi identitas kotak tersebut.

Cara mengakses elemen array dimensi satu

Elemen array bisa diakses dengan cara menyebutkan nama array diikuti nilai indeksnya didalam kurung siku.

Nilai [1], ini berarti mengakses nilai elemen pertama. Untuk memberikan nilai ke array, bisa menggunakan 2 cara, yaitu : Dengan operator penugasan (:=)

Nilai [1] := 0 , elemen pertama dari nilai diberi nilai 70 Dengan statemen Read/readln

Read (nilai[1]); Read (nilai[2]);

Jika menggunakan perintah ini banyaknya perintah yang diberikan harus sebanyak elemen yang dideklarasikan pada deklarasi array, sehingga bias digunakan perintah perulangan seperti berikut :

For I := 1 to 5 do Begin

Readln(nilai[I]); End;

Untuk mengambil nilai/membaca elemen dari array dimensi satu digunakan statemen Write Write (nilai[1]);

Untuk mempersingkat program dipergunakan perintah berikut : For I := 1 to 5 do

Begin

Writeln(nilai[I]); End;

Contoh 1 :

program 1; uses crt; const

max_test = 4; type

data_nilai = array[1..max_test] of integer; var

i,jum : integer; rata : real;

nilai_test : data_nilai; begin

clrscr;

{memasukkan data}


(4)

begin

write ('masukkan nilai test ke ',i,' = '); readln (nilai_test[i]);

end;

{menhitung total nilai dan rata-rata} jum := 0;

for i := 1 to max_test do begin

jum := jum + nilai_test[i]; end;

rata := jum / max_test; {mencetak}

writeln ('Total nilai = ',jum); writeln ('Rata-rata nilai = ',rata:5:2); readln;

end.

Array Dimensi Dua

Array berdimensi dua mempunyai bentuk table yang menpunyai 2 indeks, baris dan kolom Format :

Deklarasi array dimensi dua bisa ditempatkan pada bagian type ataupun Var seperti halnya array dimensi satu.

Bentuk 1: Var

NamaLarik : Array[TipeIndexBaris,TypeIndexCol] Of TypeLarik; Bentuk 2 :

Type

NamaType = Array[TipeIndexBaris,TypeIndexCol] Of TypeLarik; Var

NamaVarArray : NamaType;

Indeks1 biasa disebut indeks baris yang menunjukkan banyaknya baris, sedang indeks2 disebut indeks kolom yang menunjukkan banyaknya kolom.

Contoh : Var

Nilai_mhs : array [1..100,1..3] of integer;

Dari deklarasi array 2 dimensi diatas dapat direpresentasikan dalam memori seperti berikut : Kolom 1 Kolom 2 Kolom 3

Baris 1 Baris 2 Baris 3


(5)

Baris 100

Baris menunjukkan banyaknya mahasiswa, sedang kolom menunjukkan banyaknya nilai Cara mengakses elemen array dimensi dua

Untuk mengakses elemen pada array dimensi 2 bisa disebutkan nama array diikuti dengan indeks baris dan indeks kolomnya.

Nama array [indeks_baris, indeks_kolom] Untuk memberi nilai ke array, bisa dengan dua cara

Dengan operator penugasan (:=) Nilai_mhs[4, 1] := 80;

Berarti memberikan nilai 80 langsung kedalam elemen array baris ke 4 kolom ke 1 Dengan pernyataan masukan (read/readln)

Read (Nilai_mhs [4, 1]);

Berarti memberikan nilai kedalam elemen array baris ke 4 kolom ke 1 melalui keyboard

Banyaknya perintah yang diberikan dengan statemen diatas sesuai dengan banyaknya elemen array, yaitu jumlah baris dikalikan jumlah kolomnya. Untuk mempersingkat perintah bisa dipergunakan perintah perulangan, untuk deklarasi diatas bisa dipergunakan perintah berikut :

For I := 1 to 100 do Begin

For J := 1 to 3 do begin

Readln(Nilai_mhs[I,J); End;

End;

Dengan variable I mewakili baris dan variable J mewakili kolom.

Untuk mengambil atau mencetak nilai dari array, digunakan pernyataan keluaran (write/writeln) Write (Nilai_mhs [4, 1]);

Untuk mempersingkat perintah bisa dipergunakan perintah perulangan, untuk deklarasi diatas bisa dipergunakan perintah berikut :

For I := 1 to 100 do Begin

For J := 1 to 3 do begin

Writeln(Nilai_mhs[I,J); End;


(6)

End;

Dengan variable I mewakili baris dan variable J mewakili kolom. Contoh 2:

Program lat2; Uses Crt;

Const N = 10; Var

Nim : Array[1..N] Of integer; Nama : Array[1..N] Of String[20]; IP : Array[1..N] Of real;

I : Integer; Begin

Clrscr; {Baca Data}

Writeln(‘Masukkan’,N,‘buah data’); For I := 1 to N Do

Begin

Write(‘No.Mhs : ’);Readln(NIM[I]); Write(‘Nama Mhs : ’);Readln(Nama[I]); Write(‘IP Mhs : ’);Readln(IP[I]); End;

{Cetak Hasil}

Writeln(‘Daftar Nilai’);

Writeln(‘No NIM NAMA IP’); For I := 1 to N Do

Writeln(‘I:2, Nim[I]:10, Nama[I]:15, IP[I]:6:2); Readln

End.

Contoh 3 :

program lat3; uses crt; type

data_nilai = array[1..100,1..3] of integer; var

max_siswa,i,j,jum : integer; rata : real;

nilai_test : data_nilai; begin

clrscr;

{memasukkan data}

write ('masukkan jumlah siswa = '); readln (max_siswa);

for i := 1 to max_siswa do begin


(7)

writeln ('data Mahasiswa ke ',i,' = '); for j := 1 to 3 do

begin

write ('masukkan nilai test ke ',i,' = '); readln (nilai_test[i,j]);

end; end;

{menhitung total nilai dan rata-rata} clrscr;

writeln ('DAFTAR NILAI'); write ('No ');

for i := 1 to 3 do

write ('nilai ke-',i,' '); writeln ('rata-rata'); writeln;

for i := 1 to max_siswa do begin

jum := 0;

for j := 1 to 3 do

jum := jum + nilai_test[i,j]; rata:= jum / 3;

write (i:2); for j := 1 to 3 do

write (' ',nilai_test[i,j],'':7); writeln(rata:5:2);

end; readln; end.

Contoh 4 :

program lat4; uses crt; type

tabel = array[1..10,1..10] of integer; var

matrixA,matrixB,mat_kali,mat_plus : tabel; No_baris,baris,kolom : integer;

procedure baca (var mat :tabel; var no_baris : integer); var

i,j : integer; begin

for i := 1 to baris do begin

for j := 1 to kolom do begin

gotoxy((j-1)*5+1,No_baris); read(mat[i,j])

end;

no_baris :=no_baris + 1; writeln;

end; end;

procedure kali (var mat_kali :tabel; matA,matB : tabel); var

i,j,k : integer; begin

for i := 1 to baris do for j := 1 to kolom do begin

mat_kali[i,j] := 0; for k := 1 to baris do

mat_kali[i,j] := mat_kali[i,j] + matA[i,k] * matB[k,j]; end;


(8)

end;

procedure plus (var mat_plus :tabel; matrixA,matrixB : tabel); var

i,j : integer; begin

for i := 1 to baris do begin

for j := 1 to kolom do begin

mat_plus[i,j] := matrixA[i,j] + matrixB[i,j]; end;

end; end;

procedure cetak (matrix : tabel); var

i,j : integer; begin

for i := 1 to baris do begin

for j := 1 to kolom do begin

write(matrix[i,j]:8); end;

writeln; end;

end; begin

repeat clrscr;

writeln ('perkalian dan penjumlahan matriks'); No_baris := 6;

write ('masukkan baris = '); readln(baris); write ('masukkan kolom = '); readln(kolom); if kolom <> baris then

begin

writeln ('banyaknya kolom harus sama dengan kolom'); write ('tekan enter untuk ulangi');readln;

end;

until kolom = baris; writeln('MATRIKS A '); baca(matrixA,No_baris); writeln;

writeln('MATRIKS B '); no_baris := 15;

baca(matrixB,No_baris);

kali(mat_kali,matrixA,matrixB); plus(mat_plus,matrixA,matrixB); clrscr;

writeln('hasil');writeln;

writeln('MATRIKS A =');writeln; cetak(matrixA);writeln;

writeln('MATRIKS B =');writeln; cetak(matrixB);writeln;

writeln('matrik A kali matriks B =');writeln; cetak(mat_kali);

writeln;writeln;

writeln('matriks A tambah matrik B =');writeln; writeln;

cetak(mat_plus); readln;readln; end.


(9)

Buat program untuk menghitung nilai huruf dari sejumlah mahasiswa yang diinputkan Input yang diminta :

No Nama Test1 Test2 Test3

Output yang diminta :

No Nama Test1 Test2 Test3 Total Rata Nilai huruf

Total = test1+ test 2 + test3 Rata = total / 3

Jika rata .>= 80 maka nilai huruf = A Jika rata .>= 70 maka nilai huruf = B Jika rata .>= 60 maka nilai huruf = C Jika rata .>= 50 maka nilai huruf = D Jika rata .< 50 maka nilai huruf = E

Gunakan array dimensi satu dan dimensi dua


(10)

MODUL 2

FUNGSI DAN PROCEDURE

Pemrograman dengan menggunakan konsep subprogram merupakan konsep yang paling bermanfaat dan produktif, dan penggunaan subprogram ini bisa mempertinggi derajad pemrograman terstruktur. Dalam pascal subprogram ini dikenal dengan istilah Procedure dan Function.

Modularisasi akan memberikan keuntungan :

 Untuk aktivitas yang harus dilakukan lebih dari satu kali, modul program cukup ditulis sekali saja, lalu modul tersebut bisa dipanggil dari bagian lain dalam program.

 Kemudahan menulis dan menemukan kesalahan program.

Di dalam Pascal terdapat dua jenis procedur dan fungsi, yaitu procedur dan fungsi bawaan (standard) yang sudah disediakan oleh pascal dan procedur dan fungsi yang diciptakan sendiri oleh pemrogram.

5.1. PROCEDURE DAN FUNGSI STANDARD 5.1.1. FUNGSI STANDARD

Fungsi adalah suatu routine yang terdefinisi, baik di definisikan oleh PASCAL (fungsi standard) maupun didefinisikan oleh pemakai (user define function). Fungsi dapat kita bedakan dari hasil fungsinya, yang dapat berupa String, Numeric atau Boolean. Berikut ini adalah fungsi-fungsi pustaka ynag sudah terdefinisi dalam PASCAL.

1. Fungsi Standard Aritmatika

Abs(x) : Menghasilkan nilai mutlak dari x, x real atau integer. Exp(x) : Menghasilkan ex, x real atau integer.

Ln(x) : Menghasilkan logaritma natural x. Int(x) : Menghasilkan nilai integer dari x, x real. Frac(x) : Menghasilkan bagian pecah dari x yang real.

Sqr(x) : Menghasilkan nilai kuadrat dari x, x real atau integer. Sqrt(x) : Menghasilkan akar kuadrat dari x, x real.

Sin(x) : Sinus x, x real. Cos(x) : Cosinus x, x real. ArcTan(x) : Arch Tg x.

Random(x) : Menghasilkan bilangan bulat acak dari 0 – x. 2. Fungsi Standard String

Copy(s,I,n) : Menyalin n buah character mulai dari posisi i dari string x. Pos(s1,s2) : Menghasilkan posisi suatu string s1 dalam string s2. Length(s) : Menghasilkan panjang suatu string s.

Readkey : Menghasilkan satu character yang diketik dari keyboard. Bersifat menunggu masukkan satu character.


(11)

Ord(x) : Menghasilkan KODE ASCII dari x, x bertype Char. Chr(x) : Menghasilkan character yang berkode ASCII x.

Round(x) : Menghasilkan nilai longint yang terdekat dari x real sesuai dengan aturan pembulatan. Trunc(x) : Menghasilkan nilai longint yang terkecil dari x real.

Upcase(x) : Menghasilkan huruf besar.

5.1.2.

PROCEDURE STANDARD

Procedure standard adalah suatu routine yang juga siap pakai dan dipanggil dengan menyebutkan nama procedure dengan memberikan argumen yang sesuai. Berikut adalah procedure-procedure standard yang sering kita pakai.

5.1. Procedure Input / Output

Write, writeln : sudah dibahas Read, Readln : sudah dibahas 5.2. Procedure Operasi String

Delete(x,i,n) : Membuang n buah character mulai dari i dari string x. Insert(s1,s2,i) : Menyisipkan string s1 dalam string s2 di posisi i. Str(n:w:d,s) : Merubah Numerik lebar w decimal d dalam string s. Val(s,n,c) : Merubah s string menjadi numeric dalam n.

FillChar(x,n,ch) : Mengisi variable x dengan character ch sebanyak n. 5.3. Procedure Lain-lain

Clrscr : Hapus layar.

ClrEol : Hapus baris mulai posisi cursor.

DelLine : Menghapus 1 baris di posisi cursor dan menggeser naik tampilan-tampilan di bawahnya.

InsLine : Menyisipi sebuah baris pada posisi cursor. Gotoxy(x,y) : Memposisikan cursor pada baris y, kolom x.

Delay(n) : Menunda proses n integer yang menunjukkan lama tunda. Halt : Menghentikan eksekusi program.

Sound(f) : Menghasilkan nada suara dengan frequensi f. NoSound : Mematikan nada.

TextColor(x) : Memesan warna tulisan dengan konstanta warna x. x dapat berupa angka 0, 1, 2, … atau Black, Red, White, …

TextBackGround(x) : Memesan warna latar belakang dengan konstanta warna x.

Untuk procedure dan fungsi standard yang sudah disediakan oleh pascal semuanya terdapat pada unit-unit yang harus disertakan pemakaiannya pada USES (pada kepala program).


(12)

5.2. MENCIPTAKAN FUNGSI DAN PROCEDURE 5.2.1. MENCIPTAKAN FUNGSI

Fungsi merupakan sebuah subprogram yang apabila dipanggil akan menghasilkan sebuah nilai. Ciri-ciri suatu fungsi :

 Fungsi hanya memberikan sebuah hasil

 Nama fungsi selain digunakan untuk memanggil fungsi tersebut, juga dianggap sebagai suatu variable sehingga bias digunakan sebagai bagian dari ungkapan.

 Dalam fungsi tidak digunakan parameter variable, semua parameter dianggap sebagai parameter nilai.

 Semua parameter digunakan sebagai masukan pada fungsi tersebut dengan keluarannya nama fungsi yang bertindak sebagai satu variable.

Deklarasi fungsi :

Function, adalah kata tercadang pascal yang memberi tanda bahwa deklarasi fungsi dimulai. Pengenal, adalah nama fungsi

Daftar parameter formal, adalah nama parameter yang akan dioperasikan dalam fungsi

tipe, adalah tipe data dari nilai fungsi. (yang diperbolehkan hanya tipe skalar, subjangkauan atau terbilang). Kemudian untuk memanggil fungsi yang sudah dideklarasikan, digunakan bentuk sebagai berikut :

Pengenal adalah nama fungsi yang akan dipanggil.

Beberapa hal penting yang perlu diperhatikan berkaitan dengan pemakaian fungsi, adalah :

 Tipe hasil fungsi harus bertipe sederhana (integer, real, boolean, char atau string), karena fungsi hanya bisa mengembalikan nilai bertipe sederhana.

 Jika fungsi tidak memiliki daftar parameter formal, maka tanda kurung buka “(“ dan kurung tutup “)” tidak ditulis.

Fungsi didefinisikan didalam blok program pemanggil (setelah kata tercadang var) 5.2.2. MENCIPTAKAN PROSEDUR

Berapa hal yang harus diperhatikan dalam penggunaan prosedur, antara lain :

 Deklarasi prosedur terletak pada bagian deklarasi program.

 Sembarang tipe statemen pascal bisa digunakan dalam prosedur.

 Parameter dalam prosedur bersifat optional, boleh ada boleh tidak.

 Suatu prosedur bisa memanggil prosedur lain yang sudah didefinisikan terlebih dahulu.

 Pemberian nama prosedur mengikuti aturan pemberian nama pengenal atau perubah. Function pengenal [(daftar parameter formal)]: tipe;


(13)

Mendeklarasikan prosedur

Struktur prosedur hampir sama dengan struktur program pascal, yaitu : Bagian kepala prosedur

Procedure nama_prosedur (dafatar parameter formal); Bagian deklarasi

Digunakan untuk mendeklarasikan semua variabel lokal yang digunakan dalam prosedur. Bagian pernyataan.

Digunakan untuk menuliskan semua statemen, yang diawali dengan begin dan diakhiri dengan end diikuti tanda titik koma (;).

Begin

(statemen) end.

Pemanggilan prosedur dilakukan dengan cara menyebutkan nama prosedurnya diikuti dengan parameter (parameter aktual) jika memakai parameter formal pada saat mendeklarasikan.

NAMA LOKAL DAN NAMA GLOBAL

Nama lokal adalah suatu nama (variabel, konstanta dan type) yang dideklarasikan didalam sebuah prosedur (atau fungsi), yang mana nama tersebut hanya berguna didalam kelompok statemen atau dalam prosedur (atau fungsi) yang mendeklarasikannya. nama lokal ini hanya memerlukan tempat dimemori pada saat prosedur atau fungsi yang menggunakannya dikerjakan. Sembarang tipe data bisa digunakan sebagai nama lokal.

Nama global adalah nama (variabel, konstanta dan type) yang dideklarasikan dibagian deklarasi pada pogram yang mana nama tersebut bisa digunakan diseluruh bagian program termasuk pada prosedur dan fungsi.

Untuk menghindari kesalahan pengalihan informasi ke dan dari prosedur yang menggunakan variabel global, maka bisa dengan cara mendeklarasikan parameter-parameter yang harus digunakan.

Sebisa mungkin diminimalkan penggunaan nama global, karena penggunaan nama lokal bisa meminimalkan usaha pencarian kesalahan yang disebabkan oleh nama tersebut.

PARAMETER

Kebanyakan program memerlukan pertukaran informasi antara prosedur atau fungsi dan titik dimana prosedur atau fungsi dipanggil. Untuk hal tersebut digunakan suatu parameter.

Tujuan penggunaan parameter formal adalah untuk mengontrol komunikasi informasi ke dan dari prosedur. Ada dua jenis parameter yang bisa digunakan, yaitu :


(14)

Parameter formal

Parameter formal adalah parameter yang dideklarasikan didalam bagian kepala procedure atau fungsi itu sendiri.

Daftar parameter formal bisa berisi 4 tipe parameter yang berbeda, yaitu : perubah (var), nilai, fungsi dan prosedur.

Paramater perubah (variabel)

Parameter perubah ini biasa disebut dengan parameter referensi atau paramater var, adalah parameter yang mengambil nilai dari parameter actual, dan jika nilai paramater perubah tersebut mengalami perubahan, maka nilai parameter aktual juga berubah.

Bentuk umum deklarasi parameter perubah :

Var, adalah kata baku yang menunjukkan pengenal yang mengikutinya adalah parameter perubah. Pengenal, adalah nama parameter perubah.

Tipe , adalah tipe data parameter perubah.

Tipe data yang digunakan dalam parameter formal harus berupa pengenal atau tipe data skalar, tidak boleh menggunakan tipe data terstruktur.

Parameter Nilai (Parameter Masukan)

Jika pada saat mendeklarasikan parameter formal, kata Var tidak disertakan, maka parameter yang digunakan disebut parameter nilai (value parameter), yang berarti bahwa parameter tersebut hanya mengambil nilai dari parameter aktual yang sesuai. Nilai parameter aktual yang asli tidak mengalami perubahan meskipun nilai parameter formalnya mengalami perubahan.

Untuk kedua jenis parameter tersebut bisa digunakan bersama-sama. Parameter aktual

Parameter aktual adalah parameter yang disertakan pada saat pemanggilan suatu prosedur atau fungsi. Bentuk umum pemanggilan prosedur

Nama prosedur yang dinyatakan oleh pengenal harus sesuai dengan nama prosedur yang digunakan pada waktu mendeklarasikan prosedur. Daftar parameter aktual berisi nama-nama parameter aktual yang akan digunakan atau dioperasikan didalam prosedur yang akan dipanggil.

Parameter aktual harus sesuai dengan parameter formal dalam hal :

 Urutan posisi dan jumlah parameter yang digunakan

 Tipe data dari setiap parameter.

Operasi yang dilaksanakan pada saat prosedur dipanggil:

1. Nilai dari semua parameter aktual yang berupa parameter nilai akan diberikan pada parameter formal untuk dioperasikan didalam prosedur.

Pengenal(daftar parameter aktual); Var pengenal [, pengenal, …]:tipe;


(15)

2. Lokasi setiap parameter perubah dialokasikan. 3. Alokasi perubah untuk perubah lokal.

4. Statemen dalam prosedur akan dikerjakan berdasarkan parameter formal dan variabel lokal.

Contoh 5 :

Progam dibawah ini digunakan untuk mencari nilai median dari sejumlah data yang diinputkan kemudian diurutkan terlebih dahulu .

program lat5; uses crt; type

larik = array[1..100] of real; var

vektor : larik; n,i,bantu : integer; m,rerata,jum : real; procedure baca;

begin

clrscr;

write('masukkan banyak data = '); readln(n);

writeln('masukkan datanya ='); bantu := 1;

for I := 1 to n do begin

read(vektor[I]);

gotoxy(whereX+(I mod 8) * 8,whereY-1); if I mod 8 = 0 then

writeln; end;

end;

procedure cetak(X:larik;p:integer); var

i : integer; begin

writeln;

for I := 1 to P do begin

write(X[I]:6:2); if I mod 8 = 0 then writeln;

end; writeln; end;

procedure urut (var X : larik; P:integer); var

i,j,lokasi : integer; bantu : real;

begin

for i := 1 to p-1 do begin

lokasi := i;

for j := i+1 to p do if x[lokasi] > x[j] then lokasi := j;


(16)

x[i] := x[lokasi]; x[lokasi] := bantu; end;

end;

procedure medu(var x : larik; n :integer); begin

if (n mod 2 = 0) then

m := (x[n div 2] + x[(n div 2) +1])/2 else

m := x[(n+1)div 2]; end;

procedure rata (x:larik; n :integer); var

i : integer; begin

jum := 0.0;

for i := 1 to n do jum := jum + x[i]; rerata := jum / n; end;

begin

clrscr; baca; clrscr;

writeln('data sebelum diurutkan ='); cetak(vektor,n);

writeln;

urut(vektor,n);

writeln('data urut ='); cetak(vektor,n);

rata(vektor,n); writeln;

writeln('banyaknya data = ',n);

writeln('total data = ',jum:6:2); writeln('nilai rata-rata = ',rerata:6:2); medu(vektor,n);

writeln('nilai median = ',m:6:2); readln;

readln end.

Hasil run =

masukkan banyak data = 10 masukkan datanya =

53.55 34.67 43 23.33 90.11 53 54.54 65.03 44. 87 11.99

data sebelum diurutkan =

53.55 34.67 43.00 23.33 90.11 53.00 54.54 65.03 44. 87 11.99

data setelah diurutkan =

11.99 23.33 34.67 43.00 44. 87 53.00 53.55 54.54 65.3 90.11


(17)

banyaknya data = 10 total data = 474.09 nilai rata-rata = 47.41 nilai median = 48.93 Tugas 2 mahasiswa :

Buat program yang dipergunakan untuk menghitung nilai simpangan baku dari sejmumlah data yang dimasukkan, formula untuk simpangan baku (S) :

S = simpangan baku yang akan dihitung Xi = data ke I dari N buah data

X = Nilai rata-rata seluruh data N = cacah data

(N-1) (Xi – X)2

I=0 N


(18)

MODUL 3

RECORD / REKAMAN

Type data record merupakan type data terstruktur yang mempunyai sejumlah elemen yang disebut medan atau field yang masing-masing elemen bisa berbeda tipe datanya, tetapi merupakan rangkaian data berbagai macam type yang kita pandang sebagai satu kesatuan. Type data record dapat didefinisikan sebagai berikut :

Bentuk : Type

pengenal = Record medan1 : Type1;

medan2 : Type2; ...;

medann : Typen End;

Var

NamaVarRecord : pengenal; Keterangan :

Type, record, end : Kata baku yang harus ditulis seperti apa adanya pengenal : Pengenal yang menunjukkan tipe data yang

akan dideklarasikan

Medan1 ....medann : Nama medan yang akan digunakan

Type1 … typen : Sembarang tipe data yang sudah dideklarasikan sebelumnya

Contoh :

Misal akan digunakan data rekaman/record siswa yang mempunyai field atau medan nama, alamat, kelamin dan klas, maka dideklarasikan seperti berikut :

Type siswa = record

Nama : string[25]; Alamat : string[25]; kelamin : (L,P); klas : 1..6 end;

maka yang terjadi pada memori utama dapat direpresentasikan sebagai berikut :

Nama Alamat Kelamin Klas

Siswa


(19)

Memasup (mengambil nilai) medan

Yaitu mengambil nilai pada seluruh rekaman atau pada medan-medan tertentu. Caranya :

1. Menyebutkan nama record, diikuti tanda titik dan nama medan yang diinginkan.

Misal mengambil nilai medan nama pada record siswa diatas : Siswa.nama

2. Dengan statement WITH Bentuk :

With , do : kata baku

Nama record : nama record yang akan diambil nilainya. Misal :

Type siswa = record

Nama : string[25]; Alamat : string[25]; kelamin : (L,P); klas : 1..6 end;

Var murid : siswa; Kode_sex : 0..1;

Maka untuk memasup record murid tersebut : With murid do

Begin

Readln (nama); Readln (alamat); Readln (klas); Readln (kode_sex); If kode_sex = 1 then Kelamin := L Else

Kelamin := P End;

With nama record Do Nama rekaman.namamedan


(20)

Contoh 6

program lat6; uses crt; type

rec_bar = record

kobar : string[5]; nabar : string[20]; jumbar : integer; harsat : real; tot: real; end;

barang = array[1..100] of rec_bar; var

data : barang; i,n : integer; total : real;

procedure masuk_data; begin

clrscr;

write('masukkan jumlah barang = '); readln(n);

clrscr;

writeln('No Kode Barang Nama Barang quantity Harga satuan'); for i := 1 to n do

begin

with data[i] do begin gotoxy(2,2+i);write(i); gotoxy(10,2+i);readln(kobar); gotoxy(25,2+i);readln(nabar); gotoxy(40,2+i);readln(jumbar); gotoxy(50,2+i);write('Rp. ');readln(harsat); end; end; end; procedure hitung; begin

total := 0;

for i := 1 to n do begin

with data[i] do begin

tot := jumbar * harsat; end;

total := total + data[i].tot; end;

end;

procedure cetak_data; begin

writeln('No Kode Barang Nama Barang quantity Harga satuan Total'); for i := 1 to n do

begin

with data[i] do begin gotoxy(2,2+i);write(i); gotoxy(10,2+i);write(kobar); gotoxy(25,2+i);write(nabar); gotoxy(40,2+i);write(jumbar); gotoxy(50,2+i);write('Rp. ',harsat:8:2); gotoxy(65,2+i);write('Rp. ',tot:8:2); end; end; writeln;writeln;

write(' Total keseluruhan = ',total:10:2);


(21)

begin masuk_data; hitung; clrscr; cetak_data; readln; end.

Contoh 7 :

program lat7; uses crt; const

upah = 5000; type

status = (tetap,honorer); rec_peg = record

nip : string[8]; nama : string[25]; gaber : real;

stat_peg : string[10]; case stat:status of

tetap : (gapok : real;

jam_lembur : real); honorer : (jam_kerja : real); end;

var

pegawai : array[1..100] of rec_peg; i,n : integer;

jawab : char; procedure masuk_data; begin

clrscr;

write ('Masukkan jumlah data = '); readln(n);

clrscr;

writeln('No NIP Nama Pegawai Peg Tetap Jam kerja Gaji Pokok Jam lembur');

for i := 1 to n do begin

gotoxy(2,3+i);write(i); with pegawai[i] do begin

gotoxy(7,3+i);readln(nip); gotoxy(17,3+i);readln(nama); gotoxy(42,3+i);readln(jawab);

if (jawab = 'Y') or (jawab='y') then begin

stat := tetap;

stat_peg := 'tetap'; end

else begin

stat := honorer;

stat_peg := 'honorer'; end;

case stat of tetap : Begin

gotoxy(60,3+i);readln(gapok); gotoxy(71,3+i);readln(jam_lembur); gaber := gapok + (jam_lembur * upah); end;

honorer: begin

gotoxy(47,3+i);readln(jam_kerja); gaber := jam_kerja * upah;

end; end; end; end; end; procedure cetak_data;


(22)

begin

writeln('No NIP Nama Pegawai Status Jam ker Gaji Pokok lembur Gaji Bersih');

for i := 1 to n do begin

gotoxy(2,3+i);write(i); with pegawai[i] do begin

gotoxy(4,3+i);write(nip); gotoxy(12,3+i);write(nama); gotoxy(28,3+i);write(stat_peg); if stat_peg = 'tetap' then Begin

gotoxy(48,3+i);write(gapok:10:2); gotoxy(60,3+i);write(jam_lembur:3:0); gotoxy(65,3+i);write(gaber:10:2); end

else begin

gotoxy(41,3+i);write(jam_kerja:3:0); gotoxy(67,3+i);write(gaber:10:2); end;

end; end;

end; begin

masuk_data; clrscr; cetak_data; readln; end.

Tugas 3 mahasiswa :

Modifikasi contoh 7 untuk menghitung gaji karyawan dengan memberikan tambahan untuk status pegawai tetap diperhitungkan tunjangan istri dan anak, untuk istri memperoleh tunjangan 0.5 % dari gaji pokok dan tunjangan anak memperoleh tunjangan sebesar jumlah anak * (0.3 % dari gaji pokok)


(23)

MODUL 4

TIPE DATA POINTER

Sebuah nama perubah yang digunakan pada sebuah program adalah mewakili suatu nilai data yang menunjukkan lokasi tertentu dalam memori komputer dimana data yang diwakili oleh nama perubah tersebut disimpan

Pada saat program dikompilasi maka kompiler akan melihat pada bagian deklarasi perubah (bagian var) untuk mengetahui nama-nama perubah apa saja yang akan digunakan dan sekaligus mengalokasikan dan menyediakan tempat dalam memori untuk menyimpan nilai data tersebut.

Ada dua macam perubah, yaitu :

Perubah Statis (Static Variabel), yaitu suatu perubah dimana lokasi-lokasi di dalam memori sudah ditentukan dan tidak bisa ubah selama program tersebut dieksekusi atau dapat dikatakan bahwa banyaknya data yang bisa diolah adalah terbatas.

Pada perubah statis ini, isi pengingat pada lokasi tertentu (nilai perubah) adalah data sesungguhnya yang akan kita olah.

Perubah Dinamis (biasa disebut dengan POINTER), yaitu suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi. Pada saat dikompilasi, lokasi untuk perubah belum ditentukan. Kompiler hanya akan mencatat bahwa suatu perubah akan diperlakukan sebagai perubah dinamis.

Nilai perubah pada perubah dinamis adalah alamat lokasi lain yang menyimpan data yang akan diubah. Berikut representasi dari perubah statis dan perubah Dinamis

A 2400 A 980

2200

Perubah Statis Perubah

Dinamis DEKLARASI POINTER DAN ALOKASI PENGINGAT

Pointer dideklarasikan pada bagian type Format :

Type perubah = ^simpul Simpul = tipe

Perubah : nama perubah yang bertipe pointer Simpul : nama simpul

Tipe : tipe data dari simpul

Tanda ^ : harus ditulis apa adanya yang menunjukkan bahwa perubah adalah suatu perubah yang bertipe pointer.

Tipe data simpul yang dinyatakan pada tipe bisa sembarang tipe data, misal char, integer atau real, tetapi biasanya berupa rekaman.

Contoh deklarasi :

Type str30 = string[30]; Point = ^data;


(24)

Data = record

Nama : str30; Alamat: str30;

Pekerjaan : str30; End;

Deklarasi pada bagian VAR Var p1,p2 : point;

A,B,C : str30;

Perubah p1 dan p2 merupakan tipe data pointer yang akan menempati lokasi tertentu dalam pengingat. Kedua perubah masih masih belum menunjuk ke suatu simpul. Pointer yang belum menunjuk kesuatu simpul dinyatakan sebagai nil.

Untuk mengalokasikan simpul dalam pengingat, digunakan statement NEW, dengan bentuk :

Perubah adalah nama perubah bertipe pointer. Misal

new (p1); new (p2);

maka pada memori dapat digambarkan sebagai berikut: A

B C P1 P2 P2

P2 P1

Statemen new diatas bisa diberikan beberapa kali, hanya simpul terkakhir saja yang bisa diakses. Hal tersebut dikarenakan setiap memberikan perintah NEW (P1) maka nilai P1 yang lama akan terhapus.

Jika diinginkan suatu perubah yang benar-benar dinamis, maka harus mampu mengakses sejumlah lokasi tertentu hanya dengan menggunakan sebuah pointer awal.

P1

Maka deklarasi pointernya berubah, menjadi : Type perubah = ^simpul

Simpul = record

Info : tipe; New (perubah

)

bagian statis


(25)

Berikut : perubah End;

Perubah : nama perubah yang bertipe pointer Simpul : nama simpul

Info : nama medan dari data yang bertipe record (Bisa terdiri dari beberapa medan)

tipe : tipe data dari masing-masing medan berikut : nama medan yang bertipe pointer

misal :

Type str30 = string[30]; Point = ^data; Data = record

Nama : str30; Alamat: str30;

Pekerjaan : str30; Berikut : point; End;

Var p1,p2 : point; Maka setelah statemen New(p1);

New(p2);

Dieksekusi, akan mempunyai dua simpul sebagai berikut :

P1

?

?

?

P2

?

?

?

Operasi pada tipe data pointer Mengkopi pointer

Dari deklarasi dan statemen diatas ditambahkan statemen berikut : P1^.nama := ‘Zihan’;

P1^.alamat := ‘Yogyakarta’; P1^.pekerjaan := ‘Engineer’; Maka keadaan simpul menjadi :

P1

Zihan

Yogyakarta Engineer

P2

?

?

?

Jika diberikan statemen

P2 := p1; Maka akan terjadi :

P1

Zihan

Yogyakart

a

Engine

er


(26)

Ini yang disebut dengan operasi mengkopi pointer, yang akan menyebabkan sebuah simpul akan ditunjuk lebih dari satu pointer.

Mengkopi isi simpul Jika diberikan statemen

P2^ := p1^; Maka akan dihasilkan :

P1

Zihan

Yogyakart

a

Engine

er

P2

Zihan

Yogyakart

a

Engine

er

Ini yang disebut dengan mengkopi isi simpul, yang mengakibatkan dua atau lebih simpul yang ditunjuk oleh pointer yang berbeda mempunyai isi yang sama.

Kesimpulan :

 Jika dalam statemen pemberian tanda ^ tidak ditulis, disebut operasi mengkopi pointer, yang mempunyai konsekuensi simpul yang semula ditunjuk oleh suatu pointer akan bisa terlepas dan tidak dapat diakses lagi.

 Jika dalam statemen pemberian tanda ^ ditulis, disebut operasi mengkopi isi simpul, yang mempunyai konsekuensi isi dua simpul atau lebih akan menjadi sama.

Menghapus pointer

Untuk menhapus sebuah pointer digunakan statemen DISPOSE Bentuk :

Dengan perubah adalah sembarang perubah yang bertipe pointer.

Contoh penggunaan tipe data pointer adalah pada senarai berantai atau lebih dikenal dengan istilah Linked List

LINKED LIST

Lisked list adalah suatu daftar yang terdiri dari beberapa simpul dimana antara simpul yang satu dengan simpul lainnya dikaitkan dengan sebuah pointer.

Setiap simpul pada linked list terdiri dari 2 bagian, bagian pertama disebut medan informasi, yang berisi informasi yang akan disimpan dan diolah. Dan bagian kedua yang disebut dengan medan penyambung yang berisi alamat simpul berikutnya.

Awal

A

B

C

D

Medan penyambung dari simpul pertama Medan informasi dari simpul pertama

Pada gambar diatas, pointer awal menunjuk ke simpul pertama dari senarai. Medan penyambung (pointer) dari suatu simpul yang tidak menunjuk simpul lain disebut dengan pointer kosong, yang nilainya dinyatakan dengan nil.


(27)

Menambah simpul

Dianggap simpul baru yang akan ditambahkan selalu menempati posisi setelah simpul yang terakhir dari senarai berantai.

Misal didelklarasikan sebuah pointer dan simpul sebagai berikut: Type simpul = ^data;

Data = record Info : char; Berikut : simpul; End;

Var

Elemen : char; Awal,Akhir,Baru : simpul;

Awal Akhir Baru

A B C D F

Pointer pada simpul yang ditunjuk oleh simpul akhir dibuat sama dengan baru, dengan perintah Akhir^.berikut := baru;

Awal Akhir Baru

A B C D F

Kemudian pointer akhir dibuat sama dengan pointer baru, dengan perintah Akhir := baru;

Awal Akhir Baru

A B C D F

Procedure tambah_belakang (var awal, akhir : simpul;elemen :Char); Var baru : simpul;

Begin

New(baru);

Baru^.info := elemen; If awal =nil then

Awal :=baru Else

Akhir^.berikut := baru; Akhir := baru;

Akhir^.berikut := nil End;

Menghapus simpul

Dalam menghapus simpul, harus diperhatikan satu hal, yaitu simpul yang bisa dihapus adalah simpul yang berada sesudah simpul yang ditunjuk oleh oleh suatu pointer kecuali untuk simpul pertama


(28)

A B C D F

Jika senarai berantainya seperti diatas, maka simpul yang bisa dihapus adalah simpul yang berisi ‘A’ dan yang berisi ‘F’

Untuk mengahpus simpul pertama, maka pointer bantu dibuat sama dengan pointer awal Bantu := awal;

Awal Bantu Akhir

A B C D F

Kemudian pointer awal dipindah ke simpul yang ditunjuk oleh pointer bantu, dengan perintah Awal := bantu^.berikut;

Bantu Awal Akhir

A B C D F

Kemudian simpul yang ditunjuk oleh oleh pointer bantu di hapus dengan perintah Dispose(bantu)

Awal Akhir

B C D F

Procedure tambah_belakang (var awal, akhir : simpul;elemen :Char); Var baru : simpul;

Begin

New(baru);

Baru^.info := elemen; If awal =nil then

Awal :=baru Else

Akhir^.berikut := baru; Akhir := baru;

Akhir^.berikut := nil End;

Contoh 8 :

program lat8; uses crt; type

simpul = ^rec_bar; rec_bar = record

kobar : string[5]; nabar : string[20]; jumbar : integer; harsat : real; tot: real;

berikut : simpul; end;


(29)

var

awal,akhir : simpul;

function simpul_baru:simpul; var

dat : simpul; begin

clrscr; new(dat);

writeln('No Kode Barang Nama Barang quantity Harga satuan'); with dat^ do

begin

gotoxy(10,2);readln(kobar); gotoxy(25,2);readln(nabar); gotoxy(40,2);readln(jumbar);

gotoxy(50,2);write('Rp. ');readln(harsat); tot := jumbar * harsat;

end;

simpul_baru := dat; end;

procedure tambah(n : integer); var

baru : simpul; begin

if n <> 0 then begin

writeln('Menambah simpul di akhir senarai'); end;

baru := simpul_baru; if awal = nil then awal := baru else

akhir^.berikut := baru; akhir := baru;

end;

procedure cetak_data; var

bantu : simpul; i : integer; begin

i := 1;

bantu := awal; if bantu = nil then

writeln('Senarai masih kosong') else

while bantu <> nil do begin

writeln('No Kode Barang Nama Barang quantity Harga satuan Total');

with bantu^ do begin gotoxy(2,2+i);write(i); gotoxy(10,2+i);write(kobar); gotoxy(25,2+i);write(nabar); gotoxy(40,2+i);write(jumbar); gotoxy(50,2+i);write('Rp. ',harsat:8:2); gotoxy(65,2+i);write('Rp. ',tot:8:2); end; inc(i); end; end; begin clrscr; simpul_baru; tambah(1); clrscr; cetak_data; readln;


(30)

end.

Contoh 9:

program lat9; uses crt; type

simpul = ^rec_bar; rec_bar = record

nim : string[5]; nama : string[25]; nil1,nil2,nil3:integer; tot : integer;

rata: real;

berikut : simpul; end;

var

awal,akhir,baru : simpul; L_L :simpul;

i,n : integer; pil : char;

procedure simpul_baru(var L_L :simpul); var

tampung : simpul; begin

new(tampung); clrscr;

writeln('masukkan data untuk simpul baru'); writeln;

writeln('No NIM Nama nilai 1 nilai 2 nilai 3 '); with tampung^ do

begin inc(i); gotoxy(1,3+i);write(i); gotoxy(5,3+i);readln(nim); gotoxy(15,3+i);readln(nama); gotoxy(40,3+i);readln(nil1); gotoxy(50,3+i);readln(nil2); gotoxy(59,3+i);readln(nil3); tot := nil1 + nil2 + nil3; rata := tot / 3;

end;

awal := tampung; akhir := tampung; akhir^.berikut:= nil; L_L := tampung;

end;

procedure tambah_simpul(L_L : simpul); var

tampung : simpul; begin

new(tampung); clrscr;

writeln('Tambahkan simpul'); writeln;

if awal = nil then begin

writeln('Simpul masih kosong');

writeln('tekan F1 untuk membuat simpul baru '); delay(1000); exit; end else begin

writeln('No NIM Nama nilai 1 nilai 2 nilai 3 '); with tampung^ do


(31)

inc(i); gotoxy(1,3+i);write(i); gotoxy(5,3+i);readln(nim); gotoxy(15,3+i);readln(nama); gotoxy(40,3+i);readln(nil1); gotoxy(50,3+i);readln(nil2); gotoxy(59,3+i);readln(nil3); tot := nil1 + nil2 + nil3; rata := tot / 3;

end; end;

akhir^.berikut := tampung; akhir := tampung;

akhir^.berikut:= nil; L_L := tampung;

end;

procedure cetak_data; var

tampung : simpul; begin

clrscr;

writeln('Daftar simpul'); writeln;

if awal = nil then begin

writeln('Simpul masih kosong');

writeln('tekan F1 untuk membuat simpul baru '); delay(1000);

exit; end else begin

writeln('No NIM Nama nilai 1 nilai 2 nilai 3 total rata');

tampung := awal; i := 0;

while (tampung<> nil) do begin inc(i); gotoxy(1,3+i);write(i); gotoxy(5,3+i);write(tampung^.nim); gotoxy(15,3+i);write(tampung^.nama); gotoxy(40,3+i);write(tampung^.nil1); gotoxy(50,3+i);write(tampung^.nil2); gotoxy(59,3+i);write(tampung^.nil3); gotoxy(68,3+i);write(tampung^.tot); gotoxy(75,3+i);write(tampung^.rata:6:2); tampung := tampung^.berikut;

end;

repeat until keypressed; end;

end; begin repeat clrscr;

writeln(' M E N U '); writeln;

writeln(' F1. Buat Simpul baru'); writeln(' F2. Tambahkan simpul'); writeln(' F3. Tampilkan Simpul'); writeln(' ESC Selesai');

writeln;

write(' Pilih Mana : '); pil := readkey;

case pil of

#59 : simpul_baru(L_L); #60 : tambah_simpul(L_L); #61 : cetak_data;

end;

until pil = #27; end.


(32)

Tugas mahasiswa :

Tugas ke 3 pada modul 3 kerjakan dengan menggunakan lingked list

MODUL 5

UNIT

Unit merupakan kumpulan dari prosedur dan fungsi (untuk berbagai deklarasi/definisi seperti variabel dan tipe) yang dapat dikompilasi secara terpisah. Keuntungan dengan adanya unit, program (berupa fungsi dan procedur) yang memakai fasilitas dalam unit akan dikompilasi lebih cepat, sebab bagian dari unit tidak ikut dikompilasi lagi.

Struktur Unit Unit terdiri dari tiga bagian, yaitu :

Bagian Interface

Bagian interface merupakan bagian penghubung antara unit dengan unit lain atau program. Jika unit mengandung prosedur atau fungsi yang dapat diakses oleh program atau unit lain, hanya kepala/judul prosedur/fungsi yang berada pada bagian interface. Adapun tubuh fungsi berada pada bagian implementation.

Bagian Implementation Bagian implementation berisi :

 Bagian tubuh dari fungsi atau prosedur yang kepalanya dideklarasikan pada bagian interface

 Deklarasi konstanta, tipe, variabel, prosedurdan fungsi yang bersifat lokal (hanya dikenal dibagian implementation)

Bagian ini dapat menggunakan semua fasilitas yang ada pada bgian interface (seperti deklarasi variabel dan tipe) dan juga fasilitas yang terdapat pada unit yang dilibatkan pada bagian interface.

Bagian Inisialisasi

Bagian ini bisa terdiri kata tercadang END saja yang diakhiri dengan titik. Dan menyatakan unit tidak mengandung kode inisialisasi.

Struktur Sebuah Unit : UNIT nama_unit; INTERFACE

USES daftar_nama_unit; {optional} {bagian deklarasi yang bersifat global} IMPLEMENTATION

{Bagian deklarasi yang bersifat lokal dan implementasi dari subprogram yang terdapat pada bagian interface}

BEGIN {opsional}

(* bagian inisialisasi *) {opsional} END.

Contoh :

Bagian Interface

unit itung; interfAce uses crt;

function kali( A,B : REAL) : REAL; FUNCTION TAMBAH ( A,B :REAL ) : REAL; FUNCTION BAGI ( A,B : REAL ) : REAL;


(33)

IMPLEMENTATION

FUNCTION KALI (A,B :REAL ): REAL ; BEGIN

KALI := A*B; END;

FUNCTION TAMBAH ( A,B : REAL ):REAL; BEGIN

TAMBAH := A+B ; END;

FUNCTION BAGI (A,B : REAL ) : REAL; BEGIN

BAGI := A / B; END;

FUNCTION PANGKAT ( A : REAL;VAR B : INTEGER ): REAL; VAR

X : INTEGER; TEMP : REAL; BEGIN

TEMP := A;

FOR X := 1 TO B-1 DO BEGIN

A := A * TEMP; END;

PANGKAT := A; END;

BEGIN END.

Kemudian compile program diatas dan arahkan hasil kompilasi ke disk, bukan ke memory. Selanjutnya unit itung.TPU bisa dipergunakan pada program. Contoh program berikut menggunakan unit itung.TPU

USES CRT,ITUNG; VAR

A,B,C : REAL; Z : INTEGER; CHOICE : CHAR; PROCEDURE PLUS; BEGIN

WRITELN('ANDA PILIH PENJUMLAHAN ..'); WRITE ('ANGKA :');READLN(A);

WRITE ('DITAMBAH : ');READLN(B); C := TAMBAH (A,B);

WRITELN(A:0:2,'+',B:0:2,'=',C:0:2 ); END;

PROCEDURE MULTIPLE; BEGIN

WRITELN('ANDA PILIH PERKALIAN '); WRITE ('ANGKA = ');READLN (A); WRITE ('DIKALI : ');READLN(B); C := KALI(A,B);

WRITELN(A:0:2,'*',B:0:2,'=',C:0:2 ); END;

PROCEDURE DEVIDE; BEGIN

WRITELN('ANDA PILIH PEMBAGIAN '); WRITE ('ANGKA = ');READLN (A); WRITE ('DIBAGI : ');READLN(B); C:= BAGI(A,B);

WRITELN(A:0:2,'/',B:0:2,'=',C:0:2 ); END;

PROCEDURE SQUARE; BEGIN

WRITELN('ANDA PILIH PANGKAT '); WRITE ('ANGKA = ');READLN (A); WRITE ('PANGKAT : ');READLN(Z);


(34)

C:= PANGKAT(A,Z);

WRITELN(A:0:2,'PANGKAT',B:0:2,'=',C:0:2 ); END;

BEGIN CLRSCR;

WRITELN ('<< MENU MAKAN >>'); WRITELN (' F1 PENJUMLAHAN '); WRITELN (' F2 PERKALIAN '); WRITELN (' F3 PEMBAGIAN '); WRITELN (' F4 PANGKAT '); WRITELN (' ESC SELESAI '); WRITELN;

REPEAT

CHOICE := READKEY ; CASE CHOICE OF #59 : PLUS; #60 : MULTIPLE ; #61 : DEVIDE; #62 : SQUARE ; END;

UNTIL CHOICE = #27 ; END.

Tugas 5 Mahasiswa :

Buat sebuah unit yang berisi kumpulan procedure dan function yang pernah anda buat mulai dari modul 1 sampai modul 4, kemudian buat contoh program yang menggunakan unit tersebut.


(1)

var

awal,akhir : simpul;

function simpul_baru:simpul; var

dat : simpul; begin

clrscr; new(dat);

writeln('No Kode Barang Nama Barang quantity Harga satuan'); with dat^ do

begin

gotoxy(10,2);readln(kobar); gotoxy(25,2);readln(nabar); gotoxy(40,2);readln(jumbar);

gotoxy(50,2);write('Rp. ');readln(harsat); tot := jumbar * harsat;

end;

simpul_baru := dat; end;

procedure tambah(n : integer); var

baru : simpul; begin

if n <> 0 then begin

writeln('Menambah simpul di akhir senarai'); end;

baru := simpul_baru; if awal = nil then awal := baru else

akhir^.berikut := baru; akhir := baru;

end;

procedure cetak_data; var

bantu : simpul; i : integer; begin

i := 1;

bantu := awal; if bantu = nil then

writeln('Senarai masih kosong') else

while bantu <> nil do begin

writeln('No Kode Barang Nama Barang quantity Harga satuan Total');

with bantu^ do begin

gotoxy(2,2+i);write(i); gotoxy(10,2+i);write(kobar); gotoxy(25,2+i);write(nabar); gotoxy(40,2+i);write(jumbar);

gotoxy(50,2+i);write('Rp. ',harsat:8:2); gotoxy(65,2+i);write('Rp. ',tot:8:2); end;

inc(i); end; end;

begin

clrscr; simpul_baru; tambah(1); clrscr; cetak_data; readln;


(2)

end.

Contoh 9:

program lat9; uses crt; type

simpul = ^rec_bar; rec_bar = record

nim : string[5]; nama : string[25]; nil1,nil2,nil3:integer; tot : integer;

rata: real;

berikut : simpul; end;

var

awal,akhir,baru : simpul; L_L :simpul;

i,n : integer; pil : char;

procedure simpul_baru(var L_L :simpul); var

tampung : simpul; begin

new(tampung); clrscr;

writeln('masukkan data untuk simpul baru'); writeln;

writeln('No NIM Nama nilai 1 nilai 2 nilai 3 '); with tampung^ do

begin inc(i);

gotoxy(1,3+i);write(i); gotoxy(5,3+i);readln(nim); gotoxy(15,3+i);readln(nama); gotoxy(40,3+i);readln(nil1); gotoxy(50,3+i);readln(nil2); gotoxy(59,3+i);readln(nil3); tot := nil1 + nil2 + nil3; rata := tot / 3;

end;

awal := tampung; akhir := tampung; akhir^.berikut:= nil; L_L := tampung;

end;

procedure tambah_simpul(L_L : simpul); var

tampung : simpul; begin

new(tampung); clrscr;

writeln('Tambahkan simpul'); writeln;

if awal = nil then begin

writeln('Simpul masih kosong');

writeln('tekan F1 untuk membuat simpul baru '); delay(1000);

exit; end else begin

writeln('No NIM Nama nilai 1 nilai 2 nilai 3 '); with tampung^ do


(3)

inc(i);

gotoxy(1,3+i);write(i); gotoxy(5,3+i);readln(nim); gotoxy(15,3+i);readln(nama); gotoxy(40,3+i);readln(nil1); gotoxy(50,3+i);readln(nil2); gotoxy(59,3+i);readln(nil3); tot := nil1 + nil2 + nil3; rata := tot / 3;

end; end;

akhir^.berikut := tampung; akhir := tampung;

akhir^.berikut:= nil; L_L := tampung;

end;

procedure cetak_data; var

tampung : simpul; begin

clrscr;

writeln('Daftar simpul'); writeln;

if awal = nil then begin

writeln('Simpul masih kosong');

writeln('tekan F1 untuk membuat simpul baru '); delay(1000);

exit; end else begin

writeln('No NIM Nama nilai 1 nilai 2 nilai 3 total rata');

tampung := awal; i := 0;

while (tampung<> nil) do begin

inc(i);

gotoxy(1,3+i);write(i);

gotoxy(5,3+i);write(tampung^.nim); gotoxy(15,3+i);write(tampung^.nama); gotoxy(40,3+i);write(tampung^.nil1); gotoxy(50,3+i);write(tampung^.nil2); gotoxy(59,3+i);write(tampung^.nil3); gotoxy(68,3+i);write(tampung^.tot); gotoxy(75,3+i);write(tampung^.rata:6:2); tampung := tampung^.berikut;

end;

repeat until keypressed; end;

end; begin repeat clrscr;

writeln(' M E N U '); writeln;

writeln(' F1. Buat Simpul baru'); writeln(' F2. Tambahkan simpul'); writeln(' F3. Tampilkan Simpul'); writeln(' ESC Selesai');

writeln;

write(' Pilih Mana : '); pil := readkey;

case pil of

#59 : simpul_baru(L_L); #60 : tambah_simpul(L_L); #61 : cetak_data;

end;

until pil = #27; end.


(4)

Tugas mahasiswa :

Tugas ke 3 pada modul 3 kerjakan dengan menggunakan lingked list

MODUL 5

UNIT

Unit merupakan kumpulan dari prosedur dan fungsi (untuk berbagai deklarasi/definisi seperti variabel dan

tipe) yang dapat dikompilasi secara terpisah. Keuntungan dengan adanya unit, program (berupa fungsi dan

procedur) yang memakai fasilitas dalam unit akan dikompilasi lebih cepat, sebab bagian dari unit tidak ikut

dikompilasi lagi.

Struktur Unit

Unit terdiri dari tiga bagian, yaitu :

Bagian Interface

Bagian interface merupakan bagian penghubung antara unit dengan unit lain atau program. Jika unit

mengandung prosedur atau fungsi yang dapat diakses oleh program atau unit lain, hanya kepala/judul

prosedur/fungsi yang berada pada bagian interface. Adapun tubuh fungsi berada pada bagian

implementation.

Bagian Implementation

Bagian implementation berisi :

Bagian tubuh dari fungsi atau prosedur yang kepalanya dideklarasikan pada bagian interface

Deklarasi konstanta, tipe, variabel, prosedurdan fungsi yang bersifat lokal (hanya dikenal dibagian

implementation)

Bagian ini dapat menggunakan semua fasilitas yang ada pada bgian interface (seperti deklarasi variabel dan

tipe) dan juga fasilitas yang terdapat pada unit yang dilibatkan pada bagian interface.

Bagian Inisialisasi

Bagian ini bisa terdiri kata tercadang END saja yang diakhiri dengan titik. Dan menyatakan unit tidak

mengandung kode inisialisasi.

Struktur Sebuah Unit :

UNIT nama_unit;

INTERFACE

USES daftar_nama_unit; {optional}

{bagian deklarasi yang bersifat global}

IMPLEMENTATION

{Bagian deklarasi yang bersifat lokal dan implementasi dari subprogram yang

terdapat pada bagian interface}

BEGIN

{opsional}

(* bagian inisialisasi *)

{opsional}

END.

Contoh :

Bagian Interface

unit itung; interfAce uses crt;

function kali( A,B : REAL) : REAL; FUNCTION TAMBAH ( A,B :REAL ) : REAL; FUNCTION BAGI ( A,B : REAL ) : REAL;


(5)

IMPLEMENTATION

FUNCTION KALI (A,B :REAL ): REAL ; BEGIN

KALI := A*B; END;

FUNCTION TAMBAH ( A,B : REAL ):REAL; BEGIN

TAMBAH := A+B ; END;

FUNCTION BAGI (A,B : REAL ) : REAL; BEGIN

BAGI := A / B; END;

FUNCTION PANGKAT ( A : REAL;VAR B : INTEGER ): REAL; VAR

X : INTEGER; TEMP : REAL; BEGIN

TEMP := A;

FOR X := 1 TO B-1 DO BEGIN

A := A * TEMP; END;

PANGKAT := A; END;

BEGIN END.

Kemudian compile program diatas dan arahkan hasil kompilasi ke disk, bukan ke memory. Selanjutnya unit

itung.TPU bisa dipergunakan pada program. Contoh program berikut menggunakan unit itung.TPU

USES CRT,ITUNG; VAR

A,B,C : REAL; Z : INTEGER; CHOICE : CHAR; PROCEDURE PLUS; BEGIN

WRITELN('ANDA PILIH PENJUMLAHAN ..'); WRITE ('ANGKA :');READLN(A);

WRITE ('DITAMBAH : ');READLN(B); C := TAMBAH (A,B);

WRITELN(A:0:2,'+',B:0:2,'=',C:0:2 ); END;

PROCEDURE MULTIPLE; BEGIN

WRITELN('ANDA PILIH PERKALIAN '); WRITE ('ANGKA = ');READLN (A); WRITE ('DIKALI : ');READLN(B); C := KALI(A,B);

WRITELN(A:0:2,'*',B:0:2,'=',C:0:2 ); END;

PROCEDURE DEVIDE; BEGIN

WRITELN('ANDA PILIH PEMBAGIAN '); WRITE ('ANGKA = ');READLN (A); WRITE ('DIBAGI : ');READLN(B); C:= BAGI(A,B);

WRITELN(A:0:2,'/',B:0:2,'=',C:0:2 ); END;

PROCEDURE SQUARE; BEGIN

WRITELN('ANDA PILIH PANGKAT '); WRITE ('ANGKA = ');READLN (A); WRITE ('PANGKAT : ');READLN(Z);


(6)

C:= PANGKAT(A,Z);

WRITELN(A:0:2,'PANGKAT',B:0:2,'=',C:0:2 ); END;

BEGIN CLRSCR;

WRITELN ('<< MENU MAKAN >>'); WRITELN (' F1 PENJUMLAHAN '); WRITELN (' F2 PERKALIAN '); WRITELN (' F3 PEMBAGIAN '); WRITELN (' F4 PANGKAT '); WRITELN (' ESC SELESAI '); WRITELN;

REPEAT

CHOICE := READKEY ; CASE CHOICE OF #59 : PLUS; #60 : MULTIPLE ; #61 : DEVIDE; #62 : SQUARE ; END;

UNTIL CHOICE = #27 ; END.

Tugas 5 Mahasiswa :

Buat sebuah unit yang berisi kumpulan procedure dan function yang pernah anda buat mulai dari modul 1

sampai modul 4, kemudian buat contoh program yang menggunakan unit tersebut.