Anda di halaman 1dari 32

SUB PROGRAM

A. Pengertian
Sebuah program yang baik adalah program yang membagi permasalahan utama
menjadi bagian-bagian kecil dimana setiap bagian kecil ditangani oleh sebuah subprogram,
cara ini disebut dengan pemrograman terbagi/terpecah (modular programming). Cara ini
termasuk pemrograman terstruktur dan sangat didukung
oleh bahasa Pascal. Untuk itu, Pascal telah menyediakan dua jenis subprogram, yaitu
procedure dan function (prosedur dan fungsi). Subprogram adalah bagian dari program
yang dirancang untuk melaksanakan suatu tugas tertentu. Idenya adalah konsep tentang
modularitas. Dengan cara ini, program akan lebih mudah dimengerti, dan jika ada
kesalahan di dalam proses pengolahan data akan lebih mudah untuk melokalisirnya.
Secara garis besar, konstruksi keduanya mirip dengan program. Prosedur dan fungsi
biasanya dikatakan sebagai ’program kecil’. Keduanya bisa memiliki bagian deklarasi,
bagian badan, bahkan juga dapat memiliki subprogram (prosedur atau fungsi) yang lain.
Aturan umum yang dapat digunakan untuk menentukan perlunya dibuat suatu prosedur
atau fungsi adalah tingkat kerumitan masalah yang akan diselesaikan. Untuk permasalah
yang cukup rumit, solusinya dibagi menjadi subsolusi-subsolusi yang lebih kecil. Masing-
masing subsolusi diwujudkan dalam bentuk prosedur atau fungsi. Contoh; masalah
pengelolaan data karyawan dapat dibagi menjadi bagian pemasukan data, pengubahan data,
penampilan data, dan penghapusan data. Kemudian masing-masing bagian tersebut
diwujudkan dalam sebuah procedure atau function. Setiap bagian yang disebut module
melakukan tugas tertentu secara cepat dan tepat, namun tetap tergantung kepada kejelian si
programmer. Subprogram biasanya dibuat apabila ada perhitungan atau sering dieksekusi
dalam sebuah program. Contoh bagain yang dapat dibuat menjadi subprogram antara
lain :
• Menampilkan menu pilihan
• Menghitung nilai rata-rata
• Mensortir data

B. Prosedur
Suatu ide penting yang ditekankan oleh Pascal dalam pemograman adalah apabila
konsep rutin, secara dasar merupakan sekumpulan perintah dengan nama tertentu yang
dapat diaktifkan banyak kali, maka kita dapat menggunakanya dengan memanggil nama
mereka. Cara ini dapat menghindari pengulangan penulisan perintah yang sama berkali-
kali dan pemakaian versi kode dirubah-rubah dalam sebuah program. Pemakaian versi
yang berubah-rubah dalam sebuah program akan berdampak kepada seluruh aplikasi yang
dibuat. Dengan demikan, dari sudut pandang ini berpikir secara rutinitas mekanisme
merupakan dasar dari code encapsulation.
Prosedur (procedure) adalah bentuk subprogram yang semata-mata bertugas
mengerjakan suatu aktivitas. Aktivitas tersebut dapat dikerjakan secara berulang dengan
apabila aktivitas tersebut akan dilakukan, bagian program yang membutuhkannya cukup
memanggil nama prosedur tersebut bersama parameter yang menyertai apabila ada.
Berikut ini akan diuraikan cara pembuatan prosedur dan cara menggunakan atau cara
memanggilnya.
1. Prosedur Sederhana
Prosedur (module) sederhana minimal terdiri atas beberapa pernyataan (statements)
yang dikelompokkan yang dimulai dengan menggunkan kata kunci Begin dan diakhir
dengan kata End; (end dengan memakai tanda titik koma). Setiap procedure mempunyai
nama yang khusus sesuai dengan masalah yang diselesaikan. Sintaks dalam
mendeklarasikan prosedur adalah seperti terlibat pada Gambar 29 berikut:

Gambar 29: Grafik deklarasi prosedur.


Gambar 29 memperlihatkan bahwa struktur prosedur mirip dengan struktur
program Pascal. Perbedaannya adalah pada kata procedure dan adanya deretan
parameter yang menyertainya. Bagaimana selak-beluk tentang parameter akan
dibicarakan kemudian. Prosedur digunakan dengan cara memanggil namanya.
Sebagai contoh, pada program pengelolaan data karyawan, jika diinginkan untuk
mengubah data karyawan, maka prosedur ubah data dipanggil untuk melaksanakan hal
tersebut. Begitu nama sebuah prosedur dipanggil di suatu bagian program, maka
eksekusi program akan berpindah ke prosedur tersebut. Program akan mengerjakan
apa yang diminta di dalam prosedur tersebut. Setelah selesai, eksekusi akan kembali
kepada bagian pemanggil. Sebagai pengantar membuka pemikiran anda perhatikan
contoh potongan program berikut ini:
Contoh:
Berikut ini adalah progam sederhana untuk membuat penampilan menu program
dengan memanfaatkan prosedur.
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;
dimana pemakaian prosedur di atas dalam program lengkap adalah sebagai berikut :
Program Prosedure_sederhana;
Uses crt;
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;
BEGIN
writeln('memanggil prosedur');
Display_Menu;
writeln('kembali dari prosedur')
END.
Sintaks pemakaian procedure dalam bentuk diagram adalah adalah seperti pada
Gambar 30 berikut:
Gambar 30 .Sintaks pemakaian prosedur
Selanjutnya perhatikan contoh Prosedur_ gerak berikut ini:
Program Prosedur_Gerak;
Uses crt;
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(waktu)
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.
2. Jenis dan Jangkauan Variabel
a. Variabel Global
Variabel global adalah variabel yang dapat dikenali diseluruh bagian
program biasanya variabel ini merupakan variabel yang dideklarasikan pada
deklarasi program utama (umum). Variabel global adalah variabel yang
didefinisikan/terletak pada program utama, dimana semua subprogram dapat
mengenali, mengakses, mempergunakan dan memodifikasinya. Untuk mudah
memahaminya perhatikan Gambar 31, berikut, dimana, variabel A, B, dan C dapat
diakses oleh procedure D maupun E
Program Variabe_Utama;
Var A,B,C
Procedure Tulisan_Ilmiah;

