Modul Pascal PDF
Modul Pascal PDF
MODUL KULIAH
APLIKASI PROGRAM KOMPUTER
(Pemrograman Pascal)
Oleh:
Oni Soesanto
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.
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
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.
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.
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
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
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.
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}
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
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.
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 :
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
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:
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;
I = 1 to jum I = jum
downto 1
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.
Contoh :
• If skor > 8 then nilai:=’A’; if dengan satu statemen
Flowchart:
Kondisi
terpenuhi
Y T
Contoh:
Program Latihan5_5;
uses wincrt;
type
tulisan = string[11];
var
a, b, c, x1, x2 : real;
keterangan : tulisan;
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.
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
Contoh :
Program Latihan6_1;
Uses WinCrt;
Var
x1, x2 : integer;
y1, y2, total : longint;
Begin
Writeln(‘Jumlah 2 buah faktorial ‘);
Write(‘Bilangan pertama :’)readln(x1);
Write(‘Bilangan kedua :’)readln(x2);
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.
Contoh :
Program Latihan6_3;
Uses WinCrt;
Var
p, q, r : integer;
s : real;
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.
Hitung(X,Y);
Hitung(X,Y);
Hitung(X,Y,Z);
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;
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. Berurutan/Sequential
Struktur array yang elemen-elemennya tersusun secara berurutan, memungkinkan kita
mengakses sebagian atau seluruh elemen array secara berurutan.
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.
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.
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:
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;
Begin
for i:= 1 to JumMhs do
with ArData[i] do
begin
NoMhs := '00.00.0000';
Nama := 'xxxxxxxxxxxxxx';
Mid := 0;
Akhir := 0;
end;
end;
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
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 : ');
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;
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.
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;
Contoh :
Type
ptr = ^integer;
Var
A, b : ptr;
X : ^integer;
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’;
T1 AAA SURABAYA T2 ? ?
T1 AAA SURABAYA
T2 ? ???
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
Contoh:
PointerKepala
NIL
jojon direktur ?
Nama Jabatan next
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:
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;
PtrBaru^.Lanjutan:=PtrKepala;
PtrKepala:=PtrBaru;
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;
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;
Begin
Mark(PtrAwalHeap);
PtrKepala:=Nil;
ProsesPilihan(PtrKepala);
Release(PtrAwalHeap);
end.
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.
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);
GetDir(Drive,Directory);
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;
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);
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);
Assign(TipeFile,NamaFile);
SetTextBuf(TipeFile,Bufferku);
Reset(TipeFile);
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;
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.
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);
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));
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