Saya tambahin dikit, yah,
Biar lebih jelas
Begini nih contohnya :
var c:integer; // variabel global
Procedure hitung(a:integer;var b:integer);
var c:integer; // variabel lokal
begin
a:=5;b:=10;c:=20;
writeln(a:5,b:5,c:5); //hasilnya 1=5, b=10, c=20
end;
Begin
a:=1;b:=2;c:=3;writeln(a:5,b:5,c:5); // a=1, b=2 dan c=3
hitung(a,b);
writeln(a:5,b:5,c:5); // a=1, b=10 dan c=3
readln;
end.
Koq c masih 3? Karena c yang diubah menjadi 20 adalah c lokal bukan yang global. Hati2 kalau ada 2 variabel yang sama, yang didahulukan adalah yang lokal dulu.
Penjelasannya :
- pada saat program dipanggil, maka program akan
men-set a=1, b=2 dan c=3
- Kemudian dengan perintah writeln berarti tampilkan nilai a,b,dan c
(a:5) artinya beri tempat sebanyak 5 spasi untuk menampilkan nilai a
- Kemudian perintah
hitung(a,b) berarti panggilah procedure hitung
dengan melewatkan parameter a dan b
- Di dalam procedure hitung, maka nilai a=5, b=10, dan c = 20
Kemudian ditampilkan berdasarkan perintah writeln
- Setelah itu, maka program akan kembali ke program utama
Hati-hati :
1. nilai a di program utama tidak berubah karena parameter a adalah
parameter nilai (artinya nilai a dari program utama dilewatkan ke dalam procedure
tapi nilai a dari procedure tidak dikembalikan ke program utama)
2. nilai b di program utama berubah karena parameter b adalah
parameter variabel (artinya nilai b dari program utama dilewatkan ke dalam procedure
kemudian nilai b dari procedure dikembalikan ke program utama)
3. nilai c di program utama tidak berubah karena di walaupun di awal program
dideklarasikan variabel global c, tetapi karena di dalam procedure sendiri terdapat
deklarasi variabel lokal c, maka nilai untuk c di program utama akan masuk ke variabel
c yang global, sedangkan nilai untuk c di dalam procedure akan masuk ke variabel c
yang lokal. (penjelasan lengkapnya di kelas aja, yah) ^ ^.
- Kemudian program akan menampilkan kembali nilai a,b,dan c berdasarkan perintah writeln