Pascal merupakan suatu bahasa komputer tingkat tinggi yang dibuat sekitar tahun
1970 oleh Niklaus Wirth dan digunakan untuk pendidikan komputer. Nama Pascal
diambil dari seorang ahli matematika yang bernama Blaise Pascal yang menemukan
mesin hitung pertama. Bahasa Pascal dirancang untuk menyelesaikan masalah dari
berbagai kalangan pemakai, mulai dari para mahasiswa, pendidik, dan ilmuwan.
Uses Clause
Bagian uses clause digunakan untuk menentukan library (berupa sub-program) yang
dibutuhkan saat proses program. LIBRARY berupa file yang menyimpan subroutine yang
secara berulang digunakan saat proses program. Library ini diistilahkan sebagai unit
dalam Turbo PASCAL yang terdiri dari SYSTEM, OVERLAY, GRAPH, DOS, CRT yang
ditempatkan dalam file TURBO.TPL.
Contoh :
Uses WinCrt; (jika anda memakai Unit WinCrt )
Variabel Declaration
Setiap variabel yang digunakan dalam program harus didefinisikan terlebih dahulu
sebelum digunakan.
Cara penulisan ini adalah :
Var
<nama var> : <type variable>;
Adapun type variable yang disediakan pada TURBO PASCAL :
1. Ordinal types
Type data yang mempunyai urutan pasti, dan masih terbagi menjadi
- Integer
Type variable yang beguna untuk pengolahan data yang bulat, type ini
masih terbagi
atas berberapa menurut jangkauan data dan ukurannya :
Type Jangkuan Ukuran
Contoh 2
Program Contoh2;
Uses Wincrt;
Var
Umurku : Byte;
Begin
Write(Berapa umur anda ? );readln(Umurku);
Writeln(Umur anda,Umurku, tahun);
End.
Aktivitas Anda:
o Ketik program Contoh1, kompilasi dan eksekusilah.
o Idem untuk program Contoh2.
o Apa perbedaan yang sangat nampak dari kedua program ?.
o Ubahlah perintah write dengan writeln. Kompilasi dan eksekusilah. Apa perbedaan
kedua perintah ?.
o Pada program contoh2, khususnya perintah terakhir yaitu: Writeln(Umur
anda,Umurku, tahun);
Berilah tanda single-quote pada bagian Umurku, sehingga perintah menjadi:
Writeln(Umur anda,Umurku, tahun);
Kompilasi ulang dan eksekusilah. Adakah perbedaan eksekusi kedua perintah
tersebut ?.
Kesimpulan apa yang dapat anda petik dari aktivitas di atas, terkait dengan perintah
Write dan Writeln
Aktivitas Anda:
o Ketik program Contoh3, kompilasi dan eksekusilah.
o Perhatikan bahwa contoh program tersebut memiliki 1 input yaitu data tipe byte yang
mengisi variabel Umurku. Namun, keluaran (output) program tersebut ada 2 yaitu:
Umurku = .... tahun dan Umurmu = ... tahun (isi bagian titik-titik di depan berbeda 4
dari isian bagian titik-titik di belakang). Mengapa berbeda 4 ?. Tunjukkan perintah
mana yang mengakibatkan hal itu ?.
o Coba berikan penataan output untuk variabel Umurku dan variabel Umurmu, sehingga
2 perintah terakhir menjadi: Writeln(Umurku = ,Umurku:20, tahun);
Kompilasi ulang, dan eksekusilah. Apa bedanya dengan perintah yang belum diberi
format penataan output ?.
Cobalah penataan output untuk data tipe yang lain, seperti: string, real.
.
o
Pada perintah baris ke-3 (yaitu: Umurmu := Umurku + Beda;), komputer akan
menambahkan isi variabel Umurku dengan isi konstanta Beda, dan hasil operasi
tersebut disimpan ( perhatikan perintah := ) ke dalam variabel Umurmu
Bagian #2: Mandiri
Buatlah latihan berikut.
o Buat program untuk mengkonversikan :
Suhu ruangan dari satuan C ke F
Suhu ruangan dari satuan C ke R
Suhu ruangan dari satuan C ke K
Suhu ruangan dari satuan F ke C
Suhu ruangan dari satuan F ke R
Suhu ruangan dari satuan F ke K
Suhu ruangan dari satuan R ke C
Suhu ruangan dari satuan R ke F
Suhu ruangan dari satuan R ke K
Suhu ruangan dari satuan K ke C
Suhu ruangan dari satuan K ke R
Suhu ruangan dari satuan K ke F
o Buat program untuk mengkonversikan :
Dollar ke Rupiah
Rupiah ke Dollar
Aktivitas Anda:
o Ketik program contoh4, kompilasi, dan eksekusilah.
o Eksekusilah beberapa kali, variabel nilai diisi dengan: 60; kurang dari 60; dan lebih
dari 60. Bandingkan apa yang terjadi ?. Bandingkan pula dengan flowchart perintah
IF-THEN-ELSE.
o Apa yang anda simpulkan dari perintah: If Nilai > 60 then writeln(Lulus) else
writeln(Tidak Lulus); ?.
Program Contoh5;
Uses winCrt;
Var
Bulan : Integer;
NamaBulan : string;
Begin
Write ('Kode Bulan :');
Readln (Bulan);
{Bagian ini akan menampilkan nama bulan. Karena ada 12 kasus berbeda
untuk nama bulan, maka tidak lagi dipakai If-Then-Else, meskipun bisa}
case bulan of
1 : NamaBulan := Januari;
2 : NamaBulan := Februari;
3 : NamaBulan := Maret;
4 : NamaBulan := April;
5 : NamaBulan := Mei;
6 : NamaBulan := Juni;
7 : NamaBulan := Juli;
8 : NamaBulan := Agustus;
9 : NamaBulan := September;
10 : NamaBulan := Oktober;
11 : NamaBulan := November;
12 : NamaBulan := Desember;
end;
End.
Aktivitas Anda:
o Ketik program contoh5, kompilasi, dan eksekusilah.
o Eksekusilah beberapa kali, variabel bulan diisi dengan: 1..12; kurang dari 1; dan lebih
dari 12. Bandingkan apa yang terjadi ?. Bandingkan pula dengan flowchart perintah
CASE-OF
o Apa yang terjadi jika pada kasus terakhir diubah menjadi:
case bulan of
...........................;
11 : NamaBulan := November;
Else NamaBulan := Desember;
end;
o Apa yang dapat anda simpulkan dengan perintah CASE-OF ?.
Bahan Praktikum Pemrograman Komputer(JPMIPA)-Januari 2011 -5-
Bagian #2: Mandiri
Buatlah latihan berikut.
Buatlah program Pascal untuk menghitung gaji dengan ketentuan:
Tunjangan
Jika masa kerja >30 maka tunjangan = 300,000
Jika 10 <masa kerja 30 maka tunjangan = 200,000
Jika masa kerja 10 maka tunjangan = 100,000
Gaji Pokok
Jika golongan = 1 maka gapok = 700,000
Jika golongan = 2 maka gapok = 1,200,000
Jika golongan = 3 maka gapok = 1,900,000
Jika golongan = 4 maka gapok = 2,300,000
Buatlah program Pascal untuk menampilkan usia bulan, dalam satuan hari.
Buatlah program Pascal untuk menentukan bilangan terbesar dari sejumlah N
buah bilangan (N diisi ketika program dieksekusi).
Perulangan For-to-Do
Program Contoh6;
Uses winCrt;
Var
i : Integer;
Begin
For i := 1 To 5 Do
Writeln ('I Love Dinda);
END.
Aktivitas Anda:
o Ketik program contoh6, kompilasi, dan eksekusilah. Idem program contoh7.
o Isi perintah di dalam For-to-Do antara kedua program berbeda. Bagaimanakah for-to-
do pada contoh7 dikerjakan ?. Bagaimana seandainya begin end; sebagai penanda
blok perintah dihilangkan, bagaimana eksekusi program tsb ?.
Program Contoh9;
Uses wincrt;
Var a,b : Integer;
Begin
For a := 1 To 3 Do
Begin
For b := 1 To 2 Do
Write (a :4,b:2);
Writeln;
End;
End.
Aktivitas Anda:
o Ketik program contoh8, kompilasi, dan eksekusilah.
o Apa beda (proses dan hasil eksekusi) antara for-to-do dan for-downto-do ?.
o Ketik program contoh9, kompilasi dan eksekusilah.
o Dengan mengamati hasil eksekusi, bagaimanakah perintah For-to-do bersarang
(nested), dikerjakan komputer ?.
Perulangan While - Do
Program Contoh10;
Uses winCrt;
Var i : Integer;
Begin
i := 0;
While < 5 do
Begin
Write (i:3);
i:=i+1;
End;
End.
Aktivitas Anda:
o Ketik program contoh10, kompilasi, dan eksekusilah.
o Bagaimanakah perintah while-do di atas dikerjakan komputer ?.
Aktivitas Anda:
o Ketik program contoh12, kompilasi, dan eksekusilah.
o Bagaimanakah perintah repeat-until di atas dikerjakan komputer ?.
Aktivitas Anda:
o Ketik program contoh13, kompilasi, dan eksekusilah.
o Dengan mengamati hasil eksekusi, bagaimanakah perintah repeat-until bersarang di
atas dikerjakan komputer ?.
Aktivitas Anda:
o Ketik program contoh14, kompilasi, dan eksekusilah.
o Lanjutkanlah program di atas, jika B harus juga diidentifikasi apakah bilangan prima
atau bukan.
Program Contoh15;
uses wincrt;
var A, B : integer;
function IsPrima(P:integer): boolean;
{P adalah sebarang integer positip.}
{Fungsi mengirim nilai true jika P bilangan prima, false jika bukan}
Var K,L : integer;
Begin
K := 0;
For L := 1 to P do
If P mod L = 0 then K := K + 1;
IsPrima := (P = 2);
End;
begin
clrscr;
write('Ketik Bilangan Positip A :'); readln(A);
write('Ketik Bilangan Positip B :'); readln(B);
{Proses yi: eksekusi fungsi IsPrima, dan output}
If IsPrima(A) then writeln(A, bilangan prima)
else writeln(A, bukan prima);
If IsPrima(B) then writeln(B, bilangan prima)
else writeln(B, bukan prima);
End.
Aktivitas Anda:
o Ketik program contoh15, kompilasi, dan eksekusilah. Isikan nilai A dan B yang
berbeda-beda, perhatikan perubahan apa yang terjadi pada output, mengapa ?.
o Bandingkan program ini dengan hasil pekerjaan anda di atas. Dilihat dari perintah-
perintah yang menyusun algoritma kedua program, program contoh15 akan tampak
lebih kompak, lebih mudah membacanya.
A,B merupakan variabel global, K dan L merupakan variabel lokal. P adalah parameter
formal, sedangkan A pada IsPrima(A) adalah parameter aktual.
o Gantilah IsPrima(A) dengan IsPrima(10), IsPrima(B) dengan IsPrima(15). Perubahan
apa yang terjadi, dan mengapa ?.
Bahan Praktikum Pemrograman Komputer(JPMIPA)-Januari 2011 -10-
Bagian #2. Mandiri
o Buatlah fungsi, berikut program untuk menguji kebenaran nilai fungsi:
Menerima 2 integer, mengirim nilai integer terbesar.
Menerima 3 integer, mengirim nilai integer terbesar.
Menerima 4 integer, mengirim nilai integer terkecil
Menerima 5 integer, mengirim nilai integer terkecil
Prosedur
Mirip dengan fungsi, prosedur juga diperlukan agar sejumlah langkah / perintah
yang selalu dikerjakan berulang-ulang, dapat disederhanakan sehingga program
nampak mampat dan mudah dibaca.
Perbedaan yang mendasar adalah bahwa pada fungsi ada nilai yang dikirim balik
ke pemanggilnya, sedangkan prosedur pada dasarnya tidak. Namun pada bahasa
Pascal, prosedur dapat pula berperilaku seperti fungsi yaitu mengembalikan nilai
kepada pemanggilnya.
Bagian #1: Terbimbing
Program Contoh16;
uses wincrt;
var A, B, C, D, Temp : integer;
begin
clrscr;
write('Ketik Bilangan Positip A :'); readln(A);
write('Ketik Bilangan Positip B :'); readln(B);
write('Ketik Bilangan Positip C :'); readln(C);
write('Ketik Bilangan Positip C :'); readln(D);
Aktivitas Anda:
o Ketik program contoh17, kompilasi, dan eksekusilah. Bandingkan isi A dan B mula-
mula dengan isi A dan B akhir. Demikian juga dengan isi C dan D. Apakah sudah
saling tertukar ?.
o Perbaiki pada saat prosedur Tukeryadi didefinisikan, dari: Procedure
Tukeryadi(P,Q:integer); menjadi Procedure Tukeryadi(var P,Q:integer); .
Kompilasi dan eksekusi ulang. Bandingkan kembali isi A dan B, serta isi C dan D ?.
Fungsi Rekursif.
Program Contoh18;
uses wincrt;
var A, B, Hasil : integer;
function HasilKaliPQ(P,Q:integer):integer;
{P dan Q sembarang integer positip.}
{fungsi mengirim nilai PxQ }
Var i : integer;
Begin
End;
begin
clrscr;
writeln(Ketik bilangan bulat positip A : ); readln(A);
writeln(Ketik bilangan bulat positip B : ); readln(B);
writeln;
writeln(A, x , B, = , HasilKaliPQ(A,B));
end.
Aktivitas Anda:
o Ketik program contoh18, lengkapilah fungsi HasilKaliPQ agar mengirim nilai PxQ.
Anda hanya boleh memakai operasi + saja, untuk mendefinisikan operasi x.
o Perhatikan fungsi tsb jika dikerjakan dengan cara rekursif (permasalahan yang
dikerjakan memiliki nuansa proses yang rekursif, a x b = (a-1) x b + b. Perhatikan
contoh19 berikut.
Program Contoh19;
uses wincrt;
var A, B, Hasil : integer;
function HasilKaliPQ(P,Q:integer):integer;
{P dan Q sembarang integer positip.}
{fungsi mengirim nilai PxQ }
Begin
If P = 1 then HasilKaliPQ := Q else
HasilKaliPQ := HasilKaliPQ(P-1,Q) + Q;
Fungsi String.
# Copy [fungsi].
Mengambil satu atau beberapa karakter dari sebuah string.
Sintaks: Copy(S,Index,Count) : String;
Keterangan :
S = sebuah string (string).
Index = posisi awal kita akan mengambil beberapa
karakter (integer)
Count = banyaknya karakter yang akan diambil (integer).
# Length [fungsi].
Memberikan nilai integer yang berarti panjang dari suatu string (jumlah karakter dalam
string).
Sintaks: Length (S);
Keterangan : S = string
# Pos [fungsi].
Mencari posisi sebuah bagian string (substring) didalam
sebuah string.
Sintaks: Pos (Substr,S); {menghasilkan nilai Byte}
Keterangan : Substr = substring yang akan dicari posisinya di dalam sebuah string S.
Bila bernilai 0 berarti nilai string yang dicari tidak ada.
# Str [prosedur].
Merubah nilai numerik ke dalam nilai string.
Sintaks: Str (N,S);
Keterangan :
N = data tipe integer,
S = data tipe string.
# Abs [fungsi].
# ArcTan[fungsi].
Memberikan nilai dari fungsi arctangent
goniometri.
Sintaks: ArcTan (x);
dimana x dapat bertipe real atau
kan nilai bertipe real.
# Cos [fungsi].
Memberikan nilai dari fungsi Cosinus.
Sintaks: Cos (x);
# Exp [fungsi].
Menghitung nilai pangkat dari bilangan e (bilangan alam),
yaitu sebesar x.
Sintaks: Exp (x);
x dapat bertipe real atau integer dan akan menghasilkan nilai bertipe real.
# Frac [fungsi].
Untuk mendapatkan nilai pecahan dari suatu bilangan.
Sintaks: Frac (x);
Tipe dari x sama seperti yang diatas.
# Int [fungsi].
Memberikan nilai integer (bilangan bulat) dari suatu variabel
dengan membuang bilangan di belakang koma.
Sintaks: Int (X);
# Ln [fungsi].
Digunakan untuk menghitung nilai logaritma alam (natural
logarithm) dari nilai x.
Sintaks: Ln (x);
# Sin [fungsi].
Memberikan nilai dari fungsi Sinus.
Sintaks: Sin (x);
# Sqr [fungsi].
Digunakan untuk menghitung nilai pangkat kuadrat dari suatu
bilangan.
Sintaks: Sqr (x);
Tipe dari x bisa berupa real maupun integer. Dan hasilnya a-
kan sama dengan tipe dari x.
# Sqrt (fungsi).
Digunakan untuk menghitung nilai akar dari suatu bilangan.
Contoh Pemakaian
Program Contoh20;
Uses Wincrt;
Var x : Real;
Begin
Clrscr;
Write('Masukkan nilai dari X = ');
Readln (x);
If x <0 Then x:=Abs (x);
Writeln('Nilai X = ',x:5:2);
Bahan Praktikum Pemrograman Komputer(JPMIPA)-Januari 2011 -14-
Writeln ('Nilai eksponentialnya = ',EXP(x):9:3);
Writeln ('Nilai logaritma alamnya = ',LN(x):9:3);
Writeln ('Nilai integernya = ',INT(x):5:2);
Writeln ('Nilai fraksionalnya = ',FRAC(x):5:
Writeln ('Nilai X dipangkatkan = ',SQRT(x):
Writeln ('Nilai X diakarkan = ',SQRT(x):9:3);
Write('Nilai X jika dimasukkan dalam ');
Writeln('fungsi Sin,Cos,Tangen: ');
Writeln('- Sinus = ',Sin(x):9:3);
Writeln('- Cosinus = ',Cos(x):9:3);
Writeln('- Tangen = ',ArcTan(x):9:3);
End.
Kegiatan Mandiri
Buatlah program untuk menghitung panjang kalimat yang diisikan
Buatlah program untuk mengevaluasi apakah sebuah string termasuk palindrom
atau bukan. (contoh beberapa palindrom: MALAM, KATAK, KASURRUSAK)
Buat Program untuk mengganti tiap huruf a yang ditemukan menjadi i dari
kalimat yang diisikan.
Contoh:
Var Untai : array[1..50] of Integer;
Pada contoh Array dengan nama untai telah dideklarasikan dengan tipe integer, dengan
jumlah elemen maksimum 50 elemen, nilai dari elemen array tersebut diatas harus bertipe
integer.
Contoh Program :
Program Contoh21;
Uses WinCrt;
Var Bilangan : array[1..50] of Integer;
Begin
ClrScr;
Bilangan[1]:=3;
Bilangan[2]:=29;
Bilangan[3]:=30;
Bilangan[4]:=31;
Bilangan[5]:=23;
Writeln('nilai varibel bilangan ke 3 =',Bilangan[3]);
Readln;
End.
Array juga dapat dideklarasikan bersama dengan tipe yang beragam seperti contoh
dibawah ini :
Program Contoh22;
Uses WinCrt;
Var
NPM : array[1..20] of string[10];
Nama : array[1..20] of string[25];
Nilai : array[1..20] of real;
Umur : array[1..20] of byte;
banyak,i : integer;
Begin
ClrScr;
Write('Isi berapa data array yang diperlukan :');Readln(banyak);
For i := 1 to banyak Do
Begin
Write('NPM =');Readln(NPM[i]);
Write('Nama =');readln(Nama[i]);
Write('Nilai=');readln(Nilai[i]);
Write('Umur =');readln(Umur[i]);
End;
{cetak varibel array}
Writeln('NPM NAMA NILAI UMUR ');
For i:= 1 to banyak Do
Begin
Writeln(Npm[i]:10,Nama[i]:25,Nilai[i]:3:2,' ',Umur[i]:3);
End;
Readln;
End.
Untuk deklarasi array dapat digunakan beberapa cara seperti berikut ini :
Type Angka = String[20];
Contoh:
Var
Nilai : Array[1..10] of Integer;
pada contoh ini array nilai mempunyai 10 buah elemen yaitu dari 1 sampai 10. Array
tersebut dapat dideklarasikan dengan type seperti berikut ini :
Type
Skala = 1..10;
Var
Nilai : Array [skala] of Integer;
atau :
Type
Skala = 1..10;
Y = Array[skala] of Integer;
Var
Nilai : Y;
atau :
Type
Y = Array[1..10] of Integer;
Var
Nilai : Y;
atau :
Const
Atas =1;
Bawah = 5;
type
Y = Array[Atas..Bawah] of Integer;
Var
Nilai : Y;
Readln;
End.
Kegiatan #1: Terbimbing
o Ketiklah masing-masing program contoh21 s.d. program contoh23. Kompilasi dan
eksekusilah.
o Buatlah percobaan kecil untuk mengubah batas indeks pada variabel array, dan indeks
pada saat variabel array dipakai. (mengubah = membesarkan atau mengecilkan batas
indeks). Kompilasi dan eksekusi ulang. Kenalilah apa pengaruhnya ?.
Model pemrosesan terhadap Array, yang paling banyak dipakai adalah model pemrosesan
sekuensial.
Pola pemrosesan:
For i := Imin to Imax do
Proses(T[i]);
Jika array berdimensi lebih dari 1, maka pola tersebut tinggal dikembangkan dengan
mamakai nested-for.
Misal:
For i := Imin to Imax do
For J := Imin to Imax do
Proses(T[i,j]);
Contoh Pemakaian:
Program Contoh24;
Uses WinCrt;
Var Skor : array[1..100] of integer;
Nilai: array[1..100] of real;
I : integer;
Begin
{Bagian Input Skor}
For i := 1 to 100 do
Begin
Write(Ketik skor #,i, : );
readln(skor[i]);
End;
{Bagian menghitung dan mengisi array Nilai. Nilai = skor/100}
For i := 1 to 100 do
Begin
Nilai[i] := skor[i] / 100;
end;
{Bagian menampilkan isi array Nilai}
For i := 1 to 100 do
Begin
Writeln(nilai[i]);
End;
End.
Keterangan:
o Perhatikan bagian input skor, bagian menghitung nilai, dan juga bagian menampilkan
isi array Nilai. Semua bagian tsb bersentuhan dengan data bertipe array, dan
memakai pola pemrosesan sekuensial. (Cocokkan dengan pola di atas).
Program Contoh25;
Uses WinCrt;
Type Mhs = record
Nim : string[9];
Skor : integer;
Nilai: real;
Kuali: char;
End;
Var NilaiMhs : array[1..100] of Mhs;
I : integer;
Begin
{Bagian Input Nim, dan Skor}
For i := 1 to 100 do
Begin
Write(Ketik Nim : );
readln(NilaiMhs[i].Nim);
Write(Ketik skor: );
readln(NilaiMhs[i].Skor);
End;
For i := 1 to 100 do
Begin
NilaiMhs[i].Nilai := Nilai[i].Skor / 100;
If NilaiMhs[i].Nilai > 70 then NilaiMhs[i].Kuali := A;
If (NilaiMhs[i].Nilai > 60) and (NilaiMhs[i].Nilai <= 70)
then NilaiMhs[i].Kuali := B;
If (NilaiMhs[i].Nilai > 55) and (NilaiMhs[i].Nilai <= 60)
then NilaiMhs[i].Kuali := C;
If (NilaiMhs[i].Nilai > 50) and (NilaiMhs[i].Nilai <= 55)
then NilaiMhs[i].Kuali := D;
If NilaiMhs[i].Nilai < 50 then NilaiMhs[i].Kuali := E;
end;
{Bagian menampilkan isi array Nilai}
For i := 1 to 100 do
Begin
End;
End.
Kegiatan Anda:
o Ketik program Contoh24, kompilasi dan eksekusilah.
o Ubahlah urutan for-to-do menjadi for-downt-to. Kompilasi dan eksekusi ulang.
Apakah ada perbedaannya ?.
o Ketik program Contoh25, lengkapilah bagian untuk menampilkan record-record
NilaiMhs. Kompilasi dan eksekusilah.