0% menganggap dokumen ini bermanfaat (0 suara)
122 tayangan73 halaman

Modul Pascal PDF

Modul ini membahas tentang algoritma dan pemrograman terstruktur dalam bahasa Pascal. Topik utama yang dibahas adalah konsep pemrograman terstruktur, istilah dasar pemrograman, ciri teknik pemrograman terstruktur, standar program yang baik, perbedaan belajar memprogram dan belajar bahasa pemrograman, algoritma, dan struktur program dalam bahasa Pascal.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
122 tayangan73 halaman

Modul Pascal PDF

Modul ini membahas tentang algoritma dan pemrograman terstruktur dalam bahasa Pascal. Topik utama yang dibahas adalah konsep pemrograman terstruktur, istilah dasar pemrograman, ciri teknik pemrograman terstruktur, standar program yang baik, perbedaan belajar memprogram dan belajar bahasa pemrograman, algoritma, dan struktur program dalam bahasa Pascal.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 73

 

 
 
MODUL KULIAH 
APLIKASI PROGRAM KOMPUTER 
(Pemrograman Pascal) 
 

Oleh: 
Oni Soesanto 
 

UNIVERSITAS LAMBUNG MANGKURAT


TAHUN 2011
 
BAB I
ALGORITMA DAN PEMOGRAMAN TERSTRUKTUR

A. PEMROGRAMAN TERSTRUKTUR
Konsep pemograman terstruktur memegang peran penting dalam merancang,
menyusun, memelihara, dan mengembangkan suatu program, khususnya program aplikasi
yang besar dan kompleks.
Konsep ini diungkapkan pertama kali pada tahun 1960-an oleh Profesor Edsger
Djikstra dari Universitas Eindhoven. Profesor Djikstra mengungkapkan bahaya dadri
penggunaan instruksi peralihan proses tanpa syarat tertentu (GOTO) dalam pembuatan segala
bentuk program karena akan menjadikan program tidak terstruktur dengan baik. Oleh sebab
itu mulailah dikembangkan teknik pemmograman terstruktur. Namun demikian penerapan
teknik ini tidak semata-mata hanya untuk menghindari penggunaan instruksi GOTO, tetapi
untuk menciptakan program yang terstruktur dan sistematis.

Istilah-istilah Dasar
Sebelum mempelajari pemograman terstruktur lebih lanjut, ada beberapa istilah
mendasar yang perlu dipahami lebih dahulu, Yaitu:
a. Program
Adalah kata, ekspresi, pernyataan atu kombinasinya yang disusun dan dirangkai menjadi
satu kesatuan prosedur yang berupa urutan langkah untuk menyelesaikan masalah yang
diimplementasikan dengan menggunakan bahasa pemograman sehingga dapat dieksekusi
oleh komputer.
b. Bahasa Pemograman
Merupakan prosedur/tata cara penulisan program. Pada bahasa pemograman terdapat dua
faktor penting, yaitu sintax dan semantik. Sintax (sintaks) adalah aturan-aturan gramatikal
yang mengatur tata cara penulisan kata, ekspresi dan pernyataan, sedangkan semantik
adalah aturan-aturan untuk menyatakan suatu arti.
c. Pemograman
Merupakan proses mengimplementasikan urutan langkah untuk menyelesaikan suatu
masalah dengan menggunakan bahasa pemograman.
d. Pemograman Terstruktur
Merupakan proses mengimplementasikan urutan langkah untuk menyelesaikan suatu
masalah dalam bentuk program yang memiliki rancang bangun yang terstruktur dan tidak
berbelit-belit sehingga mudah ditelusuri, dipahami dan dikembangkan oleh siapa saja.

Ciri Teknik Pemograman Terstruktur


Teknik pemograman terstruktur memiliki ciri atau karakteristik sebagai berikut :
a. Mangandung algoritma pemecahan masalah yang tepat, benar, sederhana, standar dan
efektif
b. Memiliki struktur logika dan struktur program yang benar dan mudah dipahami serta
menghindari penggunaan instruksi GOTO
c. Membutuhkan biaya testing, pemeliharaan dan pengembangan yang rendah
d. Memiliki dokumentasi yang baik

Standar Program yang Baik


Standar pemograman dibutuhkan untuk menciptakan suatu program yang baik yang
memiliki portabilitas yang tinggi sehingga memudahkan dalam merancang dan merawat
program serta meningkatkan efektivitas penggunaan peralatan komputer.

Modul Pemrograman Pascal - 1


Untuk menentukan standar program yang baik dibutuhkan beberapa standar sebagai
dasar penilaian, seperti :
a. Teknik pemecahan masalah,
b. Penyusunan program,
c. Perawatan program,
d. Standar prosedur,
Standar-standar tersebut sering dilihat oleh pemogram sebagai batasan kreatifitas dan
kemampuan untuk menuangkan berbagai ide kedalam bentuk program. Namun standar
tersebut akan membuat program menjadi konsisten dan mudah untuk dikembangkan.

Belajar Memprogram Dan Belajar Bahasa Pemrograman


Belajar memprogram tidak sama dengan belajar bahasa pemrograman. Belajar
memprogram adalah belajar tentang metodologi pemecahan masalah, kemudian
menuangkannya dalam suatu notasi tertentu yang mudah dibaca dan dipahami. Sedangakan
belajar bahasa pemrograman berarti belajar memakai suatu bahasa aturan-aturan tata
bahasanya, instruksi-instruksinya, tata cara pengoperasian compiler-nya, dan memanfaatkan
instruksi-instruksi tersebut untuk membuat program yang ditulis hanya dalam bahasa itu
saja.

Belajar Memprogram
Pengertian Belajar Memrogram adalah :
a. Belajar memprogram ≠ belajar bahasa pemrograman
b. Belajar memprogram : belajar tentang strategi pemecahan masalah, metodologi dan
sistematika pemecahan masalah kemudian menuliskannya dalam notasi yang disepakati
bersama
c. Belajar memprogram : bersifat pemahaman persoalan, analisis dan sintesis
d. Belajar memprogram, titik berat : designer program

Belajar Bahasa Pemrograman


Pengertian Belajar Bahasa Pemrograman adalah :
a. Belajar bahasa pemrograman : belajar memakai suatu bahasa pemrograman, aturan
sintaks, tatacara untuk memanfaatkan instruksi yang spesifik untuk setiap bahasa
b. Belajar bahasa pemrograman , titik berat : coder

Produk yang dihasilkan pemrogram :


a. Program dengan rancangan yang baik (metodologis, sistematis)
b. Dapat dieksekusi oleh mesin
c. Berfungsi dengan benar
d. Sanggup melayani segala kemungkinan masukan
e. Disertai dokumentasi
f. Belajar memprogram, titik berat : designer program

B. ALGORITHMA
Setelah memilih teknik pemecahan masalah yang akan digunakan, pemogram akan
mulai menyusun langkah-langkah untuk memecahkan masalah secara detail. Langkah-
langkah inilah yang disebut algorithma.
Algoritma berasal dari kata algoris dan ritmis. Istilah ini pertama kali diungkapkan
oleh Abu Ja’far Mohammed Ibn Musa al Khowarizmi (825 M) dalam buku Al-Jabr Wa-al
Muqabla.
Dalam bidang pemograman, algorithma didefinisikan sebagai suatu metode khusus
yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara
Modul Pemrograman Pascal - 2
sistematis, yang akan dikerjakan untuk menyelesaikan suatu masalah dengan bantuan
komputer.
Algoritma pemograman yang baik memiliki ciri-ciri sebagai berikut :
a. Tepat, benar, sederhana, standar dan efektif
b. Logis, terstruktur dan sistematis
c. Semua operasi terdefinisi
d. Semua proses harus berakhir setelah sejumlah langkah dilakukan
e. Ditulis dengan bahasa yang standar dengan format pemograman agar mudah untuk
diimplementasikan dan tidak menimbulkan arti ganda
Melaksanakan Algoritma berarti mengerjakan langkah-langkah di dalam Algoritma
tersebut. Pemroses mengerjakan proses sesuai dengan algoritma yang diberikan kepadanya.
Karena itu suatu Algoritma harus dinyatakan dalam bentuk yang dapat dimengerti oleh
pemroses. Jadi suatu pemroses harus :
1. Mengerti setiap langkah dalam Algoritma
2. Mengerjakan operasi yang bersesuaian dengan langkah tersebut.

Mekanisme Pelaksanan Algoritma Oleh Pemroses


Komputer hanyalah salah satu pemroses. Agar dapat dilaksanakan oleh komputer,
algoritma harus ditulis dalam notasi bahasa pemrograman sehingga dinamakan program. Jadi
program adalah perwujudan atau implementasi teknis Algoritma yang ditulis dalam bahasa
pemrogaman tertentu sehingga dapat dilaksanakan oleh komputer.

Algoritma berisi langkah-langkah penyelesaian masalah. Langkah-langkah tersebut


dapat ditulis dalam notasi apapun, asalkan mudah dibaca dan dimengerti, karena memang
tidak ada notasi baku dalam penulisan algoritma. Tiap orang dapat membuat aturan penulisan
dan notasi algoritma sendiri. Agar notasi algoritma mudah ditranslasi ke dalam notasi bahasa
pemrograman, maka sebaiknya notasi algoritma tersebut berkoresponden dengan notasi
bahasa pemrograman secara umum.

Aturan Penulisan Algoritma


Setiap Algoritma akan selalu terdiri dari tiga bagian yaitu :
a. Judul (Header)
b. Kamus
c. Algoritma
Pada setiap bagian tersebut apabila akan dituliskan komentar mengenai setiap bagian
tersebut dituliskan diantara tanda kurung kurawal contoh { Komentar }. Notasi
algoritmis yang dituliskan diantara tanda ini tidak akan dieksekusi oleh program.

Algoritma (Deskripsi)
Algoritma adalah bagian inti dari suatu algoritma yang berisi instruksi atau
pemanggilan aksi yang telah didefinisikan. Komponen teks algoritma dalam pemrograman
procedural dapat berupa :
a. Instruksi dasar seperti input/output, assignment
b. Sequence (runtutan)
c. Analisa kasus
d. Perulangan
Setiap langkah algoritma dibaca dari “atas” ke “bawah”. Urutan deskripsi penulisan
menentuan urutan langkah pelaksanaan perintah.

Modul Pemrograman Pascal - 3


Penyajian Algorithma
a. Metode English (Indonesia) Structure
Algorithma digambarkan dalam bentuk bahasa manusia.
Contoh:
• Inisialisasi variabel
• Baca data nilai siswa
• Jika nilai siswa lebih besar dar 60 maka statusnya sama dengan lulus, jika tidak maka
status sama dengan gagal
• Cetak status siswa

b. Metode Pseudocode
Algorithma dikodekan sesuai dengan kode bahasa pemrograman yang digunakan.
Contoh:
REM Program Kelulusan Siswa
LET data nilai diberi nilai awal 0
INPUT data nilai
IF data nilai>60 THEN
Status siswa sama dengan Lulus
ELSE
Status siswa sama dengan Gagal
PRINT Status siswa
END

c. Flowchart
Algorithma digambarkan dalam bentuk symbol-simbol.
Contoh:

Y T

Gagal

Modul Pemrograman Pascal - 4


BAB II
STURKTUR PROGRAM TURBO PASCAL

Struktur program pada bahasa Pascal terbagi menjadi 2 yaitu : Kepala program dan
Badan program. Secara umum bentuk layout sebuah program sederhana dapat digambarkan
sebagai berikut :
Program Nama_program; {untuk memberitahu kepad aTurbo Pascal bahwa yang
ditulis adalah program}
Uses……………………; {untuk menggunakan piranti yang digunakan dalam program}
Var..……………………; {untuk mendeklarasikan untuk simbol variebel yang digunakan
dalam program}
Begin
…………………; {statement/perintah program}
…………………;
…………………;
End. {akhir program}

Kita akan menggunakan statement WRITE. Write digunakan untuk mencetak data ke
monitor.
Program latihan 2_1;
Uses Crt;
Begin
Clrscr; {untuk membersihkan monitor}
Write(‘Laboratorium Komputer’);
Write(‘FMIPA Unlam’);
Write(‘Banjarbaru’);
End. {Akhir program}
Catatan :
• Kurung kurawal { } dibuat untuk memberikan keterangan yang tidak diproses program
• Setiap akhir abris statement harus diberi tanda titik koma ;
• Setiap string (tulisan) harus diawali dan diakhiri dengan tanda petik tunggal’.
• Setiap akhir program diberi tanda titik.
• Anda dapat menjalankan (running) program, jika sudah selesai

Laboratorium Komputer FIMPA Unlam Banjarbaru

Mengetik program di atas. Jika program ditulis dengan benar maka hasilnya akan tampak.
Simpanlah program dengan nama file LTH 1_1.PAS
Kita akan mempeelajari statement WRITELN, Writlen digunakan untuk menuliskan
data ke monitor perbaris. Gunakan perintah Ctrl – QA, maka akan tampak dilayar.
Find : {isi dengan Write ↵ (enter)}
Replace with : {isi dengan Writeln ↵}
Options:
Setelah penggantian write dengan writeln selesai maka program akan tampak sebagai
berikut.

Modul Pemrograman Pascal - 5


Program Latihan_2_2;
Uses WinCrt;
Begin
Clrscr; {untuk membersihkan monitor}
Writeln(‘Laboratorium Komputer’);
Writeln(‘FMIPA Unlam’);
Writeln(‘Banjarbaru’);
End. {Akhir program}
Apakah terdapat perbedaan dengan program pada latihan 2_1, jelaskan perbedaan
tersebut. Simpanlah program latihan_2_2 dengan nama file LTH 1_2.PAS, gunakan perintah
penyimpanan pada menu file write to.
Selanjutnya adalah program untuk menampilkan tulisan/teks pada monitor dan ajrak
baris 2 spasi, dnegan cara menambahkan writeln setelah teks yang ingin diberi jarak tersebut.
Laboratorium Komputer
FMIPA Unlam
Banjarbaru

Program Latihan_2_3;
Uses WinCrt;
Begin
Clrscr; {untuk membersihkan monitor}
Writeln('Laboratorium Komputer');
Writeln;
Writeln(' FMIPA Unlam');
Writeln;
Writeln(' Banjarbaru');
End.
Statement selanjutnya adalah perintah untuk memberikan warna pada tulisan di
monitor.
Texcolor (…); {warna untuk tulisan}
Texbackground(…); {warna untuk latar belakang}

Program Latihan_2_4;
Uses WinCrt;
Begin
Clrscr; {untuk membersihkan monitor}
Textcolor(2);
Textbackground(5);
Writeln;('Laboratorium Komputer');
Writeln;
Writeln(' FMIPA Unlam');
Writeln;
Writeln(' Banjarbaru');
End. {Akhir program}

Modul Pemrograman Pascal - 6


BAB III
STATEMEN PADA PEMROGRAMAN PASCAL

A. RESERVED WORD
Reserved Word adalah kata-kata baku yang digunakan dalam program dan sudah
terintergrated dalam pascal dan juga mempunyai bentuk serta kegunaan tertentu yang telah
didefinisikan oleh Pascal. Reserved Word tidak boleh didefinisikan kembali oleh pemakai,
sehingga tidak dapat digunakan sebagai pengenal (Identifier). Dalam bahasa pemrograman
Pascal, beberapa Reserved Word dalam Pascal antara lain:
AND DOWNTO IN OF STRING
ASM ELSE INHERITED OR THEN
ARRAY END INLINE PACKED TO
BEGIN EXPORTS INTERFACE PROCEDURE TYPE
CASE FILE LABEL PROGRAM UNIT
CONST FOR LIBRARY RECORD UNTIL
CONSTRUCTOR FUNCTION MOD REPEAT USES
DESTRUCTOR GOTO NIL SET
VAR DIV IF NOT SHL
WHILE DO IMPLEMENTATION OBJECT SHR
WITH
.
Selain dari Reserved Word di atas, Turbo Pascal masih memiliki tambahan Reserved
Word berikut:
ABSOLUTE ASSEMBLER () FAR FORWARD INDEX

B. BEBERAPA STATEMEN TURBO PASCAL


Statemen adalah perintah untuk pengerjaan program pascal. Statemen terletak di
bagian deklarasi statemen dengan diawali oleh kata cadangan BEGIN dan diakhiri dengan
kata cadangan END. Akhir dari setiap statemen diakhiri dengan titik koma [;]. Statemen
statemen dalam bahasa Pascal terdiri dari pernyataan yang berupa fungsi dan prosedur yang
telah disediakan sebagai perintah standar Turbo Pascal.
1. Statemen-statemen yang digunakan untuk input/output.
# Read/Readln [prosedur].
Perintah ini digunakan untuk memasukkan [input] data lewat keyboard ke dalam suatu
variabel.
Sintaks:
Read/Readln(x); (ingat, selalu diakhiri dengan titik koma [;])
Keterangan : x = variabel.
Read = pada statemen ini posisi kursor tidak pindah ke baris selanjutnya.
Readln = pada statemen ini posisi kursor akan pindah ke baris selanjutnya setelah
diinput.
# ReadKey [fungsi].
Untuk pembacaan sebuah karakter dari keyboard. Tipe data yang dihasilkan adalah char.
Sintaks: ReadKey;
# Write/Writeln [prosedur].
Digunakan untuk menampilkan isi dari suatu nilai variable di layar.
Sintaks: Write/Writeln(x);
Keterangan : x = variabel.
Write/Writeln= statement ini digunakan untuk mencetak variable ke dalam monitor

Modul Pemrograman Pascal - 7