Procedure Karya_Ilmiah;;
Var Konsep, Fakta

Gambar 31. Diagram jangkuan variabel


b. Variabel Lokal
Variabel lokal adalah variabel yang dikenal pada lingkup yang lebih sempit
dari pada variabel global. Variabel lokal hanya dikenal pada subprogram yang
mendeklarasikannya dan subprogram yang berada lingkupnya. Suatu prosedur dapat
mendeklarasikan variabelnya sendiri sebagai variabel lokal. Variabel-variabel itu
hanya bekerja pada prosedur dimana mereka dideklarasikan. Variabel-variabel
tersebut dinamakan variabel lokal (local variable).
Program Variabe_Utama;
Var A,B,C
Procedure Tulisan_Ilmiah;
Var A, D, E

Procedure Karya_Ilmiah;;
Var Konsep, Fakta
Procedure Karya;
Var Iman, Taqwa

Procedure Ilmiah;
Var Jujur, Disipilin

Gambar 32: Distribusi variabel lokal dan global


Keterangan Gambar 32
 Keseluruhan mengenal dan dapat mengakses variabel global A, B, C.
 Pada procedure Tulisan_Ilmiah definisi global variabel A diganti dengan variabel
lokal. Pengertian A pada Variabel_Utama tidak sama dengan A pada
Tulisan_Ilmiah.
 Karya dan Ilmiah dapat mengakses varibel Konsep dan Fakta.
 Karya tidak dapat mengakses variabel Jujur dan Disiplin, dan Ilmiah tidak dapat
mengakses Iman dan Taqwa.
 Tidak ada subprogram, kecuali Tulisan_Ilmiah yang dapat mengakses D dan E.
 Procedure Karya_Ilmiah dapat mengakses Konsep dan Fakta.
Contoh:
Program Lokal_Variabel;
Uses crt;
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
Forward pada Pascal digunakan untuk mendeklarasikan dimuka judul prosedur
secara terpisah dari bloknya. Judul prosedur yang berisi parameter terpisah ini
merupakan judul yang semestinya dan di deklarasikan dengan menambahkan kata
cadangan “ Forward ”. Blok prosedur ini letaknya terpisah dari judulnya, juga
diawali dengan judul prosedur, tetapi hanya mencantumkan judul atau nama
prosedurnya saja, tanpa mencantumkan parameter formalnya. Variabel pada suatu
subprogram dapat diakses oleh subprogram lain apabila sudah didefinisikan terlebih
dahulu namun kita sulit menentukan mana yang lebih dahulu ada bila kita memiliki
dua atau lebih subprogram. 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 nanti untuk subprogram Function (fungsi).
Program Contoh_Forward;
Var A,B,C : Real;
Procedure Karya_Ilmiah (Fakta: Real);
Forward;

Procedure Tulisan_Ilmiah (Jujur, Disiplin :


Real);
Procedure Karya_Ilmiah (Fakta : Real);

Gambar 33. Skema pemakaian forward


Untuk memudahkan pemahaman kita perhatikanlah contoh penggunaan Forward
berikut ini:
Procedure Pro1 (Var I : integer ) ;
Forward ;
Procedure Pro2 (Var I : integer ) ;
Begin
Writeln ( ‘ Prosedur PRO’, I ) ;
End ;
Procedure Pro1 ;
Begin
Writeln ( ‘Prosedur PRO’, I ) ;
End ;
Var
I : integer ;
Begin
I:=1;
Pro1 ( I ) ;
I:=2;
Pro2 ( I ) ;
End.
Keluaran dari contoh program di atas adalah sebagai berikut
Prosedur PRO1
Prosedur PRO2
3. Prosedur Komplek
Prosedur kompleks maksudnya disini adalah prosedur yang telah dilengkapi
dengan parameter dan prosedur yang memanggil prosedur lain. Procedure juga bisa
memakai variabel (data) untuk bekerja ketika dipanggil.
a. Mendeklarasikan parameter di dalam prosedur
• Variabel yang diterima oleh procedure diapit dengan tanda kurung ( ).
• Deklarasi dari variabel terletak diantara nama procedure dan semi-colon.
Contoh.

Memanggil procedure and menyampaikan variabel (atau nilai) ke procedure

dengan ketentuan bahwa


