Bambang Heru Susanto Departemen Teknik Kimia Universitas Indonesia
October 2006
1
1.
Pengenalan Pascal
Contoh Program Pascal program Hallo; (*Program untuk menampilkan tulisan “Hallo, World” di layar*) var i:integer; begin writeln(‘Hallo, World’); end.
Penjelasan 1. program Hallo; program menandai awal dari program yang bernama Hallo. 2. (* Program untuk menampilkan tulisan “Hallo, World” di layar *) Bagian yang berada dalam (* dan *) merupakan komentar dan tidak akan dieksekusi pada saat kompilasi maupun runtime. Selain pasangan (* dan *) komentar juga dapat dituliskan dalam pasangan { dan }. Contohnya { Ini juga komentar }. 3. var Kata kunci var untuk penanda variabel apa saja yang akan digunakan dalam program. 4. i : integer; Deklarasi variabel, sebelum dapat dipakai, setiap variabel harus dideklarasikan terlebih dahulu. Cara pendeklarasian variabel dijelaskan kemudian. 5. begin Penanda bagian awal blok algoritma program. 6. writeln(‘Hallo, World’); Prosedur untuk menulis ke layar. Prosedur akan dijelaskan kemudian. 7. end. Akhir blok Algoritma Program.
Identifier Identifier ialah nama pengenal variabel, kostanta, nama fungsi, atau prosedur. Penulisan identifier harus diawali alphabet (A..Z, a..z) atau underscore(“_”). Identifier pada Pascal tidak case sensitive, sehingga numOfPoint adalah variabel yang sama dengan NUMOFPOINT atau numofpoint.
2.
Tipe Data Dasar
Data ialah suatu nilai yang akan disimpan, dimanipulasi atau digunakan dalam program. Jenis – Jenis Data pada program : o Konstanta, yaitu data yang nilainya didefinisikan sekali dan tidak dapat diubah – ubah selama program berjalan. o Variabel, yaitu data yang nilainya dapat diubah – ubah pada saat program berjalan. 2
Tipe Data Tipe Data ialah representasi suatu data dalam komputer. Tiap tipe memiliki beberapa atribut : o Nama Integer, float, character , string o Domain harga [A..Z, a..z, 0..9] o Cara penulisan literal 233, ‘a’, “hallo” o Operator +,-,=,*,/
Deklarasi Data Pada bahasa pascal, data harus dideklarasikan terlebih dahulu sebelum dapat digunakan. Pendeklarasian konstanta dilakukan didalam blok const dan variabel dilakukan di dalam blok var. Cara pendeklarasian konstanta yaitu dengan kata kunci const diikuti dengan satu atau lebih data konstanta dengan format
= ; Cara pendeklarasian variabel yaitu dengan kata kunci var diikuti dengan satu atau lebih data variabel dengan format : ;
Contoh deklarasi data:
const maxIdx = 10; minIdx = 1; var i : integer; nama : string;
Tipe Data Dasar pada Pascal 1. Integer Integer merepresentasikan bilangan bulat. Rangenya bergantung pada saat deklarasi sebagai apa. Type shortint byte integer word longint Operator aritmetik Operator +
Size (Byte)
Range -128..+127 0..255 -32768..+32767 0..65535 -232..232-1
1 1 2 2 4
contoh a+b
Fungsi Mengahasilkan penjumlahan nilai a dan nilai b. 3
-
a–b
*
a*b
/
a/b
div
a div b
mod
a mod b
Mengahasilkan pengurangan nilai a dengan nilai b. Mengahasilkan perkalian nilai a dengan nilai b. Mengahasilkan pembagian nilai a dengan nilai b hasilnya berupa integer. Mengahasilkan pembagian nilai a dengan nilai b hasilnya berupa real. Menghasilkan sisa pembagian nilai a dibagi nilai b.
Operator perbandingan
=
Operator
contoh a=b
<>
a <> b
<
a
>
a>b
<=
a <= b
>=
a >= b
Fungsi mengahsilkan true jika nilai a sama dengan nilai b. mengahsilkan true jika nilai a tidak sama dengan nilai b. mengahsilkan true jika nilai a kurang dari nilai b. mengahsilkan true jika nilai a lebih dari nilai b. mengahsilkan true jika nilai a kurang dari atau sama dengan nilai b. mengahsilkan true jika nilai a lebih dari atau sama dengan nilai b.
2. Real Real merepresentasikan bilangan riil (floating point). Sama seperti integer rangenya bergantung pada saat deklarasi. Type single real double extended comp
Size (Byte)
Range 0.71E-45..3.4E+38 2.94E-39..1.7E+38 4.94E-324..1.79E+308 3.3E-4932..1.18E+4932 -9.2E-18..+9.2E+18
4 6 8 10 8
Operator – operator pada real sama dengan operator – operator pada integer tanpa operator mod dan div pada operator aritmetik dan <= dan >= pada operator relasional. 3. Boolean Boolean ialah tipe data yang merepresentasikan true atau false. Operator Operator not
contoh not a
or
a or b
and
a and b
Fungsi menghasilkan true jika a false dan menghasilkan false jika a true. menghasilkan false jika a dan b false selain itu menghasilkan true. mengahsilkan true jika a dan b keduanya true, selain itu 4
xor
a xor b
menghasilkan false. mengahsilkan true jika salah satu a atau b bernilai true, selain itu menghasilkan false.
4. char char ialah karakter ‘A’..’Z’, ‘a’..’z’, ‘0’..’9’ dan karakter – karakter lainnya. Operator =
Operator
contoh a=b
<>
a <> b
Fungsi mengahsilkan true jika nilai a sama dengan nilai b mengahsilkan true jika nilai a tidak sama dengan nilai b
5. string string ialah susunan atau gabungan beberapa karakter. Operator
3.
Operator =
contoh a=b
<>
a <> b
+
a+b
Fungsi mengahsilkan true jika nilai a sama dengan nilai b. mengahsilkan true jika nilai a tidak sama dengan nilai b. menghasilkan string a yang disambung(konkat) dengan string string b.
Assignment
Assignment ialah mengisi suatu data (variabel) dengan nilai atau dengan nilai dari variabel lainnya. Contoh x = 5; artinya ialah mengassign 5 sebagai nilai dari variabel x. Assignment di Pascal x := 5;
4.
Input / Output
Input Nilai yang dimasukkan user untuk kemudian digunakan di dalam program. Dalam Pascal read(var); readln(var); read dipakai untuk meminta masukan dari user yang diakhiri oleh enter. Sedangkan readln dipakai untuk meminta masukan yang diakhiri dengan enter lalu menunggu masukan karakter newline. 5
Output Nilai yang dihasilkan program dan ditampilkan ke layar Dalam Pascal write(var); writeln(var); write digunakan untuk mencetak keluaran kelayar, sedangkan writeln untuk mencetak keluaran yang lalu diikuti dngan karakter newline. Contoh Input read(x); readln(x);
Contoh Output write(‘Hallo’); write (‘Hallo’); write(‘Hallo’,nama); writeln(‘Hallo’); writeln(nama); writeln(‘Hallo’, nama); Contoh Program program IO; (* program yang menerima masukan nama dan umur lalu menuliskannya ke layar *) var nama : string; umur : integer; begin write('Masukkan nama Anda : '); read(nama); write('Masukkan usia Anda : '); read(umur); writeln ('----Masukan yang didapat----'); writeln ('Nama Anda : ', nama); writeln ('Usia Anda : ', umur); writeln ('Tulis dalam satu baris'); writeln ('Nama Anda : ', nama, ' - usia Anda : ', umur); end.
5.
Percabangan
Tidak semua program berjalan lurus dari atas sampai bawah. Untuk itu terdapat kontrol percabangan. Dalam Pascal terdapat 3 jenis kontrol percabangan, yaitu if-then, if-then-else dan case.
if – then Pola ini dipakai untuk mengevaluasi suatu kondisi dan melaksanakan aksi jika kondisi terpenuhi 6
contoh if x = 1 then writeln(x); if not found then writeln(‘kosong’); Artinya bagian yang pertama ialah jika nilai x sama dengan 1 maka cetak nilai x ke layar, jika tidak, program tidak melakukan apa – apa.
if – then - else Pola ini dipakai untuk mengevaluasi suatu kondisi dan melaksanakan suatu aksi jika kondisi terpenuhi dan melaksanakan aksi lainnya jika kondisi tidak terpenuhi. contoh if x = 1 then writeln(x) else writeln(‘x bukan angka 1’); if not found then writeln(‘kosong’) else writeln(‘ketemu’); {Perhatikan tidak ada titik koma sebelum else} Arti bagian yang pertama yaitu jika nilai variabel x sama dengan 1 maka tulis nilainya, jika x bukan 1, maka tulis string “x bukan angka 1”
CASE case dipakai untuk mengevaluasi kondisi yang banyak. Jadi aksi dilakukan bergantung pada kondisi (depend on (kondisi)) contoh case x of 0 : hari := ‘Minggu’; 1 : hari := ‘Senin’; 2 : hari := ‘Selasa’; 3 : hari := ‘Rabu’; 4 : hari := ‘Kamis’; 5 : hari := ‘Jumat’; 6 : hari := ‘Sabtu’; end; Artinya ialah jika x bernilai 0 maka assign variabel hari dengan nilai “Minggu” jika bernilai 1 maka assign variabel hari dengan nilai “Senin”, dst… contoh program : program conditional; (* Contoh penggunaan conditional branch *) var namaHari : string; angkaHari : integer; begin writeln ('Masukkan angka 1 - 7'); write ('Angka : '); read (angkaHari); case angkaHari of 1 : namaHari := 'Minggu'; 2 : namaHari := 'Senin'; 7
3 : namaHari 4 : namaHari 5 : namaHari 6 : namaHari 7 : namaHari end;
:= := := := :=
'Selasa'; 'Rabu'; 'Kamis'; 'Jumat'; 'Sabtu';
writeln('nama hari : ', namaHari); if namaHari = 'Minggu' then writeln('Hari ini hari minggu'); if namaHari = 'Senin' then writeln('Hari ini hari Senin') else writeln ('Hari ini bukan hari senin'); end.
6.
Blok Instruksi
Pada contoh sebelumnya (program conditional), aksi yang dilakukan jika kondisi terpenuhi hanya terdiri atas satu aksi saja. Bagaimana jika program itu diubah menjadi if namaHari = 'Minggu' then writeln('Hari ini hari minggu'); writeln(‘Jika hari ini Minggu, pasti hari ini bukan senin’); kemudian pada saat eksekusi masukkan angka 2, apa yang terjadi? Ternyata tulisan ‘Jika hari ini Minggu, pasti hari ini bukan senin’ muncul juga, padahal seharusnya ini hari minggu. Sebenarnya hal ini diakibatkan karena Pascal menganggap code itu adalah if namaHari = 'Minggu' then writeln('Hari ini hari minggu'); writeln(‘Jika hari ini Minggu, pasti hari ini bukan senin’); sehingga instruksi writeln(‘Jika hari ini Minggu, pasti hari ini bukan senin’); dieksekusi tanpa mengevaluasi variabel namaHari. Solusinya definisikan blok instruksi yang akan diksekusi jika kondisi terpenuhi, perhatikan kode berikut program conditional; (* Contoh penggunaan conditional branch *) var namaHari : string; angkaHari : integer; begin writeln ('Masukkan angka 1 - 7'); write ('Angka : '); read (angkaHari); case angkaHari of 1 : namaHari := 'Minggu'; 2 : namaHari := 'Senin'; 8
3 : 4 : 5 : 6 : 7 : end;
namaHari namaHari namaHari namaHari namaHari
:= := := := :=
'Selasa'; 'Rabu'; 'Kamis'; 'Jumat'; 'Sabtu';
writeln('nama hari : ', namaHari); if namaHari = 'Minggu' then begin writeln('Hari ini hari minggu'); writeln(‘Jika hari ini Minggu, pasti hari ini bukan end;
senin’);
if namaHari = 'Senin' then writeln('Hari ini hari Senin') else writeln ('Hari ini bukan hari senin'); end. Blok instruksi ialah kumpulan instruksi yang dikelompokkan dalam begin – end; hal ini dapat mengantisipasi kesalahan leksikal program. Jadi kesimpulannya, gunakan blok instruksi untuk mengelompokkan instruksi.
7.
Tipe Data Lanjutan
Array Array ialah suatu tipe yang mengacu kepada sekumpulan elemen bertipe sama yang dikenali indeksnya. Dalam Pascal indeks dapat berupa integer atau char. Deklarasi Array var tab : array[1..10] of integer; Cara pengaksesan array yaitu tab[1] := 1; x := tab[3]; Baris pertama berarti isi array tab dengan indeks 1 dengan nilai satu. Baris kedua berarti isi nilai variabel x dengan nilai pada array tab dengan indeks 3. Untuk lebih jelasnya perhatikan (dan coba eksekusi) program dibawah ini program cobaarray; {Program untuk latihan manipulasi array} var tab : array [1..5] of integer; i : integer; begin tab[1] := 5; tab[2] := 4; 9
tab[3] := 3; tab[4] := 2; tab[5] := 1; write('Masukkan integer[1..5] <- '); read (i); if (i > 0) and (i <= 5) then writeln ('Isi tab[', i, '] : ', tab[i]) else writeln ('masukan tidak valid'); end.
Tipe Bentukan tipe bentukan ialah tipe data yang dibentuk dari satu atau lebih tipe data dasar atau tipe record lain yang sudah didefinisikan. Tipe data baru yang dibentuk lebih dari satu tipe disebut juga record contoh deklarasi type: type tabel = array [1..10] of integer; type Point = record x : integer; y : integer; end; jika P1 adalah variabel yang bertipe Point maka cara pengaksesan elemen recordnya adalah P1.x P1.y
{untuk mendapatkan nilai x dari variabel P1} {untuk mendapatkan nilai y dari variabel P1}
Untuk lebih jelasnya coba perhatikan (dan buat tentunya) program ini program kuadranpoint; type point = record x : integer; {absis} y : integer; {ordinat} end; var p : point; kuadran : integer; begin writeln ('Masukkan absis p'); readln (p.x); writeln ('Masukkan ordinat p'); readln (p.y); if (p.x > 0) and (p.y > 0) then kuadran := 1 10
else if (p.x kuadran := else if (p.x kuadran := else if (p.x kuadran := else kuadran :=
< 0) and (p.y > 0) then 2 < 0) and (p.y < 0) then 3 > 0) and (p.y < 0) then 4 0;
writeln ('Point (', p.x, ',', p.y, ') berada di kuadran ', end.
8.
kuadran);
Per Perulangan
Selain Percabangan, kontrol alur program yang lain ialah pengulangan. Perhatikan kembali kode tab[1] tab[2] tab[3] tab[4] tab[5]
:= := := := :=
5; 4; 3; 2; 1;
terlihat bahwa instruksi assignment pengisian array tab diulang sebanyak lima kali. Untuk jumlah pengisian yang sedikit hal ini tidak menjadi masalah, tetapi jika jumlah sudah banyak, 100 misalnya, apakah kita akan mengetik 100 kali (atau copy/paste 99 kali)? tentu saja tidak, cara yang tepat ialah dengan menggunakan metode perulangan.
For – Do Perhatikan kembali kode di atas. Untuk memudahkan kita dapat menulisnya sebagai berikut : for i := 1 to 10 do tab[i] := 11 – i; Algoritma di atas artinya ialah untuk setiap i dari 1 sampai 10 lakukan aksi assignment. Algoritma ini akan melakukan operasi assignment pada setiap i. Algoritma ini dikenal juga dengan nama traversal.Pada setiap kali aksi selesai dilakukan, i otomatis bertambah 1. Pengisian seperti ini bisa dibalik menjadi for i := 10 downto 1 do tab[i] := 11 – i;
While – Do Struktur ini bermakna selama kondisi masih terpenuhi lakukan aksi. Perhatikan contoh berikut i := 1; while i <= 10 do begin tab[i] := 11 – i; i := i + 1; end;
11
Sebelum melakukan aksi kondisi dievaluasi terlebih dahulu, akibatnya aksi bisa saja tidak dilakukan sama sekali jika pada awal pemanggilan kondisi sudah tidak terpenuhi, misalnya pada contoh diatas jika pada baris pertama angka 1 diganti dengan 11.
Repeat – until Struktur ini bermakna lakukan aksi sampai kondisi terpenuhi. Perhatikan contoh berikut i := 1; repeat tab[i] := 11 – i; i := i + 1; until i > 10; Pada struktur ini aksi dilakukan terlebih dahulu, setalah itu baru dievaluasi apakah kondisi sudah terpenuhi, jika sudah terpenuhi maka perulangan dihentikan. Perhatikan pada struktur ini blok program tidak berada pada begin – end, tetapi pada repeat – until. Pada struktur ini aksi dilakukan minimal satu kali. Hal ini dapat menimbulkan kesalahan leksikal pada program. Apa yang terjadi jika pada baris pertama pada program diatas nilai i diassign dengan 11? Oleh karena itu kita harus memilih struktur perulangan yang tepat untuk memecahkan masalah. Memilih Perulangan yang Sesuai Dalam menentukan struktur perulangan yang akan dipakai perlu diperhatikan beberapa hal. Untuk memudahkan perhatikan masing – masing penggunaan tiap struktur berikut. For – Do Struktur ini biasanya digunakan jika kita ingin melakukan aksi yang sama untuk setiap kali pass. Misalnya untuk menginisialisasi atau untuk mengisi array. While – Do Struktur ini biasanya digunakan jika kita ingin mencari suatu nilai untuk kemudian digunakan, atau ingin melakukan aksi hanya sampai kondisi tertentu terpenuhi saja, sehingga tidak perlu melakukannya terhadap sisanya. Penggunaan While – Do paling sering untuk algoritma search, contohnya pada fungsi yang mengembalikan nilai boolean apakah ada suatu nilai x dalam array. Repeat – Until Struktur ini penggunaannya hampir sama dengan While – Do, tetapi untuk menggunakannya kita harus memastikan bahwa untuk lelaran(pass) pertama kondisi pasti belum dipenuhi. Salah satu peggunaan struktur ini ialah pada desain menu. Menu minimal ditampilkan satu kali pada eksekusi program. Contoh Kasus: Buatlah program yang terus – menerus menerima masukan integer hingga user mengetikkan angka 999. Solusi 1, menggunakan For – Do program ambilInteger; var inputInteger : integer; i : integer; begin for i := 1 to 100 do {Kita asumsikan user paling banyak menginput 100 kali} read(inputInteger); if (inputInteger = 999) then 12
begin
exit; end; end. Solusi 2, menggunakan While – Do program ambilInteger; var inputInteger : integer; i : integer; begin while (inputInteger <> 999) do begin read(inputInteger); end; end. Solusi 3, menggunakan Repeat - Until program ambilInteger; var inputInteger : integer; i : integer; begin repeat read(inputInteger); until(inputInteger = 999) end. Solusi manakah yang lebih mudah diimplementasikan(dibuat)? Yang mana yang lebih tepat untuk diimplementasikan?
13
9.
Sub Program
Prosedur dan Fungsi Modulasi Program adalah hal yang begitu penting dalam pemrograman. Kita harus tahu dimana kita akan memecah program menjadi bagian yang lebih mudah untuk diselesaikan dibanding dengan kerumitan yang kita depat dengan tanpa memecah program menjadi modulmodul yang lebih kecil. Dalam Pascal, modul-modul yang lebih kecil tadi dibedakan menjadi prosedur dan fungsi. Hal ini juga penting bila kita ingin melakukan suatu aktivitas yang sejenis lebih dari satu kali. Tentunya akan repot bila kita menuliskan ulang kode untuk aksi tersebut karena bisa saja aksi tesebut akan membutuhkan barisan kode yang sangat panjang. Beda Prosedur dan Fungsi Dalam bahasa C, Prosedur adalah fungsi dengan nilai balikan void, atau tak bertipe. Sedang dalam Pascal, prosedur adalah suatu runtutan aktivitas yang spesisfik tanpa menghasilkan/mengembalikan suatu nilai. Misalnya pada kehidupan nyata adalah prosedur bacaBuku dimana kita melakukan aktivitas, membaca kata demi kata, membalik halaman, kembali membaca kata demi kata, membalik halaman, hingga halaman akhir dari buku. Sedang fungsi adalah aktivitas spesifik yang nantinya aktivitas tersebut akan memberikan suatu nilai yang dibutuhkan. hasil tadi diberikan melalui sebuah nilai yang akan dikembalikan fungsi tadi. Misalanya kita ingin mencari halaman dimana ada judul bab ! berada, maka akan lebih sesuai bila kita mendefinisikan aktivitas tadi sebagai fungsi yang akan mengembalikan nilai halaman dimana judul Bab satu berada. Mendefinisikan Procedure program mainProgram; var (*Pendeklarasian prosedure*) procedure namaProsedur; type (*type yang hanya ingin dipakai di dalam procedure*) var (*variabel lokal yang dideklarasikan di dalam prosedu*) begin (*Aksi dalam prosedur;*) end; begin (*aksi program main utama*) namaProsedur; (*memanggil prosedur*) end.
Nama Global dan Nama Lokal Dalam Lingkup Prosedur dan fungsi tentunya kita akan membutuhkan variabel-variabel untuk membantu melakukan instruksi atau memang dibutuhkan untuk memperoleh suatu nilai. Variabel-variabel tersebut dibedakan menjadi 2, yaitu variabel global dan variabel lokal. Variabel Global berasal dari nilai yang ada di lingkup luar prosedur dan dikenali nilainya ileh prosedur. Sedangkan variabel lokal adalah variabel yang hanya dikenali di dalam lingkup prosedur itu sendiri. 14
Usahakanlah menggunakan nama-nama global sesedikit mungkin. Nama lokal akan membuat program mudah ditelusuri dan pencaraian kesalahan akan lebih mudah karena variabel akan bermain di lingkupnya dia sendiri. Penggunaan nama global tetap dapat membantu pada masalah-masalah yang memang membutuhkan nilai global yang bisa diakses dimana saja. Parameter Untuk pertukaran informasi antara lingkungan di luar variabel/titik dimana ia dipanggil dan lingkungan prosedure adalah dengan memasukkan variabel ke dalam lingkup prosedure melalui mekanisme parameter. Bila sebuah prosedure menggunakan parameter, maka akan terdapat nilai / variabel yang dikurung () baik pada pendeklarasian maupun pemanggilan. Tiap item data ditransfer antara parameter aktual dan parameter formal. Parameter aktual adalah parameter yang disertakan pada waktu pemanggilan. Sedangkan parameter formal adalah parameter yang dideklarasikan pada header prosedure itu sendiri. Contoh penggunaan prosedur dengan parameter: program pCetakUlang ; var procedure cetakUlang(N : integer) var I : integer; begin for I := 1 to N do writeln(‘cetak’); end; X : integer; begin X := 10; cetakUlang(X); end. Maka pada contoh diatas, Pendeklarasian prosedure dilakukan didalam program utama dibawah kata kunci var, bersama dengan pendeklarasian variabel X yang digunakan oleh program utama. Variabel N : integer pada header prosedur adalah parameter formal. Ketika pemanggilan pada program utama cetakUlang(X), maka parameter aktual X akan menggantikan parameter formal dari prosedure. Harus diingat bahwa parameter aktual yang digunakan harus sesuai dengan parameter formal yang didefinisikan, baik tipe data maupun jumlah parameter, jika tidak maka compiler akan menampilkan pesan kesalahan.I di dalam prosedure adalah variabel lokal yang tidak dikenali di program utama. Parameter Masukan, Keluaran, Masukan/Keluaran. Parameter dibedakan menjadi 3 jenis : a. Parameter Masukan : adalah parameter yang di dalam prosedure tidak dimaksudkan untuk di manipulasi hanya digunakan saja oleh prosedur tersebut. Parameter aktual di sini tidak akan pernah mengalami perubahan nilai. b. Parameter Keluaran : adalah parameter yang di dalam prosedure dimaksudkan untuk diubah nilainya, dan perubahan nilainya itu dapat dikenali di titik dimana ia dipanggil. Disini nilai parameter aktual akan berubah nilainya sesuai aksi di dalam prosedure. Parameter ini memang dimaksudkan untuk diubah dalam prosedure.
15
c. Parameter Masukan/Keluaran : sama kelakuannya dengan parameter keluaran hanya saja disini parameter juga ikut memberikan nilai yang digunakan oleh prosedur. Contoh procedure cetakUlang(N : integer) var I : integer; begin For I := 1 to N do Writeln(‘cetak’); end; N adalah parameter masukan karena ia masuk ke dalam prosedur tanpa ada maksud untuk mengubah nilainya. Ia hanya digunakan untuk menentukan berapa kali pengulangan dalam prosedure akan dilakukan.
Procedure hitungRata (N : integer, var rata: real) Var i : integer; x : integer; begin jumlah := 0; for i:=1 to N do begin writeln(‘x ?’); readln(x); jumlah := jumlah + x; end; rata := jumlah /N; end; Dengan pemanggilan program mainRataRata; var Procedure hitungRata(N : integer, var rata : real); x : integer; r : real; begin x := 10; u := 0; hitungJumlahNBilPertama(x,u); writeln(‘jumlah data adalah :’,x); writeln(‘rata –rata : ’,u); end.
bila kita eksekusi tampak bahwa nilai x adalah tetap sama dengan yang diinisiasi pertama kali yaitu 10, tetapi bila kita lihat hasil u, u tidak lagi bernilai 0 yang seperti kita inisiasi pertama kali, tetapi berubah menjadi nilai rata-rata yang kita hitung dalam prosedur hitungRata. Hal ini karena pada deklarasi prosedur hitungRata, u adalah sebuah parameter keluaran dengan tambahan kata kunci var di depan parameter formal yang bersangkutan (tidak perlu lagi menulis var pada pemanggilan prosedur).
Mendefinisikan Fungsi program mainProgram; 16
var (*Pendeklarasian fungsi*) function namaFungsi(X : tipeSem, Y : tipeSem) : tipeData; Type (*type yang hanya ingin dipakai di dalam fungsi*) Var (*variabel lokal yang dideklarasikan di dalam p*) Z : tipeData; begin (*Aksi dalam fungsi yang akan memanipulasi Z;*) (*pengembalian nilai*) namaFungsi := Z; end; n : tipeData; x : tipeSem; y : tipeSem; begin (*aksi program main utama*) n := namaFungsi(x,y); (*mendapatkan suatu nilai*) (*balikan fungsi*) end. Yang perlu diperhatikan adalah: -
Pendeklarasian tipe data yang akan dikembalikan pada header fungsi pada tubuh fungsi di bagian akhir ada aksi pengembalian nilai balik fungsi (di dalam contoh adalah mengembalikan nilai Z) sesuai dengan tipeData balikan yang telah dideklarasikan. Penangkapan nilai balik oleh suatu variabel di lingkup pemanggil fungsi dengan tipe data yang sama (dalam contoh dilakukan oleh n ) Contoh Program fungsiLuas; Var function hitungLuasSegitiga(x: integer; y: integer):real; var luas : real; begin luas := (x*y)/2; hitungLuasSegitiga := luas; end; alas : integer; tinggi : integer; luas3 : real; (*pogram utama*) begin writeln(‘masukkan alas segitiga : ’); readln(alas); writeln(‘masukkan tinggi segitiga : ’); readln(tinggi); luas3 = hitungLuasSegitiga(alas,tinggi); writeln(‘luas segitiga yang dimasukkan : ’,luas3); end.
Dalam contoh diatas pengembalian nilai balik fungsi dilakukan oleh hitungLuasSegitiga := Luas; dan penangkapan nilai balik tadi dilakukan oleh luas3 := hitungLuasSegitiga(alas,tinggi); 17
10. File Eksternal Pascal memiliki kemampuan membaca file eksternal yang cukup mudah. Misalnya bila kita ingin program membaca data karakter dari file berekstensi file.txt, bahasa pascal telah menyediakannya. Selain itu bahasa pascal juga menyediakan fasilitas untuk membaca file biner eksternal yang disimpan untuk menyimpan suatu tipe data baik tide data bawaan ataupun bentukan kita. Skema dan bentuk yang diperlukan dalam pembacaan file FileVariable : variabel yang diperlukan untuk menghubungkan program dengan file eksternal.; Assign (FileVariable, namaFileEksternal) : menghubungkan file variable dengan file yang bernama yang disebutkan di namaFileEksternal; Reset(FileVariable) : membuka file yang telah dihubungkan dengan file variable, file yang dibuka haruslah sudah eksis; Rewrite(FileVariable) : membuka file yang baru atau belum pernah ada (untuk merekam data); Append(FileVariable) : membuka file, dengan kemampuan merekam tetapi tidak menghapus isi data yang sudah ada melainkan menggabungkan/ append di akhir file yang lama. Close(FileVariable) : menutup file, setelah penggunaan file eksternal yang dihubungkan dengan FileVariable telah selesai. Eof(FileVariable) : fungsi yang menghasilkan boolean, memberitahukan apakah sudah berada pada akhir file atau belum. Mengembalikan true jika sudah berada pada akhir file. Untuk menulis dan membaca data dari file Writeln (FileVariable,v1[v2,v3,…..])
Write (FileVariable,v1[v2,v3,…..]) : akan menulis data yang ada di variable v ke file ekseternal. Readln (FileVariable,v1[v2,v3,…..]) Read (FileVariable,v1[v2,v3,…..]) : akan membaca data yang ada file eksternal untuk dimasukkan ke dalam variable v. Contoh pembacaan file teks (sumber : diktat kuliah algoritma pemrograman oleh Wikan Danar) program BacaText; (* File: bacatext.pas *) (* Membaca sebuah text file diakhiri '.', dan menuliskan apa adanya ke layar *) (* Program ini tidak memanfaatkan EOF *) (* Jadi tidak boleh ada file yang hanya mengandung EOF. *) (* File kosong berisi sebuah karakter '.' *) (* Kamus *) var f : Text; CC : char; (* karakter yang dibaca *) (* Algoritma *) begin assign(f,'pitakar.txt'); reset(f); (* buka dengan modus read only *) 18
if (CC = '.') then begin writeln('Arsip kosong'); end else (* CC bukan '.' *) begin repeat read(f,CC); write(CC); until (CC = '.'); end; close(f); end. program RekamTexts; (* File : Rekamtxt.pas *) program RekamText; (* Membaca karakter demi karakter dari keyboard *) (* dan menyimpan ke text file. *) (* Akhiri pembacaan dengan "#" File diakhiri EOF *) (* Kamus *) var f : text; CC : char; (* Algoritma *) begin assign(f,'TextOut.TXT'); rewrite(f); (* buka dengan modus rekam *) write('Masukkan karakter, akhiri dengan #'); read(CC); while (CC <> '#') do begin write(f,CC); read(CC); end; (* CC='#' *) close(f); end. program Frec; (* File : Frec.pas *) (* Membaca sebuah file of record, dan (* Kamus *) type Point = record x : integer; y : integer; end; var f : file of Point; T : Point; (* point yang dibaca *) (* Algoritma *) begin (* Tahap I : membaca data titik untuk assign(f,'mytitik.dat'); rewrite(f); writeln('Input titik, diakhiri dengan (* Baca nilai titik yang akan direkam write('Absis = '); 19
menuliskan isinya ke layar *)
direkam *)
x=-999 dan y=-999'); *);
readln(T.x); write('Ordinat = '); readln(T.y); while (T.x <> -999) and (T.y <> -999) do begin (* rekam ke file *) write(f,T); (* baca data berikutnya *) write ('Absis = '); readln(T.x); write ('Ordinat = '); readln(T.y); end; close(f); (* Tahap II : menuliskan hasil rekaman ke layar *) reset(f); if eof(f) then begin writeln('Arsip kosong'); end else begin repeat read(f,T); (* Tulis data titik *) writeln('T(x,y) = (',T.x, ',',T.y,')'); until eof(f); end; close(f); end.
20