Contoh :
Program input;
Uses Crt;
Var nm : String;
npm : String;
Begin
Clrscr;
Writeln ('masukkan nama dan NPM ');
Writeln ('------------------------------');
Write ('nama anda : ');
Readln (nm);
Writeln ('NPM anda : ');
Readln (npm);
End.
Bila dijalankan hasilnya adalah:
masukkan nama dan NPM
------------------------------
nama anda : ( di input )
NPM anda : ( di input )

2. Statemen-statemen yang digunakan untuk pengaturan letak layar.


# ClrScr [prosedur].
Perintah ini digunakan untuk membersihkan layar.
sintaks: ClrScr; [Clear screen]
# GotoXY[prosedur].
Untuk menempatkan posisi kursor pada layar.
Sintaks: GotoXY(X, Y: Byte);
Keterangan : X = sumbu X (posisi horisontal)
Y = sumbu Y (posisi vertikal)
# DelLine [prosedur].
Untuk menghapus sebuah baris pada posisi kursor dan menaikkan baris-baris
dibawahnya.
Sintaks: DelLine;
# InsLine [prosedur].
Untuk menyisipkan sebuah baris pada posisi kursor dan menggeser kebawah tampilan-
tampilan baris dibawahnya.
Sintaks: InsLine;
# Delay [prosedur].
Untuk menghentikan sejenak proses program.
Sintaks: Delay (MS: Word);
Keterangan : variable MS = ukuran waktu dalam milisecond.

3. Statemen yang digunakan untuk memanipulasi string.


# ConCat[fungsi].
Untuk menggabungkan 2 atau beberapa variabel string.
Sintaks: ConCat (s1 [,s2,...,sn]: String) : String;
contoh: ConCat ('ABC','DEF') { ABCDEF }
# 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).
Modul Pemrograman Pascal - 8
# Delete [prosedur].
Menghapus sebagian karakter dari sebuah string.
Sintaks: Delete (S,Index,Count);
Keterangan : sama dengan statemen Copy.
# Insert [prosedur].
Menyisipkan satu atau beberapa karakter ke dalam sebuah string.
Sintaks: Insert (Source,var S,Index);
Keterangan : Source = sumber string untuk disisipi (string)
var S = string tujuan yang akan disisipi oleh
string Source (string)
Index = posisi mulai (integer).
# Length [fungsi].
Memberikan nilai panjang dari suatu string (jumlah karakter dalam string).
Sintaks: Length (S);
Keterangan : S = string
Length(S) menghasilkan nilai integer.
# 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 didalam 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.
# Val [prosedur].
Merubah nilai string ke dalam nilai numerik.
Sintaks: Val (S,N,P);
Keterangan :
S = nilai string,
N = nilai real,
P = posisi salah.
Nilai string harus berisi angka, plus atau minus, bila tidak berarti kesalahan dan letak
kesalahannya ditunjukkan oleh variabel posisi salah. Jika benar, maka nilai variabel
tsb = 0 (nol).
# UpCase [fungsi].
Memberikan huruf kapital dari argumen.
Sintaks: UpCase (S);
Keterangan :
S = variabel bertipe karakter.

4. Statemen-statemen untuk perhitungan aritmatik.


# Abs [fungsi].
Memberikan nilai mutlak dari suatu argumen.
Sintaks: ABS(x);
# ArcTan[fungsi].
Memberikan nilai dari fungsi arctangent dari perhitungan trigonometri.
Sintaks: ArcTan (x);
dimana x dapat bertipe real atau integer dan akan menghasilkan nilai bertipe real.

Modul Pemrograman Pascal - 9


# 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 akan sama dengan tipe dari x.
# Sqrt (fungsi).
Digunakan untuk menghitung nilai akar dari suatu bilangan.
Sintaks: Sqrt (x);

5. Statemen-statemen untuk transfer nilai dari suatu variabel.


# Chr [fungsi].
Merubah nilai dari byte ke bentuk karakter yang sesuai dengan kode ASCII.
Sintaks: Chr (x);
Keterangan : x bertipe byte
contoh :
Writeln (Chr (61));
hasilnya : a
# Ord [fungsi].
Merubah nilai suatu variabel dari bentuk karakter ke bentuk longint.
Sintaks: Ord (x);
Keteranagn : x bertipe char
contoh :
Writeln(Ord ('B'));
hasilnya : 42
# Round [fungsi].
Membulatkan data tipe real ke data tipe longint.
Sintaks: Round (x);
Keterangan : Jika nilai pecahan < 0,5 maka dibulatkan kebawah.
Jika nilai pecahan > 0,5 maka dibulatkan keatas.
contoh :

Modul Pemrograman Pascal - 10


Writeln('10/3 dibulatkan = ',Round(10/3));
hasilnya : 10/3 dibulatkan = 3
# TRUNC [fungsi].
Membulatkan kebawah data tipe real ke data tipe longint.
Sintaks: Trunc (x);
contoh :
Writeln('20/3 dibulatkan kebawah = ',Trunc (20/3));
hasilnya : 20/3 dibulatkan kebawah = 6

6. Statemen-statemen untuk memanipulasi data.


# Pred [fungsi].
Memberikan nilai sebelum nilai argumen dalam urutannya dalam ASCII.
Sintaks: Pred (x);
# Succ [fungsi].
Memberikan nilai sesudah nilai argumen dalam urutannya dalam ASCII.
Sintaks: Succ (x);
# Inc[fungsi].
Menambah (increments) nilai suatu variabel.
Sintaks: Inc (x,i); {i >= 1}
# Dec [fungsi].
Mengurangi (decrements) nilai suatu variabel.
Sintaks: DEC(x,i); {i >=1}

Contoh Program:
Program karakter;
Uses WinCrt;
var
a, b : char;
c : byte;
begin
write('Masukkan 1 karakter :');
readln(a);
writeln('Urutan dalam tabel ASCII : ',ord(a));
writeln('Diubah dalam huru besar : ',upcase(a));
writeln('Karakter sebelumnya : ',pred(a));
writeln('karakter sesudahnya : ',succ(a));
c:=ord(a)+5;
writeln('5 karakter berikutnya : ',char(c));
end.

Program Konversi;
Uses winCrt;
Var
x : string;
y : real;
i : integer;
Begin
clrscr;
write('masukkan bilangan desimal : ');
readln(x);
i:=length(x);
val(x,y,i);
writeln('hasil konversi : ',y:10:2);
end.

Modul Pemrograman Pascal - 11


BAB IV
TIPE DATA DAN OPERATOR MATEMATIK

A. TIPE DATA
Dalam bahasa pascal semua variabel yang akan kita gunakan harus didefinisikan
terlebih dahulu pada blok VAR (variabel). Turbo Pascal mengenal beberapa jenis variabel,
yaitu :
1. Interger (bilangan bulat) dapat dibedakan menjadi :
Interger bernilai -23768 s/d 32767
Shortint bernilai -128 s/d 127
Longint bernilai -2147483648 s/d 4147483647
Word bernilai 0 s/d 65535
byte bernilai 0 s/d 255

2. Boolean (logika)
Boolean hanya memiliki dua nilai yaitu true dan false
3. Char
Char (huruf) dapat ditulis dalam bentuk biasa, yaitu diapit oleh tanda apostrof. Contoh
: ‘Lab. Komputer FMIPA Unlam’.
Atau dalam kode ASCI dengan didahului tanda #.
4. Real
Real (bilangan real) dapat dibedakan menjadi beberapa kelompok berikut ini :

Real bernilai 2,9 x 10-38 s/d 1,7 x 1037


-45
Single bernilai 1,5 x 10 s/d 3,5 x 1038
Double bernilai 5,0 x 10-324 s/d 1,7 x 10308
-4932
Extended bernilai 3,4 x 10 s/d 1,1 x 104432
-63
Comp bernilai -2 + 1 s/d 263 - 1
5. String
String adalah data yang berupa deretan beberapa karakter. String selalu diawali oleh
tanda apostrop.
Operator Matematik
1. Operator Aritmatik
Operator Aritmatik Pascal
+ +
- -
: / (pembagian real)
div (pembagian interger)
x 
x2 sqr (x)
√x sqr (x)
= :=
2. Operator Boolean
Operator Boolean (logika) meliputi : NOT, AND, OR dan XOR
3. Operator Rasional
Operator rasional meliputi :
< Kurang dari
> Lebih dari
= Sama dengan
<= Kurang dari sama dengan

Modul Pemrograman Pascal - 12


>= Lebih dari sama dengan
<> Tidak sama dengan
Program Latihan4_1;
Uses Wincrt;
Var P,Q :Integer;
R :Real;
Begin
P:=25;
Q:=P+P;
R:=P/Q;
Writeln('Hasil P+P =',Q:2);
Writeln('Hasil P/Q =',R:2:1);
End.

Latihan ini adalah penggunaan bilangan real yang ditunjukkan dengan variabel g (hasil
pembagian).

Program Latihan4_2;
Uses WinCrt;
Var a,b,c,d,e,f :Integer;
g:Real;
Begin
Clrscr;
Writeln('Latihan Operator Aritmatik');
Write('Masukkan nilai a= ');Readln(a);
Write('Masukkan nilai b= ');Readln(b);
c:=a+b;
d:=a-b;
e:=a*b;
f:=a div b;
g:=a/b;
Writeln('Hasil penjumlahan a+b =',c);
Writeln('Hasil pengurangan a-b =',d);
Writeln('Hasil perkalian axb =',e);
Writeln('Hasil a div b =',f);
Writeln('Hasil pembagian a/b =',g);
End.
Jalankan program dan perhatikan hasilnya (isilah a dan b dengan bilangan bulat)
Cobalah satu persatu :
• Isi nilai a dengan bilangan desimal apa yang terjadi / Jelaskan
• Gantilah variabel a dan b dnegan real pada blok VAR. Jalankan, apa yang terjadi ?
Jelaskan
Latihan 4.3
Latihan ini adalah menggunakan Writeln untuk menerangkan bilangan interger, riil, boolean,
char danstring.
Program Latihan4_3;
Uses WinCrt;
Var
b:byte;
i:Integer;
r:Real;
c:Char;
s:string;
bo:boolean;
Begin
b:=225;
i:=Maxint;
r:=235.124567;
c:='A';
s:='Latihan Tipe Data';
Modul Pemrograman Pascal - 13
bo:=True;
Clrscr;
Writeln('Perhatikan hasil penulisan di bawah ini:');
Writeln('Bilangan Bulat');
Writeln('Byte :',b);
Writeln('Integer :',i);
Writeln('Integer 6 digit :',i:6);
Writeln('Integer 8 digit :',i:8);
Writeln('Integer 10 digit :',i:10);
Writeln;
Writeln('Bilangan Desimal');
Writeln('Byte :',b);
Writeln('Real :',r);
Writeln('Real 2 digit 3 desimal:',r:2:3);
Writeln('Real 6 digit 4 desimal:',r:6:4);
Writeln('Real 10 digit 5 desimal:',r:10:5);
Writeln('Huruf dan Kalimat');
Writeln('Charakter :',c);
Writeln('Charakter 3 digit:',c:3);
Writeln('String :',s);
Writeln('....Boolean....:');
Writeln('Boolean',bo);
End.
Latihan soal :
1. Alat pengukur tanah yang digunakan untuk pengukuran oleh seornag petugas pengukur
tanah dalam satuan centimeter. Laporan petugas tersebut harus memberikan data dalam
bentuk satuan meter, buatkan program untuk membantu petugas tersebut dalam
mengkonversikan hasil pengukurannya ke dalam satuan meter.
 Input : hasil pengukuran
 Operasi : konvensi cm ke meter
 Output : hasil konvensi
2. Rumus konversi suhu dari derajat Celcius (C) ke dalam derajt Rahrenheit (F), Reamur (R)
dan Kelvin (K) adalah sebagai berikut :
R = C/5 x 4, F = C/5 x 9, K = C + 273
 Input : besar derajat dalam Celcius
 Operasi : derajat dalam Reamur, Fahrenheit dan Kelvin
 Output : derajat dalam Reamur, Fahrenheit dan Kelvin
3. Buatkan program untuk menghitung luas dan keliling persegi dengan panjang sisi s,
dengan rumus Luas = s x s dan Keliling = 4 x s
 Input : panjang sisi
 Operasi : Luas dan Keliling
 Output : Luas dan Keliling

Modul Pemrograman Pascal - 14


BAB V
STRUKTUR KONTROL

Kemampuan Kontrol Pascal adalah kemampuan bahasa Pascal dalam melakukan


pengulangan, memilih suatu tindakan atau percabangan dalam suatu tindakan.
Pascal sebagai bahasa yang terstruktur, mempunyai beberapa macam proses yang terdiri dari :
• proses sekuensial
• proses berulang
• proses seleksi/pengambilan keputusan.
Hal ini berarti bahwa dalam merancang program bahasa yang terstruktur harus
dikerjakan secara berurutan. Selain itu bahasa pascal juga menyediakan statemen GOTO
untuk pemrograman yang tidak terstruktur, yang berarti dapat terjadi bahwa program akan
melompat dari satu pernyataan ke pernyataan lain.

Statemen GOTO
Digunakan untuk mengarahkan eksekusi program ke pernyataan yang diawali oleh
label sesuai yang ditunjuk oleh GOTO.
Bentuk Umum :
GOTO nama_label;
Keterangan:
Nama label yang digunakan dalam GOTO berupa identifier yang sudah didefinisikan dalam
deklarasi Label.
Contoh:
Label Ulang;
Begin
Ulang;
Writeln(‘Pascal’);
GOTO Ulang;
End.

A. PENGULANGAN
Proses pengulangan dalam bahasa Pascal terdiri dari :
a. WHILE .... DO....
Pernyataan ini digunakan untuk melakukan proses pengulangan bila kondisi atau syarat
tertentu yang terdapat pada awal blok terpenuhi atau sering dikatakan sebagai pengulang
proses selama kondisi benar.
Bentuk:
WHILE kondisi_terpenuhi DO
BEGIN
Pernyataan/blok pernyataan;
END;
Flowchart:

Proses yang harus


diulang

Kondisi Y
terpenuhi?

T
Modul Pemrograman Pascal - 15
Contoh :
Program Latihan5_1;
uses wincrt;
Const
c = 1.609344;
var
a, b : real;
begin
writeln('konversi');
writeln('kilometer mil');
a:=0;
while a<20 do
begin
a:=a+1;
b:=c*a;
writeln(a:8:2,b:8:2);
end;
end.
b. REPEAT .... UNTIL....
Proses pengulangan terjadi setelah pernyataan REPEAT dan berakhir pada pernyataan
UNTIL. Bila kondisi pada penyataan UNTIL masih terpenuhi, proses pengulangan akan
dilakukan lagi.
Bentuk:
REPEAT
pernyataan/blok pernyataan;
UNTIL kondisi_tak_terpenuhi;

Contoh:
Program Latihan5_2;
uses wincrt;
Const
c = 1.609344;
var
a, b : real;
begin
writeln('konversi');
writeln('kilometer mil');
a:=0;
repeat
a:=a+1;
b:=c*a;
writeln(a:8:2,b:8:2);
until a>19;
end.
c. FOR...TO....DO dan FOR ... DOWNTO ....DO
Pernyataan ini digunakan bila kondisi pengulangan itu sudah diketahui lebih dahulu,
berapa kali proses pengulangan itu harus terjadi. Sedangkan WHILE dan REPEAT
digunakan bila tidak diketahui dengan pasti jumlah proses pengulangan.
Bentuk:
FOR pengenal := harga_awal TO harga_akhir DO
BEGIN
Kumpulan pernyataan;
END;
FOR pengenal := harga_awal DOWNTO harga_akhir DO
BEGIN
Kumpulan pernyataan;
END;

Modul Pemrograman Pascal - 16


Flowchart:
Jum Jum

I = 1 to jum I = jum
downto 1

Proses Hitung Proses Hitung

I I

Contoh:
Program Latihan5_3;
uses wincrt;
Const
c = 1.609344;
var
i : integer;
a, b : real;
begin
writeln('konversi');
writeln('kilometer mil');
a:=0;
for i:=1 to 20 do
begin
a:=a+1;
b:=c*a;
writeln(a:8:2,b:8:2);
end;
end.
Program Latihan5_4;
uses wincrt;
Const
c = 1.609344;
var
i : integer;
a, b : real;
begin
writeln('konversi');
writeln('kilometer mil');
a:=0;
for i:=20 downto 1 do
begin
a:=a+1;
b:=c*a;
writeln(a:8:2,b:8:2);
end;
end.

Modul Pemrograman Pascal - 17


B. SELEKSI
a. IF ... THEN ... ELSE ...
Digunakan untuk menentukan pilihan dengan dua ekspresi boolean TRUE dan FALSE.
Bentuk :
IF ekspresi_boolean THEN blok_pernyataan1
ELSE blok_pernyatan2;

Contoh :
• If skor > 8 then nilai:=’A’; if dengan satu statemen

• If skor > 8 then


Begin
Nilai := ’A’; if dengan banyak statemen
Lulus := true;
Bonus := 5000;
• If skor > 8 then Nilai:=’A’ if then else dengan satu statemen
Else Nilai:=’B”;
• If skor > 8 then
Begin
Nilai := ’A’;
Lulus := True; if dengan banyak statemen, else dengan satu statemen
Bonus := 40000;
End;
Else Nilai :=’B’;
• If skor > 8 then Nilai := ‘A’
Else
Begin
Nilai := ‘B’; if dengan satu statemen, else dengan banyak statemen
Bonus := 4000;
End;
• If skor > 8 then
Begin
Nilai := ’A’;
Lulus := true;
Bonus := 5000;
End else if then else dengan banyak statemen
Begin
Nilai := ’B’;
Lulus := false;
Bonus := 0;
End;
• If skor > 8 then nilai:=’A’;
Else If skor > 6 then nilai:=’B’;
Else If skor > 4 then nilai:=’C’; if then else if
Else If skor > 2 then nilai:=’D’;
Else nilai:=’E’;

