Selasa, 28 Februari 2012

Tutorial Turbo Pascal 7.0 Part7

Anda ingat bahwa turbo pascal 7.0 adalah bahasa pemrograman yang terstruktur, yang artinya program yang kita buat harus terstruktur dan teratur. Salah satu usaha untuk usaha kearah sana adalah memecah program kita menjadi sub-sub program dengan menggunakan procedure dan function. Nah pada tutorial turbo pascal 7.0 Modul 7 kali ini kita akan membahas tentang procedure dan function.

Procedure dan Function


Procedure dan function merupakan sub-program yang memiliki bagian deklarasi dan begin-end; tersendiri layaknya suatu program pascal. Tujuan pemakaian procedure maupun function adalah untuk memecah program kita menjadi kesatuan logika yang lebih kecil (sub-sub program) untuk menghindari perulangan pengetikan dan memudahkan pembacaan.

Contoh pemakaian procedure :
uses crt;
begin
clrscr;
writeln('ABC');
writeln('Press any key when ready ...');
readkey;
writeln('Hey, let''s pause !');
writeln('Press any key when ready ...');
readkey;
writeln('Pause again !');
writeln('Press any key when ready ...');
readkey;
end.

Dengan memecah program kita menjadi kesatuan yang lebih kecil :

uses crt;
procedure pause;
begin
writeln('Press any key when ready ...');
readkey;
end;
begin
clrscr;
writeln('ABC');
pause;
writeln('Hey, let''s pause !');
pause;
writeln('Pause again !');
pause;
end.

