Prosedur (procedure) #pascal

Prosedur (procedure) merupakan suatu blok kode program yang disusun untuk menyelesaikan masalah umum. Misalkan dalam bahasa pemrograman pascal dikenal prosedur-prosedur seperti writeln, clrscr, textbackground, textcolor, readln, dsb. Pemanggilan prosedur-prosedur tersebut bervariasi antara satu prosedur dengan prosedur yang lainnya. Misalkan prosedur clrscr yang berfungsi untuk menghapus seluruh tulisan di layar monitor dan meletakkan posisi kursor di X=0 dan Y=0. Prosedur clrscr dalam pemanggilannya tidak membutuhkan parameter; prosedur writeln/write berufungsi untuk mencetak keluaran (output) ke layar monitor. Prosedur writeln/write bisa dipanggil dengan mengikutkan parameter atau tanpa mengikutkan parameter. Sebagai contoh diinstruksikan ke penterjemah (compiler) Pascal untuk memindahkan posisi kursor turun satu baris (Nilai Y Bertambah) dan X tetap di posisi 0 seperti terlihat pada kode berikut:

begin
writeln;
end.

Pada kode di atas dipanggil prosedur writeln tanpa diikuti parameter. Pascal memahami bahwa bila pemanggilan prosedur writeln tanpa parameter maka posisi kursor di monitor berubah yaitu kursor kembali ke posisi X=0 (Carriage Return) dan Posisi Y tambah Satu – Turun Satu Baris (Line Feed).

Contoh lainnya kita bisa menyuruh prosedur writeln untuk mencetak perkalian 10*10:

begin
writeln(10*10);
end.

Kode di atas dapat dijelaskan bahwa kita memanggil prosedur writeln dengan mengirimkan parameter perkalian 10*10. Karena prosedur writeln merupakan prosedur yang sudah siap pakai (built in procedure) atau sudah didefenisikan oleh pascal makan detail dari instruksi di dalam prosedur writeln tidak kita ketahui dengan pasti.

Kita juga bisa menyuruh perintah writeln untuk mencetak untaian karakter (string) “STT DUTA BANGSA”:

begin
writeln(‘STT DUTA BANGSA’);
end.

Atau gabungan dari nilai dan konstata seperti berikut:
begin
writeln(10*10,’STT DUTA BANGSA’);
end.

Keluwesan prosedur writeln tentu akan sangat membantu dalam pemberian perintah ke komputer.

Prosedur Buatan Pemakai
Pascal memungkinkan programmer untuk membuat prosedur sendiri (user defined procedure). Tata cara (syntax) pendeklarasian prosedur buatan pemakai adalah:

procedure namaprosedur([par1,par2,par3,…parn]);
{deklarasi variabel}
{deklarasi prosedur}
{deklarasi fungsi}
{deklarasi konstanta}
{deklarasi label}

begin
<pernyataan>
end;

Prosedur yang telah dikelarasikan selanjutnya dapat dipanggil dari program utama atau dari prosedur itu sendiri atau prosedur lainnya.

Berikut ini akan dibuat suatu prosedur untuk mencetak alamat STT DUTA BANGSA:

Program CetakAlamat;
uses crt;
procedure Alamat();
begin
writeln(‘
STT DUTA BANGSA Bekasi’);
writeln(‘Jln.Raya Cibarusah ’);
end;

Begin
clrscr;
{Memanggil Prosedur Alamat}
Alamat();
End.

Prosedur Berparameter
Prosedur yang diberi tugas khusus dapat menerima parameter sesuai dengan kebutuhan. Misalkan terdapat diinginkan prosedur untuk mencetak bilangan 1 s.d N. Disini nilai N tidak pasti, bisa 10, 20, 100. Untuk itu pada saat pemanggilan prosedur kita kirimkan nilai N dan prosedur selanjutnya memproses pencetakan angka 1 s.d N.


Program CetakAngka;
Uses Crt;

Procedure CetakAngka1Sd(N: Byte);
Var
I: Byte; {Deklarasi Lokal}
Begin
For I:=1 To N Do
writeln(I);
End;

{Program Utama}
Begin
{Bersihkan layar}
clrscr;
{Panggil Prosedur Cetak 1 s.d 20}
CetakAngka1SD(20);
{Panggilan Lagi Prosedur Cetak Angka 1 s.d 100}
CetakAngka1SD(100);
Readln; {Tunggu Penekanan Tombol Enter}
End.