Modul Pemrograman Pascal - 18


• If skor > 8 then
If Tugas := true then if bersarang
If ProsentaseAbsen > 80 then nilai:=’A’;

Flowchart:

Kondisi
terpenuhi
Y T

Proses yang Proses yang


harus diulang harus diulang

Contoh:
Program Latihan5_5;
uses wincrt;
type
tulisan = string[11];
var
a, b, c, x1, x2 : real;
keterangan : tulisan;

procedure akar(a1, a2, a3 : real; var x1, x2 : real);


var
det : real;
keterangan : tulisan;
begin
keterangan :='akar nyata';
det:=(a2*a2) - (4*a1*a3);
if det < 0 then keterangan:='akar khayal'
else
begin
x1:=(-a2+sqrt(det))/(2*a1);
x2:=(-a2-sqrt(det))/(2*a1);
end;
end;
begin
writeln('mencari akar');
writeln('persamaan ax^2 + bx + c');
write('a = ');readln(a);
write('b = ');readln(b);
write('c = ');readln(c);
akar(a,b,c,x1,x2);
writeln(keterangan);
while keterangan <> 'akar khayal' do
begin
writeln('akar 1 = ',x1:6:2);
writeln('akar 2 = ',x2:6:2);
end;
end.

b. CASE...OF
Digunakan dalam pengambilan keputusa lebih dari dua pilihan.
Bentuk :
Modul Pemrograman Pascal - 19
CASE pengenal OF
Label1 : blok_pernyataan1;
Label2 : blok_pernyataan2;
.
Labeln : blok_pernyataann;
END;

Contoh:
• Case Nilai Of
8 : write(‘Bagus sekali’);
61. : write(‘Bagus’); case dengan satu statemen tiap kondisi
4 : write(‘jelek’);
else write(‘Jelek sekali’);
end;

• Case Nilai Of
8 : Begin
write(‘Bagus sekali’);
write(‘Pertahankan’);
end;
7 : Begin
write(‘Bagus’);
write(‘Tingkatkan’); Case dengan banyak statemen pada tiap kondisi
end;
else
Begin
write(‘Jelek’);
write(‘tingkatkan’);
end;

Contoh :
Program Latihan5_6;
uses wincrt;
type
tulisan = string[11];
var
alas, tinggi, panjang, lebar,
jejari, luas : real;
pilihan : char;
selesai : boolean;
begin
repeat
clrscr;
writeln(' menu pilihan');
writeln;
writeln('1. menghitung luas segitiga');
writeln('2. menghitung luas segi empat');
writeln('3. menghitung luas lingkaran');
writeln('4. selesai');
writeln;
write('pilihan [1..4] :');
readln(pilihan);
clrscr;
selesai:=false;
case pilihan of
'1' : begin
writeln(' menghitung luas segitiga');
Modul Pemrograman Pascal - 20
write('masukan nilai alas :');
readln(alas);
write('masukan tinggi :');
readln(tinggi);
luas:=alas*tinggi/2;
writeln('luas=',luas:6:2);
writeln('tekan enter untuk melanjutkan');
readln;
end;
'2' : begin
writeln(' menghitung luas segiempat');
write('masukan nilai lebar :');
readln(lebar);
write('masukan panjang:');
readln(panjang);
luas:=panjang*lebar;
writeln('luas=',luas:6:2);
writeln('tekan enter untuk melanjutkan');
readln;
end;
'3' : begin
writeln(' menghitung luas segitiga');
write('masukan jari-jari:');
readln(jejari);
luas:=pi*sqr(jejari);
writeln('luas=',luas:6:2);
writeln('tekan enter untuk melanjutkan');
readln;
end;
'4' : selesai:=true;
else
writeln('salah pilih');
write('tekan enter untuk melanjutkan');readln;
end;
until selesai;
writeln('selesai');
end.

Modul Pemrograman Pascal - 21


BAB VI
PROSEDUR DAN FUNGSI

A. PROCEDURE
Prosedur merupakan subprogram yang terdiri dari sekelompok perintah untuk mengolah
suatu masalah dengan satu atau lebih masukan untuk menghasikan satu atau lebih
keluaran.
Bentuk:
PROCEDURE nama_procedure(parameter1, parameter2, ... : tipeparameter;
Var parameterX, parameterY, ...:
tipeparameter);

Keterangan;
o Didalam prosedur dapat dideklarasikan variabel lain sebagai variabel bantu dalam
perhitungan dan hanya berlaku pada prosedur tersebut.
o Didalam prosedur boleh ada prosedur atau fungsi lain
o Suatu identifier yang dideklarasikan pada prosedur dan fungsi yang lebih tinggi
atau program utama akan dikenal pada prosedur yang lebih rendah. Hal itu tidak
berlaku sebaliknya.
o Suatu program atau prosedur dapat memanggil prosedur lain yang merupakan
bagian dirinya

Procedure Pertama(A, B : Real; Var X : Real);

Procedure Pertama_A(E, F : Integer);

Procedure Dua(G, H : Real; Var Z : Real);

Contoh :
Program Latihan6_1;
Uses WinCrt;
Var
x1, x2 : integer;
y1, y2, total : longint;

Procedure Faktorial(n : integer; Var B: longint);


Var
I : integer;
Begin
B:=1;
For i:= 1 to n do B:=B*i;
End;

Procedure Jumlah(a1, a2 : integer; var jum : longint);


Begin
Jum:=a1+a2;
End;

Begin
Writeln(‘Jumlah 2 buah faktorial ‘);
Write(‘Bilangan pertama :’)readln(x1);
Write(‘Bilangan kedua :’)readln(x2);

Modul Pemrograman Pascal - 22


Faktorial(x1,y1);
Faktorial(x2,y2);
Jumlah(y1,y2,total);
Write(‘Jumlah Bil_1 + Bil_2 :’);
Writeln(total);
End.
Program Latihan6_2;
Usec WinCrt;
Type
Tulisan = String;
Var
A, B, C, X1, X2 : Real;
Ket : String[11];

Procedure Akar(A1, A2, A3 : Real; Var X1, X2 : Real);


Var
Det : Real;
Ket : Tulisan;
Begin
Ket :=’Akar Nyata’;
Det := (A2*A2) – (4*A1*A3);
If Det < 0 Then Ket:=’Akar Khayal’
Else
Begin
X1:=(-A2+SQRT(Det))/(2*A1);
X2:=(-A2-SQRT(Det))/(2*A1);
End;
End;

Begin
ClrScr;
Writeln(’Mencari Akar Persamaan AX^2+BX+C’);
Write(‘Nilai A = ‘);Readln(A);
Write(‘Nilai B = ‘);Readln(B);
Write(‘Nilai C = ‘);Readln(C);
Akar(A,B,C,X1,X2);
Writeln(Ket);
If Ket <> ‘Akar Khayal’ Then
Begin
Writeln(‘Akar 1 = ‘,X1:6:2);
Writeln(‘Akar 2 = ‘,X2:6:2);
End;
End.

B. FUNCTION
Subprogram yang mengolah suatu masalah tertentu untuk menghasilkan suatu keluaran
tertentu. Keluaran fungsi harus mempunyai tipe.
Perbedaan utama antara fungsi dengan prosedur adalah prosedur tidak harus mempunyai
keluaran tetapi fungsi harus mempunyai keluaran.
Bentuk:
FUNCTION nama_fungsi(daftar_parameter : tipe): tipe_fungsi;

Keterangan:
o Di dalam fungsi dapat dideklarasikan variabel lain sebagai variabel bantu dalam
perhitungan dan hanya berlaku pada fungsi tersebut.
o Di dalam fungsi boleh ada fungsi lain
o Suatu identifier yang dideklarasikan pada fungsi yang lebih tinggi atau program
utama akan dikenal pada fungsi yang lebih rendah. Hal itu tidak berlaku
sebaliknya.
Modul Pemrograman Pascal - 23
o Suatu fungsi dapat memenggil fungsi lain yang merupakan bagian darinya.

Function Pertama(A, B : Real; Var X : Real);

Function Pertama_A(E, F : Integer);

Function Dua(G, H : Real; Var Z : Real);

Contoh :
Program Latihan6_3;
Uses WinCrt;
Var
p, q, r : integer;
s : real;

Function Faktorial(n : integer): longint;


Var
i, k : longint;
Begin
k:=1;
for i:=1 to n do
k:=k*i;
Faktorial:=k;
end;

Begin
Clrscr;
Writeln('Menghitung Kombinasi P, Q ');
Writeln('Nilai P harus lebih besar dari Q');
Repeat
Write('p:');Readln(p);
Write('q:');Readln(q);
Until p>=q;
r:=p-q;
writeln('Faktorial p : ',Faktorial(p));
writeln('Faktorial q : ',Faktorial(q));
writeln('Faktorial p-q : ',Faktorial(r));
s:=Faktorial(p)/(Faktorial(r)*Faktorial(q));
writeln('Harga kombinasi (',P,'-',Q,') adalah : ',s:6:0);
End.

Parameter Dalam Prosedur dan Fungsi


Dalam pemrograman Pascal nilai-nilai variabel dapat digunakan dalam
modul/operasi/prosedur lain yang membutuhkan, hal ini dapat dilakukan dengan beberapa
cara:
1. Di buat bersifat global
Agar suatu nilai variabel bersifat global dan dapat digunakan oleh prosedur yang ada
dalam modul, maka harus dideklarasikan diatas modul yang menggunakannya.
2. Dikirimkan sebagai parameter
Parameter yang dikirimkan dari modul utama ke modul prosedur disebut dengan
parameter nyata dan parameter yang ada dan dituliskan pada judul prosedur disebut
dengan parameter formal.
o Pengiriman parameter secara nilai
Modul Pemrograman Pascal - 24
Pengiriman secara nilai merupakan pengiriman searah, yaitu dari parameter nyata ke
parameter formal, yang tidak dikirimkan balik dari parameter formal ke parameter
nyata.
Gambaran:
Procedure Hitung(A, B : integer);

Hitung(X,Y);

o Pengiriman parameter secara acuan


Pada pengiriman parameter secara acuan, perubahan yang terjadi pada nilai parameter
formal di prosedur akan mempengaruhi nilai parameter di program utama.
Pengiriman parameter secara acuan merupakan pengiriman secara dua arah.
Gambaran:
Procedure Hitung(Var A, B : integer);

Hitung(X,Y);

o Pengiriman parameter sebagian secara nilai sebagian secara acuan


Parameter yang hanya dibutuhkan pada prosedur saja dpat dikirimkan secara nilai dan
yang dikirimkan balik dilakukan secara acuan.
Gambaran:
Procedure Hitung(A, B : integer Var Z : Real);

Hitung(X,Y,Z);

Modul Pemrograman Pascal - 25


BAB VII
STRUKTUR DATA ARRAY

A. DEKLARASI ARRAY
Data terstruktur terdiri dari ARRAY, RECORD, SET, POINTER, FILE
ARRAY Didefinikan sebagai pengenal untuk menampung sekumpulan data yang bertipe
sama.
Ada 2 cara mendeklarasikan:
1. TYPE tipe_pengenal = ARRAY[batasan_indeks] OF tipedata;
VAR nama_variabel = tipe_pengenal;
2. VAR nama_variabel : ARRAY[batasan_indeks] OF tipe_data;
Catatan:
Batasan indeks harus bertipe integer, character atau tipe yang terdefinisi.
Contoh:
Type
hari=(senin, selasa, rabo, kamis, jumat, sabtu, minggu);
Var
tanda : array[senin..jumat] of integer;
tanda : array[a..z] of real;

1. Array satu dimensi


Merupakan array yang hanya mempunyai satu indeks.
Contoh:
Var tanda : array[1..10] of integer;
Contoh Program Array satu dimensi:
Program Latihan7_1;
Uses WinCrt;
Var
A : Array[1..10] of Real;
Total : Real;
HargaRata : Real;

Procedure Masukan;
Var
I : Integer;
Begin
Writeln;
For I:= 1 To 10 Do
Begin
Write('Data',I,':');Readln(A[I]);
End;
End;

Procedure Rerata;
Var
I : Integer;
Begin
Total:=0;
For I:=1 To 10 Do
Begin
Total :=Total + A[I];
End;
HargaRata:=Total/10;
End;

Begin
Writeln('Program Rata-Rata');
Modul Pemrograman Pascal - 26
Masukan;
Rerata;
Writeln('Harga Rata-rata :', HargaRata:6:4);
End.

2. Array dua dimensi


Array yang mempunyai dua buah indeks, dipakai untuk mempermudah pengertian posisi,
ciri khas atau arti dari nama variabel tsb.
Contoh :
Var x : array[1..2, 1..3] of integer; berarti bahwa variabel x mempunyai 6 suku.

Contoh Program Array Dua Dimensi:


Program Latihan7_2;
Uses WinCrt;
Type Larik = Array[1..25,1..25] of real;
Var
i,j,k : byte;
m,n,l : byte;
a, b, c : larik;
Begin
clrscr;
Write('Banyak baris matriks pertama :');Readln(M);
Write('Banyak kolom matriks pertama/baris matriks kedua :');Readln(N);
Write('Banyak kolom matriks kedua :');Readln(L);
Writeln;
Writeln('Matriks pertama');
For i:=1 to M do
begin
for j:=1 to N do
Begin
write('Nilai[',i,',',j,']:');Readln(A[i,j]);
end;
end;
Writeln('Matriks kedua');
For i:=1 to N do
begin
for j:=1 to L do
Begin
write('Nilai[',i,',',j,']:');Readln(B[i,j]);
end;
end;
Writeln('Perkalian Matriks');
For i:=1 to M do
begin
for j:=1 to N do
Begin
C[i,j]:=0;
for k:= 1 to L do
C[i,j]:=C[i,j]+A[i,k]*B[k,j];
end;
end;
writeln('hasil perkalian');
writeln;
for i:=1 to M do
Begin
for j:=1 to L do write(C[i,j]:9:2);
writeln;
end;
end.

Modul Pemrograman Pascal - 27


Contoh Program Array:
Program Latihan7_3;
Uses WinCrt;
const
maks_siswa = 20;
maks_tes = 4;
type
PenampungNilai = array[1..maks_siswa] of array[1..maks_tes] of real;
var
DataNilai :PenampungNilai;
JumSiswa, JumTes :byte;

Procedure PemasukanData(var JumSiswa, Jumtes : byte);


var
indeks_siswa, indeks_tes : byte;
begin
clrscr;
write('jumlah siswa(1..20) :');readln(JumSiswa);
write('cacah tes (1..4) :');readln(JumTes);
For Indeks_Siswa :=1 to JumSiswa do
Begin
writeln('data siswa ke-',Indeks_Siswa);
For indeks_tes:=1 to JumSiswa do
begin
write('nilai tes ke-',Indeks_Tes,':');
readln(DataNilai[Indeks_Siswa,Indeks_Tes]);
end;
end;
end;

Procedure Proses_Cetak_Data(JumSiswa, JumTes : Byte);


var
indeks_siswa, indeks_tes : byte;
Jumlah, Rata_rata : real;
kelulusan : string[5];
begin
clrscr;
writeln('daftar nilai ;');writeln;
write('No':4);
for indeks_tes:=1 to jumTes do
write(' nilai ke-',Indeks_tes);
writeln('rata-rata':11,' keterangan');
for indeks_siswa:=1 to jumSiswa do
begin
jumlah:=0;
for indeks_tes:=1 to jumTes do
jumlah:=jumlah+dataNilai[Indeks_siswa, indeks_tes];
Rata_rata:=jumlah/jumTes;
if rata_rata>=60 then
kelulusan :='lulus'
else
kelulusan:='tidak';
write(indeks_siswa:2);
for indeks_tes:=1 to Jumtes do
write(DataNilai[Indeks_Siswa, Indeks_Tes]:11:2);
writeln(Rata_rata:11:2,kelulusan:10);
end;
end;
begin
PemasukanData(JumSiswa,JumTes);
Proses_Cetak_Data(JumSiswa, JumTes);Readln;
end.

Modul Pemrograman Pascal - 28


Contoh Program Array:
Program Latihan7_4;
Uses WinCrt;
Type Larik = Array[1..25,1..25] of real;
Var
i,j,k : byte;
m,n,l : byte;
a, b, c : larik;
Begin
clrscr;
Write('Banyak baris matriks pertama :');Readln(M);
Write('Banyak kolom matriks pertama/baris matriks kedua :');Readln(N);
Write('Banyak kolom matriks kedua :');Readln(L);
Writeln;
Writeln('Matriks pertama');
For i:=1 to M do
begin
for j:=1 to N do
Begin
write('Nilai[',i,',',j,']:');Readln(A[i,j]);
writeln;
end;
end;
Writeln('Matriks kedua');
For i:=1 to N do
begin
for j:=1 to L do
Begin
write('Nilai[',i,',',j,']:');Readln(B[i,j]);
writeln;
end;
end;
Writeln('Perkalian Matriks');
For i:=1 to M do
begin
for j:=1 to N do
Begin
C[i,j]:=0;
for k:= 1 to L do
C[i,j]:=C[i,j]+A[i,k]*B[k,j];
end;
end;
clrscr;
writeln('hasil perkalian');
writeln;
for i:=1 to M do
Begin
for j:=1 to L do write(C[i,j]:9:2);
end;
end.

B. OPERASI PADA ARRAY


Operasi Memasukkan dan Mengambil Nilai
Bila array sudah kita definisikan dan sudah diberi suatu nama, maka dapat kita manfaatkan
sesuai fungsinya sebagai objek data.
Operasi memasukkan nilai adalah operasi untuk memanfaatkan nilai data ke dalam elemen-
elemen array. Biasanya hal ini dilakukan dengan operasi penugasan dengan objek array
terletak sebagai operan disebelah kiri tanda :=
Operasi mengambil nilai adalah operasi untuk mendapatkan /membaca nilai dari suatu array.