• 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 Panggil ( 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 );
Panggil( nomor1, nomor2);
END.
Untuk lebih menambah pemahaman kita, pelajarilah prosedur memakai parameter
berikut ini.
Program TestNilai;
Uses wincrt;
var
x, y : integer;
Procedure Tidak_ada_pengaruh (x, y : integer );
Begin
x := y;
y := 0;
writeln( x, y );
End;
BEGIN
x := 1;
y := 2;
writeln( x, y );
Tidak_ada_pengaruh ( x, y );
writeln( x, y );
END.
b. Prosedur Memanggil Prosedur Lain
Prosedur dapat memanggil prosedur yang lainnya. Untuk lebih mudah
pemahami pelajarilah contoh program dengan prosedur memanggil pprosedur lain :
Program Prosedur_panggil_prosedur;
Uses WinCrt;
Var
X : integer ;
Procedure Prosedur_Satu ( X1 : integer ) ;
Begin
Writeln ( 'Nilai X = ', X1, 'ada di prosedur Prosedur satu' ) ;
End ;
Procedure Prosedur_Dua (X2 : integer ) ;
Begin
Writeln ( 'Nilai X = ', X2, 'ada di prosedur dua' ) ;
Prosedur_satu (X2) ;
End ;
Begin
X := 5 ;
Prosedur_dua ( X ) ;
End.
Output program :
Nilai X = 5 ada di prosedur Prosedur dua
Nilai X = 5 ada di prosedur Prosedur satu
c. Prosedur Tersarang
Prosedur tersarang adalah prosedur yang berada di dalam prosedur yang
lain. Bentuk umum prosedur tersarang seperti cuplikan berikut
Program Prosedur_Utama;
Procedure_Tersarang
Procedure Pertama
Begin



End ;
Begin



End ;
BEGIN



END .

4. Prosedur Standar
a. Prosedur Standar Exit
Prosedur standar Exit digunakan untuk keluar dari suatu blok pernyataam. Bila
diletakkan pada program bagian, prosedur standar exit akan menyebabkan proses
di program bagian berhenti dan proses kembali ke blok program yang
memanggilnya. Bila berada di program utama, menyebabkan proses program
berhenti.
b. Prosedur standar Halt
Prosedur standar halt digunakan untuk menghentikan proses program baik di
subprogram maupun program utama.
c. Prosedur standar Move
Prosedur standar Move digunakan untuk menyalinkan suatu blok sebanyak count
byte memori dari blok, dimulai byte pertama source dan disalinkan ke byte
pertama dan demikianlah selanjutnya. Bentuk umum dari prosedur ini adalah
seperti berikut:
Move ( var source, dest; count : word )
Contoh program :
Var
Sumber, Tujuan : string [5] ;
Sejumlah : word ;
Begin
Sumber : = ‘ABCDE’ ;
Tujuan : = ‘FGHIJ’ ;
Sejumlah : = 4 ;
Move (Sumber, Tujuan, Sejumlah ) ;
Writeln (Sumber : 7, Tujuan : 7 ) ;
End.
Output program di atas adalah sebagai berikut:
ABCDE ABCIJ
d. Prosedur Standar FillChar
Prosedur FillChar digunakan untuk mengisi sejumlah byte nilai ke dalam suatu
variabel, lebih memahaminya perhatikan sintaks berikut:
FillChar ( x ; count : word ; ch ),
dimana X adalah variabel yang dapat bertipe apapun yang akan diisi dengan nilai
tipe ordinal ch sebanyak count byte.
C. Function
1. Pengertian
Sebagai subprogram, kegunaan fungsi mirip dengan prosedur. Fungsi diaktifkan
juga dengan memanggil namanya. Perbedaan utamanya adalah bahwa selain
mengerjakan suatu aktivitas tertentu, fungsi akan mengembalikan sutu nilai hasil
pemrosesan yang dilakukannya kepada bagian pemanggil (progam pemanggil).
Function, ketika dieksekusi menghasilkan suatu nilai. Function (fungsi) juga
memakai data dan mempunyai kemampuan untuk menghasilkan nilai pada procedure
atau program yang memanggilnya.
Sebagai mana halnya blok prosedur, blok fungsi harus dideklarasikan dengan
tipenya atau jenis hasilnya. Tipe deklarasi ini menunjukkan tipe hasil dari fungsi.
Pada bahasa Pascal dikenal beberapa fungsi, seperti abs, pred, sqrt, sqr, succ dan
sebagainya. Fungsi-fungsi tersebut biasanya dikenal dengan Built in Function.
Sedangkan fungsi yang akan bicarakan disini adalah fungsi yang kita buat sendiri.
Akibat fungsi akan mengembalikan suatu nilai, maka nilai kembalian ini harus
diperlakukan sebagaimana mestinya.
Berbeda dengan prosedur, fungsi merupakan modul program yang
menghasilkan suatu kuantitas. Hal ini dapat dilihat dari bentuk header-nya yang
menyebutkan jenis data dari kuantitas yang dihasilkan. Fungsi digunakan untuk
melakukan operasi matematika seperti perhitungan faktorial. Dalam membuat fungsi
harus memperhatikan hal-hal berikut ini:
a. dimulai dengan kata kunci function
b. struktur fungsi sama dengan sebuah procedure
c. didalam fungsi, suatu nilai dihasilkan dengan nama function
d. suatu function dipakai pada sisi sebelah kanan pada suatu ekspresi
e. fungsi hanya menghasilkan tipe data sederhana
Pengembalian nilai pada fungsi yang umum dilakukan adalah menampungnya
dalam sebuah variabel dengan tipe yang sama dengan tipe data nilai kembalian. Sintaks
untuk mendeklarasikan fungsi adalah sebagai berikut:
Function Identifier(daftar-parameter: tipe data) : type_data;
Contoh :
Function Faktorial(Var Fak,Hasil : Integer):Integer;
Function Pangkat(X,Y : Real):Real;
Blok fungsi diawali dengan kata cadangan Begin dan diakhiri dengan kata
cadangan End dan titik koma. Contoh di atas memperlihatkan bahwa secara blok fungsi
hampir sama dengan blok prosedur, hanya saja fungsi harus dideklarasikan dengan
tipenya. Tipe deklarasi ini menunjukkan tipe hasil dari fungsi. Bentuk diagram alir
perumusan sintaks penggunaan function adalah seperti Gambar 34 berikut:

Gambar 34. Sintaks deklarasi fungsi


Contoh:
Program Contoh_fungsi ;
Var a : array [ 1 . . 5 ] of integer ;
total : integer ;
Function Hitung : integer ; {mengembalikan nilai bertipe integer }
Var i , jumlah : integer ;
Begin
jumlah := 0 ;
for i := 1 to 5 do
jumlah := jumlah + a [i] ; {hitung jumlah bilangan }
Hitung := jumlah ; {kembalikan nilai kepemanggil}
End ;
BEGIN
Total := hitung;
Writeln(total);
END.

Contoh lain:
Program Contoh_Fungsi;
Uses crt;
var
angka, jawaban : integer;
Function Kubik( x : integer ) : integer;
Begin
Kubik := x * x * x
End;
BEGIN
writeln('Masukkan angka.'); Readln(angka);
jawaban := Kubik (angka );
writeln('Hasil pangkat tiga dari ',angka,' adalah ',jawaban);
END.
Contoh lain adalah fungsi yang digunakan untuk menghitung faktorial seperti
program berikut ini:
Program MenghitungFaktorial;
Uses WinCrt;
Var
x : byte;
Function faktorial (n:byte):integer;
Begin
if n<2 then faktorial:=1
Else Faktorial:=n*faktorial(n-1);
end;
BEGIN
writeln('Masukkan Angka : '); readln(x);
writeln(x,'! adalah ',faktorial(x));
Readln;
END.
2. Perbedaan fungsi dengan prosedur
a. Pada fungsi, nilai yang dikirimkan balik pengirimnya terdapat pada nama
fungsinya (kalau pada prosedur pada parameter yang dikirimkan secara acuan).
Pada contoh, nama fungsi tersebut adalah Hitung dan nilai yang dikirim balik
berada pada nama fungsi tersebut, sehingga nama fungsi ini harus digunakan
untuk menampung hasil yang akan dikirimkan dari fungsi, sebagai berikut :
Hitung := A + B;
Nama fungsi yang berisi nilai yang akan dikirimkan
b. Fungsi dapat langsung digunakan untuk dicetak hasilnya, karena nilai balik
berada di nama fungsi tersebut, untuk mudahnya perhatikan contoh berikut :
Writeln(X,’ + ‘,Y,’ = ‘,Hitung(X,Y));
Nama fungsi yang langsung
digunakan untuk ditampilkan hasilnya.
Atau nilai fungsi tersebut dapat juga langsung dipindahkan ke pengenal variabel
yang lainnya, sebagaimana terlihat pada contoh berikut :
Hasil := Hitung(X,Y);
Writeln(X,’ + ‘,Y, ‘ + ‘,Hasil);
Sedang pada prosedur, nama prosedur tersebut tidak dapat digunakan langsung.
Pada prosedur yang dapat digunakan langsung adalah parameter yang mengandung
nilai balik.
D. Parameter
Parameter adalah sarana untuk berkomunikasi antara bagian pemanggil dengan
prosedur atau fungsi yang dipanggilnya. Parameter digunakan bagian pemanggil untuk
memberikan data pendukung aktivitas prosedur/fungsi, atau menerima kembali data
hasil pemrosesan oleh prosedur/fungsi. Parameter yang digunakan dalam
mendefinisikan prosedur atau fungsi disebut parameter formal, dan parameter yang
digunakan untuk memanggil prosedur/fungsi disebut parameter aktual. Keduanya bisa
sama, bisa juga berbeda.
Ada dua jenis parameter formal, yaitu parameter nilai dan parameter variabel.
Parameter nilai digunakan jika ia hanya diharapkan membawa data pendukung dari
bagian pemanggil untuk diberikan kepada prosedur/fungsi. Isi dari parameter nilai tidak
akan berubah, meskipun di dalam prosedur/fungsi. Sebaliknya, parameter selain
dimaksudkan untuk membawa data ke prosedur/fungsi, parameter variabel diharapkan
juga untuk membawa data hasil pemrosesan kembali ke bagian pemanggil.
Konsekuensinya adalah isi parameter variabel dapat berubah selama terjadi pemrosesan
di dalam prosedur/fungsi. Perubahan ini akan diterima oleh bagian pemanggil.
Berdasarkan uraian di atas, dapat ditarik suatu kesimpulan, bahwa kita akan
menggunakan parameter nilai jika kita hanya ingin memberikan data kepada
prosedur/fungsi tanpa perlu mengubah isinya. Kita akan menggunakan parameter
variabel jika kita berharap isi parameter tersebut berubah sesuai hasil pemrosesan yang
dilakukan oleh prosedur/fungsi.
Deklarasi pengenal tipe data, variabel, konstanta, prosedur, maupun fungsi
memiliki ruang lingkup tertentu. Secara umum, aturannya adalah segala sesuatu hanya
akan dikenal di mana ia dideklarasikan. Jika sebuah pengenal dideklarasikan dilevel
program, maka semua bagian program akan mengenalnya. Jika sebuah pengenal
dideklarasikan disebuah prosedur atau fungsi, maka ia hanya akan dikenal di prosedur
atau fungsi tersebut. Konsep di atas sering dinyatakan juga dengan lokalitas dan
globalitas pengenal. Pengenal dengan ruang lingkup meliputi seluruh program disebut
pengenal global, sementara yang ruang lingkupnya lebih kecil (sebatas prosedur atau
fungsi) disebut pengenal lokal. Pemrograman yang baik adalah pemrograman yang
tidak menggunakan banyak pengenal, khususnya variabel, yang bersifat global. Jika ada
nama pengenal global dan pengenal lokal yang sama, maka yang digunakan adalah
pengenal lokal. Ada beberapa aturan lain untuk default parameter, seperti berikut:
 Parameter dengan nilai default haruslah diletakkan pada akhir daftar parameter.
 Nilai default haruslah berupa konstanta. Hal ini terlihat membatasi tipe yang kita