Parameter Nilai dan Parameter Acuan
Secara umum parameter yang dikirimkan ke prosedur merupakan parameter nilai artinya nilai parameter tidak akan berubah setelah pemanggilan prosedur. Bila diinginkan perubahan nilai parameter setelah pemanggilan prosedur, parameter seperti ini disebut parameter acuan.

Buatlah prosedur untuk menghitung jumlah deret berikut:
1/1+1/2+1/3+…1/N
Diinginkan banyaknya N tidak pasti dan sekaligus hasil penjumlahan terlihat setelah pemanggilan prosedur. Dengan demikian dibutuhkan 2 (dua) buah parameter yaitu N (parameter nilai) dan Jumlah(parameter acuan).


Program Jumlah_Deret;
Uses Crt;

Procedur Jumlah (N : Byte; Var Jumlah : Real);
Var
I : Byte;
Begin
Jumlah:=0;
For I:=1 To N Do
Jumlah:=Jumlah + 1/I
End;

Var
Cacah_Data : Byte;
Hasil : Real;
Begin
clrscr;
Cacah_Data:=10;
{Panggil Prosedur}
Jumlah(Cacah_Data,Hasil);
writeln(‘Jumlah Deret’,Hasil:8:2);
Readln;
End.

Lingkup Variabel
Lingkup variabel (variabel scope) menggambarkan daya akses dari variabel tersebut. Dalam Pascal terdapat 2 (dua) jenis ruang lingkup yaitu ruang lingkup global dan lokal. Ruang lingkup global menandakan bahwa variabel tersebut akan dikenali diseluruh kode program. Ruang lingkup lokal menandakan bahwa variabel tersebut hanya dikenal ditempatnya dideklarasikan.

Misalkan terdapat program seperti berikut:

Var
IGlobal : Byte;

Procedure LokalSatu;
Var
ILokal1 : Byte;
Begin
ILokal1:=10;
Writeln(ILokal1,IGlobal);
End;

Procedure LokalDua;
Var
ILokal2 : Byte;
Begin
ILokal2:=20;
Writeln(ILokal2,IGlobal);
End;

{Program Utama}
Begin
IGlobal:=10;
Lokal;
End.

Pada kode di atas variabel IGlobal akan dikenali di seluruh kode program (baik di Program Utama, Prosedur LokalSatu, Prosedur LokalDua). Sedangkan variabel ILokal1 hanya akan dikenal di prosedur LokalSatu. Begitu juga variabel ILokal2 hanya akan dikenal di prosedur LokalDua.

Kita perhatikan lagi kode program berikut:

Program Lingkup_Lingkup;
Var
I : Byte;
Procedure Terluar;
Var
ITerluar : Byte;
Procedure Terdalam;
Var
ITerdalam : Byte;
Begin
ITerdalam:=20;
writeln(I,ITerluar,ITerdalam);
End;
Begin
ITerluar:=10;
{Panggil Prosedur Terluar}
End;

{Program Utama}
Begin
I :=5;
Terluar;
End.

Pada kode program di atas I bersifat global artinya akan dikenali di program utama, prosedur terluar dan prosedur terdalam. Variabel ITerluar akan bersifat global di prosedur tersebut sehingga variabel tersebut akan dikenali prosedur-prosedur yang dideklarasikan dalam prosedur tersebut. Namun variabel ITerluar tidak akan dikenali oleh Program Utama. Variabel ITerdalam hanya akan dikenali oleh Prosedur Terdalam.

Prosedur Rekursif
Prosedur yang memanggil dirinya sendiri disebut sebagai prosedur rekursif. Misalkan terdapat kode program seperti berikut ini:

Procedure Cetak;
Begin
writeln(‘Duta Bangsa’);
{Prosedur Memanggil Dirinya Sendiri}
Cetak;
End;

{Program Utama}
Begin
{Panggil Prosedur}
Cetak;
End.

Kode program di atas dapat dijelaskan sebagai berikut:
1. Mulai
2. Panggil Prosedur Cetak
3. Cetak string ‘Duta Bangsa
4. Panggil Prosedur Cetak
5. Cetak string ‘Duta Bangsa
6. Panggil Prosedur Cetak
7. Cetak string ‘Duta Bangsa
8. dst