Modul Pemrograman Pascal - 29


Contoh :
Nilai[5] := 70;
Nilai[7] := 80;
If (nilai[5] > nilai[7] then
Nilai_max := nilai[7]
Else nilai_max := nilai[5];
Nilai[7] := nilai[7] + 20;
Writeln(nilai[7]);
Writeln(‘Rata-rata = ‘ , ratarata(nilai));

Operasi Mengakses Array


Operasi mengakses suatu objek data array adalah operasi untuk memasukkan dan membaca
nilai array baik secara keseluruhan ataupun pada suatu elemen data array tertentu. Operasi ini
dapat dilakukan secara :
1. Acak/Random
Setiap elemen array dapat diperlakukan secara individual dari elemen-elemen lainnya.
Misalkan dalam memasukkan data, urutan array nilai[7] dapat dimasukkan terlebih
dahulu daripada elemen-elemen lainnya, meskipun pada akhirnya semua elemen array
akan diproses.

2. Berurutan/Sequential
Struktur array yang elemen-elemennya tersusun secara berurutan, memungkinkan kita
mengakses sebagian atau seluruh elemen array secara berurutan.

Diskripsi Mengakses Array:


D1 D2 D3 D4 ..... Dmax-2 Dmax-1 Dmax
Keterangan:
Elemen-elemen array diakses mulai dari indeks array pertama, diteruskan ke indeks
berikutnya yang lebih besar hingga terakhir (max).

Diskripsi Array Linier:


Dmax Dmax-1 Dmax-2 Dmax-3 ..... D3 D2 D1
Keterangan:
Elemen-elemen array diakses mulai dari indeks terakhir (max), diteruskan ke indeks
berikutnya yang lebih kecil hingga indeks terkecil.

Diskripsi Array Melingkar:


Di+1 ...... Dmax-1 Dmax D1 ..... Di-1 Di
Keterangan:
Elemen-elemen array diakses mulai dari indeks array tertentu (indeks awal), diteruskan ke
indeks berikutnya yang lebih besar hingga indeks terakhir (max), dilanjutkan indeks
pertama, dan dilanjutkan lagi hingga indeks sebelum indeks awal.

3. Keseluruhan
Selain mengakses komponen rray, kita juga dapat mengakses array secara keseluruhan
yang akan mempengaruhi semua elemennya sekaligus. Misalkan A dan B adalah dua
variabel array yang tipenya sama, dan jumlah elemennya sama, maka kita dapat
melakukan operasi penugasan A:=B yang berarti memasukkan nilai dari setiap elemen
array B ke semua elemen A pada indeks-indeks yang bersesuaian.

Modul Pemrograman Pascal - 30


Contoh-contoh Program Array
Program Rataarraysatudimensi;
Uses WinCrt;
CONST
No = 6;
Tab = ' ';
VAR
Nilai:ARRAY[1..No] OF REAL;
Rata_rata, Jum_Nilai:REAL;
I :INTEGER;
BEGIN
{ Masukan Nilai array }
{ --------------------- }
FOR I:= 1 TO No DO
BEGIN
WRITE('Masukan Nilai ke ', I,': ');
READLN(Nilai[I]);
END;
{ Hitung Jumlah }
{ ----------------- }
Jum_Nilai:= 0;
FOR I:= 1 TO No DO
Jum_Nilai:= Jum_Nilai + Nilai[I];
{ Hitung Rata_rata }
{ --------------------- }
Rata_rata:= Jum_Nilai / No;
{ Tampil Hasil }
{ --------------- }
WRITELN;
WRITELN(Tab,'No #');
WRITE(' ');
FOR I:= 1 TO No DO
WRITE(I:7);
WRITELN;
WRITE(Tab);
FOR I:= 1 TO No DO
WRITE('-------');
WRITELN;
WRITE('NilaiS ');
FOR I:= 1 TO No DO
WRITE(Nilai[I]:7:2);
WRITELN;
WRITE(Tab);
FOR I:= 1 TO No DO
WRITE('-------');
WRITELN;
WRITELN(Tab,'Sum of Nilais = ', Jum_Nilai:0:2);
WRITELN(Tab,'Rata_rata of Nilais = ', Rata_rata:0:2);
END.

Modul Pemrograman Pascal - 31


PROGRAM Nilai_Mahasiswa(INPUT,OUTPUT);
Uses WinCrt;
CONST
JumKlas = 3;
JumMah = 4;
Tab = ' ';
Garis = '-';
JumGaris = 23;
TYPE
NilaiArray = ARRAY[1..JumMah, 1..JumKlas] OF REAL;
RataArray = ARRAY[1..JumMah] OF REAL;
VAR
Nilai :NilaiArray;
Rata2 :RataArray;
JumNilai :REAL;
HitMah, HitNilai, Hit :INTEGER;

BEGIN
{ Baca Nilai Array }
{ --------------------------- }
FOR HitMah:= 1 TO JumMah DO
BEGIN
WRITELN;
WRITELN('Nilai Mahasiswa', HitMah,': ');
FOR HitNilai:= 1 TO JumKlas DO
BEGIN
WRITE('Masukan Nilai untuk klas ', HitNilai,': ');
READLN(Nilai[HitMah, HitNilai]);
END;
END;
{ Hitung Rata-rata }
{ --------------------------- }
FOR HitMah:= 1 TO JumMah DO
BEGIN
JumNilai:= 0;
FOR HitNilai:= 1 TO JumKlas DO
JumNilai:= JumNilai + Nilai[HitMah, HitNilai];
Rata2[HitMah]:= JumNilai/JumKlas;
END;
{ Tampilan Hasil }
{ ------------ }
WRITELN;
WRITELN(Tab, 'Mahasiswa #', Tab, 'Rata2');
WRITE(Tab);
FOR Hit:= 1 TO JumGaris DO
WRITE(Garis);
WRITELN;
FOR HitMah:= 1 TO JumMah DO
WRITELN(Tab, HitMah:3, Tab, Rata2[HitMah]:12:2);
WRITE(Tab);
FOR Hit:= 1 TO JumGaris DO
WRITE(Garis);
WRITELN;
END.

Modul Pemrograman Pascal - 32


BAB VII
RECORD

Record adalah struktur data yang tersusun atas elemen-elemen yang jumlahnya
tretentu dan tipe data elemennya dapat berbeda-beda. Elemen dalam suatu record disebut
field.
Record dan array merupakan struktur data yang panjangnya tertentu (statis), namun demikian
terdapat perbedaan diantara keduannya, yakni:
1. Elemen record bersifat heterogen, yaitu campuran benerapa tipe data, sedangkan elemen
array bersifat homogen
2. Elemen record didefinisikan dengan simbol/identifier sedangkan elemen array
diidentifikasi dengan indeks.

Deklarasi
Record dideklarasikan dengan statemen record dan end.
Bentuk Umum :
Type tipe_record = record;
Nama_field_1 : tipe_field_1;
Nama_field_2 : tipe_field_2;
............... .........
Nama_field_n : tipe_field_n;
End;
Var nama_record : tipe_record;

Keterengan :
o Tipe_record adalah nama/identifier yang digunakan untuk tipe jenis record yang dibuat.
o Nama_record adalah variabel bertipe record yang digunakan untuk mengidentifikasi
record suatu objek secara keseluruhan
o Nama_field adalah nama variabel yang digunakan untuk mengidentifikasi sebuah atribut
yang menjadi elemen record. Setiap atribut diidentifikasi dengan nama yang berbeda.
o Tipe_field adalah tipe data untuk setiap atribut elemen record.

Contoh Deklarsi Record:


1. Untuk menyimpan nilai ujian mid dan ujian akhir dari 10 mahasiswa, maka dapat dibuat
record rec_ujian dan kemudian dibuat array nilai bertipe rec_ujian.
Contoh:
Const
mak_mhs = 10;
Type
rec_ujian = record;
mid : integer;
akhir : integer
end;
Var
Nilai : array[1..mak_mhs] of rec_ujian;

2. Untuk menyimpan data hari/tanggal, dapat dideklarasikan record tipe_tangal dengan


elemen tanggal, bulan dan tahun.
Contoh :
Type
Tipe_tanggal = record;
Tanggal : 1..31;
Bulan : 1..12;
Tahun : 1990..2010;
End;

Modul Pemrograman Pascal - 33


3. Record untuk menyimpan data-data sebuah bus antar propinsi yang berjumlah kursi 32
pada satu kali perjalanan, dapat di deklarasikan sebagai berikut:
Contoh:
Type
Rec_bus = Record;
No_bus : string[8];
Tgl_perjalanan : tipe_tanggal;
Sopir_1 : string;
Sopir_2 : string;
Kondektur : string;
Nama_penumpang : array[1..32] of string;
Jumlah_penumpang : integer;
End;
Var
Data_bus : rec_bus;

Operasi pada Record


1. Mengakses elemen record notasi titik
Elemen record (field) dapat diakses dengan notasi titik, yaitu menuliskan nama record
diikuti tanda titik(.) dan nama field’
Secara umum dapat dituliskan sebagai berikut:
Nama_record.nama_field
Contoh:
Nilai[6].Nama :=’Lili’;
Nilai[6].Mid :=75;
Nilai[6].Akhir := 90;
Writeln(Nilai[5].Akhir);
For i:= 1 to 10 do
Begin
Nilai[i].Akhir := (Nilai[i].Mid * 2 + Nilai[i].Akhir) div 3;
Writeln(Nilai[i].nama, Nilai[i].Mid, Nilai[i].Akhir);
End;
2. Mengakses record dengan pernyataan with
Bentuk umumnya adalah:
With nama_record do
Pernyataan yang mengakses nama_field
o Bila nama record sudah disebut, maka pernyataan yang mengakses nama field dari
elemen record sesudah pernyataan do tidak perlu menyebut nama recordnya.
o Pernyataan sesudah do tidak harus perintah tunggal, namaun dapat berupa pernyataan
yang kompleks yang terletak di antara begin .....end, sehingga akan mengurangi
penyebutan nama record secara berulang-ulang.
Contoh:
With nilai[6] do
Begin
Nama : ‘nana’;
Mid : 75;
Akhir : 90;
End;
With nilai[5] do writeln(akhir);
For i:= 1 to 10 do
With nilai[i] do
Begin
Akhir :=(Nid * 2 + Akhir) div 3;
Writeln(nama, Mid, Akhir)
End;

Modul Pemrograman Pascal - 34


3. Mengakses record dalam record
Misalkan untuk mengisikan data 11 ke variabel bulan pada Tgl_perjalanan, variabel
Data_Bus dapat dilakukan dengan cara:
o Data_Bus.Tgl_Perjalanan.Bulan := 11;
o With Data_Bus do Tgl_Perjalanan.Bulan := 11;
o With Data_Bus.Tgl_Perjalanan do Bulan := 11;

4. Mengakses record secara keseluruhan


Record juga dapat diakses secara keseluruhan dengan menggunakan nama record yang
juga akan berpengaruh terhadap semua elemen record didalamnya.
Misalkan Data_Bus1 dan Data_Bus2 adalah dua buah variabel record yang tipenya sama,
maka dapat berlaku pernyataan :
Data_Bus2 := Data_Bus1;
Yang akan berakibat semua elemen record pada variabel data_bus2 akan diisi dengan nilai
dari semua elemen record data_bus1 pada field-field yang bersesuaian.

Contoh:
Program Latihan7_1;
Uses WinCrt;
Const JumMhs = 10;
Type Rec_Ujian = Record
NoMhs : String[10];
Nama : String[15];
Mid : integer;
Akhir : Integer;
End;
Type RangeIndek = 1..JumMhs;
TipeData = Rec_Ujian;
TipeArray = Array[RangeIndek] of TipeData;
Var Nilai : TipeArray;

Procedure Inisialisasi_data(var ArData : TipeArray);


Var i : RangeIndek;

Begin
for i:= 1 to JumMhs do
with ArData[i] do
begin
NoMhs := '00.00.0000';
Nama := 'xxxxxxxxxxxxxx';
Mid := 0;
Akhir := 0;
end;
end;

Procedure CetakData(Data : TipeData);


Begin
With Data do
Begin
writeln(' No Mhs : ',NoMhs);
writeln(' Nama : ',Nama);
writeln(' Nilai Mid : ',Mid);
writeln(' Nilai Akhir : ',Akhir);
End;
End;

Procedure Cetak_Semua_Data(ArData : TipeArray);


Var i : integer;
Begin
Modul Pemrograman Pascal - 35
for i := 1 to JumMhs do
With ArData[i] do
writeln(NoMhs:10, Nama:16, Mid:10, Akhir:10);
End;

Procedure Mengisi_Identitas(var Data: TipeData);


Begin
Gotoxy(1,5);Writeln('No Mhs : ',Data.NoMhs);
Gotoxy(1,6);Writeln('Nama : ',Data.Nama);
Gotoxy(12,5);Readln(Data.NoMhs);
Gotoxy(12,6);Readln(Data.Nama);
End;

Procedure Mengisi_Nilai(var data : TipeData);


Begin
with data do
begin
Gotoxy(1,5);Writeln('No Mhs : ',NoMhs);
Gotoxy(1,6);Writeln('Nama : ',Nama);
Gotoxy(1,7);Writeln('Nilai Mid : ',Mid);
Gotoxy(1,8);Writeln('Nilai Akhir : ',Akhir);
Gotoxy(15,7);Readln(Data.Mid);
Gotoxy(15,8);Readln(Data.Akhir);
end;
end;

Procedure Mengisi_data(var ArData : tipeArray; mode : integer);


var i : integer;
begin
Repeat
Clrscr;
writeln('Mengisi Data ke Record.Masukkan No.Indek :');
write('Masukkan No.Indek : ');
readln(i);
until i in[1..10];
case mode of
1 : begin
writeln('Memasukkan Identitas mahasiswa ');
Mengisi_Identitas(ArData[i]);
end;
2 : begin
writeln('Memasukkan Nilai mahasiswa ');
Mengisi_Nilai(ArData[i]);
end;
end;
end;

Procedure Cetak_Data(ArData : TipeArray; Mode : integer);


var j : integer;
begin
Gotoxy(20,1);writeln('Mencetak Data Nilai');
case mode of
1 : begin
write('Memasukkan Indek record yg akan dicetak :');
readln(j);
CetakData(ArData[j]);
end;
2 : begin
writeln(' Daftar Nilai Struktur Data 10 Mahasiswa');

Writeln('======================================================');
writeln('NoMhs Nama Nilai Mid Nilai Akhir');
Writeln('======================================================');
Modul Pemrograman Pascal - 36
Cetak_semua_data(ArData);
writeln('======================================================');
end;
end;
writeln;
repeat until keypressed;
end;

Procedure Layar_Menu_Utama;
var pilihan : char;
selesai : boolean;
begin
repeat
clrscr;
writeln(' Menu Utama');
writeln('1. Inisialisasi Data');
writeln('2. Isi Identitas Mahasiswa');
writeln('3. Memasukan data nilai');
writeln('4. Mencetak Data Tertentu');
writeln('5. Mencetak Daftar Nilai');
writeln('6. Selesai');
writeln;
write('pilihan [1..6] :');readln(pilihan);
clrscr;
selesai:=false;
clrscr;
case pilihan of
'1' : Inisialisasi_Data(Nilai);
'2' : Mengisi_data(Nilai,1);
'3' : Mengisi_data(Nilai,2);
'4' : Cetak_data(Nilai,1);
'5' : Cetak_data(Nilai,2);
'6' : selesai:=true;
end;
until selesai;
writeln('selesai');
end;
begin
layar_menu_utama;
end.

RECORD VARIANT
Beberapa contoh diatas memberikan gambaran record dengan tipe data dari elemen bersifat
tetap. Suatu alternatif yang lain yaitu berupa variant record, yang dimaksudkan untuk
menghemat memori. Sebab dengan alternatif ini, data yang berbeda dapat menempati lokasi
memori yang sama.
Bentuk umum :
Type
PengenalRecord = Record
Field_1 : tipe_field_1;
Field_2 : tipe_field_2;
CASE pilihan : tipe_pilihan OF
Pilihan1 : (field_4 : tipe_field_4;
field_5 : tipe_field_5;
............);
Pilihan2 : (field_6 : tipe_field_6;
field_7 : tipe_field_7;
............);
Pilihan_n : (...........: .........);
End;
Field_7 : tipe_field_7

Modul Pemrograman Pascal - 37


End;
Bentuk umum record variant menunjukkan bahwa record dapat terdiri dari 2 bagian yaitu:
• Bagian Tetap, bagian record yang field-fieldnya tetap.
• Bagian berubah, bagian record yang field-fieldnya bisa berubah berdasarkankondisi
tertentu dengan pernyataan CASE.

Misalkan:
Suatu record pegawai didefinisikan sbb:
Type
RecordPegawaiTetap = Record
NIP : String[6];
Nama : String[15];
GajiPokok : longint;
JmlJamLembur : Byte;
End;
RecordPegawaiHonorer = Record
NIP : String[6];
Nama : String[15];
GajiPokok : longint;
JmlJamLembur : Byte;
End;
Untuk menghemat memori, definisi kedua record dapat dijadikan satu menggunakan Record
Variant menjadi:
Type
StatusPegawai = (Tetap, Honorer);
RecordPegawaiTetap = Record
NIP : String[6];
Nama : String[15];
CASE Status : StatusPegawai OF
Tetap : (GajiPokok : LONGINT;
JmlJamLembur : Byte);
Honorer : (JmlJamKerja : Byte);
End;
Var
DataPegawai : RecordPegawai;

Contoh Program :
Program Latihan7_2;
Uses WinCrt;
Type
StatusPegawai = (Tetap, Honorer);
RecordPegawai = Record
NIP : String[6];
Nama : String[15];
CASE Status : StatusPegawai OF
Tetap : (GajiPokok : LONGINT;
JmlJamLembur : Byte);
Honorer : (JmlJamKerja : Byte);
End;
Var
DataPegawai : RecordPegawai;
Jawaban : Char;
GajiBersih : real;
Upah_Per_Jam : Real;

Begin
ClrScr;
With DataPegawai Do
Begin
write('Nomor Induk Karyawan : ');

Modul Pemrograman Pascal - 38


readln(NIP);
write('Nama Karyawan : ');
readln(Nama);
write('Upah per jam : ');
readln(Upah_Per_jam);
write('Pegawai Tetap [Y/T] : ');
readln(Jawaban);
If (jawaban= 'Y') OR (jawaban='y') then
status:=tetap
else
status := honorer;
Case Status of
tetap : Begin
Write('Gaji Pokok : ');
Readln(GajiPokok);
Write('Jumlah Jam Lembur : ');
Readln(JmlJamLembur);
gajiBersih:=GajiPokok+(Upah_Per_Jam * JmlJamLembur);
End;
Honorer : Begin
Write('Jumlah Jam Kerja : ');
Readln(JmlJamKerja);
gajiBersih:=Upah_Per_Jam * JmlJamKerja;
End;
End;
writeln;
writeln('Gaji Total = Rp ',gajiBersih:10:0);
end;
Readln;
end.

Program Latihan7_3;
Uses WinCrt;
Const
Garis ='------------------------------------------------------------';

Type
StatusPegawai = (Tetap, Honorer);
DataRec = Record
Nama : String[30];
NIP : String[12];
Tot, Rata : Real;
GajiBulan : Array[1..12] of Real;
gajiBersih : Real;
UpahPerjam : Real;
CASE Status : StatusPegawai OF
Tetap : (GajiPokok : LONGINT;
JmlJamLembur : Byte);
Honorer : (JmlJamKerja : Byte);
End;
Var
Gaji : Array[1..100] of DataRec;
i, j, N : integer;
Tot, Jumlah, Bonus : Real;
Jawaban : Char;

Begin
Clrscr;
Write('Jumlah Karyawan : ');
Readln(N);
For i:=1 to n do
With Gaji[i] do
Begin
Modul Pemrograman Pascal - 39
Writeln('Data ke-',i);
Write('Nama Karyawan : ');
Readln(Nama);
Write('NIP : ');
Readln(NIP);
Write('Pegawai Tetap [Y/T] : ');
Readln(Jawaban);
Write('Upah Per Jam : ');
Readln(UpahPerJam);
Writeln('Gaji tahun ini :');
Tot:=0;
For j:= 1 to 12 do
Begin
Write('Gaji Bulan ke-',j,' : ');
Readln(GajiBulan[j]);
Tot:=Tot+GajiBulan[j];
end;
Rata:=Tot/12;
Bonus:=0.15*Tot;

If (jawaban= 'Y') OR (jawaban='y') then


status:=tetap
else
status := honorer;
Case Status of
tetap : Begin
Write('Gaji Pokok : ');
Readln(GajiPokok);
Write('Jumlah Jam Lembur : ');
Readln(JmlJamLembur);
GajiBersih:=GajiPokok + (UpahPerJam * JmlJamLembur);
End;
Honorer : Begin
Write('Jumlah Jam Kerja : ');
Readln(JmlJamKerja);
GajiBersih:=UpahPerJam * JmlJamKerja;
End;

End;
End;

Writeln(Garis);
Writeln(' Daftar Gaji Karyawan PT Express Gembol ');
Writeln(' No Nama NIP Gaji Rata2 Gaji Bersih Bonus
Jumlah ');
Writeln(Garis);

For i:=1 to n do
With Gaji[i] do
Begin
Write(i:3,Nama:10,NIP:5);
Jumlah:=GajiBersih+Bonus;
Write(Rata:13:2,GajiBersih:13:2,Bonus:13:2,Jumlah:13:2);
Writeln;
End;
Writeln(Garis);
End.

Modul Pemrograman Pascal - 40


POINTER

Pada pokok bahasan array telah dijelaskan bahwa tipe data array adalah tipe data yang
bersifat statis baik ukuran maupun urutannya. Pada saat program dijalankan, memori yang
dipakai oleh suatu variabel didak dapat dihapus meskipun variabel tersebut sudah tidak
digunakan lagi. Untuk memecahkan masalah tersebut, maka maka kita dapat mengunakan
variabel pointer yang bersifat dinamis. Variabel pointer akan dialokasikan hanya pada saat
dibutuhkan dan setelah tidak digunakan dapat didealokasikan lagi.
Pengertian Pointer
Varibel Pointer merupakan suatu variabel yang menyimpan alamat suatu objek/variabel lain
berupa data tunggal atau sebuah record. Karenanya variabel pointer sebenarnya bukan berisi
data melainkan berisi alamat dari suatu data.
Misalkan terdapat contoh pointer sbb:

R Rini

S null
Vita
T Heri

U Uut

R adalah pointer yang menunjuk record Rini dan V adalah pointer yang menunjuk record
Vita. Pointer bersifat flekibel, misalkan dua pointer dapat menunjuk pada record yang sama,
seperti T dan U yang menunjuk record Uut. Namun pointer juga dapat tidak menunjuk
kesuatu record apapun.
Deklarasi
Bentuk Umum deklarasi Pointer adalah:
Type
Pengenal = ^Simpul;
Simpul = tipe;

Deklarasi pointer untuk beberapa tipe data:


1. Pointer untuk Integer
Bentuk:
Type
tipe_variabel = ^integer;
Var
nama_variabel : tipe_variabel;
atau
Var
nama_variabel : ^integer;

Contoh :
Type
ptr = ^integer;
Var
A, b : ptr;
X : ^integer;

Modul Pemrograman Pascal - 41


2. Pointer untuk Real
Bentuk:
Type
tipe_variabel = ^real;
Var
nama_variabel : tipe_variabel;
atau
Var
nama_variabel : ^real;
Contoh :
Type
ptr = ^real;
Var
a, b, c, d : ptr;
X : ^real;

3. Pointer untuk String dan Karakter


Bentuk:
Type
tipe_variabel_1 = ^string[bil_integer];
tipe_variabel_2 = ^char;
Var
nama_variabel_1 : tipe_variabel_1;
nama_variabel_2 : tipe_variabel_2;
atau
Var
nama_variabel_1 : ^string[bil_integer];
nama_variabel_2 : ^char;
Contoh :
Type
Ptr_1 = ^string[10];
Ptr_2 = ^char;
Var
A, b : Ptr_1;
X, y : Ptr_2;
C : ^char;
D : ^string[5];

4. Pointer untuk Record


Bentuk:
Type
nama_tipe = ^nama_record;
^nama_record = RECORD
field_1 : tipe_field;
field_2 : tipe_field;
....... : ......;
field_n : tipe_field;
END;
Var
nama_variabel : nama_tipe;
Contoh:
Type
Ptr_mahasiswa = ^mahasiswa;
Mahasiswa = RECORD
Nama : string[20];
NIM : integer;
Nilai : integer;
END;
Var
Data_mahasiswa : ptr_mahasiswa;
Modul Pemrograman Pascal - 42
Membuat Pointer
Untuk mengalokasikan simpul dalam pengingat, statemen yang dipakai adalahstatemen new
yang mempunyai bentuk umum:
New(P1);
New(P2);

Operasi pada Pointer


Secara umum ada 2 operasi dasar yang dapat dilakukan terhadap data yang bertipe pointer,
yaitu:
1. Mengkopi pointer
2. Mengkopi isi simpul

Misalkan dideklarasikan suatu tipe pointer sbb;


Type
Simpul = ^data;
Data = RECORD
Nama : string;
Alamat : string;
END;
Var
T1, T2 : simpul;

Pada deklarasi tersebut, pointer T1 dan T2 mempunyai deklarasi simpul yang sama sehingga
memenuhi syarat untuk operasi pointer.
Jika kita berikan statemen:
New(T1);
New(T2);
Maka kita mempunyai 2 simpul, yaitu:

T1 ? ?

T2 ? ?
Dengan menggunakan statemen:
T1^.Nama : ‘AAA’;
T2^.Alamat : ‘SURABAYA’;

Maka keadaan 2 simpul diatas berubah :

T1 AAA SURABAYA T2 ? ?

• Operasi Mengkopi Pointer


Operasi mengkopi pointer akan mengakibatkan sebuah simpul akan ditunjuk oleh lebih
dari satu pointer.
Bentuk deklarasi statemen:
T1 := T2;
Setelah statemen tersebut dijalanka, keadaan memori berubah menjadi:

T1 AAA SURABAYA

T2 ? ???

Modul Pemrograman Pascal - 43


Simpul yang semula ditunjuk oleh T2 menjadi lepas dan tdak dapat diakses lagi karena
tidak diketahui lagi lokasinya, kecuali ada pointer lain yang menunjuk.
• Menkopi Isi Simpul
Operasi menkopi isi simpul akan mengakibatkan dua atau lebih simpul yang ditunjuk oleh
pointer yang berbeda akan memiliki isi yang sama.
Bentuk deklarasi statemen:
T2^ := T1^;
Maka hasil yang diperoleh adalah:
T1 AAA SURABAYA

T2 AAA SURABAYA
Pada operasi perbandingan simpul semua relasi dapat digunakan.
Contoh:
If T1^ = T2 then
While T1^ <> T2^ then
• Menghapus Pointer
Setelah suatu pointer dihapus, maka lokasi yang semula ditempati oleh simpul yang
ditunjuk oleh pointer tersebut bebas dan dapat digunakan oleh peubah yang lain.
Deklarasi:
Dispose(variabel bertipe pointer)
Contoh:
Dispose(T2);
Contoh Program Pointer:
Program Pointer_Record;
Uses WinCrt;
Type
PenunjukKaryawan = ^CatatanKaryawan;
CatatanKaryawan = Record
Kode : String[5];
Nama : String[25];
Gaji : Real;
End;
Var
DataKaryawan : Array[1..5] of PenunjukKaryawan;
i : Byte;

Begin
Writeln('Masukkan 5 buah data karyawan ');
For i:=1 to 5 do
Begin
Writeln;
Writeln('karyawan ke :',i:2);
New(DataKaryawan[i]);
With DataKaryawan[i]^ do
Begin
Write('Kode karyawan ? ');Readln(Kode);
Write('Nama karyawan ? ');Readln(Nama);
Write('Gaji karyawan ? ');Readln(Gaji);
end;
end;

writeln;
writeln('Data Karyawan diambil dari heap:');
writeln('======================================');
Writeln(' Kode Nama Gaji ');
Writeln('--------------------------------------');
For i:=1 to 5 do

Modul Pemrograman Pascal - 44


with DataKaryawan[i]^ do
writeln(Kode:5,Nama:25,Gaji:12:2);
End.
Membuat Daftar Berantai (Linked List)
Pembuatan Linked List di mulai dengan mengatur agar pointer yang merupakan kepala dari
List tidak menunjuk ke lokasi manapun. Hal ini dapat dilakukan dengan memberikan nilai
NIL kepada kepala pointer.

Contoh:
PointerKepala
NIL

PtrBaru variabel dinamis

jojon direktur ?
Nama Jabatan next

Urutan Statemen yang digunakan;


1. PointerKepala:=NIL;
2. NEW(PtrBaru);
3. PtrBaru^.Nama:=’Jojon’;
4. PtrBaru^.Jabatan:=’direktur’;
5. PtrBaru^.Next:=PointerKepala;
6. PointerKepala:=PtrBaru;

Jika kita ingin menambahkan simpul, maka urutan statemennya adalah:


1. NEW(PtrBaru);
2. PtrBaru^.Nama:=’Kartolo’;
3. PtrBaru^.Jabatan:=’Supervisor’;
4. PtrBaru^.Next:=PointerKepala;
5. PointerKepala:=PtrBaru;

Menampilkan Isi Linked List


Isi daftar berantai dapat ditampilakn dengan cara sebagai berikut:
• Sebuah variabel pointer (PtrSementara) diatur supaya menunjuk lokasi yang
ditunjuk oleh PtrKepala.
• Selama PtrSementara tidak berisi NIL, maka:
• Cetak isi simpul yang ditunjuk oleh PtrSementara
• PtrSementara digeser agar menunjuk lokasi ang ditunjuk oleh pointer Next.

Pada proses menampilkan isi daftar berantai, pointer sementara (PtrSementara)


diperlukan dengan maksud agar PtrKepala tetap menunjuk lokasi yang sama baik sebelum
atau sesudah isi daftar berantai ditampilkan.
Dalam bentuk yang sederhana, implementasi cara menampilkan isi daftar berantai adalah
sebagai berikut:
PtrSementara :=PtrKepala;
While PtrSementara <> Nil Do
Begin
Writeln(PtrSementara^.Nama,PtrSementara^.Jabatan);
PtrSementara:=PtrSementara^.Next;
End;

Modul Pemrograman Pascal - 45


Menghapus Variabel Dinamis
Dalamstruktur data dinamis, kadang-kadang dilibatkan operasi untuk melakukan
pengahausan terhadap data. Dalam hal ini, variabel dinamis yang menyimpan data yang
dihapus perlu dibuang, dengan maksud supaya lokasi dari variabel dinamis tersebut bisa
digunakan alokasi variabel dinamis lainnya(kalau ada penciptaan variabel dinamis lagi).
Variabel dinamis sebenarnya disimpan dalambagian memori yang khsus digunakan untuk
alokasi variabel dinamis yang disebut heap. Dalam heap terdapat suatu pointer bawaan yang
bersifat global dengan nama HeapPtr. Pointer ini selalu menunjuk memori terendah dalam
heap yang belum digunakan untuk alokasi variabel dinamis.
Untuk melakukan pengahapusan terhadap variabel dinamis dapat dilakukan dengan dua cara:
1. Mark dan Release
Prosedur Mark mempunyai bentuk:
Mark(var_ptr)
Dengan var_ptr berupa variabel bertipe pointer. Prosedur ini dipakai untuk menyimpan isi
pointer heap (HeapPtr) ke dalam variabel var_ptr.
Prosedur Release memiliki bentuk:
Release(var_ptr)
Kalau prosedur ini dieksekusi, maka akan menebabkan seluruh variabel dinamis yang terletak
antara yang ditunjuk oleh var_ptr sampai sebelum ditunjuk oleh heap_ptr akan dihapus
Contoh:
New(ptr1);
New(ptr2);
Mark(PtrAwal);
New(ptr3);
New(ptr4);
New(ptr5);

Keterangan:
Saat pernyataan Mark(PtrAwal) dijalankan, PtrAwal akan menunjuk lokasi yang terletak
sesudah yang ditunjuk oleh pointer Ptr2.
Selanjutnya New(Ptr3) membuat Ptr3 menunjuk lokasi yang sama dengan yang ditunjuk
oleh PtrAwal.
Setelah adanya pernyataan New(Ptr5) maka heapPtr akan menunjuk lokasi sesudah yang
ditunjuk oleh Ptr5.
Sebagai gambaran:

Ptr1 Isi dari Ptr1


Ptr2 Isi dari Ptr2
PtrAwal Memori untuk
Ptr3 Isi dari Ptr3
Ptr4 Isi dari Ptr4 heap
Ptr5 Isi dari Ptr5
bebas

Jika kemudian diberikan perintah:


Release(PtrAwal)
Maka gambaran mengenai heap ditunjukkan sbb:

Ptr1 Isi dari Ptr1


Ptr2 Isi dari Ptr2
PtrAwal Memori untuk
HeapPtr Isi dari Ptr3
heap
Bebas
Modul Pemrograman Pascal - 46
2. Dispose atau FreeMem
Dispose
Digunakan untuk menghapus variabl yang ditunjuk oleh var_ptr
Prosedur Dispose mempunyai bentuk:
Dispose(var_ptr);
Contoh:
Dispose(Ptr3):
Dispose(Ptr4); Variabel dinamis ptr3 dan ptr4 dihapus

Keterangan:
Jika ada penambahan variabel dinamis lagi maka lokasi ptr3 dan ptr4 yang telah kosong akan
diprioritaskan.
Sebagai gambaran:
Ptr1 Isi dari Ptr1
Ptr2 Isi dari Ptr2
PtrAwal bebas Memori untuk
bebas heap
Ptr5 Isi dari Ptr5
HeapPtr bebas

Prosedur FreeMem digunakan untuk menghapus variabel dinamis yang didefinisikan dengan
pernyataan GetMem.
GetMem adalah prosedur yang digunakan untuk menciptakan variabel dinamis yang
ukurannya bisa ditentukan oleh pemrogram.
Bentuk:
GetMem(var_ptr,ukuran);
Dengan var_ptr merupakan variabel pointer dan ukuran (bertipe word) menyatakan ukuran
dari variabel dinamis.
Variabel dinamis yang diciptakan dengan GetMem dapat dihapus dengan menggunakan
prosedur FreeMem.
Bentuk:
FreeMem(var_ptr,ukuran);

Contoh Program:
Program Linked_List;
Uses WinCrt;
Type
PtrData = ^RecordData;
StringNama = String[20];
RecordData = Record
Nama : StringNama;
Jabatan : String[15];
Lanjutan : PtrData;
End;
Var
PtrAwalHeap : Pointer;
PtrKepala : PtrData;

Procedure Bentukdaftar(var PtrKepala : PtrData);


var
PtrBaru : PtrData;
Jawaban : char;
Begin
repeat

Modul Pemrograman Pascal - 47


clrscr;
new(PtrBaru);
write('Nama Pegawai : ');
readln(PtrBaru^.Nama);
write('Jabatan : ');
readln(PtrBaru^.Jabatan);

PtrBaru^.Lanjutan:=PtrKepala;
PtrKepala:=PtrBaru;

write('Masukan data lagi [Y/T] : ');


repeat
jawaban :=UPCASE(READKEY)
until jawaban in['Y','T'];
writeln(jawaban);
until jawaban = 'T'
end;

Procedure CetakDaftar(PtrKepala : PtrData);


var
PtrSementara : PtrData;

Begin
Clrscr;
writeln(' ISI DAFTAR BERANTAI ');
writeln('=======================================');
writeln(' N a m a ':20,' J a b a t a n':16);
writeln('---------------------------------------');
PtrSementara:=PtrKepala;
while PtrSementara <> Nil do
with PtrSementara^ do
begin
writeln(Nama:20,Jabatan:16);
PtrSementara:=Lanjutan;
end;
writeln('---------------------------------------');
write(' Tekan Enter ');readln;
end;

Procedure cariData(PtrKepala : PtrData; NamaDiCari : StringNama;


Var PtrPraPosisiData, PtrPosisiData : PtrData);

var
Ketemu : boolean;
begin
PtrPraPosisidata := Nil;
PtrPosisiData := PtrKepala;
Ketemu := false;
while (NOT Ketemu) AND (PtrPosisiData <> Nil) do
if PtrPosisiData^.Nama <> NamaDiCari then
begin
PtrPraPosisiData := PtrPosisiData;
PtrPosisiData:=PtrPosisiData^.Lanjutan;
end
else
Ketemu:=TRUE;
end;

Procedure HapusIsiDaftar(var PtrKepala : PtrData);


const
String_Kosong = '';
var
NamaDiCari : StringNama;
Modul Pemrograman Pascal - 48
PtrPosisiData,
PtrPraPosisiData : PtrData;
begin
clrscr;
writeln('Masukkan Nama Pegawai dari Data yang akan dihapus :');
readln(NamaDiCari);
If NamaDiCari = String_Kosong then
exit;
CariData(PtrKepala,NamaDiCari,PtrPraPosisiData,PtrPosisiData);
If PtrPosisiData = nil then
begin
writeln('Data tak ditemuka. Tekanenter untuk melanjutkan...');
readln;
end
else
begin
if PtrPraPosisiData = nil then
PtrKepala:=PtrKepala^.Lanjutan
else
PtrPraPosisiData^.Lanjutan := PtrPosisiData^.Lanjutan;
dispose(PtrPosisiData);
writeln('OK. data sudah dihapus. Tekan enter...');
readln;
end;
end;

Procedure ProsesPilihan(var PtrKepala : PtrData);


Var
Pilihan : char;
Begin
Repeat
Clrscr;
writeln(' PILIHAN PROSES ');
writeln('1. Memasukkan/Menambahkan Data');
writeln('2. Menampilkan Isi Daftar Berantai');
writeln('3. Menghapus Data pada Daftar Berantai');
writeln('4. Selesai');
writeln('--------------------------------------');
writeln('Masukkan Kode Pilihan [1..4] : ');
repeat
pilihan:=UPCASE(ReadKey)
until Pilihan in['1'..'4'];
write(Pilihan);
case Pilihan of
'1' : Bentukdaftar(PtrKepala);
'2' : CetakDaftar(PtrKepala);
'3' : HapusIsiDaftar(PtrKepala);
end
until Pilihan = '4'
end;

Begin
Mark(PtrAwalHeap);
PtrKepala:=Nil;
ProsesPilihan(PtrKepala);
Release(PtrAwalHeap);
end.

Modul Pemrograman Pascal - 49


FILE

Dalam struktur data array, data yang kita gunakan akan disimpan dalam memori
internal komputer. Kelemahan penyimpanan ini adalah data akan bersifat volatile (akan hilang
bila aliran listrik terputus) dan kapasitas data yang disimpan dalam memori sangat terbatas.
Untuk mengatasi hal tersebut maka di dalam struktur data Pascal digunakan struktur data File.
Struktur data File akan bersifat nonvolatile (tidak hilang bila aliran listrik terputus, sehingga
dapat menyimpan data dengan permanen) karena dapat disimpan di external memori dan
mempunyai kapasitas data yang besar.
Suatu file terdiri dari urutan komponen yang mempunyai tipe yang sama. Berbeda
dengan Array yang jumlah komponennya sudah pasti, jumlah komponen dalam File bersifat
fleksibel, yaitu dapat ditambah dan dikurangi sewaktu-waktu.

Prosedur dan Fungsi Standar untuk semua tipe File


1. Assign
Digunakan untuk menghubungkan nama dari external file ke dalam suatu file variabel
Bentuk Umum:
Assign(f,name:string);
Contoh:
Assign(Rekam,’A:gaji.dat’);
Keterangan:
Rekam adalah file variabel
A:gaji.dat adalah external file berupa file di disk

2. Rewrite
Diguanakan untuk membuka file yang baru atau yang belum pernah ada di disk.
Bentuk Umum:
Rewrite(f[:file; recsize:word);
Contoh:
Assign(Rekam,’A:gaji.dat’);
Rewrite(Rekam);
Keterangan:
Bila file yang dibuka dengan prosedur ini sebelumnya sudah ada di disk, maka isinya akan
dihapus.

3. Reset
Digunakan untuk membuka file yang telah ada.
Bentuk Umum:
Reset(f[:file; recsize:word);
Contoh:
Assign(Rekam,’A:gaji.dat’);
Reset(Rekam);
Keterangan:
File yang telah ada di disk dengan nama filenya ‘gaji.dat’ di drive A dibuka, bila file yang
dibuka ini tidak ada di disk maka akan terjadi kesalahan.

4. Close
Digunakan untuk menutup file yang telah dibuka dengan prosedur Rewrite, Reset atau
Append (digunakan khusus untuk File Text).
Bentuk Umum:
Close(f);
Contoh:
Modul Pemrograman Pascal - 50
Close(Rekam);

5. Erase
Digunakan untuk menghapus suatu external file.
Bentuk Umum:
Erase(f);
Contoh:
Assign(Rekam,’A:gaji.dat’);
Erase(Rekam);
Keterangan:
File yang akan dihapus dengan prosedur ini harus dalam keaddan tertutup. Bila masih
terbuka harus ditutup terlebih dahulu dengan prosedur standar Close.

6. Rename
Digunakan untuk mengganti nama dari suatu external file
Bentuk Umum:
Rename(f,newname:string);
Contoh:
Assign(Rekam,’A:gaji.dat’);
Rename(Rekam,’A:gajikar.dat’);
Keterangan:
File yang akan dihapus dengan prosedur ini harus dalam keaddan tertutup. Bila masih
terbuka harus ditutup terlebih dahulu dengan prosedur standar Close. Newname adalah
nama baru dari file yang diinginkan.

7. GetDir
Digunakan untuk mengetahui posisi direktori yang aktif pada suatu drive.
Bentuk Umum:
GetDir(d:byte; var s:string);
Contoh:
Var
Drive : Byte;
Directory : String[50];
Begin
Drive := 0;
GetDir(Drive,Directory);
Writeln(‘Directory yang aktif adalah : ‘,Directory);
End.

8. ChDir
Digunakan untuk merubah posisi dari directory
Bentuk Umum:
ChDir(s:string);
Contoh:
Var
Drive : Byte;
Directory : String[50];
Begin
Drive := 0;
GetDir(Drive,Directory);
Writeln(‘Directory yang aktif adalah : ‘,Directory);

Write(‘Akan dirubah menjadi?);


Readln(Directory);
ChDir(Directory);

GetDir(Drive,Directory);

Modul Pemrograman Pascal - 51


Writeln;
Writeln(‘Directory sekarang menjadi ‘,Directory);
End.
9. MkDir
Digunakan untuk membuat suatu direktori yang baru
Bentuk Umum:
MkDir(s:string);
Contoh:
Var
Directory : String[50];
Begin
Directory:=’B:\Mei’);

MkDir(Directory);
Assign(Rekam,’gaji.dat’);
Rewrite(Rekam);
Keterangan:
Directory baru dibuat di drive B: dengan nama’\Mei’ dan posisi directory dirubah ke
directory yang baru, sehingga file gaji.dat yang baru dibuat akan berada di directory
yang baru ini.

10. RMDIR
Digunakan untuk menghapus suatu directory
Bentuk Umum:
RmDir(s:string);
Contoh:
Var
Directory : String[50];
Begin
Directory:=’B:\Mei’);

RmDir(Directory);
End.
11. EOF
Digunakan untuk menghasilakan status apakah file sudah berada di posisi akhir dari file
atau tidak
Bentuk Umum:
EOF(f):boolean;

Didalam Pascal dikenal ada 3 macam tipe dari File, yaitu:


1. File Teks (Text File)
File text adalah file ang berisi kumpulan karakter yang dibentuk dalam baris-baris dan
masing-masing baris diakhiri dengan tanda akhir dari baris.
File text sebenarnya merupakan file dengan tipe char, tetapi mempunyai perbedaan, yaitu nilai
yang bukan tipe char dapat direkam dan dibaca oleh file text. Nilai yang bukan tipe char akan
secara otomatis dirubah ke atau dari tipe char.
File variabel pada file text ditunjukkan dengan suatu variabel yang dideklarasikan dengan tipe
text.
Prosedur standard yang digunakan dalam file text:
1. Append
Digunakan untuk membuka file yang telah ada/ menambah data yang sudah ada,
Bentuk Umum:
Append(var f:text);
Contoh:
Var
Modul Pemrograman Pascal - 52
TipeFile : Text;
Begin
Assign(TipeFile,’data.txt’);
Append(TipeFile);
2. Write dan Writeln
Digunakan untuk membuka file yang telah ada/ menambah data yang sudah ada.
Bentuk Umum:
Write([var f:text;]v1[,v2,...,vn]);
Writeln([var f:text;]v1[,v2,...,vn]);

Contoh:
Writeln(TipeFile,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);

3. Flush
Digunakan untuk segera merekamkan data yang ada dalam buffer ke file text.
Bentuk Umum:
Flush(var f:text);
Contoh:
Writeln(TipeFile,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);
Flush(TipeFile);

4. Read dan Readln


Digunakan untuk membaca nilai dari file ke dalam variabel.
Bentuk Umum:
Read([var f:text;]v1[,v2,...,vn]);
Readln([var f:text;]v1[,v2,...,vn]);

Contoh:
Readln(TipeFile,KodeBrg,NamaBrg,UnitBrg,HargaBrg);

5. Settextbuf
Digunakan untuk segera merekamkan data yang ada dalam buffer ke file text.
Bentuk Umum:
Flush(var f:text);
Contoh:
Writeln(TipeFile,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);
Flush(TipeFile);

6. EOLN
Digunakan untuk mengetahui apakah posisi dari file berada di status akhir baris atau tidak.
Bentuk Umum:
Eoln(var f:text): boolean;
Keterangan:
Bila posisi berada di status akhir baris, maka fungsi ini akan menghasilkan nilai boolean
True dan False untuk sebaliknya.

7. SEEKEOF
Fungsi ini digunakan sama dengan Eof, yaitu akan menghasilkan status akhir dari file.
Bentuk Umum:
SeekEof[(var f:text)]: boolean;
Keterangan:
Perbedaan utama dengan fungsi standard Eof adalah bahwa SeekEof akan melewati semua
blank, tabulasi dan tanda akhir dari baris sebelum menghasilkan status akhir dari file.

8. SEEKEOLN
Modul Pemrograman Pascal - 53
Fungsi ini digunakan sama dengan Eoln, yaitu akan menghasilkan status akhir dari baris.
Bentuk Umum:
SeekEoln[(var f:text)]: boolean;

Keterangan:
Perbedaan utama dengan fungsi standard Eolnadalah bahwa SeekEof akan melewati
semua blank, tabulasi dan tanda akhir dari baris sebelum menghasilkan status akhir dari
baris.

Contoh:
Var
TipeFile : Text;
NamaFile : String[139];
Karakter : Char;
Bufferku : Aray[1..5120] of char;
Begin
Write(‘Nama File ? ‘);Readln(NamaFile);

{---menghubungkan file variabel dengan file external---}

Assign(TipeFile,NamaFile);

{---buat buffer baru untuk pembacaan yang cepat ----}

SetTextBuf(TipeFile,Bufferku);

{---buka file untuk di baca---}

Reset(TipeFile);

{---baca data dari dan tampilka di layar---}

While Not Eof(TipeFile) Do


Begin
Read(tipeFile,Karakter);
Write(Karakter);
End;
End.

Contoh Program:
Program Menu_Text_File;
Uses WinCrt;
var
BerkasTeks, BerkasDummy : Text;
KodeBrg : String[5];
NamaBrg : String[20];
UnitBrg : integer;
HargaBrg : Real;
Lagi, Jawab : Char;
Ketemu : Boolean;

Procedure Masukan_Data;
Begin
Assign(BerkasTeks,'barang.txt');
Rewrite(BerkasTeks);

Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
ClrScr;

Modul Pemrograman Pascal - 54


Gotoxy(5,4);writeln('Masukan Data');
Gotoxy(5,6);write('Kode barang : ');
Gotoxy(5,8);write('Nama barang : ');
Gotoxy(5,10);write('Unit barang : ');
Gotoxy(5,12);write('Harga satuan barang : Rp ');

Gotoxy(27,6);readln(KodeBrg);
Gotoxy(27,8);readln(NamaBrg);
Gotoxy(27,10);readln(UnitBrg);
Gotoxy(30,12);readln(HargaBrg);

writeln(BerkasTeks,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);
gotoxy(5,15);write('Ada data lagi [Y/T] : ');
readln(Lagi);
End;
Close(BerkasTeks);
end;

Procedure Tambah_Data;
Begin
Assign(BerkasTeks,'barang.txt');
Append(BerkasTeks);

Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
ClrScr;
Gotoxy(5,4);writeln('Tambah Data');
Gotoxy(5,6);write('Kode barang : ');
Gotoxy(5,8);write('Nama barang : ');
Gotoxy(5,10);write('Unit barang : ');
Gotoxy(5,12);write('Harga satuan barang : Rp ');

Gotoxy(27,6);readln(KodeBrg);
Gotoxy(27,8);readln(NamaBrg);
Gotoxy(27,10);readln(UnitBrg);
Gotoxy(30,12);readln(HargaBrg);

writeln(BerkasTeks,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);
gotoxy(5,15);write('Ada data lagi [Y/T] : ');
readln(Lagi);
End;
Close(BerkasTeks);
end;

Procedure Koreksi_Data;
var
KodeCari, spasi : string[5];

Begin
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Assign(BerkasTeks,'barang.txt');

{$I-}
reset(BerkasTeks);
{$I+} ;

Assign(BerkasDummy,'barang.$$$');
Rewrite(BerkasDummy);

spasi:=' ';
Modul Pemrograman Pascal - 55
ClrScr;
Gotoxy(5,6);write('Kode barang yang dikoreksi : ');Readln(KodeCari);
writeln;
KodeCari:=Copy(spasi,1,5-Length(KodeCari))+KodeCari;

ketemu:=false;
While Not Eof(BerkasTeks) Do
Begin
Readln(BerkasTeks,KodeBrg,NamaBrg,UnitBrg,HargaBrg);
If KodeBrg = KodeCari Then
Begin
ketemu:=True;
writeln('Kode Barang :',KodeBrg);
write('Koreksinya : ');Readln(KodeBrg);
writeln('Nama Barang :',NamaBrg);
write('Koreksinya : ');Readln(NamaBrg);
writeln('Unit Barang :',UnitBrg:7);
write('Koreksinya : ');Readln(UnitBrg);
writeln('Harga Barang : Rp ',HargaBrg:10:2);
write('Koreksinya : ');Readln(HargaBrg);
end;
writeln(BerkasDummy,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);
end;
If Not Ketemu Then
writeln('Tidak ada data barang ini !!!');

close(BerkasTeks);
close(BerkasDummy);

Erase(BerkasTeks);
Rename(BerkasDummy,'barang.txt');

writeln;
write('Ada data lagi [Y/T] : ');
readln(Lagi);
End;
end;

Procedure Tampil_Data;
var
NilaiBrg, total : real;

Begin
Assign(BerkasTeks,'barang.txt');
{$I+}
Reset(BerkasTeks);
{$I-};
ClrScr;
Writeln(' D A F T A R B A R A N G ');
writeln('=============================================================');
writeln(' Kode Nama Unit Harga ');
writeln(' Barang Barang Satuan Total');
writeln('-------------------------------------------------------------');
total:=0;
while Not Eof(BerkasTeks) Do
Begin
Readln(BerkasTeks,KodeBrg,NamaBrg,UnitBrg,HargaBrg);
NilaiBrg:=UnitBrg*HargaBrg;
Total:=Total+NilaiBrg;
Writeln(KodeBrg,NamaBrg:22,UnitBrg:10,HargaBrg:15:2,NilaiBrg:12:2);
End;
writeln('-------------------------------------------------------------');
writeln(' Total Rp ',Total:14:2);
Modul Pemrograman Pascal - 56
Close(BerkasTeks);
Readln;
end;

Procedure Tampil_Data_Tertentu;
var
KodeCari, spasi : string[5];

Begin
Assign(BerkasTeks,'barang.txt');
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
spasi:=' ';
reset(BerkasTeks);
ClrScr;
Gotoxy(5,6);write('Kode barang yang dicari : ');Readln(KodeCari);
writeln;
KodeCari:=Copy(spasi,1,5-Length(KodeCari))+KodeCari;
While (Not Eof(BerkasTeks)) And (KodeBrg<>KodeCari) Do
Readln(BerkasTeks,KodeBrg,NamaBrg,UnitBrg,HargaBrg);
If KodeBrg = KodeCari Then
Begin
writeln('Nama Barang : ',NamaBrg);
writeln('Unit Barang : ',UnitBrg:7);
writeln('Harga Barang : ',HargaBrg:10:2);
end
else
writeln('Tidak ada data barang ini....');
close(BerkasTeks);
writeln;
write('Ada data lagi [Y/T] : ');readln(Lagi);
End;
end;

Procedure Layar_Menu_Utama;
var pilihan : char;
selesai : boolean;
begin
repeat
clrscr;
Gotoxy(15,6);writeln(' ****Menu Utama****');
Gotoxy(15,8);writeln('1. Masukan Data Barang');
Gotoxy(15,10);writeln('2. Menambah Data Barang');
Gotoxy(15,12);writeln('3. Koreksi Data Barang');
Gotoxy(15,14);writeln('4. Menampilkan Daftar Barang');
Gotoxy(15,16);writeln('5. Menampilkan Data Tertentu');
Gotoxy(15,18);writeln('6. Selesai');
Gotoxy(15,20);write('pilihan [1..6] :');readln(pilihan);
clrscr;
selesai:=false;
clrscr;
case pilihan of
'1' : Masukan_Data;
'2' : Tambah_Data;
'3' : Koreksi_Data;
'4' : Tampil_Data;
'5' : Tampil_Data_Tertentu;
'6' : selesai:=true;
end;
until selesai;
Modul Pemrograman Pascal - 57
writeln('selesai');
end;

begin
layar_menu_utama;
end.

2. File Bertipe (Type File)


Berbeda dengan File teks, file bertipe disamping dapat diakses secara urut, dapat juga diakses
secara acak. Ini berarti bahwa komponen-komponen di dalam file bertipe dapat dibaca atau
direkamkan dimanapun di dalam file.
Tipe dari file bertipe dapat berupa integer, real, char, string, array dan record.
Contoh:
Type
Barang = record
KodeBrg : string[5];
NamaBrg : string[20];
UnitBrg : integer;
HargaBrg : real;
End;

Var
FileBrg : File of Barang
Begin
Assign(FileBrg,’barang.dat’);
Reset(FileBrg);
.............................
Prosedur dan Fungsi Standar File Bertipe
Disamping prosedur dan fungsi standar yang dapat digunakan untuk semua tipe file, masih
terdapat beberapa prosedur dan fungsi standar lainnya yang dapat digunakan di file bertipe.
1. Write dan Read
Prosedur standar write digunakan untuk merekamkan satu atau lebih nilai ke dalam file
sedangkan prosedur standat read digunakan untuk membaca satu atau lebih nilai dari file.
Bentuk umum:
Write(f,v1[,v2,...,vn]);
Read(f,v1[,v2,...,vn]);

2. Seek
Prosedur standar ini digunakan untuk mengarahkan penunjuk file ke suatu komponen
tertentu di dalam file, sehingga memungkinkan untuk membaca komponen atau
menuliskan komponen secara acak. Komponen atau record yang pertama dari file bertipe
adalah 0.
Bentuk umum:
Seek(f:n : longint);

Contoh:
Seek(FileBrg,5);
Read(FileBrg,NamaBrg,UnitBrg,HargaBrg);

3. Truncate
Prosedur ini digunakan untuk menghapus sejumlah komponen atau record mulai dari
posisi record tertentu.
Bentuk umum;
Truncate(f);

Modul Pemrograman Pascal - 58


Contoh:
Seek(FileBrg,5);
Truncate(FileBrg);

4. Filepos
Fungsi standar ini digunakan untuk menghasilkan letak posisi sekarang dari penunjuk file.
Bentuk umum:
FilePos(f) : longint;
Contoh:
Seek(FileBrg,3);
Writeln(FilePos(FileBrg));

5. Filesize
Fungsi standar ini digunakan untuk menghasilakan jumlah dari komponen atau record
yang sudah ada di file. Fungsi ini bisa digunakan setelah file dibuka.
Bentuk umum:
FileSize(f) : longint;
Contoh:
AssignFileBrg,’barang.dat’);
Reset(FileBrg);
Writeln(‘Jumlah dari record yang ada = ‘,FileSize(FileBrg));

Contoh Program File Bertipe:


Program Data_Mahasiswa_file_bertipe;
Uses WinCrt;
Type
Mahasiswa = Record
Nomor : integer;
Nama : string;
Nilai : Real;
end;
Var
FileMahasiswa : File of Mahasiswa;
RecordMahasiswa : Mahasiswa;
i, JumlahRecord : integer;
NomorCari : integer;
Ketemu : Boolean;
UrutanRecord : integer;
Lagi : char;

Procedure Masukan_Data;
Begin
Assign(FileMahasiswa,'mhs.dat');
Rewrite(FileMahasiswa);
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Clrscr;
gotoXY(5,4);Writeln('Masukan Data Mahasiswa');
gotoXY(5,5);Writeln('----------------------');
With RecordMahasiswa Do
Begin
gotoXY(5,6);write('Nomor Mahasiswa : ');
gotoXY(5,8);write('Nama Mahasiswa : ');
gotoXY(5,10);write('Nilai Mahasiswa : ');
gotoXY(25,6);readln(nomor);
gotoXY(25,8);readln(nama);
gotoXY(25,10);readln(nilai);
end;
write(FileMahasiswa,RecordMahasiswa);
Modul Pemrograman Pascal - 59
gotoXY(5,15);write('Memasukkan data lagi (Y/T) ? ');Readln(Lagi);
end;
Close(FileMahasiswa)
end;

Procedure Tambah_Data;
Begin
Assign(FileMahasiswa,'mhs.dat');
{$I-}
Reset(FileMahasiswa);
{$I+};
If IOResult <> 0 then Rewrite(FileMahasiswa);
Seek(FileMahasiswa,FileSize(FileMahasiswa));
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Clrscr;
gotoXY(5,4);Writeln('Menambah Data Mahasiswa');
gotoXY(5,5);Writeln('-----------------------');
With RecordMahasiswa Do
Begin
gotoXY(5,6);write('Nomor Mahasiswa : ');
gotoXY(5,8);write('Nama Mahasiswa : ');
gotoXY(5,10);write('Nilai Mahasiswa : ');

gotoXY(25,6);readln(nomor);
gotoXY(25,8);readln(nama);
gotoXY(25,10);readln(nilai);
end;
write(FileMahasiswa,RecordMahasiswa);
gotoXY(5,15);write('Memasukkan data lagi (Y/T) ? ');Readln(Lagi);
end;
Close(FileMahasiswa)
end;

Procedure Koreksi_Data;
Begin
Assign(FileMahasiswa,'mhs.dat');
Reset(FileMahasiswa);
JumlahRecord:=FileSize(FileMahasiswa);
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Ketemu:=False;
ClrScr;
Writeln(' Koreksi Data Berdasarkan Nomor Mahasiswa');
Writeln('-------------------- ---------------------');
Write('Nomor Mahasiswa dicari : ');Readln(NomorCari);
Writeln;
For i:=1 to JumlahRecord Do
Begin
Seek(FileMahasiswa,i-1);
Read(FileMahasiswa,RecordMahasiswa);
If RecordMahasiswa.Nomor=NomorCari then
Begin
with RecordMahasiswa do
Begin
Ketemu:=True;
writeln('Nomor Mahasiswa :',Nomor:5);
write('Koreksinya : ');Readln(Nomor);
writeln('Nama Mahasiswa :',Nama);
write('Koreksinya : ');Readln(Nama);
writeln('Nilai Mahasiswa :',Nilai:6:2);
Modul Pemrograman Pascal - 60
write('Koreksinya : ');Readln(Nilai);
writeln;
end;
end;
Seek(FileMahasiswa,i-1);
Write(FileMahasiswa,RecordMahasiswa);
end;
If Not Ketemu Then
writeln('tidak ada nomor mahasiswa ini....');
writeln;
write('Ada data lagi [Y/T] : ');
readln(Lagi);
End;
Close(FileMahasiswa);
end;

Procedure Koreksi_Data_Record;
Begin
Assign(FileMahasiswa,'mhs.dat');
Reset(FileMahasiswa);
JumlahRecord:=FileSize(FileMahasiswa);
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Ketemu:=False;
ClrScr;
Writeln(' Koreksi Data Berdasarkan Record');
Writeln('---------------------------------');
Write('Nomor Record dicari (1-',JumlahRecord,') :');
Readln(UrutanRecord);
Writeln;
If (Urutanrecord<1) or (UrutanRecord>JumlahRecord) then
Writeln('Tidak ada nomor record ini...')
else
Begin
Seek(FileMahasiswa,UrutanRecord-1);
Read(FileMahasiswa,RecordMahasiswa);
with RecordMahasiswa do
Begin
Ketemu:=True;
writeln('Nomor Mahasiswa :',Nomor:5);
write('Koreksinya : ');Readln(Nomor);
writeln('Nama Mahasiswa :',Nama);
write('Koreksinya : ');Readln(Nama);
writeln('Nilai Mahasiswa :',Nilai:6:2);
write('Koreksinya : ');Readln(Nilai);
writeln;
end;
Seek(FileMahasiswa,UrutanRecord-1);
Write(FileMahasiswa,RecordMahasiswa);
end;
writeln;
write('Ada data lagi [Y/T] : ');
readln(Lagi);
End;
Close(FileMahasiswa);
end;

Procedure Tampilan_Data;
Begin
Assign(FileMahasiswa,'mhs.dat');
Reset(FileMahasiswa);
JumlahRecord:=FileSize(FileMahasiswa);
Modul Pemrograman Pascal - 61
Clrscr;
Writeln(' Daftar Data Mahasiswa');
Writeln('-------------------------------------');
Writeln('Nomor Nama Mahasiswa Nilai ');
Writeln('-------------------------------------');
For i:=1 to JumlahRecord do
Begin
Read(FileMahasiswa,RecordMahasiswa);
With RecordMahasiswa Do
writeln(Nomor:5,Nama:20,Nilai:10:2);
end;
Writeln('-------------------------------------');
Writeln('Tekan Enter untuk kembali ke menu');
Readln;
Close(FileMahasiswa)
end;

Procedure Tampilan_Data_Nomor;
Begin
Assign(FileMahasiswa,'mhs.dat');
Reset(FileMahasiswa);
JumlahRecord:=FileSize(FileMahasiswa);
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Ketemu:=False;
ClrScr;
Writeln(' Tampilan Data Berdasarkan Nomor Mahasiswa');
Writeln('-------------------- ---------------------');
Write('Nomor Mahasiswa dicari : ');Readln(NomorCari);
Writeln;
For i:=1 to JumlahRecord Do
Begin
Seek(FileMahasiswa,i-1);
Read(FileMahasiswa,RecordMahasiswa);
If RecordMahasiswa.Nomor=NomorCari then
with RecordMahasiswa do
Begin
Ketemu:=True;
writeln('Nama Mahasiswa :',Nama);
writeln('Nilai Mahasiswa :',Nilai:6:2);
writeln;
end;
end;
If Not Ketemu Then
writeln('tidak ada nomor mahasiswa ini....');
writeln;
write('Ada data lagi [Y/T] : ');
readln(Lagi);
End;
Close(FileMahasiswa);
end;

Procedure Tampilan_Data_Record;
Begin
Assign(FileMahasiswa,'mhs.dat');
Reset(FileMahasiswa);
JumlahRecord:=FileSize(FileMahasiswa);
Lagi:='Y';
While UpCase(Lagi)='Y' Do
Begin
Ketemu:=False;
ClrScr;
Modul Pemrograman Pascal - 62
Writeln(' Tampilan Data Berdasarkan Record');
Writeln('---------------------------------');
Write('Nomor Record dicari (1-',JumlahRecord,') : ');
Readln(UrutanRecord);
Writeln;
If (Urutanrecord<1) or (UrutanRecord>JumlahRecord) then
Writeln('Tidak ada nomor record ini...')
else
Begin
Seek(FileMahasiswa,UrutanRecord-1);
Read(FileMahasiswa,RecordMahasiswa);
with RecordMahasiswa do
Begin
Ketemu:=True;
writeln('Nomor Mahasiswa :',Nomor:5);
writeln('Nama Mahasiswa :',Nama);
writeln('Nilai Mahasiswa :',Nilai:6:2);
writeln;
end;
end;
writeln;
write('Ada data lagi [Y/T] : ');readln(Lagi);
End;
Close(FileMahasiswa);
end;

Procedure Layar_Menu_Utama;
var pilihan : char;
selesai : boolean;
begin
repeat
clrscr;
Gotoxy(15,6);writeln(' ****Menu Utama****');
Gotoxy(15,8);writeln('1. Masukan Data Mahasiswa');
Gotoxy(15,10);writeln('2. Menambah Data Mahasiswa');
Gotoxy(15,12);writeln('3. Koreksi Data Mahasiswa');
Gotoxy(15,14);writeln('4. Koreksi Record Mahasiswa');
Gotoxy(15,16);writeln('5. Tampilkan Daftar mahasiswa');
Gotoxy(15,18);writeln('6. Tampilkan Menurut Nomor');
Gotoxy(15,20);writeln('7. Tampilkan Menurut Record');
Gotoxy(15,22);writeln('8. Selesai');
Gotoxy(15,24);write('pilihan [1..8] :');
readln(pilihan);
clrscr;
selesai:=false;
clrscr;
case pilihan of
'1' : Masukan_Data;
'2' : Tambah_Data;
'3' : Koreksi_Data;
'4' : Koreksi_Data_Record;
'5' : Tampilan_Data;
'6' : Tampilan_Data_Nomor;
'7' : Tampilan_Data_Record;
'8' : selesai:=true;

end;
until selesai;
writeln('selesai');
end;
begin
layar_menu_utama;
end.
Modul Pemrograman Pascal - 63
LAMPIRAN

BERITA KESALAHAN
Dua buah kesalahan dapat terjadi di program Turbo Pascal, yaitu kesalahan sewaktu
proses kompilasi (compiler error) dan kesalahan sewaktu program dijalankan (runtime error).
Bila kesalahan terjadi, Turbo Pascal akan menunjukkan nomor kesalahan dan berita
kesalahannya.
BERITA KESALAHAN KOMPILASI
1. out of memory
memori tidak mencukupi sewaktu proses kompilasi, dapat dipecahkan dengan
ο jika compile/destination diarahkan kememori, ubah arah disk pada intergrated
enviroment
ο jika option/compiler/link buffer di intergrated enviroment ditentukan di memori,
ubahlah ke disk
ο bila menggunakan program resident/sidekick/superkey hapus dari memory
2. Indentifier expected - Pengenal (identifier) harus ada di posisi ini
3. Unknown identifier - Nama pengenal (variabel, label) belum dideklarasikan
4. Duplicate idientifier - Nama pengenal telah digunakan untuk yang lain
5. Syntax error - Kesalahan penulisan diprogram ini
6. Error in real constant - Konstanta tipe real salah
7. Error in interger constant - Konstanta tipe interger salah
8. String constant exceeds line - Konstanta string lebih satu baris, karena lupa mengakhiri
suatu konstanta string dengan tanda petik
9. Too many nested files - Kesalahan disebabkan karena menggunakan include file > 5
buah.
10. Unexpected end of file - Kesalahan ini disebabkan karena program selesai tidak
semestinya dan kemungkinan disebabkan begin dan end tidak sama atau tidak menutup
komentar suatu program.
11. Line too long - Maksimum panjang suatu baris adalah 126 karakter.
12. Type identifier expected - Pengenal yang digunakan tidak menunjukkan tipe data yang
seharusnya.
13. Too many open file - Kesalahan ini terjadi karena tidak dapat membuka beberapa file,
yang disebabkan oleh CONFIG.SYS tidak ada atau jumlah file yang disebutkan terlalu
sedikit.
14. Invalid file name - Nama dari suatu file tidak benar atau memakai sub directory yang
ridak ada di disk.
15. File not found
File tidak dapat ditemukan pada directory yang aktif atau tidak ada disubdirectory.
16. Disk full
Disk penuh, hapus file yang tidak digunakan.
17. Invalid compiler directive
Kesalahan pada compiler directive yang digunakan, disebabkan oleh huruf compiler
tidak dikenal atau beberapa parameter compiler tidak benar.
18. Too many files
Terlalu banyak file terlibat sewaktu kompilasi suatu unit atau program. Usahakan
mengurangi file yang digunakan dengan cara menggabungkan beberapa include file.
19. Undifined type in pointer difention
Tipe ini biasanya telah dihubungkan dengan suatu deklarasi tipe pointer, tapi belum
pernah dideklarasikan.
20. Variabel identifier expected

Modul Pemrograman Pascal - 64


Nama pengenal tidak menunjukkan suatu variabel seperti yang seharusnya.
21. Error in type
Huruf ini tidak dapat digunakan untuk memulai suatu deklarasi tipe.

22. Structur too large


Ukuran maksimum yang diijinkan untuk tipe terstruktur adalah sebanyak 655520 byte.
23. Set base type out of range
Base tipr dari suatu himpunan harus berupa suatu subrange dengan batas jangkauan 0
… 255 atau suatu tipe enumerated yang tidak lebih dari 256 kemungkinan nilai.
24. File components many not be files
Konstruksi berupa file di dalam file tidak diperbolehkan.
25. Invalid string length
Panjang suatu string yang dideklarasikan harus antara 1 … 255.
26. Type mismatc
Kesalahan disebabkan
- Tipe variabel dan ungkapan tidak sesuai dengan statemen pengerjaan.
- Tipe parameter formal dan parameter nyata tidak sesuai dengan penggunaan suatu
prosedur atau fungsi.
- Tipe ungkapan dan tipe indek tidak sesuai untuk indek suatu larik.
- Tipe operand yang tidak sesuai di suatu ungkapan.
27. Invalid subrange base type
Base tipe di suatu subrange yang tidak benar harus bertipe ordinal.
28. Lower bound greater than upper bound
Pendeklarasian suatu subrange yang tidak benar, karena nilai batas bawah lebih besar
dari nilai batas atas.
29. Ordinal type expected
Tipe real, string, terstruktur dan tipe pointer tidak diijinkan di sini, harus berupa tipe
ordinal.
30. Interger constant expected
Konstanta integer harus digunakan di sini.
31. Constanta expected
Suaut konstanta harus digunakan di sini.
32. Interger or real constant expected
Konstanta integer atau real harus digunakan disini.
33. Type identifier result type
Konstanta integer atau real harus digunakan di sini.
34. Invalid function result type
Tipe dari suatu hasil fungsi tidak benar dan yang benar semua type sederhana, type
string atau type pointer.
35. Label identifier expect
Suatu pengenal tidak menunjukkan suatu label yang sesungguhnya.
36. Begin expected
Kata cadangan begin diharapkan.
37. End expected
Kata cadangan end diharapkan.
38. Integer expression expected
Ungkapan yang mengikuti harus berupa tipe integer.
39. Ordinal expression expected
Ungkapan yang mengikuti harus berupa tipe ordinal.
40. Boolean expression expected
Ungkapan yang mengikuti harus berupa tipe Boolean.

Modul Pemrograman Pascal - 65


41. Operand types do not match operator
Operand yang digunakan tidak cocok.
42. Error in expression
Kesalahan di dalam suatu ungkapan yang mungkin disebabkan anda lupa meletakkan
suatu operator di antara operand.
43. Ilegal assignment
Suatu pengerjaan yang salah disbabkan oleh kemungkinan variabel file dan variabel tidak
bertipe tidak dapat diisi dengan suatu nilai.
44. Field identifier expected
Suatu pengenal tidak menunjukkan suatu field di variabel record yang mendahului.
45. Object file too large
Turbo Pascal tidak dapat menggabung (link) file – file OBJ yang lebih besar dari 64K.
46. Undifined external
Prosedur eksternal atau fungsi eksternal yang tidak mengandung definisi PUBLIC
yang dapat ditemukan di file objek. Telitilah kembali file sumber. ASM.
47. Invalid object file record
File OBJ mengandung objek record yang tidka beanr. Pastikan file ini benar file.OBJ.
48. Code segment too large
Ukuran maksimum kode dari suatu program/unit adalah 65520 byte.
49. Data segment too large
Ukuran maksimum dari segmen data suatu program 65520 byte.
50. DO expected
Statemen DO diharapkan.
51. Invalid PUBLIC definition
Kesalahan disebabkan oleh kemungkinan :
- Suatu pengenal dibuat melalui suatu derective PUBLIC dibahasa perakit, tetapi tidak
sesuai dengan deklarasi eksternal di bahasa Pascal atau unit,
- Dua atau lebih derective PUBLIC dibahasa perakit mendefinisikan pengenal yang
sama,
- File.OBJ mendefinisikan simbol PUBLIC yang tidak ada di segmen
52. Invalid EXTRN difinition
Definisi EXTRN tidak benar
53. Too many EXTERN difinitions
Definisi EXTRN tidak boleh lebih dari 256 definisi
54. OF expected
Harus ada kata OF
55. INTERFACE expected
Harus ada kata INTERFACE
56. Invalid recotable
Acuan pointer salah
57. THEN expected
Harus ada katan THEN
58. TO or DOWN expected
Harus ada kata TO atau DOWN TO
59. Underfine forward
- Prosedur/fungsi telah dideklarasikan pada tahap bagian muka unit tetapi definisinya
tidak pernah muncul dalam bagian implementasi
- Prosedur atau fungsi telah dideklarasikan menggunakan FORWARD, tetapi
definisinya tidak ditemukan.
60. Too many procedures
Banyaknya prosedur/fungsi dalam sebuah modul maksimum 512 buah.

Modul Pemrograman Pascal - 66


61. Invalid typecast
Pada lokasi tersebut harus dituliskan perubahan bukan ungkapan.
62. Division by zero
Pembagian dengan nol
63. Invalid file type
Prosedur untuk memasukkan kertas tidka sesuai dengan tipe berkasnya.
64. Cannot Read or White variables of this type
Prosedur read fan readln hanya bisa digunakan untuk memasukkan data yang bertipe
char, integer, real, dan string. Prosedur write dan writeln hanya bisa digunakan untuk
memasukkan data yang bertipe char, integer, real , dan string.
65. Pointer variable expected
Variabel harus bertipe pointer
66. String variable expected
Variabel harus bertipe string
67. String expression expected
Diperlukan ungkapan bertipe string
68. Circular unit reference
Tidak boleh menggunakan acuan unit yang memutar
69. Unit name mismatch
Nama unit di berkas.TPU tidak sesuai dengan nama unit pada uses.
70. Unit version mismatch
Versi unit tidak cocok
71. Duplicate unit name
Nama unit sudah ditulis dalam uses.
72. Unit file format error
Terdapat kesalahan pada berkas.TPU.
73. Implementation expected
Diperlukan bagian kata impementation.
74. Constatant and case type do not match
Tipe constanta case tidak sesuai dengan tipe memilih
75. Record variable axpected
Variabel harus bertipe record.
76. Constant out of range
Konstanta yang digunakan melebihi batas.
77. File variable expected
Variabel ahrus merupakan variabel berkas.
78. Pointer expression expected
Ungkapan bertipe pointer diperlukan pada lokasi tersebut.
79. Integer or real expression expected
Ungkapan harus bertipe integer atau real
80. Label not within current blok
Statemen goto tidak bisa melompat proses ke luar dari blok
81. Label already defined
Nama label sudah digunakan
82. Undefined label in preceding statement part
Label telah dideklarasikan dan di acu pada bagian statemen sebelumnya, tetapi tidak
pernah didefinisikan.
83. Invalid @ argument
Argumen @ tidak benar
84. UNIT expected
Harus ada kata unit.

Modul Pemrograman Pascal - 67


85. “;” expected
Harus ada tanda baca titik koma (semicolon)
86. “:” expected
Harus ada tanda baca titik dua (colon)
87. “:” expected
Harus ada tanda baca koma
88. “(“ expected
Harus ada kurung buka
89. “)” expected
Harus ada kurung tutup
90. “=” expected
Harus ada tanda baca sama dengan
91. “:=” expected
Haurs ada titik dua sama dengan
92. “[“ or “(.“ expected
harus ada tanda baca [atau (.
93. “]” or “.)’ expected
Harus ada tanda baca ] atau .)
94. “.” Expected
Harus ada tanda titik
95. “..” expected
Harus ada dua buah tanda titik
96. Too many variabel
Ukuran maksimum deklaasi variabel global atau lokal adalah 64 KB.
97. Invalid FOR control variable
Variabel kendali untuk statemen for harus bertipe sederhan ayang didefinisikan pada
deklarasi subprogram yang sedang digunakan.
98. Integer bariable expected
Variabel harus bertipe integer
99. File are not allowed
Konstanta bertipe tidak bertipe file
100. String length mismatch
Panjang untuk tidak sesuai dengan banyaknya komponen dalam larik karakter
101. Invalid ordering of field
Medan – medan dalam record – type constant harus ditul;is dengan urutan pada bagian
deklarasi
102. String constant expected
Harus ada konstanta untai.
103. Integer or real variable expected
Perubahan harus bertipe integer atau real
104. Ordinal variable expected
Perubah harus bertipe ordinal
105. INLINE error
Operator < tidak diperbolehkan
106. Character expression expected
Ungkapan harus bertipe char
107. Too many relocation items
Ukuran tabel relokasi dalam berkas EXE maksimum 64 KB
112. CASE constant out of range
Konstanta yang dipakai melebihi batasnya
113. Error in statement

Modul Pemrograman Pascal - 68


Simbol tersebut tidak boleh digunakan sebagai awal statement
114. Cannot call an interupt procedure
Prosedur interupsi tidak bisa dipanggil langsung
115. Must have 8087/80287 to compile this
Diperlukan koprosesor 8087/80287 untuk menjalankan porgram dan unit dengan
petunjuk kompiler {$N+}
116. Must be in 8087/80287 mode to compile this
Konstruksi yang akan dibuat hanya bisa dikompilasi dengan petunjuk kompiler
{$N+1}, yang berarti harus disediakan koprosesor 8087/80287
117. Target address not found
Alamat yang dituju tidak ditemukan
118. Include Files are not allowed here
Semua bagian hanya bisa terdapat dalam sebuah berkas
120. NIL axpected
Harus ada kata nil
121. Invalid qualifier
Kesalahan ini disebabkan antara lain karena mengindex perubah yang bukan array;
menentukan medan pada perubah yang bukan bertipe record; mengacu perubah yang
bukan bertipe pointer
122. Invalid variable reference
Kesalahan dalam mengacu perubah yang bertipe pointer
123. Too many symbols
Deklarasi program atau unit maksimum 64K
124. Statement part too long
Bagian statement maksimum 24 K
126. Files must be var parameters
Perubah bertipe file harus selalu berupa parameter perubah (dilewatkan menggunakan
passed by reference), tidak boleh sebagai parameter nilai (passed by value)
127. Too many conditional symbols
Terlalu banyak simbol
128. Misplaced conditional diretive
Kesalahan meletakkan petunjuk berkondisi, misalnya terdapat kata {SELSE} atau
{SENDIF} tetapi tidak ada kata {SIFDEF}
129. INDIF directive missing
Banyaknya {SIFxxx} harus sama dengan {SENDIF}
130. Error ini initial conditional diretive
Permula simbol kondisi tidak benar
131. Header does not match previous definition
Judul prosedur atau fungsi yang dinyatakan dalam bagian interface atau deklarasi
forward tidak cocok
132. Critical disk error
Kesalahan pada saat kompilasi (misalnya pintu pemutar yang belum ditutup)
133. Cannot avaluate this expression
Tidak bisa menghitung ungkapan yang diberikan
134. Expression oncocrrectly terminated
Pada tempat tersebut Turbo Pascal memerulukan operator atau tanda akhir ungkapan
135. Invalid format specifier
Kesalahan pada format specifier
136. Invalid indirect Reference
Kesalahan dalam acuan tak langsung
137. Structured variables are not allowed here

Modul Pemrograman Pascal - 69


Tidak boleh menggunakan perubah yang termasuk jenis struktur
138. Cannot evaluate without System unit
Pustaka TURBO. TPL harus berisi unit system untuk bisa menghitung nilai ungkapan
139. Cannot access this symbol
Tidak bisa memasukkan simbol tersebut
140. Invalid floating point operation
Kesalahan dalam operasi menggunakan nemeris titik mengambang (kemungkinan
terjadi overflow atau pembagian dengan nol)
141. Cannot compile overlays to memory
Program yang menggunakan overlay harus dikompilasi ke dalam cakram
142. Procedure or function variable expected
Operator @ hanya bisa digunakan bersama – sama dengan perubah prosedur atau
fungsi
143. Invalid procedure of function reference
Tidak memanggil prosedur menggunakan ungkapan
144. Cannot everlay this unit
Tidak bisa mengoverlay unit tersebut jika tidak dikompilasi menggunakan petunjuk
kompiler {So+}

PESAN SALAH PADA SAAT EKSEKUSI


Suatu kesalahan pada saat eksekusi (program dijalankan) akan menampilkan pesan
salah :
Runtime error nnn at xxxx:yyyy dengan nnn adalah nomor kode kesalahan dan
xxxx:yyyy adalah alamat dimana kesalahan terjadi (segmen dan offset). Jenis kesalahan:
kesalahan DOS, kesalahan I/O)(I/O error), kesalahan kritis, dan kesalahan fatal (fatal error).
Kesalahan DOS
2. File nor found
Kesalahan ini akan dilaporkan oleh reset, append, rename, dan erase, jika nama yang
diberikan pada perubah berkas tidak sesuai dengan berkas yang sesungguhnya ada.
3. Path not found
 Dilaporkan oleh reset, append, rewrite, rename, atau erase jika nama yang diberikan