pakai dengan default parameter. Misalnya, suatu array dinamis atau suatu
interface type tidak dapat mempunyai default parameter selain nol, record tidak
dapat digunakan sama sekali.
 Default parameter harus dilewatkan secara nilai (passed by value) atau sebagai
konstanta. Suatu parameter reference (variabel) tidak dapat mempunyai nilai
default.
1. Parameter Nilai (pass by value)
Pada contoh Program Parameter_Nilai, ketika variabel disampaikan ke prosedur,
prosedur bekerja dengan copy dari variabel asli. Nilai dari variabel asli yang
disampaikan ke prosedur tidak diubah. Prosedur hanya menggantikan variabel asli
dengan variabel yang ada di prosedur, tetapi tidak menggantikan nilai dari variabel
asli. Ketika prosedur bekerja dengan menyalin dari variabel, maka parameter ini
dikenal dengan parameter nilai (pass by value). Perhatikan contoh berikut:
Program Parameter_Nilai;
Uses crt;
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.
Bila parameter dikirimkan secara nilai nilai, parameter formal di prosedur akan
berisi nilai yang dikirmkan yang kemudian bersifat lokal 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). Untuk memudahkan memahaminya
pelajarilah contoh berikut:
Procedure Hitung(A, B : integer ) ;
Var
X, Y : integer ;
C : integer ;
Begin
C:=A+B;
Writeln (‘Nilai C =’, C ) ;
End ;
Begin
Write ( ‘Nilai X =’ ) ; readln ( X ) ;
Write ( ‘Nilai Y =’ ) ; readln ( Y ) ;
Hitung ( X, Y ) ;
End.
Output program di atas adalah :
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 dimodul 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. Parameter Variabel (pass by reference)
Prosedur bisa juga dipakai untuk mengubah nilai dari variabel asli yang dipanggil
oleh prosedur. Untuk menggambarkannya, kita bisa lihat pada contoh program
modifikasi program sebelumnya. Prosedur ini menerima dua nilai integer dan
menggantikan nilai aslinya. Untuk membuat prosedur menggunakan parameter
variabel (pass by reference) dengan menggunakan kata kunci var.
Program Parameter_Variabel;
Uses crt;
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.

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 ) ;
Untuk meningkatkan pemahaman anda pelajarilah contoh program yang prosedur
hitung berikut ini :
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 di atas adalah :
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.
3. Parameter dalam Fungsi
Parameter dalam fungsi dapat dikirimkan secara nilai (By Value) atau secara
Acuan (By Reference). Penulisan judul fungsi yang menggunakan parameter dengan
pengiriman secara nilai adalah tampak sebagai berikut :
Function Hitung(A,B : Integer): Integer;
Contoh :
Suatu Fungsi yang akan menghasilkan nilai terbesar dari 2 buah Nilai Real.
Function Terbesar(X,Y:Real):Real;
Begin
If X>Y then
Terbesar :=X
Else
Terbesar :=Y;
End;
Var
Nilai1,Nilai2 :Real;

BEGIN
Write(‘Nilai Pertama ?’);Readln(Nilai1);
Write(‘Nilai Kedua ?’); Readln(Nilai2);
Writeln(‘Nilai Terbesar adalah’ ,Terbesar(Nilai1,Nilai2):9:3);
END.
Output dari program di atas adalah :
Nilai Pertama ? 12,356
Nilai Kedua ? 55.182
Nilai Terbesar adalah 55,182
Sedang penulisan judul fungsi yang menggunakan parameter dengan pengiriman
secara acuan adalah dengan menambahkan katan cadangan Var sebagai berikut :
Function Hitung(Var A,B : Integer):Integer;
Pengiriman parameter dengan secara acuan akan mengakibatkan perubahan nilai
parameter di fungsi juga merubah nilai parameter di modul yang mengirimkannya.
Program Contoh3:
Function Hitung(Var A,B,C : Integer):Integer; Output :
Begin
Hitung :=A+B; Nilai X ? 2
C :=A*B; Nilai Y ? 3
End.
2+3=5
Var 2*3=6
X,Y,Z : Integer;
Begin
Write(‘Nilai X ?’);
Readln(X);
Write(‘Nilai Y?’);
Readln(Y);
Writeln;
Writeln(X,’+’,Y, ‘=’,Hitung(X,Y,Z);
Writeln(X,’*’,Y, ‘=’,Z);
End.
Pascal tidak menyediakan Fungsi untuk perpangkatan tinggi, yang ada hanyalah SQR,
yaitu untuk pemangkatan kuadrat. Bila kita menghitung bilangan berpangkat berorde
lebih tinggi, maka kita harus dibuat program tersendiri, seperti program berikut:
Program Contoh4;
Function PangkatI(X:Real; Y:Integer):Real;
Var Pangkat :=1;
For I := 1 to Y do
Pangkat := Pangkat * X;
PangkatI := Pangkat;
End;
Var
A: Real;
B : Integer;
Begin
Write(‘Nilai akan dipangkatkan ?’); Readln(A);
Write(‘Dipangkatkan dengan ?’); Readln(B);
Writeln(A:9:3, ‘Pangkat’ ,B, ‘adalah’,PangkatI(A,B):9:3);
End.
Output dari program di atas adalah sebagai berikut:
Nilai akan dipangkatkan ? 1.5
Dipangkatkan dengan ? 3
1.500 pangkat 3 adalah 3.375

E. Rekursi dan Iterasi


Subprogram bisa memanggil dirinya (Recursive Call) dengan catatan bahwa
memiliki syarat penghentian operasi (iterasi), sehingga perlu dilakukan kehati-hatian
dalam penulisannya. Sebagai gambaran bagi anda, perhatikanlah contoh tentang
faktorial suatu bilangan di bawah ini. Salah satu keistimewaan yang dimiliki oleh
Turbo Pascal adalah bahwa pascal dapat melakukan suatu proses yang dinamakan
sebagai proses rekursi, yaitu proses untuk memanggil dirinya sendiri. Dalam
procedure dan atau function proses ini bisa berarti proses berulang yang tidak diketahui
kapan akan berakhirnya. Contoh paling sederhana dari proses rekursi adalah proses
mencari faktorial dari suatu.

Faktorial N = N! = N (N-1) (N-2)……………..3.2.1


N! = N (N-1)! ,untuk N>0
N! = N (N-1) (N-2)!
Jika ditulis dalam program menjadi :
Faktorial(0) = 1 ;
Faktorial(N) = N (N-1)!
Ini merupakan sebuah hubungan rekurens yang berarti nilai suatu fungsi dengan
argument tertentu dapat dihitung dengan menggunakan fungsi yang sama hanya saja
dengan argument yang lebih kecil.
Program Faktorial;
Uses crt ;
Var i , N , Hsl : integer
Function Fakto(N:integer):integer ;
Var Fak: integer ;
Begin
if (N=0) or (N=1) then
Fakto:= 1
else
Fakto:= N*Fakto(N-1) ;
end;
Begin
clrscr;
write('Faktorial berapa yang anda ingin hitung : ') ;
readln(N) ;
writeln('Hasil perhitungan : ',Fakto(N)) ;
readln ;
end .
Hasil run program adalah sebagai berikut :
Faktorial berapa yang anda ingin hitung : 5
Hasil perhitungan : 120

Dari program di atas terlihat bahwa notasi Fakto(N-1) yang digunakan untuk
memanggil program sebelumnya dinamakan sebagai pemanggil atau rekursi.
Program faktorial;
Uses wincrt;
Var x : integer;
Function factorial (n:integer):integer;
Begin
if n<2 then { ini adalah syarat penghentian operasi }
factorial:=1;
else
factorial:=n*factorial(n-1); { ini bagian rekursi}
End;
BEGIN
writeln('Masukkan nilai : '); readln(x);
writeln(x,'! adalah ',factorial(x));
END.
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)

F. Fungsi Standar
Pascal menyediakan beberapa fungsi standar yang telah didefinisikan dan tidak
perlu dibuat kembali oleh pemakai yang sering digunakan untuk operasi-operasi
arithmatika diantaranya adalah :
1. Fungsi standar ABS
Bentuk Umum : ABS(X);
Fungsi ABS digunakan untuk memutlakkan suatu nilai yang ditunjukkan oleh
argumen X. Argumen X dapat berupa tipe real atau integer dan hasil dari fungsi ini
akan sama dengan tipe argumennya. Memutlakkan suatu nilai berarti nilai negatif
dipositifkan dan nilai positif tetap positif. Perhatikan contoh berikut :
Program Mutlak;
Var X : Real;
Begin
Write(‘Nilai yang akan dimutlakkan ?’);Readln(X);
Writeln(‘Nilai Mutlaknya =’,Abs(X):9:2);
End.
Output :
Nilai yang akan dimutlakkan ? –25.75
Nilai mutlaknya = 25.75
2. Fungsi standar EXP
Bentuk umum : EXP(x : Real) : Real;
Fungsi Exp digunukan untuk menghitung nilai pangkat dari bilangan e (bilangan
alam), yaitu sebesar ex. Argumen x dapat berbentuk tipe real atau integer dan hasil
dari fungsinya adalah real. Perhatikan contoh berikut ini.
Program Misal;
Var X : Real;
Begin
Write(‘Nilai yang akan dieksponentialkan ?’);Readln(X);
Writeln(‘Nilai Eksponentialnya = ‘,Exp(X):9:5);
End.
Output :
Nilai yang akan dieksponentialkan ? 7.5
Nilai Eksponentialnya = 1808.04241
3. Fungsi Standar LN
Bentuk Umum : Ln(x : Real):Real;
Digunakan untuk menghitung nilai algorithma alam (Natural Logarithm) dari nilai x.
Argumen x dapat berbentuk tipe Real atau Integer dan hasil dari Fungsinya adalah
Real.
Contoh :
Program Misal3;
Var
X : Real;
Begin
Write(‘Nilai yang akan di Ln ?’);Readln(x);
Writeln(‘Nilai Ln = ‘,Ln(x):9:2);
End.
Output :
Nilai yang akan di Ln ? 100
Nilai Ln = 4.61
4. Fungsi Standar INT
Bentuk umum pemakaiannya adalah Int(x:Real) : Real;
Fungsi INT digunakan untuk menghasilkan nilai integer dari x. Hasil dari fungsi int
adalah tipe data real. Hasil dari fungsi adalah tipe data real dengan nilai yang
berupa pembulatan ke bawah (nilai pecahan dibuang) dari nilai x. Perhatikanlah
contoh berikut ini :
Program Misal4;
Var X : Real;
Begin
Write(‘Nilai yang akan dibulatkan ?’); Readln(X);
Writeln(‘Nilai pembulatannya = ‘,Int(X):9:2);
End.
Output :
Nilai yang akan dibulatkan ? 9.99
Nilai pembulatannya = 9.00
Contoh lain:
Program hitung_huruf;
Uses wincrt;
Type
az ='a'..'z';
kalimat = array[az] of byte;
var
huruf : char; kata : string;
besar : az; pernyataan : kalimat;
i : byte;
begin
clrscr;
for besar :='a' to'z' do
pernyataan[besar] := 0;
write('tulis kalimat ');
readln(kata);
for i := 1 to length(kata) do
begin
huruf := kata[i];
if(huruf >='a') and (huruf <='z') then inc(pernyataan[huruf]);
end;
for besar :='a' to 'z' do
if pernyataan [besar] <> 0 then
writeln('jumlah huruf','':8,besar,'=':2,pernyataan[besar]);
repeat until keypressed;
End.

5. Fungsi standar FRAC


Bentuk umum pemakaian ini adalah Frac(X:Real):Real;
Fungsi fract digunakan untuk mendapatkan nilai pecahan dari argumen X. Argumen
X dapat berbentuk tipe real maupun integer dan hasil dari fungsinya adalah real.
Untuk memudahkan pengertian anda perhatikanlah contoh berikut ini.
Program Misal5;
Var x : Real;
Begin
Write(‘Nilai yang akan diambil pecahannya ?’);Readln(X);
Writeln(‘Nilai pecahannya = ‘,Frac(x):6:5);
End.
Output dari program di atas adalah sebagai berikut :
Nilai yang akan diambil pecahannya ? 9.99
Nilai pecahannya = 0.99000
6. Fungsi standar SQR
Bentuk umum pemakaian fungsi ini adalah SQR(X);
Fungsi SQR digunakan untuk menghitung nilai pangkat kuadrat dari argumen X.
Argumen X dapat berbentuk tipe real atau integer dan hasil fungsinya akan sama
dengan tipe argumennya. Untuk memudahkan pengertian anda perhatikanlah contoh
berikut ini.
Program Misal6;
Var x : Real;
Begin
Write(‘Nilai yang akan dikuadratkan ?’); Readln(X);
Writeln(‘Nilai kuadratnya =’, SQR(X):9:2);
End.
Output :
Nilai yang akan dikuadratkan ? 5
Nilai kuadratnya = 25.00
7. Fungsi standar SQRT
Bentuk umum dari pemakaian fungsi ini adalah SQRT(X:Real):Real;
Fungsi SQRT digunakan untuk menghitung nilai akar dari argumen X. Argumen X
dapat berbentuk tipe real atau integer dan hasil dari fungsinya adalah real. Untuk
memudahkan pengertian anda perhatikanlah contoh berikut ini.
Program Misal7;
Var A,B,C : Real;
Begin
Write(‘Panjang Sisi Tegak ?’);Readln(A);
Write(‘Panjang Sisi Datar ?’); Readln(B);
C := SQRT(SQR(A) + SQR(B));
Writeln(‘Panjang Sisi Miring = ‘,C:9:2);
End.
Output :
Panjang Sisi Tegak ? 30
Panjang Sisi Datar ?40
Panjang Sisi Miring = 50.00
G. Fungsi Standar Transfer
Fungsi standar transfer digunakan untuk merubah suatu nilai ke bentuk nilai yang lain.
Fungsi-fungsi standar transfer yang tersedia pada Turbo Pascal antara lain: Chr, Ord,
Round dan Trunc
1. Fungsi Standar CHR
Bentuk umum cara menggunakan fungsi ini adalah Chr(X:Byte) : Char;
Fungsi CHR digunakan untuk merubah nilai dari byte X ke bentuk karakter yang
sesuai dengan kode ASCII nya. Untuk memudahkan pengertian anda perhatikanlah
contoh berikut ini.
Program Misal7;
Var X : Byte;
Begin
Write(‘Nilai kode ASCII (0-255) ?; Readln(X);
Writeln(‘Karakter kode ASCII ini adalah : ‘, Chr(X));
End.
Output dari program di atas adalah:
Nilai kode ASCII (0-255) ? 66
Karakter kode ASCII ini adalah : B
2. Fungsi Standar ORD
Bentuk umum cara menggunakan ini adalah Ord(X) : Longint;
Fungsi ORD digunakan untuk merubah nilai X ke bentuk nilai Longint yang sesuai
dengan kode ASCIInya. Untuk memudahkan pengertian anda perhatikanlah contoh
berikut ini.
Program Misal8;
Var Karakter : Char;
Begin
Write(‘Karakter ?’); Readln(Karakter);
Writeln(Karakter,’adalah kode ASCII : ‘,Ord(Karakter));
End.
Output dari program di atas adalah :
Karakter ? B
B adalah kode ASCII : 66
3. Fungsi Standar ROUND
Bentuk umum menggunakan fungsi ini adalah : Round(X:Real):Longint;
Fungsi Round digunakan untuk membulatkan nilai dari real X ke nilai longint yang
terdekat. Bila nilai pecahan sama dengan atau lebih besar dari 0.5 akan dibulatkan
ke atas, sedang bila nilai pecahan lebih kecil dari 0.5 akan dibulatkan ke bawah.
Untuk memudahkan pengertian anda perhatikanlah contoh berikut ini.
Program Misal9;
Begin
Writeln(’10 dibagi 3 hasil pembulatan terdekat adalah ‘,Round(10/3));
Writeln(’20 dibagi 3 hasil pembulatan terdekat adalah ‘,Round(20/3);
End.
Output :
10 dibagi 3 hasil pembulatan terdekat adalah 3
20 dibagi 3 hasil pembulatan terdekat adalah 6
4. Fungsi Standar TRUNC
Bentuk umum pemakaian fungsi ini adalah Trunc(X:Real):Longint;
Fungsi TRUNC digunakan untuk membulatkan nilai real X ke nilai longint terkecil
atau dengan kata lain membulatkan ke bawah. Untuk memudahkan pengertian anda
perhatikanlah contoh berikut ini.
Program Misal10;
Begin
Writeln(’10 dibagi 3 hasil pembulatan ke bawah adalah ‘,Trunc(10/3));
Writeln(’20 dibagi 3 hasil pembulatan ke bawah adalah ‘,Trunc(20/3));
End.
Output :
10 dibagi 3 hasil pembulatan ke bawah adalah 3
20 dibagi 3 hasil pembulatan ke bawah adalah 6

H. Soal Latihan 5
1. Buatlah 3 contoh sintaks deklarasi
procedure dan function serta cara memanggilnya
2. Sebutkan dan buat 3 contoh ruang lingkup
variabel
3. Buat program sederhana dalam bentuk
prosedur dan fungsi yang melewati harga dengan parameter nilai (acuan) dan
prosedur yang melewati harga dengan parameter variabel.
4. Pada sebuah laboratorium dalam
melaksanakan penelitian terdapat petunjuk penggunaan alat atau bahan dengan
berbagai satuan skala suhu yaitu Fahrenheit, Reamor dan Celsius. Konversi yang
harus dibuat adalah dari Fahrenheit ke Celsius, Fahrenheit ke Reamor, Celsius ke
Fahrenheit. Instruktur laboratorium meminta Saudara untuk membuat program
koversi skala penggukuran tersebut. Petunjuk gunakan program pembantu berupa
prosedur yang mengandung variabel global, variabel lokal, parameter acuan (nilai)
dan parameter variabel.
5. Saudara ditugaskan menghitung massa jenis
benda berbentuk bola dan kubus yang terbuat Besi dan Aluminium dengan ukuran
dan kerapatan jenis yang berbeda-beda. Agar perhitungan dapat dilakukan dengan
cepat dan akurat, instruktur memerintahkan Saudara agar membuat program dengan
ketentuan sebegai berikut:
a. untuk menghitung volume, gunakan program
pembantu Procedure
b. Input adalah sisi kubus atau jari-jari bola, massa
benda
c. Tampilan menu:
- Menu Jenis Benda:
1. Data Kubus
2. Data Bola
Selasai
Pilihan Anda !!!
- Menu Bahan Benda
a. Alumunium
b. Besi
c. Tembaga
Pilihan Bahan Anda !!!
d. Input data selesai setalah pada bagian input jenis
benda dituliskan kata “Selesai”.
Buatlah algoritma dan program dengan pascal untuk menyelesaikan
permasalahan di atas
6. Buatlah procedure untuk menampilkan pola
segi tiga dari karakter ’*’ dengan sisi tegak ada di bagian kanan. Contoh untuk n =
5, hasilnya berbentuk :
*
* *
* *
* * * * *
7. Ingin dibuat procedure untuk menampilkan
pola bilangan dalam segi tiga seperti contoh berikut (untuk n = 5). Bagaimana isi
procedurenya?
1
121
12321
1234321
123454321
8. Buatlah program untuk menghitung luas
persegi panjang, segitiga, dan lingkaran. Perhitungan masing-masing bangun
dilakukan oleh fungsi yang mengembalikan luas tiap bangun. Tiap fungsi memiliki
parameter berupa data yang diperlukan untuk menghitung luas : panjang dan lebar
(persegi panjang), alas dan tinggi (segitiga), dan diameter (lingkaran).
9. Buatlah function untuk menghitung luas
segiempat yang batasnya ditunjukkan oleh koordinat titik kiri-atas (x1,y1) dan
koordinat titik kanan-bawah (x2,y2). Cara memanggil function ini adalah
Luas(x1,y1,x2,y2). Sebagai contoh Luas(0,0,1,1) akan menghasilkan nilai 1
sedang Luas(10,10,60,30) akan menghasilkan 1000.
10. Diketahui sebuah konduktor berongga
berupa bola berjari-jari (R) bermuatan q dan pada jarak d dari pusat bola dan
mempunyai sebesar muatan Q. Buatlah algoritma dan program dalam satu paket
untuk menghitung:
a. Energi pada kulit bola bermuatan q
b. Medan listrik dan potensial untuk
- d>R
- d< R
- d=R
Gunakan program moduler procedure dan parameter nilai, parameter variabel,
Variabel global, variabel lokal untuk setiap kasus perhitungan (Baca Medan
Elektromagnetik, Karangan Waloejo Laksmanto, hal 37 – 49) untuk
mendapatkan persamaan yang akan digunakan.
11. Buat program mengandung procedure untuk
menghitung, sebuah kabel jalur kereta gantung sepanjang 500 m direntang
diantara 2 menara dgn 1 menara penunjang ditengah-tengahnya. Kecepatan kereta
gantung tersebut bergantung kepada posisinya pada menara. Ketika kereta berada
pada jarak kecil dari 25 m dari menara kecepatannya adalah :
2
vel =0,2 d m / dt dan dengan: d adalah jarak kereta ke menara terdekat
dan ketika kerata berada pada jarak >= 25 m dari menara kecepatannya adalah
2
vel=d +0 . 01 d m/ dt . Cetaklah tabel jarak dari menara I dan
kecepatan kereta yang bergerak dari menara I hingga ke III, setiap jarak 5 m.
Cetak juga nomor menara yang dilewati kereta.

Anda mungkin juga menyukai