Sub Program

1. Pemrograman Modular
Modular programming adalah merupakan suatu teknik untuk menulis program yang berukuran besar. Program dibagi menjadi beberapa bagian kecil. Tiap bagian disebut module, yang melakukan suatu tugas tertentu.
Contoh :
• Menampilkan menu pilihan
• Menghitung nilai rata-rata
• Mensortir data

Pascal mengenal module sebagai:
1. PROCEDURE (terbagi menjadi dua)
a) Procedure Sederhana tidak menerima argumen (nilai atau data) ketika dieksekusi.
b) Procedure Kompleks menerima nilai yang diproses ketika dieksekusi.
2. FUNCTION : Function, ketika dieksekusi menghasilkan suatu nilai.

Procedure mendukung desain program terstruktur, dengan membolehkan membuat module secara terpisah.
a. Procedure Sederhana
Procedure sederhana dipakai untuk menampilkan pilihan menu, dsb. procedure (module) tersebut terdiri atas beberapa pernyataan (statements), yang dikelompokkan dengan kata kunci begin dan end . Setiap procedure mempunyai nama. Seperti contoh berikut:
SYNTAX

PROCEDURE NAMA;
begin
:
pernyataan
:
end;

Contoh a.

PROCEDURE DISPLAY_MENU;
begin
writeln('Pilihan Menu');
writeln(' 1: Edit file teks');
writeln(' 2: buka file teks ');
writeln(' 3: Simpan file teks);
writeln(' 4: Kopi file teks’);
writeln(' 5: Cetak file teks’)
end;

contoh berikut adalah program untuk menampilkan menu:
Contoh b.

program PROC1 ;
uses wincrt;
PROCEDURE DISPLAY_MENU;
begin
writeln('Pilihan Menu');
writeln(' 1: Edit file teks');
writeln(' 2: buka file teks ');
writeln(' 3: Simpan file teks);
writeln(' 4: Kopi file teks’);
writeln(' 5: Cetak file teks’)
end;
end;
begin
writeln('memanggil prosedur');
DISPLAY_MENU;
writeln('kembali dari prosedur')
end.

Contoh c.

program SIMPLE_PROCEDURE;
uses wincrt;
var waktu, jarak, kecepatan : real;
procedure tampilan_judul;
begin
writeln('Menghitung jarak tempuh berdasar pada');
writeln('dua variabel yaitu: kecepatan dan waktu');
end;
procedure masukkan_data;
begin
write('Masukkan kecepatan dalam km/jam: ');
readln(kecepatan);
write('Masukkan waktu dalam jam : ‘);
readln(time)
end;
procedure hitung_jarak;
begin
jarak:= kecepatan *waktu
end;
procedure tampilkan_hasil;
begin
writeln('jarak yang ditempuh adalah ',jarak:5:2,' km.')
end;
begin {program utama}
tampilan_judul;
masukkan_data;
hitung_jarak;
tampilkan_hasil
end.


Output program:


Menghitung jarak tempuh berdasar pada
dua variabel yaitu: kecepatan dan waktu
Masukkan kecepatan dalam km/jam: 30
Masukkan waktu dalam jam : 2
jarak yang ditempuh adalah 60 km

catatan : ketiga variabel waktu, jarak,dan kecepatan adalah berlaku untuk semua procedure sehingga disebut variabel GLOBAL.

Contoh d.

program Kalkulator_sederhana;
uses wincrt;
var salah_tanda : boolean;
operator : char;
angka_1, angka_2, hasil : real;
procedure PERKALIAN;
begin
hasil := angka_1 * angka_2
end;
procedure PEMBAGIAN;
begin
hasil := angka_1 / angka_2
end;
procedure PENJUMLAHAN;
begin
hasil := angka_1 + angka_2
end;
procedure PENGURANGAN;
begin
hasil := angka_1 - angka_2
end;
procedure MASUKAN;
begin
writeln(‘MASUKKAN DUA ANGKA DAN OPERATOR);
writeln(' angka_1 operator angka_2');
readln(angka_1);
...readln(operator);
...readln(angka_2)
end;
begin
salah_tanda:= FALSE;
MASUKAN;
case operator of
'*': PERKALIAN;
'/': PEMBAGIAN;
'+': PENJUMLAHAN;
'-': PENGURANGAN;
else salah_tanda := TRUE
end;
if invalid_operator then
writeln('Invalid operator')
else
writeln(angka_1:4:2,' ',operator,' ',angka_2:4:2,'=',hasil:5:2)
end.

2. Jangkauan Variabel
a. Variabel Global
Variabel global adalah variabel yang didefinisikan/terletak pada program utama, dimana semua sub-program bisa mengakses, mempergunakan dan memodifikasinya. Dari gambar berikut , variabel A, B, dan C dapat diakses oleh procedure D maupun E

b. Variabel Lokal
Suatu procedure dapat mendeklarasikan variabelnya sendiri. Variabel-variabel itu hanya bekerja pada procedure dimana mereka dideklarasikan. Variabel-variabel tersebut dinamakan variabel local (local variable) .

keterangan gambar:
• Semua bisa mengakses variabel global A, F, G.
• Pada procedure alfa definisi global variabel A diganti dengan variabel lokal.
• beta_1 dan beta_2 dapat mengakses betamax dan betako.
• beta_1 tidak dapat mengakses variabel boboho, dan beta_2 tidak dapat mengakses bobo.
• Tdak ada subprogram, kecuali alfa dapat mengakses B dan C.
• Procedure beta dapat mengakses alfa dan beta.
Contoh:

program LOKAL_VARIABEL;
uses wincrt;
var nomor1, nomor2 : integer;
{ini bisa dipanggil dari mana-mana GLOBAL VAR}
procedure tambah;
var hasil:integer;{hasil merupakan milik procedure tambah LOCAL VAR}
begin
hasil := nomor1 + nomor2;
writeln(‘hasil adalah', hasil)
end;
begin {program utama}
writeln(‘Masukkan dua angka bulat dengan spasi’);
readln(nomor1, nomor2);
tambah
end.

c. Penggunaan Forward
Dari hal di atas kita tahu bahwa suatu subprogram dapat diakses oleh subprogram apabila sudah didefinisikan terlebih dahulu.
Tetapi ada pengecualian, untuk mengatasi masalah chicken-and-the-egg, bila kita memiliki dua/lebih subprogram masing- masing bisa memanggil yang lain dengan referensi forward.

Hal ini berlaku juga untuk FUNCTION (fungsi).

3. Procedure Yang Menggunakan Argumen
Procedure juga bisa memakai variabel (data) untuk bekerja ketika dipanggil.
a. Mendeklarasikan variabel di dalam procedure
• Variabel yang diterima oleh procedure diapit dengan tanda kurung ().
• Deklarasi dari variabel terletak diantara nama procedure dan semi-colon.
Contoh.

b. Memanggil procedure and menyampaikan variabel (atau nilai) ke procedure

• Ketika procedure dipanggil, nama procedure diikuti oleh sepasang ().
• Variabel yang dipanggil diletakkan didalam tanda kurung tersebut.
• Variabel ditulis dalam tingkat yang sama seperti dalam prosedur terkait.
Contoh.
Perhatikan contoh program berikut,

program JUMLAH;
uses wincrt;
var nomor1, nomor2 : integer;
procedure CALC_ANSWER ( kesatu, kedua : integer );
var hasil : integer;
begin
hasil := kesatu + kedua;
writeln('hasil adalah ', hasil )
end;
begin
writeln('masukkan dua angka dalam spasi');
readln( nomor1, nomor2 );
CALC_ANSWER( nomor1, nomor2)
end.

4. Procedure Yang Memakai Parameter

program TestNilai;
uses wincrt;
var x, y : integer;

procedure NoEffect ( x, y : integer );
begin
x := y; y := 0;
writeln( x, y )
end;
begin
x := 1; y := 2;
writeln( x, y );
NoEffect( x, y );
writeln( x, y )
end.

Output dari Testnilai adalah:
1 2
2 0
1 2

a. Parameter Nilai (pass by value)
Dalam program di atas, ketika variabel disampaikan ke procedure, procedure bekerja dengan copy dari variabel asli. Nilai dari variabel asli yang disampaikan ke procedure tidak diubah. Procedure hanya menggantikan variabel asli dengan variabel yang ada di procedure , tetapi tidak menggantikan nilai dari variabel asli. Ketika procedure bekerja dengan copy dari variabel, maka dikenal dengan parameter nilai (pass by value).
Perhatikan contoh berikut:

program Parameter_Nilai;
uses wincrt;
var x : byte;
procedure foo(a : byte);
begin
writeln(a); {15}
a:=10;
writeln(a); {10}
end;
begin
x:=15;
writeln(x); {15}
foo(x);
writeln(x); {tetap 10}
end.

Outputnya:
15
15
10
15

b. Parameter Variabel (pass by reference)
Procedure bisa juga dipakai untuk mengubah nilai dari variabel asli yang dipanggil oleh procedure. Untuk menggambarkannya, kita bisa lihat pada contoh program modifikasi program sebelumnya. Procedure ini menerima dua nilai integer dan menggantikan nilai aslinya. Untuk membuat procedure menggunakan parameter variabel (pass by reference) dengan menggunakan kata kunci var.

program Parameter_Variabel;
uses wincrt;
var x : byte;
procedure foo(var a : byte);
begin
writeln(a); {15}
a:=10;
writeln(a); {10}
end;
begin
x:=15;
writeln(x); {15}
foo(x);
writeln(x); {berubah 15}
end.

Outputnya:
Ketika program dijalankan, akan tercetak di layar
15
15
10
10

5. Function – Suatu Procedure Khusus Yang Menghasilkan Nilai
Procedure memakai data atau variabel ketika dieksekusi. Function (fungsi) juga memakai data, tetapi mempunyai kemampuan untuk menghasilkan nilai pada procedure atau program yang memanggilnya. Function digunakan untuk melakukan operasi matematika seperti perhitungan faktorial.
Suatu function :
• Dimulai dengan kata kunci function
• Strukturnya sama dengan sebuah procedure
• Didalam fungsi, suatu nilai dihasilkan dengan nama function
• Suatu function dipakai pada sisi sebelah kanan pada suatu ekspresi
• Hanya menghasilkan tipe data sederhana
SYNTAX

function Nama (deklarasi variabel):tipe_data_hasil;
begin
:
pernyataan
:
end;

contoh:

function ADD_TWO ( nilai1, nilai2 : integer ) : integer;
begin
ADD_TWO := nilai1 + nilai2
end;

contoh berikut menggambarkan bagaimana memanggil function,

result := ADD_TWO( 10, 20 );

maka, ketika ADD_TWO dieksekusi, dia menghitung nilai yang terdapat di dalamnya (dalam hal ini 30), yaitu hasil akhirnya.
Contoh

program CONTOH_FUNGSI;
uses wincrt;
var angka, jawaban : integer;

function KUBIK( x : integer ) : integer;
begin
KUBIK := x * x * x
end;
begin
writeln('Masukkan angka.');
readln(angka);
jawaban := KUBIK ( number );
writeln('Hasil pangkat tiga dari ',number,' adalah ', answer)
end.

6. Rekursi dan Iterasi
Subprogram bisa memanggil dirinya (Recursive Call) dengan catatan bahwa memiliki syarat penghentian operasi (iterasi), sehingga perlu dilakukan kehati-hatian dalam penulisannya. Lihat contoh tentang faktorial suatu bilangan di bawah ini.
Contoh.

Program faktorial;
Uses wincrt;
Var x : integer;
function factorial (n:integer):integer;
begin
if n<2>

Penjelasan

Jika x= 5,maka Pemanggilan
Ke-1, n=5. Factorial:=5*factorial(4); => Perlu Pemanggilan Ke-2
Ke-2 , n=4. Factorial:=4*factorial(3); => Perlu Pemanggilan Ke-3
Ke-3 , n=3. Factorial:=3*factorial(2); => Perlu Pemanggilan Ke-4
Ke-4, n=2. Factorial:=2*factorial(1); => Perlu Pemanggilan Ke-5
Ke-5, n=1. Factorial:=1;
Ke-4 menjadi : Factorial:=2*1; (=2)
Ke-3 menjadi: Factorial:=3*2; (=6)
Ke-2 menjadi: Factorial:=4*6; (=24)
Ke-1 menjadi: Factorial:=5*24; (=120)

 

Terima kasih telah berkunjung ke Box-Pascal... Jangan Lupa Kritik dan Saran pengunjung untuk pengembangan website ini.

Posting by : Joel