Contoh pemakaian function :
Var
I : Byte;
Akar,Bagi : Word;
Begin
Writeln(Upper('Bilangan Prima dari 1 s/d 100');
Writeln(Replicate('-',30);
For I := 1 To 100 do
If (Bil > 1 And Bil < 4) Then
Write(I : 4)
Else
Begin
Akar := Round(Sqrt(Bil));
Bagi := 3;
While (Bagi <= Akar) And (Bil Mod Bagi <> 0) Do
Bagi := Bagi + 1;
If Bagi > Akar Then
Write(I : 4);
End;
End.

Dan contoh berikut yang menggunakan function :
Function IsPrime (Num : Longint) : Boolean;
Var
Sq ,Dv : Word; (*local variable )
Begin
If Num < 2 Then
IsPrime := False
Else
If Num < 4 Then
IsPrime := Bil > 1
Else
Begin
Sq := Round(Sqrt(Num));
Dv := 3;
While (Dv <= Sq) And (Num Mod Dv <> 0) Do
Dv := Dv + 1;
IsPrime := Dv > Sq;
End;
End;
(* Main program*)
Var
I : Byte; (*local variable*)
Begin
Writeln(Upper('Prime number from 1 to 100');
Writeln(Replicate('-',30);
For I := 1 To 100 do
If IsPrima(I) Then
Write(I : 4);
End.

Variabel local
Pada program utama, procedure maupun function dapat memiliki variabel masing masing, dimana ruang lingkup pemakaiannya hanya berlaku pada program utama, procedure maupun function dimana variabel tersebut dideklarasi.
Contoh :
procedure foo;
var a : byte;
begin
a:=10;
writeln(a);
end;
begin { main begin...end block }
foo;
a:=15; { This will be an error, since a is only known inside foo }
end.

Variabel global
Global variabel adalah variabel yang ruang lingkup pemakaiannya meliputi seluruh program, baik program utama, procedure maupun function.
Contoh:
var
b : byte; { global variabel }
procedure foo;
var a : byte;
begin
a:=10;
b:=15; { This is legal }
end;
begin { main begin...end block }
foo;
a:=15; { This is illegal }
b:=5; { This is perfectly legal }
end.

Jadi variabel global harus dideklarasi diatas semua procedure maupun function.

Global variabel akan di override apabila memiliki nama yang sama dengan Local Variabel. Pada suatu program yang terstruktur dengan baik, usahakan untuk menggunakan variabel Global seminimal mungkin.
Contoh :
uses crt;
var
a : byte; { This is the global variable }
procedure foo;
var
a : byte; { This is local variable }
begin
a:=15;
writeln('foo is ',a); { Will print 15}
end;
begin
a:=10;
writeln(a); { Will print 10}
foo;
writeln(a); { Still print 10}
end.

Perbedaan procedure dan function
Pada prinsipnya function mengembalikan nilai.

Syntax untuk procedure :
Procedure namaprocedure (deklarasi parameter);
Deklarasi variabel local
begin
:
{ commands }
:
:
end;

Syntax untuk function :
function namafunction (deklarasi parameter) : returntype;
Deklarasi variabel local
begin
:
{ commands }
:
namafunction := return value;
end;

Coba perhatikan kembali contoh Isprima untuk lebih jelas. Sebenarnya apa fungsi deklarasi parameter pada procedure maupun function ?
Pada deklarasi bagian deklarasi parameter kita menentukan parameter dan type data dari masing-masing parameter yang akan dikirim kedalam procedure maupun function.

procedure makewin(x1,y1,x2,y2 : byte);
var
i,j : byte;
begin
gotoxy(x1,y1); write(#201); {top}
for i:=x1+1 to x2-1 do write(#205);
write(#187);
for i:=y1+1 to y2-1 do {middle}
begin
gotoxy(x1,i); write(#186);
for j:=x1+1 to x2-1 do write(' ');
write(#186);
end;
gotoxy(x1,y2); write(#200); {bottom}
for i:=x1+1 to x2-1 do write(#205);
write(#188);
end;
begin
makewin(1,1,30,8);
makewin(10,10,60,18);
end.

Dan contoh untuk function :
function factorial(n : byte):longint;
var
i : byte;
result : longint;
begin
result:=1;
for i:=1 to n do
result:=result*i;
factorial:=result;
end;
var
x : byte;
begin
writeln('Enter a value : '); readln(x);
writeln(x,'! is ',factorial(x));
end.

Kalau kita bisa mengirim nilai kedalam procedure maupun function, apakah bisa
juga sebaliknya ?
Pada contoh diatas nilai parameter di kirim secara PASS BY VALUE. Kita dapat juga mengirim parameter secara PASS BY REFERENCE dengan menambah Var pada saat deklarasi masing-masing parameter, dalam hal ini yang dikirim kedalam procedure maupun function adalah alamat dari variabel tersebut.
Contoh :
(*Pass by value*)
procedure foo(a : byte);
begin
writeln(a); {15}
a:=10;
writeln(a); {10}
end;
var
x : byte;
begin
x:=15;
writeln(x); {15}
foo(x);
writeln(x); {15}
end.

(*Pass by reference*)
procedure foo(var a : byte);
begin
writeln(a); {15}
a:=10;
writeln(a); {10}
end;
var
x : byte;
begin
x:=15;
writeln(x); {15}
foo(x);
writeln(x); {10}
end.

Suatu function Bisa memanggil dirinya sendiri
Misalnya dalam menghitung faktorial.
5! = 4! * 5
4! = 3! * 4
2! = 1! * 2
1! = 1

Jadi kita secara programming dapat dilakukan dengan :
function factorial (n:byte):factorial;
begin
if n<2 then { This is the terminating condition }
factorial:=1;
else
factorial:=n*factorial(n-1); { This is the recursive part }
end;
var
`` x : byte;
begin
writeln('Enter a value : '); readln(x);
writeln(x,'! is ',factorial(x));
end.

Sesuatu hal yang perlu diperhatikan dalam pembuatan fungsi rekursif adalah harus adanya suatu titik akhir, sehingga rekursif dapat selesai.

Sekian Dulu ya untuk Modul 7 nya.. Untuk Kelanjutannya baca di Modul 8 ya.. dan untuk melihat postingan sebelumnya tentang Turbo Pascal baca di Modul 6

Tidak ada komentar:

Posting Komentar