Anda di halaman 1dari 31

Pengenalan PASCAL

Pada bagian ini gua cuman ngejelasin secara garis besar tentang pascal dan tips
penulisan program. Kita mulai, ok?
Bagaimana struktur program Pascal? Pascal terdiri dari 2 bagian utama, yaitu
pendeklarasian variabel dan programnya. Perhatikan contoh:
1:
2:
3:
4:
5:
6:
7:
8:

Program KaryaPertamaku;
uses crt;
var nama: string;
Begin
write('Masukkan nama anda: '); readln(nama);
clrscr;
write('Hi ', nama, 'apakabar?');
End.

Gak usah dipikirin apa isi program itu. Tapi perhatikan strukturnya. Pada baris ke 3,
itu yang disebut bagian pendeklarasian variabel. Sedangkan dari baris ke-4 s/d 8,
disebut bagian pernyataan (tempat nulis program). Baris pertama itu hanya
merupakan judul programnya doank, gak ditulis juga boleh. Judulnya adalah
"KaryaPertamaku", jangan pake spasi loh nulisnya (gunakan garis bawah aja).
O iya, dalam Pascal ada yang disebut unit-unit lain semacam librari lah... Misalnya
pada baris kedua digunakan uses crt; (berfungsi untuk memanipulasi layar teks).
Perhatikan baris 6, itu adalah salah satu fungsi dari unit crt yaitu untuk membersihkan
layar (sama dengan perintah cls di DOS).
Perhatikan cara penulisan programnya! Setiap baris selalu diakhiri dengan titik koma
";" (kecuali pada baris ke-4 dan 8, karena itu adalah tanda dari awal dan akhir
program). Selain itu program pascal selalu dimulai dengan "begin" dan "end." (jangan
lupa titiknya loh).
Bagaimana, mudah bukan? Gua kasih satu tips yang berguna. Kalo nulis program
usahakan yang rapi. Ingat bila ada "Begin" pasti ada "end", nah penulisan program
diantara begin dan end itu usahakan di kasih 2 spasi atau satu tab. Perhatikan baris ke5 s/d 7. Itu akan memudahkan penelusuran program bila terjadi kesalahan.
Pengenalannya cukup segini aja yach... :P

Cara Mencetak Ke Layar Dan Penggunaan Variabel


Ok, sekarang kita bakal belajar cara menampilkan teks di layar dan penggunaan
variabel. Perhatikan contoh dibawah ini:
1:
2:
3:
4:
5:
6:
7:
8:

Program KaryaPertamaku;
uses crt;
var nama: string;
Begin
write('Masukkan nama anda: '); readln(nama);
clrscr;
write('Hi ', nama, 'apa kabar?');
End.

Pada baris ke-3 dideklarasikan variabel nama dengan tipe string. Karena berupa
string, variabel nama bisa menampung input dari user berupa kata dan angka. Untuk
lebih jelas tentang jenis tipe data lihat tabel di bawah. Jangan sampai salah
mendeklarasikan jenis variabelnya loohh...
Tipe Data yang Sering Digunakan di Pascal
Char -> hanya menampung satu karakter
string -> menampung lebih dari satu karakter
Boolean -> hanya mempunyai dua nilai True atau False
Integer -> -32.768 s/d 32.767 (gak bisa bilangan desimal)
longint -> -2.147.483.648 s/d -2.147.483.648(gak bisa bilangan desimal)
read -> 2,9 x 10-39 s/d 1,7 x 1038 (untuk menampung bilangan desimal)