pada perubah berkas tidak benar atau subdirektori yang dituju tidak ada.
 Dilaporkan oleh chDir, mkDir, atau rmdir jika subdirektorinya tidak ada atau salah
4. Too many open files
Dilaporkan oleh reset, rewrite, atau append jika program terlalu banyak membuka
berkas. Cek kembali parameter FILES = xxx dalam CONFIG.SYS
5. Files acces denied
 Dilaporkan oleh reset atau append jika dalam file Mode diinginkan suatu penulisan
data tetapi status berkasnya readonly
 Dilaporkan oleh rewrite jika direktorinya penuh atau status berkasnya read – only
 Dilaporkan oleh rename nama berkas yang baru sudah digunakan
 Dilaporkan oleh erase jika status berkasnya readonly
 Dilaporkan oleh mkDir jika nama subdirektori belum kosong, atau jika yang akan
dihapus adalah direktori utamanya
 Dilaporkan oleh read atau blockRead pada typed atau untyped file jika berkasnya
belum dibuka untuk dibaca
 Dilaporkan oleh write atau blockWrite pada typed atau untyped file jika berkasnya
belum dibuka untuk ditulisi
6. Invalid file handle
Kesalahan ini akan dilaporkan jika cara penangan berkas tidak benar. Kesalahan ini
jarang terjadi