Pemanggilan terhadap dirinya sendiri akan tetap dilakukan Prosedur Cetak karena tidak ada pernyataan yang menghentikan pemanggilan. Pemanggilan ini akan terus berlangsung terus-menerus (continues call).
Untuk mengatasi masalah ini maka perlu dibuat suatu pernyataan yang membatasi pemanggilan prosedur. Misalkan kode program di atas kita ubah seperti berikut ini:


Var
I : Byte;
Procedure Cetak;
Begin
IF (I<=5) Then
begin
writeln(‘Respati’);
{Prosedur Memanggil Dirinya Sendiri}
Cetak;
I:=I+1;
end;
End;

{Program Utama}
Begin
I:=1;
{Panggil Prosedur}
Cetak;
End.

Pada kode di atas prosedur Cetak hanya akan dipanggil sebanyak 5x seperti yang dinyatakan dalam kondisi IF (I<=5). Jika I>5 maka prosedur Cetak tidak akan dipanggil lagi. Umumnya ditentukan suatu kondisi yang memberhentikan pemanggilan prosedur pada dirinya sendiri.

Parameter Bertipe Array
Parameter bertipe array dapat dikirimkan ke prosedur dengan sedikit perbedaan dari parameter bertipe konvesional (byte, word, integer, real).

Program Jumlah_Data;
Const
N=100;
Type
Data : Array[1..N] Of Single;
Var
AData : Data;

Procedure Jumlah(DataA : Data,Cacah:Byte)’
Begin
For I:=1 To N Do
Jlh:=Jlh+DataA[I];
writeln(‘Jumlah Data Adalah’,Jlh:12:0);
End;

{Program Utama}
Begin
{masukkan data}
AData[1]:=70;
AData[1]:=65.5;
AData[1]:=89;
AData[1]:=77;
AData[1]:=64;
AData[1]:=78.5;
{Panggil Prosedur Jumlah Data}
Jumlah(AData,6);
Readln;
End.

Latihan Prosedur
Diketahui data berat mahasiswa Prodi Sistem Informasi seperti dibawah ini:
65,78,58,60,63,56,65,69,77
Buatlah prosedur untuk :
1.menginputkan N Buah data
2.menghitung jumlah, rata-rata dan standar deviasi berat
3.mengurutkan data secara menaik (ascending)
4.mengurutkan data secara menurun (descending)
5.melihat isi array

Untuk menyelesaikan kasus tersebut akan dibuat menu dalam bentuk pilihahan sehingga memudahkan dalam penggunaan program.
Menu Pilihan
1. Input Data
2. Tentukan Jumlah, Rata-Rata dan Standar Deviasi
3. Urutkan Data Secara Menaik
4. Urutkan Data Secara Menurun
5. Tampilkan Isi Array
Pilihan Anda [1..5] :


Program Statistik;
Uses Crt;
Const
N = 100;

{Deklarasi Prosedur Input Berat}
Procedure Input_Berat(Berat_Mhs : Berat; N : Byte);
Var
I : Byte;
Begin
For I:=1 To N Do
Begin
write(‘Masukkan Berat Ke’,I,’:’);readln(Berat_Mhs[I]);
End;
End;

{Program Utama}
Var
Ulang : Boolean;
Pil : ShortInt;
Begin
Ulang:=True;
While (Ulang) Do
Begin
clrscr;
gotoxy(25,1);write(‘M E N U U T A M A’);
gotoxy(25,2);write(‘————————-’);
gotoxy(25,3);write(‘1. Input Data’);
gotoxy(25,4);write(‘2. Tentukan Jumlah, Rata-Rata, Standar Deviasi’);
gotoxy(25,5);write(‘3. Urutkan Berat Secara Menurun’);
gotoxy(25,6);write(‘4. Urutkan Berat Secara Menaik’);
gotoxy(25,7);write(‘5. Tampilkan Array’);
gotoxy(25,8);write(‘0. Selesai’);
pil:=-1;
while (pil<0)or (pil>5) do
begin
gotoxy(25,9);write(‘Pilihan Anda [0..5] : ‘);readln(pil);
end;
{Uji Pilihan}
Case (Pil) Of
1 : Begin {Input Data Berat}

End;
2 : Begin {Tentukan Jumlah, Rata-Rata dan Standard Deviasi}

End;
3 : Begin {Urutkan Secara Ascending}

End;
4 : Begin {Urutkan Secara Descending}

End;
5 : Begin {Tampil Isi Array}

End;
0 : Begin {Program Selesai}

End;
End; {Akhir Case}
End;{Akhir While}
End. {Akhir Program}

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: