Selasa, 15 Desember 2009

SUB PROGRAM

SUB PROGRAM

Subprogram digunakan untuk:
Penghematan kode program
Menyederhanakan persoalan dengan memecahnya menjadi sub-persoalan.
Membagi program menjadi elemen-elemen yang lebih kecil.
Diperlukan mekanisme pemanggilan subprogram dari program utama.

Subprogram dalam turbo pascal ada 2 macam:

1.Fungsi

Semua fungsi mempunyai sifat memberikan nilai (disebut hasil fungsi) pada saat dipanggil.
Contoh penggunaan fungsi yang benar adalah sebagai berikut:
X:=sqrt(100)
Sqrt berkedudukan sebagai operand dari operator penugasan (:=).
Suatu fungsi umumnya mempunyai argument atau parameter. Parameter ditulis di dalam tanda kurung. Namun fungsi bisa saja tidak memiliki parameter, contohnya dalah pi dan random.
Bentuk deklarasinya adalah sebagai berikut:

FUNCTION nama_fungsi (daftar_parameter):Tipe;
Bagian_deklarasi
Bagian_pernyataan;

Contoh judul deklarasi judul fungsi:
FUNCTION Tambah (A:real; B:real):Real;
Contoh ini menunjukkan bahwa fungsi tambah mempunyai dua buah parameter yang masing-masing bertipe real. Selain itu, hasil fungsi juga bertipe real.

Parameter Formal dan Aktual, Variabel Lokal dan Global

Parameter formal (terdapat pada subprogram): parameter yang terdapat pada pendeklarasian judul subprogram, baik pada fungsi maupun prosedur.
Contoh: FUNCTION Tambah (A, B:Real)
A, B merupakan parameter formal.

Parameter aktual (terdapat pada program utama): parameter yang terdapat pada pemanggilan fungsi atau prosedur.
Contoh: Tambah (10,30)
10 dan 30 merupakan parameter aktual.

2.Prosedur

Prosedur adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai subprogram (program bagian). Diawali dengan kata cadangan “Procedure” didalam bagian deklarasi prosedur. Prosedur banyak digunakan pada program yang terstruktur karena :

- merupakan penerapan konsep program modular, yaitu memecah-mecah program yang rumit menjadi program-program bagian yang lebih sederhana dalam bentuk prosedur-prosedur.

- Untuk hal-hal yang sering dilakukan berulang-ulang, cukup dituliskan sekali saja dalam prosedur dan dapat dipanggil atau dipergunakan sewaktu-waktu bila diperlukan.

Bentuk Umum :
PROGRAM judul_program ;
PROCEDURE judul_prosedur ;
Begin
Statement prosedur ;



End ;
Begin
Statement program utama ;



end.
2.1 Parameter Dalam Prosedur
Nilai didalam modul program Pascal sifatnya adalah local, artinya hanya dapat digunakan pada modul atau unit program yang bersangkutan saja, tidak dapat digunakan pada modul atau unit program yang lainnya.
Contoh program :
Procedure Tanya_hitung ;
Var
X, Y : real ;
Begin
Write (‘Nilai X =’) ;
Readln (X) ;
Y : = X * X ;
End ;
Begin
Tanya_hitung ;
Writeln (‘Nilai Y =’, Y : 6 : 2 ) ;
End.
Keterangan contoh program :
Bila program dikompilasi, akan di deteksi kesalahan oleh compiler, karena variable Y yang sifatnya local di procedure Tanya_hitung digunakan pada program utama.
Agar nilai-nilai variable dapat digunakan di modul lainnya yang membutuhkan, maka dapat dilakukan dengan beberapa cara, yaitu :

- Dibuat bersifat global.
Harus di deklarasikan diatas modul yang akan menggunakannya.
Contoh :
Procedure kesatu ;
Begin

End ;
Var
A, B : word ;
Procedure kedua ;
Begin

End ;
Procedure ketiga ;
Begin

End ;
Begin { program utama }

End.
Keterangan contoh :
Variabel A dan B dapat digunakan untuk modul Procedure kedua dan ketiga serta modul/program utama, tetapi tidak bersifat global untuk procedure kesatu.

- Dikirimkan sebagai parameter ke modul yang membutuhkannya.
Parameter yang dikirmkan dari modul utama ke modul prosedur disebut dengan parameter nyata (actual parameter) dan parameter yang ada dan dituliskan pada judul prosedur disebut dengan parameter formal (formal parameter). Proses pengiriman data lewat parameter nyata ke parameter formal disebut dengan parameter passing. Parameter nyata dan parameter formal harus dengan tipe yang sama. Didalam pascal, parameter dapat dikirimkan secara nilai (by value) atau secara acuan (by reference).


2.1.1 Pengiriman Parameter Secara Nilai

Bila parameter dikirimkan secara nilai nilai, parameter formal di prosedur akan berisi nilai yang dikirmkan yang kemudian bersifat local di prosedur. Bila nilai parameter formal di prosedur berubah, tidak akan mempengaruhi nilai parameter nyata ( nilai parameter nyata tetap, tidak berubah). Pengiriman secara nilai ini merupakan pengiriman searah, yaitu dari parameter nyata ke parameter formal, yang tidak dikirimkan balik dari parameter formal ke parameter nyata.
Parameter – parameter yang digunakan dengan pengiriman secara nilai ini disebut dengan parameter nilai ( value parameter ).
Contoh program :
Procedure Hitung(A, B : integer ) ;
Var
C : integer ;
Begin
C : = A + B ;
Writeln (‘Nilai C =’, C ) ;
End ;
Var
X, Y : integer ;
Begin
Write ( ‘Nilai X =’ ) ; readln ( X ) ;
Write ( ‘Nilai Y =’ ) ; readln ( Y ) ;
Hitung ( X, Y ) ;
End.
Output program :
Nilai X = 2
Nilai Y = 3
Nilai C = 5
Penjelasan program :

- prosedur dimulai dengan deklarasi prosedur dengan judul prosedur hitung. Variable A dan B adalah parameter formal dan integer adalah tipe parameternya.

- Variable local yang hanya dipergunakan di prosedur dan tidak termasuk parameter formal (parameter nilai), harus didefinisikan sendiri, yaitu : variable C

- Hubungan antara parameter formal di prosedur dengan parameter nyata di modul utama adalah : nilai parameter nyata X dan Y di modul utama dikirimkan ke parameter formal A dan B di prosedur. Dengan demikian nilai parameter A dan B diprosedur akan berisi nilai yang sama dengan parameter X dan Y di modul utama.

2.1.2 Pengiriman Parameter Secara Acuan
Bila pengiriman parameter secara acuan, maka perubahan-perubahan yang terjadi pada nilai parameter formal di prosedur akan mempengaruhi nilai parameter nyata. Parameter-parameter ini disebut dengan variable parameter serta dideklarasikan di deklarasi prosedur dengan menggunakan kata cadangan Var, sebagai berikut :
PROCEDURE hitung (VAR A, B, C : integer ) ;
Contoh program :
Procedure Hitung ( var A, B, C : integer ) ;
Begin
C : = A + B ;
End ;
Var
X, Y, Z : integer ;
Begin
X : = 2 ; Y : = 3 ;
Hitung ( X, Y, Z ) ;
Writeln (‘ X = ‘, X , ‘ Y = ‘ , Y, ‘ Z = ‘ , Z ) ;
End.
Output program :
X = 2 Y = 3 Z = 5
Penjelasan program :

- pengiriman parameter secara acuan merupakan pengiriman dua arah, bolak-balik, sehingga perubahan nilai di parameter formal akan mempengaruhi nilai parameter nyata juga. Pada contoh, nilai parameter nyata Z akan mengikuti perubahan nilai dari parameter formal C.

2.1.3 Pengiriman Parameter Sebagian Secara Nilai, Sebagian Acuan
Pengiriman parameter dapat dicampur sebagian secara nilai dan sebagian secara acuan dalam suatu prosedur. Parameter yang hanya dibutuhkan pada prosedur saja dapat dikirimkan secara nilai dan yang ingin dikirimkan balik dapat dilakukan secara acuan, sebagai berikut :
PROCEDURE Hitung ( A, B : integer ; Var C : integer ) ;
Contoh program :
Procedure Hitung ( A, B : integer ; Var C ; integer ) ;
Begin
C : = A + B ;
End ;
Var
X, Y, Z : integer ;
Begin
X : = 2 ; Y : = 3 ;
Hitung ( X, Y, Z ) ;
Writeln ( ‘ X = ‘, X , ‘ Y = ‘, Y , ‘ Z = ‘, Z ) ;
End.
Output program :
X = 2 Y = 3 Z = 5
1.2 Prosedur Memanggil Prosedur Yang Lain
Prosedur dapat memanggil prosedur yang lainnya.
Contoh program :
Procedure Pro1 ( X1 : integer ) ;
Begin
Writeln ( ‘Nilai X = ‘, X1, ‘ada di prosedur Pro1’ ) ;
End ;
Procedure Pro2 (X2 : integer ) ;
Begin
Writeln ( ‘Nilai X = ‘, X2, ‘ada diprosedur Pro2’ ) ;
Pro1 (X2) ;
End ;
Var
X : integer ;
Begin
X : = 5 ;
Pro2 ( X ) ;
End.
Output program :
Nilai X = 5 ada diprosedur Pro2
Nilai X = 5 ada diprosedur Pro1
1.3 Prosedur Tersarang
Adalah prosedur yang berada didalam prosedur yang lainnya.
Bentuk Umum :
Program
Procedure
Procedure
Begin



End ;
Begin



End ;
Begin



end .
Contoh fungsi
1.Program Latihan_Function;
uses wincrt;
var
x,y:longint;
Function Tambah(a,b:longint):longint;
var
Hasil:longint;
begin
Hasil:=a+b;
Tambah:=Hasil;
end;

begin
write('Masukkan bilangan pertama: ');readln(x);
write('Masukkan bilangan kedua: ');readln(y);
write('Hasilnya adalah ',(Tambah(x,y)));
end.

2.Program Menukar_Nilai_A_dan_C;
uses wincrt;
var
A,B,C:longint;

Function Tukar(Var A1,B1,C1:longint):longint;
var
temp:longint;
begin
temp:=A1;
A1:=C1;
C1:=temp;
end;

begin
write ('Masukkan Nilai A=');readln (A);
write ('Masukkan Nilai B=');readln (B);
write ('Masukkan Nilai C=');readln (C);
Tukar(A,B,C);
writeln ('Nilai A setelah ditukar ',A);
writeln ('Nilai B setelah ditukar ',B);
writeln ('Nilai C setelah ditukar ',C);
end.
3.Program Fungsi;
uses wincrt;
var x,y:integer;
FUNCTION Tambah (A,B:real):real;
var
Hasil:real;
begin
Hasil:=A+B;
Tambah:=Hasil;
end;
begin
clrscr;
writeln (Tambah(10,30):1);
end.
Program Fungsi;
uses wincrt;
var x,y:integer;
FUNCTION Tambah (A,B:real):real;
var
Hasil:real;
begin
Hasil:=A+B;
Tambah:=Hasil;
end;
begin
write('masukkan nilai x = ');readln (x);
write('masukkan nilai y = ');readln (y);
writeln (Tambah(x,y):1);
end.
Contoh procedure
1.Program Operasi_Tambah_Kurang_Kali_Procedure;
uses wincrt;
Procedure Penjumlahan(Var a,b:longint);
var
c:longint;
begin
writeln ('Operasi yang anda pilih adalah Penjumlahan');
gotoxy (20,5); write ('Masukkan bilangan pertama=');readln (a);
gotoxy (20,6); write ('Masukkan bilangan kedua=');readln (b);
c:=a+b;
gotoxy (20,7); writeln ('Hasil Penjumlahan adalah ',c);
end;

Procedure Pengurangan(Var a,b:longint);
var
d:longint;
begin
writeln ('Operasi yang anda pilih adalah Pengurangan');
gotoxy (20,5); write ('Masukkan bilangan pertama=');readln (a);
gotoxy (20,6); write ('Masukkan bilangan kedua=');readln (b);
d:=a-b;
gotoxy (20,7); writeln ('Hasil Pengurangan adalah ',d);
end;

Procedure Perkalian(Var a,b:longint);
var
e:longint;
begin
writeln ('Operasi yang anda pilih adalah Perkalian');
gotoxy (20,5); write ('Masukkan bilangan pertama=');readln (a);
gotoxy (20,6); write ('Masukkan bilangan kedua=');readln (b);
e:=a*b;
gotoxy (20,7); writeln ('Hasil Perkalian adalah ',e);
end;

var
a,b,c,d,e,i:longint;
f,y,n:string;
begin
f:='y';
while f='y' do
begin
gotoxy (25,3); writeln ('Menu Opersai Dua Bilangan');
gotoxy (25,5); writeln ('1. Penjumlahan');
gotoxy (25,6); writeln ('2. Pengurangan');
gotoxy (25,7); writeln ('3. Perkalian');
gotoxy (25,9); write ('Masukkan Pilihan Anda= '); readln (i);
clrscr;
gotoxy (20,3); If i=1 then
begin
penjumlahan(a,b);
end
else If i=2 then
begin
pengurangan(a,b);
end
else If i=3 then
begin
perkalian(a,b);
end
else writeln ('Pilihan Anda Salah');
gotoxy (20,9); write ('Apakah anda ingin mengulang(y/n)?');read (f);
clrscr;
end;
end.
2.Program procedur1;
uses wincrt;
procedure kuadrat;
var
x,y:real;
begin
write ('nilai x = ');readln(x);
y:=x*x;
writeln ('nilai y =',y:6:2);
end;
begin
kuadrat;
end.

Tidak ada komentar:

Posting Komentar