Modul Pemrograman Pascal - 70


12. Invalid file access mode
Dilaporkan oleh reset atau append pada type atau untyped file jika nilai fileMode salah
15. Invalid drive number
Dilaporkan oleh geDir jika nomor pemutar salah
16. Cannot remove geDir jika nomor pemutar salah
Dilaporkan oleh rmDir jika nama direktori yang akan dihapus adalah nama direktori
yang sedang digunakan
17. Cannot rename across drive
Kesalahan I/O
Kesalahan ini akan mengakibatkan eksekusi terhenti jika suatu statemen tertentu dikompilasi
menggunakan {SI+}. Jika program dijalankan mneggunakan {SI-}, program akan tetap
dieksekusi, dan pesan salah akan diberitakan oleh fungsi io Result.
100. Disk read error
Dilaporkan oleh read pada typed fil jika posisi berkas sudah ada pada akhir berkas
101. Disk write error
Dilaporkan oleh close, write, writeln, flush, atau page jika cakram yang digunakan
menjadi penuh
102. File not assigned
Dilaporkan oleh reset, write, append, rename, dan erase jika perubah berkas tidak
diberi suatu nilai lewat pemanggilan terhadap prosedur assign
103. File not open
Dilaporkan oleh close, read, write, append, rename, dan erase jika perubah berkas
tidak diberi suatu nilai lewat pemanggilan terhadap prosedur assign
104. File not open for input
Dilaporkan oleh read, readln, eof, eoln, seekEof, seekEoln pada berkas teks yang
belum dibuka untuk masukan
105. File not open for output
Dilaporkan oleh write, writeln, dan page berkas teks yang belum dibuka untuk
keluaran
106. Invalid numeric format
Dilaporkan oleh read atau readln jika format nilai numeris yang dibaca dari berkas
teks tidak benar
Kesalahan Kritis
Kesalahan – kesalahan yang termasuk dalam kelompok ini merupakan kesalahan – kesalahan
yang banyak hubungannya dengan operaasi pada cakram magnetis, atau piranti masukan
keluaran yang lain.
150. Disk is write protected
Cakram magnetis tidak bisa ditulisi karena proteksi. Proteksi harus dibuka supaya
cakram bisa ditulisi
151. Unknown unit
Nama unit tidak diketahui
152. Drive not ready
Pemutar cakram tidak ditutup
153. Unknown command
Perintah yang diberi tidak diketahui
154. CRC error in data
Kesalahan pada cakram magnetis (cyclic redudancy error)
155. Bad drive request structure length
Kesalahan pada pemutar cakram
156. Disk seek error
Kesalahan pemutar cakram

Modul Pemrograman Pascal - 71


157. Unknown media type
Tipe media tidak diketahui
158. Sector not found
Sektor dalam cakram magnetis tidak diketahui
159. Printer out of paper
Kertas printer tidak bisa mencetak
160. Device write fault
Piranti pencetak tidak bisa mencetak
161. Hardware failure
Ada perangkat keras yang rusak
Kesalahan Fatal
Kesalahan ini selalu mengakibatkan proses eksekusi terhenti, dan harus dieksekusi dari awal
lagi.
200. Division by zero
Pembagian dengan nol
201. Range check error
Kesalahan ini dilaporkan jika statemen dikompilasi menggunakan {SR+}, kesalahan
tersebut adalah karena batas nilai perubah dilampaui
202. Stack overflow error
Kesalahan ini dilaporkan jika statemen dikompilasi menggunakan {SS+}, dimana
tumpukan sudah penuh untuk mengalokasikan lagi kebutuhan pengingat
203. Heap overflow error
Dilaporkan oleh new atau getMem jika heap sudah penuh dan tidak bisa
mengalokasikan lagi kebutuhan pengingat
204. Invalid pointer operation
Dilaporkan oleh dispose atau freeMem jika ponternya bernilai nil atau alokasinya
terletak di luar heap
205. Floating – point overflow
Operasi titik mengembang menyebabkan uverflow
206. Floating – point underflow
Operasi titik mengambang menyebabkan underflow. Kesalahan ini akan dilaporkan
hanya jika kita menggunakan kopresesor 8087/80287
207. Invalid floating point operation
 Data real yang dilewatkan ke dalam fungsi trunc, atau round tidak bisa dikonversi
menjadi longint
 Argumen yang dilewatkan ke dalam fungsi sqrt adalah negatif
 Argumen yang dilewatkan ke dalam fungsi In adalah nol atau negatif
 Terjadi stack overflow pada koprosesor 8087/80287
208. Overlay manager not installed
Pengelola overlay belum diinstall
209. Overlay file read error
Ada kesalahan pada saat pengelola overlay berusaha membaca suatu berkas overlay

Modul Pemrograman Pascal - 72

Anda mungkin juga menyukai