Sekarang perhatikan baris ke-5. Fungsi write adalah mencetak kalimat atau isi
variabel yang ada ke layar. Jadi yang tercetak adalah "Masukkan nama anda: ".
Selanjutnya ada perintah readln. Apa fungsinya? readln itu berfungsi untuk
menampung (menyimpan hasil input user) dan disimpan pada variabel nama. Jadi
sekarang variabel nama bernilai sama yang kamu ketikan.
Pada baris ke-7 di layar akan tercetak " Hi dijas apa kabar?" (itu kalo nama yang
dimasukan dijas). Untuk menampilkan isi variabel cukup ditulis: "write(nama);".
Sedangkan bila berupa teks yang fixed, contohnya sama seperti baris ke-5
(mengunakan ' (kutip) ).
Apa sih beda write dan writeln? write fungsinya mencetak di layar dan posisi kursor
masih dibaris itu juga. Sedangkan writeln akan pindah kebaris yang baru. Perhatikan
Contoh
1: Begin
2:
write('Hi...'); write(' Apa kabar?');
3:
writeln;
4:
writeln('Hi.. '); writeln('Apa kabar?');
5: End.

Maka output yang tampil adalah:


Hi... Apa kabar?
Hi...
Apa kabar ?

Jelas bukan? Jadi fungsi "ln" pada writeln adalah untuk pindah kebaris yang baru.
Fungsinya akan sama bila ditaruh di read. Yup tutorial pertama kelar juga...

Penggunaan Kondisi
Tutorial yang kedua ini akan dibahas mengenai pernyataan kondisi, if dan case.
1:
2:
3:
4:
5:
6:
7:
8:

Program Tutorial2_if;
var pilih: Integer;
Begin
write('Pilih 1 atau 2'); readln(pilih);
if pilih=1 then write('Anda memilih 1')
elseif pilih=2 then write('Pilihan anda 2')
else write('Anda memilih yang lain')
End.

Perhatikan baris 5, 6 dan 7. Di situ ada 3 pernyataan kondisi if. Apabila pilihan yang
kita ketik ada di satu kondisi, maka yang lain akan diabaikan. Bingung? gini
maksudnya... Misal pada program di atas kita pilih 2. Pada saat program dijalankan,
baris ke-5 akan di eksekusi. Berhubung pilihan kita 2 bukan 1, maka akan langsung
pindah kebaris selanjutnya. Ternyata pada baris ke-6 kondisi itu terpenuhi, maka yang
tercetak dilayar adalah "Pilihan anda 2". Baris ke-7 tidak diperiksa lagi karena baris
ke 6 sudah memenuhi syarat.
Bila kita memilih 3, maka baris ke-5 dan ke-6 tidak memenuhi konsisi tersebut, maka
yang tercetak adalah "Anda memilih yang lain".
Selain dengan if, pernyataan kondisi di atas bisa juga menggunakan case. Perhatikan
contoh:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

Program Tutorial2_case;
var pilih: char;
Begin
write('Pilih 1 atau 2'); readln(pilih);
case pilih of
'1': write('Anda memilih 1');
'2': write('Pilihan anda 2');
else write('Anda memilih yang lain');
end;
End.

Keterangannya gak jauh beda dengan kondisi if kok. Coba amati pada baris ke 9, di
sana ada pernyataan "end;". Pernyataan itu berfungsi untuk menutup pernyataan case
yang dimulai pada baris ke-5. Perlu diingat "end" disertai dengan titik hanya untuk
diakhir program.

Looping
Looping? apa hayoo...? masih ingatkan pelajaran fisika SMU, adakan pelajaran
tentang looping dirangkaian elektronik. Looping adalah proses pengulangan hingga
kondisi syarat yang ditentukan tercapai. Sekarang kita ngebahas 3 jenis looping, for,
while dan repeat. Perhatikan contoh di bawah ini:
1:
2:
3:
4:
5:
6:

Program Tutorial3_for;
var i: Integer;
Begin
For i:=1 to 5 do
writeln('ini yang ke ', i);
End.

Perhatikan baris 4 dan 5. Di sana


ada satu persyaratan, yaitu baris ke-5
akan dieksekusi bila nilai i antara 1
sampai 5.

Apa output yang tercetak dilayar?


ini
ini
ini
ini
ini

yang
yang
yang
yang
yang

ke
ke
ke
ke
ke

1
2
3
4
5

Bagaimana kalo mau pake while? Perhatikan contoh:


1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

Program Tutorial3_while;
var i: Integer;
Begin
i:=1;
while i < 5 do
begin
writeln('ini yang ke ', i);
i:=i+1;
end;
End.

Apa perbedaan mendasar while dengan for? yup, di while dibutuhkan counter
(diprogram ini adalah i). Jadi, baris ke-7 dan 8 akan dieksekusi (dijalankan) apabila
nilai i < 5. Coba liat baris ke 6, di sana ada "begin" dan "end;" sebagai pasangannya
(dibaris ke 9). Bila ada lebih dari satu pernyataan harus di mulai dengan begin untuk
kondisi if, case, looping. Jika tidak hanya baris pertama saja yang dieksekusi. Apa
outputnya?
ini
ini
ini
ini

yang
yang
yang
yang

ke
ke
ke
ke

1
2
3
4

Coba baris ke 8 kamu ganti dengan "i:=i-1;" apa yang terjadi? Coba jalankan. Akan
terjadi looping terus menerus karena kondisinya memenuhi syarat terus (i selalu
kurang dari lima). Tekan control break untuk menghentikannya. Hal inilah yang
disebut invinitive loop. Sekarang kita coba dengan repeat.
1:
2:
3:
4:
5:
6:
7:
8:
9:

Program Tutorial3_while;
var pilih: char;
Begin
i:=1;
repeat
writeln('ini yang ke ',i);
i:=i+1;
until i<0;
End.

Apa outputnya? cuman 1, "ini yang ke 1". Loh kok bisa, kan pada baris ke 8 tidak
memenuhi persyaratan i<0 ? Memang nggak memenuhi persyaratan itu, tapi ini
adalah keistemewaan repeat. Ia akan mengeksekusi sekali dulu baru dicek persyaratan
yang ada dibawah.
Kelar juga ngebahas looping. Gunakan jenis looping yang ada seseuai kebutuhan. O
iya, apa yang dilakukan bila tertulis seperti ini? "For i:=10 downto 1 do". Pernyataan
itu akan menghitung mundur dari 10 sampai 1.

Prosedur Dan Fungsi I


Misalnya kita punya rumus menghitung luas segita, apa yang kamu lakukan bila
rumus itu ingin kamu tulis ditiga tempat yang berbeda? apa kamu akan ccp (copy, cut
dan paste)? emang bisa sih diperbanyak dengan yang gituan, tapi boros memori dan
berabe kalo rumus yang kita tulis ternyata salah, berarti kita harus betulin di tiga
tempat juga. Untuk mempermudahnya gunakan Prosedur atau Fungsi.
1: Program Tutorial4_Prosedur;
2:
3: Procedure Tampil;
4: begin
5:
writeln('Hi...');
6:
writeln('Apakabar');
7: end;
8: Begin
9:
Tampil;
10:
writeln('yang di atas menggunakan prosedur
loohh...');
11: End.

Apa yang dilakukan program di atas? Coba lihat baris ke-3 sampai 7. Itulah yang
disebut prosedur. Program utamanya mulai dari baris ke 8 sampai 11. Pada baris ke 9
prosedur yang kita buat sebelumnya dipanggil dan dieksekusi. Ini outputnya
Hi...
Apakabar
yang di atas menggunakan prosedur loohh...

Selain itu prosedur dan fungsi bisa di taruh variabel lohh... Perhatikan contoh
penggunaan fungsi di bawah ini:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

Program Tutorial4_Fungsi;
var hasil: integer;
Function Itung(a, b : integer) : integer;
begin
itung:=a+b;
end;

Begin
hasil:=itung(7, 9);
writeln('Hasil 7 + 9 sama dengan ', hasil);
End.

Baris 3 sampai 6 adalah fungsi. Tapi perhatikan bentuk fungsinya, ada pendeklarasian
variabel a dan b. Coba liat baris ke 9 ketika fungsi itung dipanggil. Di sana tertulis
"itung(7, 9)", secara otomatis a akan mendapat nilai 7 dan b mendapat 9. Bagaimana
jika ditulis "itung(3,5,6)"? Jelas gak bisa karena dialokasikan hanya 2 variabel. Hasil
penjumlahan a + b ditampung di fungsi itung (lihat baris ke-5) dan hasil itu diberikan
ke variabel hasil (baris 9).
Lalu apa perbedaan prosedur dan fungsi? Prosedur hanya bisa menjalankan perintah
dan tidak mengembalikan nilai (lihat kembali contoh program prosedur sebelumnya).
Sedangkan fungsi bisa mengembalikan nilai untuk di tampilkan dilayar atau diolah
lagi. Bila kita punya fungsi yang bernama CekSaldo, maka CekSaldo bisa berfungsi
seperti variabel sama seperti pada fungsi Itung di atas.
Bagaimana? mudah bukan? gunakan prosedur dan fungsi sesuai kebutuhan.
Terkadang fungsi lebih berguna dan efisien dibandingkan dengan prosedur.

Prosedur Dan Fungsi II

Penggunaan Function

<--

------------------------------------------------------{ tutorial pascal / turbo pascal }


{ second my tutorial for my friend }
{ writen by : m3n_tu4r1 } padang, 20 mei 2003
-------------------------------------------------------

PENGUNAAN FUNCTION dan PROCEDURE


1. FUNCTION
fungsi : koleksi pernyataan2 yang mempunyai tujuan tertentu
sintax : FUNCTION nm_funct [(deklarasi var)]; type funct;
BEGIN
.
.
.
END.

penjelasan =
nm_funct = nama fungsi
deklarasi var = parameter yang dikirim
type funct = jenis fungsi

Contoh Penggunaan Function 1

<--

{ buat fungsi yang menentukan nilai terbesar }


{ dari 2 buah bilangan }
USES CRT;
VAR
A : interger;
B : interger;
C : interger;
FUNCTION nilaiterbesar (na,nb:interger):interger;
BEGIN
IF na>nb THEN
nilaiterbesar:=na
ELSE
nilai terbear:=nb;
END;
BEGIN
CLRSCR;

WRITE ('Masukan nilai A:');


READLN (A);
WRITE ('Masukan nilai B:');
READLN (B);
C:=nilaiterbesar (A,B);
WRITELN ('NILAI TERBESAR = ',C );
END.

Contoh Penggunaan Function 2

<--

{ program fungsi pangkat }


USES CRT;
VAR
X : real ;
Y : interger ;
FUNCTION XPY ( X:real, Y:interger ):real;
VAR
hasil : real ;
i : interger ;
BEGIN
IF Y=1 THEN
XPY:= X;
ELSE
BEGIN
hasil:= 1.0;
FOR i:=1 TO Y DO
hasil:= hasil * X;
XPY:=hasil;
END;
END;
BEGIN
CLRSCR;
WRITE (' Masukan X:');
READ (X);
WRITE (' Masukan Y:');
READ (Y);
WRITELN (X:10:2,'pangkat',Y:5,'adalah = ',
XPY(X,Y):15:2);
END.

Penggunaan Procedure dan Contohnya

<--

2. PROCEDURE
fungsi : hampir sama dengan function tapi lebih komplek
dan dapat dipangil dari file yang berbeda.
procedure sama dengan subrutine sebuah program

USES CRT;
CONST
max = 10;
garis = '---------------------------------------------------------------';
TYPE
rec_data = record;
nip : string[25];
nama : string[25];
gol : string[5];
gapok : real;
tunj : real;
gator : real;
pot : real;
gaber : real;
END;
VAR
rpeg : rec_data;
peg : file of rec_data;
lagi : char;
PROCEDURE entrydata;
BEGIN
ASSIGN (peg,'c:\peg.dat');
REWRITE (peg);
CLRSCR;
BEGIN
CLRSCR;
WRITE ('nip :');READLN(rpeg.nip);
IF rpeg.nip=" THEN HALT;
WRITE ('nama :');READLN(rpeg.nama);
WRITE ('golongan :');READLN(rpeg.gol);
END;
END;
{Akhir procedure entrydata}
PROCEDURE prosesdata;
BEGIN
IF rpeg.gol = 'I/a' THEN rpeg.gapok :=250000;
IF rpeg.gol = 'I/b' THEN rpeg.gapok :=300000;
IF rpeg.gol = 'II/a' THEN rpeg.gapok :=350000;
IF rpeg.gol = 'II/b' THEN rpeg.gapok :=400000;
IF rpeg.gol = 'III/a' THEN rpeg.gapok :=450000;
IF rpeg.gol = 'III/b' THEN rpeg.gapok :=500000;
rpeg.tunj :=(0.1)*rpeg.gapok;
rpeg.gator :=rpeg.gapok*rpeg.tunj;
rpeg.pot :=(0.02)*rpeg.gator;
rpeg.gaber :=rpeg.gator-rpeg.pot;
END;
{Akhir procedure prosesdata}

PROCEDURE tampildata;
BEGIN
CLRSCR;
GOTOXY (1,1);WRITE (' daftar gaji pegawai ');
GOTOXY (1,2);WRITE (garis);
GOTOXY (1,3);WRITE (' nip nama gol gapok tunj
gator pot gaber');
GOTOXY (1,4);WRITE (garis);
BEGIN
GOTOXY (2,5) ;WRITELN (rpeg.nip);
GOTOXY (9,5) ;WRITELN (rpeg.nama);
GOTOXY (18,5);WRITELN (rpeg.gol);
GOTOXY (24,5);WRITE (rpeg.gapok:10:0);
GOTOXY (33,5);WRITE (rpeg.tunj:10:0);
GOTOXY (44,5);WRITE (rpeg.gator:10:0);
GOTOXY (54,5);WRITE (rpeg.pot:10:0);
GOTOXY (68,5);WRITE (rpeg.gaber:10:0);
END;
END;
{Akhir procedure tampildata}
BEGIN {Program utama}
CLRSCR;
REPEAT
entrydata;
prosesdata;
tampildata;
WRITELN;
WRITE (' coba lagi : [Y/T]:');
REPEAT
lagi:=UPCASE (READKEY);
UNTIL lagi IN ['Y','T'];
UNTIL lagi ='T';
CLOSE (peg);
END.

Array Dan Record


Pernahkah kamu membayangkan bila kita mau membuat program toko buah-buahan.
Jika ada 3 jenis buah-buahan (melon, duku dan mangga) berarti kita harus mempunyai
tiga variabel untuk masing-masing jenis buah. Tetapi betapa sulitnya jika toko itu
punya 10 atau 20 jenis yang berbeda. Solusinya adalah gunakan array. Array itu
adalah tipe data terstuktur yang berguna untuk menyimpan sejumlah data yang bertipe
sama. Bagaimana cara kerjanya? yaitu dengan menggunakan index (semacam
penanda). Perhatikan contoh:
1: Program Tutorial5_Array;
2: var buah: array [1..3] of string;
3:
i: integer;
4: Begin
5:
For i:=1 to 3 do
6:
begin
7:
write('Masukkan buah-buahan ke ',i , ' : ');
8:
readln(buah[i]);
9:
end;
10:
writeln;
11:
writeln('Isi buah-buahan yang dimasukkan tadi
adalah : ');
12:
For i:= 1 to 3 do
13:
writeln('buah ke', i ,' : ', buah[i]);
14: End.

Lihat pada baris ke-8. Dengan hanya menggunakan satu nama variabel yaitu buah,
kita bisa menyimpan 3 nilai yang berbeda. Misalkan yang kita masukkan adalah
melon, duku dan mangga. maka buah[1] bernilai melon, buah[2] bernilai duku dan
buah[3] bernilai mangga. Untuk mencetak isi variabel yang sudah disimpan di array
tadi caranya bisa dilihat di baris ke 13.
Bagaimana, gampangkan? setelah mengetahui cara menggunakan array, sekarang kita
belajar menggunakan record. Tidak seperti array, record adalah jenis tipe data
terstruktur yang berisi beberapa data, yang masing-masing dapat berlainan tipe.
Perhatikan contoh:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:

Program Tutorial5_Record;
type buah = record
nama: string;
harga: longint;
end;
var data:buah;
Begin
write('nama buah: ');readln(data.nama);
write('harga buah: ');readln(data.harga);
write('ditampilkan');
write('nama');readln(data.nama);
writeln('harga');readln(data.harga);
End.

Apa yang bisa kamu ambil kesimpulan dari program di atas? Bingung? Jadi gini,
dengan menggunakan record (di sini bernama buah) kita bisa membuat tipe data yang
berisi beberapa data yang berlainan tipe (nama dengan jenis string, dan harga dengan
jenis long integer) yang ini disebut field.

Perhatikan baris ke 6, di situ dideklarasikan bahwa variabel data bertipe buah.


Otomatis yang dimiliki buah (nama dan harga) dimiliki juga oleh data. Setelah itu
lihat baris ke 8 dan 9. Nama buah disimpan dalam field nama dan harga buah
disimpan di dalam field harga. Untuk bisa menyimpan data di field, urutannya harus
variabel.field (contohnya di sini data.nama atau data.harga). Begitu juga bila kita
ingin menampilkan isi field tersebut.
Tipe data seperti ini sangat berguna kedepannya loohh... Apalagi jika digabungkan
dengan array.

Database
Rasanya gak lengkap kalo buat program tapi gak bisa nyimpen data. Yang bakal
dijelasin di sini adalah file bertipe, artinya harus disebutkan dulu tipe file tersebut,
apakah integer, long integer, string, char atau bahkan record. Berikut ini adalah daftar
prosedur dan fungsi yang berhubungan dengan program database file bertipe (no 12
sampai 16 hanya untuk file teks).
1. Procedure Assign (var f, NamaFile: string);
2. Procedure Rewrite (var f);
3. Procedure Reset(var f);
4. Procedure Close(var f);
5. Procedure Write(var f, var1 [, var2, ..., varn]);
6. Procedure Read(var f, var1 [, var2, ..., varn]);
7. Function Eof(var f): Boolean;
8. Function FilePos(var f): longint;
9. Function FileSize(var f): longint;
10. Procedure Seek(var f, N: longint);
11. Procedure Truncate(var f);
12. Function Eoln(var f:text):boolean;
13. Function SeekEoln(var f:text):boolean;
14. Function SeekEof(var f:text):boolean;
15. Procedure Flush(var f:text);
16. Procedure SetTextBuf(var f:text, var buf[, ukuran: word]);
Penjelasannya di bawah ini:
1. Pengacuan suatu file melalui variabel file. Setiap ingin melakukan manipulasi
atau yang lainya, harus melakukan ini dulu
2. Apabila file tidak ada, maka file itu akan terbentuk. Tetapi bila ada, maka isi
file itu akan hilang.
3. Membuka file yang sudah ada, tetapi tidak menghapus isinya
4. Menutup suatu file (lakukan setelah setelah file itu di manipulasi)
5. Mengisi file dengan data. (apabila filenya bertipe text, maka writeln bisa
digunakan)
6. Membaca isi file. (apabila filenya bertipe text, maka readln bisa digunakan
untuk membaca perbaris)
7. Memeriksa akhir file. Hasilnya akan True bila posisinya diakhir dan False
apabila tidak diakhir. Biasa digunakan untuk membaca/mengubah data.
8. Mengetahui posisi file sekarang. Penomoran data mulai dari 0.
9. Mengetahui jumlah data yang ada.
10. Memindahkan posisi file. Data pertama bernilai 0.
11. Menghapus data dari posisi sekarang sampai akhir file
12. Menghasilkan status akhir baris file teks. Nilainya akan true kalau diakhir
baris atau Eof memberikan nilai True.
13. Sama seperti Eoln, tetapi spasi dan tab diabaikan.
14. Sama seperti Eof, tetapi mengabaikan spasi, tab ataupun tanda akhir baris
15. Mengosongkan penyangga (buffer) file teks yang dibuka untuk keluaran
(perekaman). Prosedur ini menjamin bahwa data yang direkam benar-benar

telah disimpan ke file (normalnya, data akan disimpan ke file kalau penyangga
file sudah penuh)
16. Menentukan ukuran penyangga yang digunakan file. Dipanggil setelah assign.
Semakin besar semakin cepat pemrosesannya, defaultnya 128 byte.
Bila ada tulisan var f, itu artinya variabel file. NamaFile artinya nama databasenya
(bila perlu pathnya). var1 artinya variabel yang bersesuaian dengan tipe filenya. N
artinya data ke-N. Bila dalam bentuk fungsi, maka ia akan mengembalikan nilai
tergantung jenisnya (apabila boolean maka akan mengembalikan True atau False, bila
longint akan mengembalikan angka).
Waahhh... banyak yach? emang gitulah... Bahkan ada lagi yang lain loh untuk file tak
bertipe. Prosedur dan fungsi di atas gua ambil dari bukunya pak Ir. Abdul Kadir,
Pemrograman Pascal. Bukunya bagus juga, ada 2 jilid tebel-tebel tapinya :D. O iya, di
sini gua gak ngasih contohnya loh... abis kepanjangan kalo ditulis di sini. Untuk
contoh-contoh penggunaan prosedur dan fungsi di atas bisa di lihat di Program 9.

Program 1 menghitung luas/keliling bangunan


Yup... sekarang kita buat program yang pertama, menghitung luas dan keliling
bangunan. Bangunan yang dijadikan contoh adalah segitiga. Perhatikan contoh di
bawah ini:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

Program Menghitung_Luas_dan_Keliling;
var alas, tinggi, sisimiring, luas, keliling: real;
Begin
writeln('MENGHITUNG LUAS DAN KELILING SEGITIGA');
writeln('-------------------------------------');
write('Masukkan alas : ');readln(alas);
write('Masukkan tinggi : ');readln(tinggi);
luas:= 0.5*alas*tinggi;
sisimiring:=sqrt(sqr(alas)+sqr(tinggi));
keliling:= alas+tinggi+sisimiring;
writeln;
writeln('luas segitiga : ', luas:0:2);
writeln('keliling segitiga : ', keliling:0:2);
readln;
end.

Pada baris 6 dan 7 adalah tempat memasukkan alas dan tinggi segitiga yang akan
diproses di baris 8 sampai 10. Ingat kan rumus menghitung sisi miring segitiga? yaitu
akar dari jumlah kuadrat sisi-sisinya. Fungsi "sqrt" adalah untuk mengakarkan dan sqr
untuk mengkuadratkan.
Sekarang kebaris 12 dan 13. Apa yang beda hayoo...? betul.. setelah variabel luas dan
keliling dicetak ke layar ada tambahan ":0:2". Itu artinya :banyaknya alokasi
angka:jumlah desimal.
Gampangkan? iya donk, kan tinggal maen logika... :D

Program 2 menentukan bilangan ganjil, genap, dan prima


Pernah kan pas di SD kita disuruh nentuin bilangan ini ganjil apa genap, prima apa
bukan. Sekarang kita jadiin program.
1: Program JenisBilangan;
2: var bil: longint;
3: begin
4:
writeln('MENENTUKAN JENIS BILANGAN');
5:
writeln('-------------------------');
6:
write('Masukkan angka: ');readln(bil);
7:
if ((bil=2) or (bil=3) or (bil=5) or (bil=7)) then
8:
write('bilangan prima')
9:
else if ((bil mod 2 <> 0) and (bil mod 3 <> 0) and
(bil mod 5 <> 0) and (bil mod 7 <> 0)) then
10:
write('bilangan prima')
11:
else write('bukan bilangan prima');
12:
if bil mod 2 = 0 then
13:
writeln(' dan genap')
14:
else
15:
writeln(' dan ganjil');
16:
readln;
17: end.

Pada baris ke-7 sampai 12 adalah tempat menentukan bilangan prima atau bukan.
Masih ingat kan karateristik bilangan prima? bilangan yang hanya bisa dibagi 1 dan
dirinya sendiri dan juga hampir semuanya ganjil. Berhubung bilangan prima dibawah
10 adalah persyaratan untuk bilangan diatas 10 (perhatikan baris ke 7 dan 9), jadi
bilangan prima dibawah 10 ditulis manual. Fungsi "mod" pada baris 9 dan 13 adalah
sebagai sisa dari pembagian. Jika ditulis "7 mod 3" maka hasilnya adalah 1, artinya
sisa dari 7/3 (tujuh dibagi tiga) adalah 1.
Gimana? Tinggal maen logika... kan? :P

Program 3 menentukan bilangan terbesar (dengan if)


Ini adalah program terakhir untuk mematangkan penggunaan kondisi if. Pernah kah
kalian membuat program dengan susah payah tetapi setelah ditunjukkan dengan orang
lain, mereka bilang "Hanya gitu doank kerjanya?". He he he... sakit hati emang :-(,
kalo bisa rasanya pengen nimpuk tu orang dengan hardisk SEAGATE BARACUDA
80 giga lima biji :)). Ini salah satu program yang panjang, tapi fungsinya... yaa...
gitulah :D
1: Program BilanganTerbesar;
2: Var bil1, bil2, bil3 :real;
3: Begin
4:
Write('Masukkan Bilangan Pertama : ');Readln(bil1);
5:
Write('Masukkan Bilangan Kedua : ');Readln(bil2);
6:
Write('Masukkan Bilangan Ketiga : ');Readln(bil3);
7:
If (bil1=bil2) and (bil2=bil3) then
8:
Writeln('Semua bilangan yang anda masukkan sama
besar ', bil1:0:0)
9:
Else If (bil1=bil2) or (bil1=bil3) or (bil2=bil3)
then
10:
Begin
11:
If bil1=bil2 then
12:
Begin
13:
Writeln('Bilangan Pertama dan Kedua Adalah
Sama');
14:
If Bil1 < bil3 then
15:
Writeln('Bilangan Terbesar Adalah ',bil3:0:0)
16:
Else
17:
Writeln('Bilangan Terbesar Adalah ',bil1:0:0)
18:
End
19:
Else If bil1=bil3 then
20:
Begin
21:
Writeln('Bilangan Pertama dan Ketiga Adalah
Sama');
22:
If Bil1 < bil2 then
23:
Writeln('Bilangan Terbesar Adalah ',bil2:0:0)
24:
Else
25:
Writeln('Bilangan Terbesar Adalah ',bil1:0:0)
26:
End
27:
Else If bil2=bil3 then
28:
Begin
29:
Writeln('Bilangan Kedua dan Ketiga Adalah
Sama');
30:
If Bil1 < bil3 then
31:
Writeln('Bilangan Terbesar Adalah ',bil3:0:0)
32:
Else
33:
Writeln('Bilangan Terbesar Adalah ',bil1:0:0)
34:
End
35:
End
36:
Else If bil1 > bil2 then
37:
Begin
38:
If bil1 > bil3 then
39:
Writeln('Bilangan terbesar adalah ',bil1:0:0)
40:
Else
41:
Writeln('Bilangan terbesar adalah ',bil3:0:0);
42:
End
43:
Else If bil1 < bil2 then
44:
Begin
45:
If bil2 > bil3 then
46:
Writeln('Bilangan terbesar adalah ',bil2:0:0)

47:
Else
48:
Writeln('Bilangan terbesar adalah ',bil3:0:0);
49:
End;
50:
readln;
51: End.

Hue he he... keren kan? dengan bermodalkan if kita bisa menentukan bilangan mana
yang terbesar dari 3 bilangan yang dimasukkan. Selain itu program ini bisa
mendekteksi jika ada bilangan yang sama. Yup, hanya itu intinya. Prinsip utama
program ini hanya membandingkan bilangan satu dengan yang lain. Mudah bukan?
lebih baik kalian ngerjain yang ini tanpa ngeliat tu program, biar logikanya jalan...

Program 4 pengurutan angka (looping)


Pernahkah kalian dikasih nilai ulangan siswa lalu disuruh ngurutin dari yang kecil ke
gede? Kalo jumlahnya dibawah 10 sih gak masalah, lah kalo ada 100 biji kan berabe...
Ini solusinya:
1: Program Pengurutan;
2: var i, j: integer;
3:
k : longint;
4:
a : array[1..5] of longint;
5: begin
6:
writeln('PROGRAM MENGGURUTKAN ANGKA');
7:
writeln('--------------------------');
8:
for i:=1 to 4 do
9:
begin
10:
write('Masukkan bilangan ke- ', i, ' : ');
readln(a[i])
11:
end;
12:
for j:=2 to 4 do
13:
begin
14:
k:=a[j];
15:
i:=j-1;
16:
while (i>0) and (a[i]>k) do
17:
begin
18:
a[i+1]:=a[i];
19:
i:=i-1;
20:
end;
21:
a[i+1]:=k
22:
end;
23:
for i:=1 to 4 do
24:
writeln(a[i]);
25:
readln;
26: end.

Hhmmm... sebenarnya gak perlu dijelasin lagi yach tu program, gua harap kalian bisa
nge-trace (menelusuri) algoritma programnya. Program ini dibatasi untuk 4 angka
saja, bisa diubah sesuai keinginan. Pada prinsipnya program ini memasukkan input ke
dalam array, kemudian membandingkannya, bila ternyata angka sebelumnya lebih
besar, maka dipindah posisinya (coba dech di trace, pasti ngerti).
Program ini berguna banget buat kalian yang hobi ngitung, apa lagi buat anak smu.
Untuk pengembanganya kalian bisa menghitung mean, modus dan median. Itu tugas
kalian loohh... Tangan gua pegel niihh...

Program 5 bintang (looping)


Setelah sebelumnya kita bermain dengan if, sekarang ke for. Program di bawah ini
akan memunculkan output berupa sekumpulan bintang yang membentuk tangga
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

Program BintangTangga;
const akhir=18;
var baris, kolom: integer;
begin
for baris:=1 to akhir do
begin
for kolom:=1 to baris do
write('*');
writeln;
end;
readln;
end.

Coba dech dijalankan, gimana hasilnya? menarik bukan?. Sekarang kita coba
menampilkan sekumpulan bintang yang membentuk kubus.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

Program BintangKubus;
uses crt;
Var i, j, x, y:integer;
Begin
clrscr;
Write('Masukkan Dimensi Kubus: ');Readln(x);
y:=0;
For i:=1 to x do
Begin
for j:=1 to x do
Begin
y:=y+1;
write(y:4);
if y mod x=0 then
Writeln;
End;
End;
readkey;
End.

Gimana? baguskan? Sekarang tugas kamu membuat sekumpulan bintang berbentuk


piramida dan berbentuk tangga terbalik (seperti program pertama di atas tetapi
terbalik). Program ini cukup memeras otak lohh... Kalo bisa kirim hasilnya yach....

Program 6 penggabungan program 1, 2, dan 4 dengan membuat


menu (prosedur, fungsi)
Setelah dari tadi belajar logika, sekarang kita menggabungkan beberapa program
sebelumnya dan dibuat menu. Untuk contoh ini kita memanfaatkan repeat.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:

Program Gabung;
uses crt;
var pilih: integer;
Procedure luas;
{copy dan paste program 1}
end;
Procedure JenisBilangan;
{copy dan paste program 2}
end;
Procedure Pengurutan;
{copy dan paste program 4}
End;
begin {program utama}
repeat
clrscr;
writeln(' PILIHAN');
writeln('--------------------------');
writeln(' 1. Menghitung Luas');
writeln(' 2. Jenis Bilangan');
writeln(' 3. Pengurutan');
writeln(' 4. Exit');
writeln('--------------------------');
writeln;
writeln;
write(' Pilih Angka untuk Memilih Pilihan : ');
readln(pilih);
case pilih of
1 : luas;
2 : JenisBilangan;
3 : Pengurutan;
4 : exit;
end;
until pilih = 4;
end.

Ngertikan prisip kerjanya? Jadi program ini hanya akan berakhir jika user memilih no
4.

Program 7 toko (record dengan array)


Pada tutorial 5 telah dijelaskan cara penggunaan array dan record. Sekarang kita akan
menggabungkan array dan record tersebut. Perhatikan program di bawah ini:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

Program Array_dan_Record;
type dmhs=record
nrp:string[10];
nama:string[25];
alamat:string[50];
end;
var data:array[1..3] of dmhs;
i:integer;
begin
for i:=1 to 3 do
begin
write('nrp : ');readln(data[i].nrp);
write('nama : ');readln(data[i].nama);
write('alamat : ');readln(data[i].alamat);
end;
writeln;
writeln('Data ditampilkan');
for i:=1 to 3 do
begin
writeln('nrp : ', data[i].nrp);
writeln('nama : ', data[i].nama);
writeln('alamat : ', data[i].alamat);
end;
readln;
end.

Di dalam program tersebut dideklarasikan bahwa dmhs (data mahasiswa) itu adalah
record yang mempunyai field nrp, nama dan alamat (lihat baris 2 sampai 6).
Selanjutnya variabel data dideklarasikan bertipe dmhs yang berbentuk array (baris ke
7). Kemudian seperti biasa untuk memasukkan data ke field digunakan
"readln(data[i].nrp)", dst (baris 10 sampai 15). Untuk menampilkannya bisa dilihat
dibaris ke 18 sampai 23.

Program 8 Operasi String


Operasi String 1

<--

Yang ini sebenarnya program tambahan, habis program-program sebelumnya kan


kebanyakan bermain logika matematik (tentang angka melulu). Ehh... dipikir-pikir,
operasi tentang string kok gak ada? Tenaaannggg.... sekarang udah ada kok :p
1: var nama : string;
2:

urutan, posisi: integer;

3: begin
4:

nama:='Dijas Keren';

5:

writeln('Yang ini delete');

6:

for urutan:=1 to 11 do

7:

begin

8:

posisi:= 13 - urutan;

9:

delete(nama, posisi, 1);

10:

writeln(nama);

11:

end;

12:

writeln;

13:

nama:='DijasKeren';

14:

writeln('Yang ini insert');

15:

writeln('Sebelum di Insert : ', nama);

16:

insert('-', nama, 6);

17:

writeln('Setelah di Insert : ', nama);

18:

readln;

19: end.

Outputnya seperti di bawah ini


Yang ini delete
Dijas Keren
Dijas Kere
Dijas Ker
Dijas Ke
Dijas K
Dijas
Dijas
Dija
Dij
Di
D
Yang ini insert
Sebelum di Insert : DijasKeren
Setelah di Insert : Dijas-Keren

Jadi isi penggunaan delete itu => delete(string, posisinya, jumlah yang di hapus).
Sedangkan insert => insert(yang mau disisipkan, string, posisinya). Gampang kan?
Dengan ini bisa dibuat kayak Program 5 loh (tentang bintang).
Operasi String 2

<--

Bagaimana jika suatu saat kamu pengen ngerubah string jadi numerik atau numerik
jadi string?

str(angkanya:desimal yang diambil, variabel string tempat hasilnya disimpan)


prosedur ini untuk mengubah numerik ke string
val(string, variabel numerik tempat hasilnya disimpan, posisi salah) prosedur
ini untuk mengubah string ke numerik. Khusus posisi salah, yang dideteksi adalah
posisi salah yang pertama (walaupun ada 5 biji yang salah, yang ke tangkap yang
pertama)
Concat(string, string, string) : string
Yang ini untuk menggabungkan string, ini fungsi loohh.. jadi hasil
penggabungannya ditampung di Concat

Ini program terakhir tentang operasi string, program pembalik kata


1: program pembalik_kata;
2: var kata,hasil,tmp:string; i:integer;
3: begin
4:

write('Kata : ');readln(kata);

5:

hasil:='';

6:

for i :=length(kata) downto 1 do

7:

begin

8:

tmp:=copy(kata,i,1);

9:

hasil:=hasil+tmp;

10:

end;

11:

write('Dibalik ',hasil);

12:

readln;

13: end.

Di program ini ada dua fungsi operasi string baru yang digunakan.
length(string) : integer
Fungsi ini untuk menghitung panjang atau jumlah karakter.

copy(string, posisinya, jumlah yang akan diambil)


Fungsi ini untuk mengambil sejumlah huruf dari string yang dimasukkan

Pos(string/huruf yang akan dicari posisinya, string awal):byte


Fungsi ini untuk mengetahui posisi dari string/huruf dari kata/kalimat yang
dimaksud. Bila bernilai nol berarti nilai string yang dicari tidak ada.

Seluruh fungsi ini bisa diliat di buku Turbo Pascal, Jogiyanto

Program 9 Contoh penggunaan teori di tutor 6


Program database ini adalah contoh-contoh penggunaan fungsi dan prosedur dari
Tutorial 6. Perhatikan contoh berikut:
1: Program BuatFile;
2: var fText : text; data: string;
3: begin
4:
writeln('MENGISI DATA');
5:
writeln('------------');
6:
assign(fText, 'nama.txt');
7:
rewrite(fText); {gunakan reset(fText)
bila filesudah ada}
8:
writeln(fText, 'dijas');
9:
writeln(fText, 'dian');
10:
writeln(fText, 'cecep');
11:
close(fText);
12:
readln;
13: end.

Prosedur yang digunakan di atas adalah prosedur no. 1 sampai 5 yang ada di Tutorial
6. Untuk membaca databasenya gunakan reset (jangan rewrite) dan gunakan prosedur
no 6. Perhatikan contoh di bawah ini:
assign(fText, 'bil.dat');
reset(fText);
read(fText, data);
writeln(data);

Sekarang kita gunain fungsi nomor 7 yachh... Fungsi ini biasa digunakan untuk
membaca data yang ada dari awal/posisi tertentu sampai akhir. eof kepanjangan end
of file
while not eof(fText) do
begin
readln(fText, data);
writeln(data);
end;

Bagaimana caranya jika ingin mengedit data yang sudah ada? Gunakan prosedur seek,
perintahnya: Seek(fText, filesize(fText));. Setelah menempatkan kursor ditempat yang
diinginkan, gunakan perintah write untuk mengedit atau prosedur Truncate untuk
menghapus (perintahnya Truncate(fText)). Tapi hati-hati mengunakan Truncate,
soalnya mulai dari posisi yang dimaksud sampai akhir file akan dihapus. Fungsi dan
prosedur lainnya bisa dicoba-coba sendiri yaaa....
Huuff... akhirnya kelar juga ngebahas dasar-dasar pascal. Kalo kalian udah paham
seluruh tutorial dan program yang ada di sini, berarti kalian sudah melewati level
basic. Untuk pengembangannya coba cari program-program open source, terutama
mengenai database. Selamat mencoba...

Pengolahan Data dengan Menggunakan File


Jenis File

<--

------------------------------------------------------{ 1st my tutorial for my friend }


{ writen by : m3n_tu4r1 } padang, 19 mei 2003
-------------------------------------------------------

PENGOLAHAAN DATA DENGAN MENGUNAKAN FILE


--------------------------------------JENIS FILE :
* FILE TEKS
* FILE SEQUENTIAL
* FILE BINARI
* Deklarasi file teks
penulisan =
TYPE
pengenal = TEXT;
{atau}
VAR
pengenal : TEXT;

Penjelasan =
pengenal = variabel file
* Deklarasi file sequential
penulisan =
TYPE
pengenal = FILE of tipe_data;
{atau}
VAR
pengenal : FILE of tipe_data;

Penjelasan =
pengenal = variabel file
tipe_data = jenis data yang digunakan
* Deklarasi file binary
penulisan =
TYPE
pengenal = FILE;
{atau}
VAR
pengenal : FILE;

Penjelasan =
pengenal = variabel file

Perintah Operasi File 1

<--

1). Mendeklarasikan pengenal yang akan digunakan sebagai variabel file.


sintax : ASSIGN ( Pengenal,'nfile' )

parameter :
pengenal = variabel file
nfile = nama file fisik

contoh :
USES CRT;
VAR
mhs : TEXT
BEGIN
ASSIGN (mhs,'C:\mhs.txt');
.
.
.
END.

2). Membuka berkas baru untuk ditulis dan menempatkan pointer pada awal file.
sintax : REWRITE ( pengenal )

parameter :
pengenal = variabel file

contoh :
USES CRT;
VAR
mhs : TEXT
BEGIN
ASSIGN (mhs,'C:\mhs.txt');
REWRITE (mhs);
.
.
.
END.

Perintah Operasi File 2

<--

3). Membuka berkas untuk dibaca & menempatkan pointer pada awal berkas tanpa
menghapus data yang sudah ada.
parameter :
pengenal = variabel file

4). Merekam data dari variabel data kedalam berkas.


sintax : WRITELN ( pengenal, var data )

parameter :
pengenal = variabel file
var data = variabel data

contoh :
USES CRT;
VAR
mhs : TEXT;
nobp : string [6];
nama : string [25];
BEGIN
ASSIGN (mhs,'C:\mhs.txt');
REWRITE (mhs);
nobp:= '960001';
nama:= 'men_tuari';
WRITELN (mhs,nobp:6,nama:25)
.
.
.
END.

5. Membaca data dari file dan disimpan ke varibel data


sintax : READLN ( pengenal, var data )

parameter :
pengenal = variabel file
var data = variabel data

contoh :
USES CRT;
VAR
mhs : TEXT;
nobp : string [6];
nama : string [25];
BEGIN
ASSIGN (mhs,'C:\mhs.txt');
RESET (mhs);
READLN (mhs,nobp:6,nama:25);
WRITELN (nobp:6,nama:25);
.
.

.
END.

Perintah Operasi File 3

<--

6. Memeriksa apakah posisi pointer pada akhir file atau tidak.


~ Bila pada akhir file nilai baliknya adalah TRUE, bila tidak nilainya FALSE
sintax : EOF ( pengenal ); {EOF = End Of File }

contoh :
USES CRT;
.
.
.
BEGIN
.
.
.
WHILE NOT EOF (mhs) DO
BEGIN
READLN (mhs,nobp:6,nama:25);
.
.
END;
.
.
.
END.

7. Menutup berkas yang telah dibuka.


sintax : CLOSE (pengenal)

contoh :
USES CRT;
.
.
.
BEGIN
.
.
.
WHILE NOT EOF (mhs) DO
BEGIN
READLN (mhs,nobp:6,nama:25);
.
.
END;
CLOSE (mhs);

END.

Contoh 1

<--

USES CRT;
VAR
mhs : TEXT;
nobp : string [6];
nama : string [25];
nilai : integer;
BEGIN
ASSIGN (mhs,'C:\mhs.txt');
REWRITE (mhs);
REPEAT {Looping / pengulangan }
CLRSCR; {untuk membersihkan layar}
GOTOXY (30,5); WRITELN ('DATA MAHASISWA');{GOTOXY
(30,5) = letakan krusor di kolom 30 pada baris 5 }
GOTOXY (10,7); WRITELN ('No.BP :');
GOTOXY (10,8); WRITELN ('Nama :');
GOTOXY (10,9); WRITELN ('Nilai :');
GOTOXY (30,7); READLN (nobp);
IF nobp:=" THEN BREAK ;
GOTOXY (30,8); READLN (nama);
GOTOXY (30,9); READLN (nilai);
WRITELN (mhs, nobp:6,nama:25,nilai);
UNTIL FALSE; {akhir dari looping }
CLOSE (mhs);
END.

Contoh 2

<--

USES CRT;
VAR
mhs : TEXT;
nobp : string [6];
nama : string [25];
nilai : integer;
nomor : integer;
BEGIN
ASSIGN (mhs,'C:\mhs.txt');
RESET (mhs);
CLRSCR;
WRITELN (' DAFTAR NAMA MAHASIWA ');
WRITELN ('_________________________________________
_____');
WRITELN ('; NO ; NO.BP ; NAMA MAHASISWA ; NILAI ;');
WRITELN ('_________________________________________

_____');
nomor:= 0;
WHILE NOT EOF (mhs) Do
BEGIN
READLN (mhs,nobp:6,nama:25,nilai:5 );
nomor:= nomor + 1;
WRITELN (';',nomor:3,';',nobp:6,';',nama:25,';',
nilai:5,';');
END;
WRITELN ('_________________________________________
_____');
CLOSE (mhs);
END.

Anda mungkin juga menyukai