Anda di halaman 1dari 111

Algoritma & Pemrograman I(Pascal) by:chairuddin

PENGANTAR LOGIKA DAN ALGORITMA DENGAN PASCAL

Sebelum anda masuk ke bab pokok mengenai pascal ada baiknya jika anda terlebih
dahulu mengenal struktur algoritma dan flowchart. Definisi dari algoritma adalah urutan
langkah-langkah untuk memecahkan suatu masalah yang disusun secara sistematis dan
logis.

Pengertian LOGIKA:
Logika berasal dari bahasa Yunani yaitu LOGOS yang berarti ilmu. Logika
pada dasarnya filsafat berpikir. Berpikir berarti melakukan suatu tindakan yang
memiliki suatu tujuan. Jadi pengertian Logika adalah ilmu berpikir / cara berpikir
dengan berbagai tindakan yang memiliki tujuan tertentu.

Pengertian ALGORITMA:
Pada Merriam-Webster’s Collegiate Dictionary, istilah algoritma diartikan
sebagai prosedur langkah demi langkah untuk memecahkan masalah atau
menyelesaikan suatu tugas. Kamus Besar Bahasa Indonesia (KBBI) mendefinisikan
algoritma sebagai urutan logis pengambilan keputusan untuk pemecahan masalah.

Pascal merupakan program yang berorientasi pada object sekaligus merupakan


prosedural programming. Pascal sebagai prosedural programming berparadikma
“tentukan prosedur yang kita inginkan; Gunakan algoritma yang terbaik yang bisa
ditemukan.”

Pemrograman terstruktur terdiri atas perancangan struktur data dan memanipulasinya


dengan fungsi-fungsi dengan suatu cara tertentu yang secara teori bisa berhenti. Fungsi-
fungsi ini yang biasa dikenal dengan algoritma dan flowchart. Niklaus Wirth memberikan
judul bukunya Algoritms + Data Structure = programs. Dari judulnya secara tidak
langsung beliau mengatakan bahwa algoritma dahulu, baru menentukan struktur data
kemudian.
Untuk membuat suatu program seorang programer harus memilih algoritma yang baik.

Ciri algoritma yang baik adalah sebagai berikut:

1. Tepat , benar, standart, dan efektif.


2. Logis, terstruktur, dan sistematis.
3. Semua operasi harus terdefinisi.
4. Semua proses harus berakhir.
5. Ditulis dengan bahasa yang standart agar mudah diimplementasikan dan tidak
menimbulkan arti ganda.

Dalam penyajian sebuah algoritma seorang programer biasanya mengguanakan struktur


bahasa Indonesia, pseudocode, maupun flowchart tergantung situasi dan kondisinya.

1
Algoritma & Pemrograman I(Pascal) by:chairuddin

Alat Bantu untuk menuliskan Logika dan Algoritma, salah satunya adalah
FLOWCHART.

flowchart dan algoritma


Pengertian FLOWCHART:
Flowchart adalah penggambaran secara grafik dari langkah-langkah dan urutan-urutan
prosedur dari suatu program. Atau dapat didefinisikan gambaran dalam bentuk diagram
alir dari algoritma dalam suatu program atau prosedur sistem secara logika, yang
menyatakan arah alur program dalam menyelesaikan suatu masalah

Biasanya flowchart digunakan untuk mendesain suatu program atau untuk


mempresentasikan suatu program.
Dalam flowchart terdapat lambang-lambang yang biasa digunakan oleh seorang
programer sebagai berikut.

SIMBOL Flowchart

2
Algoritma & Pemrograman I(Pascal) by:chairuddin

Pedoman-pedoman dalam Membuat Flowchart:


1. Bagan alir sebaiknya digambar dari atas ke bawah dan mulai dari bagian kiri dari
suatu halaman.
2. Kegiatan di dalam bagan alir harus ditunjukkan dengan jelas.
3. Harus ditunjukkan dari mana kegiatan akan dimulai dan dimana akan berakhirnya
(diawali dari satu titik START dan diakhiri dengan END).
4. Masing-masing kegiatan di dalam bagan alir sebaiknya digunakan suatu kata yang
mewakili suatu pekerjaan, misalnya:
- "Persiapkan" dokumen
- "Hitung" gaji
5. Masing-masing kegiatan di dalam bagan alir harus di dalam urutan yang
semestinya.
6. Kegiatan yang terpotong dan akan disambung di tempat lain harus ditunjukkan
dengan jelas menggunakan simbol penghubung.
7. Gunakanlah simbol-simbol bagan alir yang standar.

3
Algoritma & Pemrograman I(Pascal) by:chairuddin

Secara garis besar, Ada 3 bagian utama dalam flowchart :

INPUT PROSES OUTPUT


1 2 3

Contoh:
Buat algoritma dan Flowchart untuk Menghitung Luas Persegi Panjang:

Pekerjaan:
Rumus:
LuasPersegiPanjang = Panjang x Lebar
Algoritma:
1. Tentukan nama variabel yang akan menampung data Panjang, lebar dan luas
persegi panjang.
2. Masukkan (inputkan) data Panjang dan Lebar pada variabel yang sudah
ditentukan.
3. Hitung Luas persegi panjang.
4. Tampilkan (outputkan) Luas persegi panjang.

Flowchart:
START

Luas, Panjang,
Lebar

Inputkan:
Panjang dan lebar

Hitung:
Luas Persegi

Outputkan:
Luas Persegi Panjang

END

Latihan:
Buat algoritma dan Flowchart untuk Menghitung:
1. Luas Segitiga
2. Luas Lingkaran

4
Algoritma & Pemrograman I(Pascal) by:chairuddin

IMPLEMENTASI DALAM PROGRAM


(Sebagai contoh: Bahasa Pemrograman Pascal)

Pengertian PROGRAM:
Kumpulan instruksi (statements) yang disusun secara logis untuk memecahkan suatu
masalah. Instruksi-instruksi yang digunakan disesuaikan dengan jenis bahasa
pemrograman yang digunakan (reserved word yang disediakan).

Stuktur Penulisan Pascal:

Program Nama_Program;
uses
. . . {Unit-unit yang dipakai} ;
label
. . . {label-label yang dipakai } ;
const
. . . {pengumuman tetapan-tetapan} ;
type
. . . { pengumuman tipe-tipe data };
var
. . . { pengumuman peubah-peubah };

procedure Nama_Prosedur;
begin
. . .
end;

Function Nama_Fungsi;
begin
. . .
end;

{ Program utama }
begin
. . .
end.

Perintah Input :
Perintah Pascal yang digunakan untuk memasukkan/menginputkan data.
Bentuk perintah:
Read dan Readln
Struktur penulisan:
Read(nama variabel);
Readln(nama Variabel)

Perintah Output:
Perintah Pascal yang digunakan untuk menampilkan/mengoutputkan data.

5
Algoritma & Pemrograman I(Pascal) by:chairuddin

Bentuk perintah:
Write : setelah menampilkan data atau teks, kursor berada tepat disamping kanan
data yang ditampilkan.
Write : setelah menampilkan data atau teks, kursor berada pada baris berikutnya.
Struktur penulisan:
write(nama variabel);
write(‘teks’);
writeln(nama Variabel);
writeln(‘teks’);

Contoh:
Buat program sederhana untuk Menghitung Luas Persegi Panjang:

Program LuasPersegiPanjang;
Var
Luas, Panjang, Lebar : integer;
Begin
Readln(panjang);
Readln(Lebar);Luas:= Panjang*Lebar;
Writeln(‘Luas Persegi Panjang adalah:’,Luas);
Readln;
End.
Tampilan pada lembar kerja Pascal:

Menjalankan program dengan perintah:


Ctrl+F9(tekan tombol Ctrl dan F9 bersama-sama).

Apabila Panjang diisi 7 dan lebar diisi 8 maka hasil perintah diatas tampil sbb:

6
Algoritma & Pemrograman I(Pascal) by:chairuddin

Latihan:
Buat flowchart dan program sederhana untuk menampilkan bilangan terbesar.

Begin
START

Readln (A);
Input : Readln (B);
Nilai A
Nilai B
If A > B then
Terbesar := A
Else
Tidak Terbesar := B;
A>B

Ya
Writeln(Terbesar);
Terbesar = A Terbesar = B

End.
Output :
Nilai Terbesar

END

7
Algoritma & Pemrograman I(Pascal) by:chairuddin

Dasar-Dasar Pemrograman
Pada halaman ini, akan dipelajari mengenai konsep-konsep dasar yang berkaitan dengan
pembuatan program, yaitu:
• Variabel
• Tipe Data Sederhana
• Masukan dan Keluaran (Input dan Output)
• Operator:
o Operator Akhir Program (End of Program Operator)
o Operator Akhir Instruksi (End of Statement Operator)
o Operator Pengisian Nilai (Assignment Operator)
o Operator Aritmatika (Arithmetic Operator)
• Komentar

Tipe Data
Tipe Data terbagi 4 bagian yaitu :
String : Satu Kata atau kalimat, contohnya ‘saya’
Char : Satu huruf atau angka, contohnya ‘s’ , ‘2’
Integer : Bilangan Bulat
Real : Bilangan Pecahan

Tipe-tipe operator
Operator Penegasan
X:= 10 artinya X diisi dengan 10
Operator Aritmatika
+ – x / (hasilnya pasti bilangan bulat) mod (Sisa hasil bagi) , div (Hasil bagi)

Input/Output
Idendifier : Pengenalan
- Const (Konstanta atau bilangan tetap)
- Var (variabel atau bilangan dapat berubah dan di inputkan)

• Apa Itu Program Komputer?


Program Komputer merupakan sekumpulan instruksi/perintah yang diberikan oleh
programmer kepada mesin komputer. Agar instruksi tersebut dimengerti oleh komputer,
maka instruksi tersebut harus dalam bentuk bahasa yang komputer mengerti.
Ada banyak bahasa pemrograman di dalam dunia ilmu komputer. Salah satu bahasa
program komputer yang terkenal adalah bahasa Pascal. Pencipta bahasa Pascal, Prof.
Niklaus Wirth, menciptakan bahasa Pascal ini dengan tujuan untuk mengajarkan
pemrograman secara terstruktur kepada para mahasiswanya.

8
Algoritma & Pemrograman I(Pascal) by:chairuddin

• Program Kosong
Program Kosong adalah program yang paling sederhana, karena tidak melakukan apa
pun. Dalam bahasa Pascal, program kosong dibuat dengan cara:
begin
end.

Penjelasan: (tanda // slash ganda artinya adalah komentar/keterangan)


begin // instruksi untuk mengawali program Pascal
end. // instruksi untuk mengakhiri program Pascal diikuti Operator
Akhir Program

Kesalahan yang sering terjadi:


Untuk mengakhiri program Pascal, instruksi end harus
diikuti Operator Akhir Program yaitu tanda titik (.).
Dalam sebuah program Pascal hanya akan terdapat satu
saja Operator Akhir Program

• Program Halo
Program komputer perlu untuk berinteraksi dengan pengguna komputer (user), interaksi
yang paling sederhana adalah, komputer mencetak sesuatu di layar sehingga pengguna
bisa melihatnya. Untuk membuat hal tersebut, cobalah program ini:
begin
writeln('Halo Pembaca');
end.
Penjelasan:
begin
writeln('Halo Pembaca'); // instruksi untuk mencetak & parameter
teks yang akan dicetak
end.

Setelah program tersebut dijalankan, maka komputer akan mencetak kata Halo Pembaca
di layar. Ada sebuah instruksi baru di sini, yaitu instruksi writeln yang gunanya untuk
mencetak lalu menambahkan Enter/baris baru (write and add new line, writeln berasal
dari write + ln, ln merupakan singkatan dari line). Instruksi writeln ini disertai dengan
parameter teks Halo Pembaca yang harus diapit oleh tanda petik tunggal (').

9
Algoritma & Pemrograman I(Pascal) by:chairuddin

Kesalahan yang sering terjadi:


Setiap instruksi dalam bahasa Pascal, harus diakhiri
dengan Operator Akhir Instruksi yaitu tanda titik
koma (;)

Tips pemrograman yang baik:


Cara menulis program dengan diketik agak ke dalam,
disebut dengan indentasi. Cara ini berguna untuk
memudahkan membaca blok-blok perintah program,
terutama pada program yang memiliki banyak struktur
subblok

• Komentar
Komentar adalah teks tambahan yang ditambahkan ke dalam program dan tidak akan
dikerjakan oleh komputer, dengan tujuan:
1. Menjelaskan arti suatu perintah/blok perintah, sehingga memudahkan orang lain
untuk memahami apa kegunaan perintah tersebut
2. Memberi tanda pada bagian perintah/blok perintah tertentu yang sengaja
dilompati atau akan diganti/direvisi pada versi perubahan berikutnya
3. Mengingatkan diri sendiri supaya tidak lupa, sehingga memudahkan untuk
memahami ulang perintah tersebut, apabila pada suatu waktu di masa mendatang
membaca ulang perintah tersebut

Ada 2 macam komentar dalam program Pascal, yaitu:


1. Komentar 1 Baris (single line comment), yaitu komentar yang hanya berlaku
dalam 1 baris perintah saja, dimulai dari tanda // (slash ganda) sampai ke akhir
baris
2. Komentar Banyak Baris (multiple line comment), yaitu komentar yang berlaku
dalam banyak baris, dimulai dari tanda { (kurung kurawal buka) sampai tanda }
(kurung kurawal tutup)

// ini adalah single line comment


begin // ini juga single line comment
end.
{ ini adalah multiple line comment
semua teks yang ada di antara kurung kurawal buka
dan kurung kurawal tutup ini akan diabaikan
oleh komputer }
begin
end.

10
Algoritma & Pemrograman I(Pascal) by:chairuddin

Tips pemrograman yang baik:


Berikan komentar secukupnya. Orang lain yang
membaca program tersebut akan sangat terbantu pada
saat membacanya. Demikian juga diri sendiri pun akan
sangat terbantu, pada saat membaca ulang program
tersebut di masa yang akan datang

Tambahan Informasi/Catatan:
Jangan berlebihan dan bertele-tele dalam memberikan
komentar! Usahakan singkat, padat, tepat dan jelas
(kecuali, apabila komentar tersebut dipakai untuk
keperluan pengajaran/tutorial)

• Variabel
Variabel adalah suatu lokasi/tempat di dalam memori komputer yang bisa dipakai untuk
menyimpan nilai. Variabel ini melambangkan atau merepresentasikan data.
Nilai dari sebuah variabel dapat dimasukkan oleh pengguna melalui deklarasi di program
ataupun pemasukan (input) di dalam program.
Untuk setiap data yang berbeda, dibutuhkan variabel yang berbeda pula. Variabel
dibedakan dengan cara diberikan nama yang berbeda. Contohnya, apabila terdapat data
"panjang", "lebar", dan "tinggi", maka dapat dipakai variabel "p", "l", dan "t" untuk
melambangkannya.
Tipe data dari sebuah variabel harus dideklarasikan di awal program. Beberapa contoh
tipe data untuk menampung angka adalah byte, integer, word, dan real. Dalam
program Pascal, kita dapat melakukan operasi matematika seperti tambah, kurang, kali,
dan bagi.
Variabel bisa diibaratkan sebagai sebuah kantong yang bisa menyimpan sesuatu. Dalam
program yang meminta inputan ke user, maka inputannya harus ditampung ke dalam
kantong yang bernama variabel ini. Dan kantong ini juga bisa diakses oleh statement
program lainnya. Berikut ini adalah berbagai macam tipe variabel.

Nama Tipe Range Type


Shortint -128 s/d 127 Integer
Byte 0 s/d 255 Integer
Integer -32768 s/d 32767 Integer
Word 0 s/d 65535 Integer
Longint -2146473648 s/d 2146473647 Integer
Real 2.9 e-39 s/d 1.7 e37 Pecahan
String s/d 255 huruf Non numeric
Char 1 huruf saja Non numeric

11
Algoritma & Pemrograman I(Pascal) by:chairuddin

Tipe variabel di atas adalah tipe variabel yang paling sering digunakan. Untuk tipe
pecahan, masih ada tipe seperti single, double, extended, dsb. Silahkan pelajari sendiri di
help yang tersedia (Ctrl+F1). Berikutnya adalah cara pendeklarasian variabel. Variabel di
deklarasikan di blok var. Contoh:
Var
umur : byte;
nama : string;
Untuk memberikan suatu nilai pada variabel, pada statement masukan perintah:
<Nama_variabel> := <nilai>;

Contoh program:
var
p,l,t,v:integer;
begin
writeln('Masukkan nilai panjang');
readln(p);
writeln('Masukkan nilai lebar');
readln(l);
writeln('Masukkan nilai tinggi');
readln(t);
v := p * l * t;
writeln(v);
readln;
end.

Penjelasan:
var
p,l,t,v:integer; // Deklarasi variabel dengan semua
variabel bertipe integer
begin
writeln('Masukkan nilai panjang');
readln(p); // Input nilai p
writeln('Masukkan nilai lebar');
readln(l); // Input nilai l
writeln('Masukkan nilai tinggi');
readln(t); // Input nilai t
v := p * l * t; // Operasi matematika: v=p kali l
kali t
writeln(v); // Tampilkan nilai v
readln; // Supaya pembaca dapat membaca nilai
v sebelum program otomatis keluar
end.

USES CRT
Crt merupakan suatu unit yang mempunyai beberapa perintah yang dapat kita gunakan
dalam hal pengolahan program berbasis teks. Beberapa perintah atau syntax yang
memakai library ini adalah:
1. Clrscr : untuk membersihkan layar.
2. Textcolor : memberi warna pada tulisan.
3. TextBackground : memberi warna pada latar belakang tulisan tersebut.

12
Algoritma & Pemrograman I(Pascal) by:chairuddin

4. GotoXY : memindahkan kursor ke posisi X,Y.


5. Sound, NoSound : membunyikan speaker dan menghentikannya.
6. Delay : menunda pemrosesan program beberapa waktu.
7. Textmode : mengubah besar karakter.
Contoh program :
Uses crt;
Begin
Clrscr;
Textcolor(14);
Textbackground(1);
Gotoxy(10,20);
Writeln(’Tulisan kunig di atas biru!’)
{penggunaan Sound dan NoSound}
Sound(440); delay(1000); nosound;
End.
Daftar warna:
1: hitam
2: biru
3: cyan
4: merah
5: magenta
6: coklat
7: abu-abu terang
8: abu-abu gelap
9: biru muda
10: hijau muda
11: cyan muda
12: merah muda
13: magenta muda
14: kuning
15: pu

PERHITUNGAN MATEMATIKA
Suatu statement pada blok program bisa digunakan untuk menghitung perhitungan
matematika. Perhatikan program berikut:

Var
a,b,c : integer;
Begin
a:=1;
b:=5;
{penjumlahan}
c:=a+b;
writeln(c);
{pengurangan}
c:=b-a;

13
Algoritma & Pemrograman I(Pascal) by:chairuddin

writeln(c);
{perkalian}
c:=a*b;
writeln(c);
{pembagian}
c:=b/a;
writeln(c);
End.

Div
Adalah pembagian yang selalu menghasilkan bilangan bulat (integer).
Contoh: c:=a div b;
Mod
adalah sisa dari pembagian modulo atau remainder yang selalu menghasilkan integer.
Contoh: c:=a mod b;
Trunc
Pembulatan angka ke bawah. Misalnya angka 5.7 dibulatkan menjadi 5.
Contoh: trunc(c);
Round
Pembulatan ke nilai integer terdekat, misal 5.6 dibulatkan ke enam. 7.1 dibulatkan
menjadi tujuh.
Contoh: round(c);

KONSTANTA
Konstanta ini seperti variabel, hanya saja nilainya sudah didefinisikan sebelumnya dan
selalu tetap dan tidak bisa diubah dalam program.
Contoh:
Const
Myconst = 1234;
Var
i:word;
Begin
i:=40;
writeln(i*myconst);
End.

Nilai konstanta tidak dapat diubah. Jika dalam program dicoba untuk diubah, maka akan
error

14
Algoritma & Pemrograman I(Pascal) by:chairuddin

Struktur Dasar Algoritma


Ada 3(tiga) Struktur Dasar algoritma yang menjadi landasan pembuatan struktur
algoritma dan Program. Tiga struktur dasar tersebut adalah :
1. Runtunan
2. Pemilihan, dan
3. Pengulangan

Untuk lebih jelasnya mari kita bahas satupersatu ketiga struktur tersebut.

Runtunan (Sequence)
Algoritma merupakan runtunan (sequence) satu atau lebih instruksi, yang berarti bahwa:
1. Tiap instruksi dikerjakan satu persatu.
2. Tiap instruksi dilaksanakan tepat sekali, tidak ada instruksi yang diulang.
3. Urutan instruksi yang dilaksanakan pemroses sama dengan urutan instruksi
sebagaimana yang tertulis di dalam teks algoritmanya.
4. Akhir dari instruksi terakhir merupakan akhir algoritma.
Sebelum membuat program dengan algoritma runtunan (sequence) yang lebih rumit, kita
coba dulu program-program yang tidak terlalu rumit seperti di bawah ini:

1. Buatlah program penjumlahan 2 buah bilangan dimana bilangan ke-1 dan ke-2
dimasukkan oleh pengguna?

program jumlah2bilangan;
uses wincrt;
var x,y,z: real;
begin
writeln ('MENGHITUNG JUMLAH 2 BILANGAN');
writeln ('============================');
write ('masukan bilangan 1 : ');
read (x);
write ('masukan bilangan 2 : ');
read (y);
z:=x+y;
write ('Hasil Penjumlahan = ',z:8:2)
end.

2. Buatlah program untuk menghitung luas lingkaran dan keliling lingkaran?

program lingkaran;
uses wincrt;
var r,kel,ls:real;
begin
writeln ('MENGHITUNG KELILING DAN LUAS LINGKARAN');
writeln ('======================================');
write ('masukan nilai jari-jari: ');
read (r);

15
Algoritma & Pemrograman I(Pascal) by:chairuddin

kel:=2*3.14*r;
ls:=2*3.14*r*r;
writeln ('keliling lingkaran = ',kel:8:2);
write ('luas lingkaran = ', ls:8:2)
end.

3. Buatlah program untuk menghitung luas segitiga?

program luas_segitiga;
uses wincrt;
var a,t,ls:real;
begin
writeln ('MENGHITUNG LUAS SEGITIGA');
writeln ('========================');
write ('masukan nilai alas : ');
read (a);
write ('masukan nilai tinggi : ');
read (t);
ls:=a*t/2;
write ('luas segitiga = ',ls:6:2)
end.

4. Buatlah program untuk meghitung luas trapesium yang diketahui panjang alas dan
atas (kedua sisi sejajar) serta tingginya. Hitung pula luas segitiga yang alasnya dan
tingginya sama dengan alas dan tinggi trapesium?

program luas_trapesium;
uses wincrt;
var al,at,t,ls1,ls2:real;
begin
writeln ('MENGHITUNG LUAS TRAPESIUM DAN SEGITIGA');
writeln ('======================================');
write ('masukan nilai alas : ');
read (al);
write ('masukan nilai atas : ');
read (at);
write ('masukan nilai tinggi : ');
read (t);
ls1:=(al+at)*t/2;

ls2:=al*t/2;
writeln ('luas trapesium = ', ls1:8:2);
write ('luas segitiga = ', ls2:8:2)
end.

5. Buatlah program untuk mencari nilai konversi dari suatu temperatur/ suhu , dimana
suhu awal yang diketahui dalam derajat Fahrenheit, konversikan ke dalam derajat
Celcius, Reamur.
Catatan:
Gunakan formula sbb: C = 5 / 9 (F – 32), R = 4 / 9 (F – 32)

program temperatur;
uses wincrt;
var F,R,C: real;

16
Algoritma & Pemrograman I(Pascal) by:chairuddin

begin
writeln ('MENGHITUNG TEMPERATUR/SUHU');
writeln ('==========================');
write ('masukan nilai fahrenheit yang telah diketahui: ');
read (f);
C:=(5/9)*(F-32);
R:=(4/9)*(F-32);
writeln ('nilai C = ',C:4:2);
write ('nilai F= ',R:4:2)
end.

6. Buatlah sebuah program untuk menampilkan kalimat : ”Senang bertemu dengan anda,
nama, thanks…” Diimana nama adalah yang dimasukkan oleh user?

program nice2meetyou;
uses wincrt;
var x:string;
begin
write ('Masukan nama anda : ');
readln (x);
writeln ('Senang bertemu dengan anda ',x,', ','thanks...')
end.

Setelah mencoba program-program diatas, mari kita lanjutkan pembahasan mengenai


runtanan (sequence) ini. Urutan instruksi di dalam algoritma adalah penting. Urutan
instruksi menunjukkan urutan logik penyelesaian masalah. Bergantung pada
masalahnya, urutan instruksi yang berbeda mungkin tidak ada pengaruhnya terhadap
solusi persoalan, tetapi mungkin juga menghasilkan keluaran yang berbeda pula.

• Contoh urutan instruksi yang tidak berpengaruh terhadap solusi


persoalan
Contoh kasus:
Dibaca dua buah nilai integer, A dan B. Hitung jumlah keduanya dan hasil kali keduanya,
lalu cetak jumlah dan hasil kali tersebut.

uses wincrt;
var a,b,c,d:integer;
begin
writeln ('PERBANDINGAN ALGORITMA');
writeln ('======================');
write ('masukan nilai pertama : ');
readln (a);
write ('masukan nilai kedua : ');
readln (b);
writeln ('');
writeln ('ALGORITMA 1 - BENAR');
c:=a+b;
d:=a*b;
writeln ('HASIL PENJUMLAHAN = ',c,', ','HASIL PERKALIAN = ',d);
writeln ('');
writeln ('ALGORITMA 2 - BENAR');
d:=a*b;

17
Algoritma & Pemrograman I(Pascal) by:chairuddin

c:=a+b;
writeln ('HASIL PENJUMLAHAN = ',c,', ','HASIL PERKALIAN = ',d);
end.

Kedua algoritma di atas akan menghasilkan keluaran yang sama meskipun urutan
instruksinya diubah.

• Contoh Urutan instruksi berpengaruh terhadap solusi persoalan


Contoh kasus:
Diketahui dua buah nilai, masing-masing disimpan di dalam dua buah peubah (variabel),
A dan B. Bagaimana cara mempertukarkan nilai A dan B ? Misalnya, sebelumnya
pertukaran A=biru dan B=merah, maka setelah pertukaran, nilai A=merah dan B=biru.
Dalam mempertukarkan nilai dua buah variabel, perlu digunakan variabel bantu,
misalnya C.

program tukarbejana;
uses wincrt;
var a,b,c: string;
begin
writeln ('TUKAR ISI BEJANA');
writeln ('================');
write ('Tulis warna isi bejana A : ');
readln (a);
write ('Tulis warna isi bejana B : ');
readln (b);
writeln ('');
writeln ('ALGORITMA 1 - BENAR');
c:=a;
a:=b;
b:=c;
writeln ('Warna isi bejana A = ',a);
writeln ('Warna isi bejana B = ',b);
writeln ('');
writeln ('ALGORITMA 2 - SALAH');
c:=a;
b:=c;
a:=b;
writeln ('Warna isi bejana A = ',a);
writeln ('Warna isi bejana B = ',b)
end.

Kedua algoritma di atas akan memberikan hasil yang berbeda. Pada algoritma pertama
akan memberikan hasil yang diinginkan sebaliknya pada algortima kedua nilai A dan
nilai b tidak akan bertukar.

Contoh – contoh Runtunan Lainnya:


1. Tulislah program untuk menampilkan jumlah hari, jam, menit, dan detik dari
masukan berupa lamanya waktu dalam detik. Sebagai contoh, masukan 100.000 detik

18
Algoritma & Pemrograman I(Pascal) by:chairuddin

akan menghasilkan keluaran: 1 hari, 3 jam 46 menit dan 40 detik. Keluaran dari
program ini adalah banyaknya hari, jam, menit dan detik dari waktu detik yang
dimasukan.
Jawab:
Misalkan masukan 100.000 detik. Langkah-langkah penghitungan tersebut dapat
diltuliskan sebagai berikut:
- Banyaknya hari = 100.000 / (60 * 60 * 24) = 100.000 / 86.400 = 1 hari.
- Banyaknya jam = (100.000 – 1 * 86.400)/ (60 * 60) = 13.600 / 3600 = 3 jam
- Banyaknya menit = (13.600 – 3 * 3.600) / 60 = 2.800 / 60 = 46 menit
- Banyaknya detik = (2.800 – 46 * 60) = 2.800 – 2.760 = 40 detik.
Berdasarkan contoh penghitungan di atas, maka dapat dituliskan algoritma
pencarian hari, jam, menit dan detik adalah sebagai berikut:

program konversi_waktu;
uses wincrt;
var detik,hr,jm,mn,dt:longint;
begin
writeln ('MENGHITUNG KONVERSI WAKTU');
writeln ('=========================');
write ('masukan nilai detik : ');
readln (detik);
hr:=detik div (60*60*24);
detik:=detik-(hr*60*60*24);
jm:=detik div (60*60);
detik:=detik-(jm*60*60);
mn:=detik div (60);
dt:=detik-(mn*60);
writeln ('HASILNYA:');
writeln (hr,' hari');
writeln (jm,' jam');
writeln (mn,' menit');
writeln (dt,' detik');
end.

Program diatas juga bisa dikerjakan dengan fungsi mod. Codingnya yaitu seperti ini:
program waktu3;

uses wincrt;
var hr,jj,mm,dd,detik,sisa:longint;
begin
writeln ('MENGHITUNG WAKTU');
writeln ('================');
write ('Masukkan nilai detik: ');
readln (detik);
hr:=detik div (60*60*24);
sisa:=detik mod (60*60*24);
jj:=sisa div 3600;
sisa:=sisa mod 3600;
mm:=sisa div 60;
dd:=sisa mod 60;
write (hr,' hari ',jj,' jam ',mm,' menit ',dd,' detik')
end.

19
Algoritma & Pemrograman I(Pascal) by:chairuddin

Sedangkan jika tidak menampilkan jumlah hari, maka programya menjadi lebih
sederhana, yaitu:

program waktu2;
uses wincrt;
var jj,mm,dd,detik,sisa:longint;
begin
writeln ('MENGHITUNG WAKTU');
writeln ('================');
write ('Masukkan nilai detik: ');
readln (detik);
jj:=detik div 3600;
sisa:=detik mod 3600;
mm:=sisa div 60;
dd:=sisa mod 60;
write (jj,' jam ',mm,' menit ',dd,' detik')
end.

2. Dibaca nama karyawan dan gaji pokok bulanannya. Gaji bersih yang diterima
pegawai adalah:
gaji bersih = gaji pokok + tunjangan – pajak
Tunjangan karyawan dihitung 20% dari gaji pokok, sedangkan pajak adalah 15% dari
gaji pokok ditambah tunjangan. Nama karyawan dan gaji bersihnya dicetak ke piranti
keluaran. Buatlah programnya.
Jawab:
Tunjangan = 0.2 * gaji pokok
Pajak = 0.15 * (gaji pokok + tunjangan)
Gaji bersih = gaji pokok + tunjangan – pajak
Dari ketentuan di atas kita dapat tuliskan algoritma sebagai berikut:
program gaji;
uses wincrt;
var nama:string;
gapok,gaber,tunjangan,pajak:real;
begin
writeln ('MENGHITUNG GAJI KARYAWAN');
writeln ('========================');
write ('Masukkan nama karyawan: ');
readln (nama);
write ('Masukkan Gaji Pokok: ');
readln (gapok);
tunjangan:=0.2*gapok;;
pajak:=0.15*(gapok+tunjangan);
gaber:=gapok+tunjangan-pajak;
write (nama,' mempunyai gaji bersih sebesar ',gaber:10:2);
end.

3. Buatlah program dalam bahasa Pascal untuk meminta masukan berupa nama, nim,
absen, nilai tugas, nilai uts dan nilai uas. Berdasarkan absen, nilai tugas, nilai uts dan
nilai uas tersebut hitunglah nilai akhir mahasiswa tersebut dengan menggunakan
formula sebagai berikut:

20
Algoritma & Pemrograman I(Pascal) by:chairuddin

Nilai akhir = 10% absen + 20% tugas + 30% uts + 40% uas

program nilai_mahasiswa;
uses wincrt;
var nama,nim:string;
absen, tugas, uts, uas, na : real;
begin
writeln ('MENCARI NILAI MAHASISWA/I');
writeln ('=========================');
write ('masukan nama mahasiswa/i : ');
readln (nama);
write ('masukan NIM nya : ');
readln (nim);
write ('nilai absen : ');
readln (absen);
write ('nilai tugas : ');
readln (tugas);
write ('nilai UTS : ');
readln (uts);
write ('nilai UAS : ');
readln (uas);
na:=(0.1*absen)+(0.2*tugas)+(0.3*uts)+(0.4*uas);
write (nama,' ',nim,' mendapatkan nilai akhir ',na:5:2)
end.

21
Algoritma & Pemrograman I(Pascal) by:chairuddin

Pemilihan
Pemilihan (seleksi) digunakan jika ada masalah yang tidak dapat dipecahkan dengan
perhitungan yang pasti. Inti dari pemecahan masalah jenis ini adalah menganalisis semua
kondisi yang mungkin terjadi dan menentukan statemen yang dilakukan untuk setiap
kondisi tersebut.

Terdapat dua skema pemilihan, yaitu menggunakan statemen if dan menggunakan


statemen case. Statemen if dapat digunakan dengan bagian else atau tanpa bagian else,
tergantung masalah yang dipecahkan dan algoritma yang dipilih.
Jika terdapat dua kondisi yang komplementer maka statemen if diikuti bagian else.
Kondisi dalam statemen if dituliskan dalam ekspresi boolean. Statemen if juga dapat
digunakan secara berulang.

Statemen if digunakan untuk memilih dari dua kondisi yang berbeda berdasar ekspresi
boolean, sedangkan statemen case digunakan untuk memilih jika terdapat lebih dari dua
kondisi yang masing-masing memerlukan penanganan yang berbeda. Variabel yang
terlibat dalam statemen case harus bersifat ordinal.

STRUKTUR KENDALI “IF’

Struktur kendali aliran adalah suatu bentuk/struktur yang memiliki peranan khusus untuk
mengatur aliran urutan pengerjaan operasi atau beberapa operasi tertentu.
Salah satu contoh pernyataan kendali yaitu pernyataan if .
Pernyataan if (if statement) akan memeriksa suatu persyaratan dan menentukan apakah
syarat tersebut benar atau salah, kemudian melakukan pekerjaan sesuai dengan nilai
pernyataan tersebut.

Seleksi kondisi terbagi 4 bagian, yaitu :

If … then

Contoh :

If (kondisi) then
Statement;

If … then … else

Contoh :

If (kondisi1) then
Statement1
Else if (kondisi2) then

22
Algoritma & Pemrograman I(Pascal) by:chairuddin

Statemen2
Else
Statement3;

If … then … if

Contoh :

If (kondisi) then
Begin
If (kondisi) then
Statement1
Else
Statement2;
End
Else
Statement3;

Case … of

Contoh :

Case nama variabel of


Kondisi1:statement1;
Kondisi2:statement2;
End.

Struktur Penulisan:
Berikut adalah bentuk-bentuk dari pernyataan if yang sering
digunakan :
1. If dengan satu pernyataan (statement)
If (kondisi) then pernyataan ;

2. If dengan dua atau lebih pernyataan (statement)


If (kondisi) then
begin
pernyataan1 ;
pernyataan2 ;
…..
end;

3. If dan else
If (kondisi) then
begin
pernyataan1 ;

23
Algoritma & Pemrograman I(Pascal) by:chairuddin

pernyataan2 ;
…..
end
else
begin
pernyataan1 ;
pernyataan2 ;
…..
end;
Dari bentuk bentuk pernyataan if di atas yang harus diperhatikan adalah untuk pernyataan
if dan else, pernyataan-pernyataan setelah then tanpa menggunakan “;”. Dengan kata lain
jika pernyataan setelah then hanya terdiri dari satu pernyataan saja makan pernyataan
tersebut tanpa menggunakan “;”, namun jika pernyataan setelah then terdiri dari lebih
dari satu pernyataan makan setelah end tanpa menggunakan “;”.

Percabangan dalam FlowChart


Dalam pemrograman percabangan merupakan salah struktur kendali yang memungkinkan
pemilihan atas perintah yang akan dijalankan. Secara sederhana percabangan dapat
digambarkan seperti dalam flowchart berikut:

Pada flowchart di atas “perintah 1” akan dilakukan jika ”kondisi” benar, sedangkan
“perintah 2” akan dilakukan jika ”kondisi” salah.

Selain bentuk diatas, dalam percabangan juga dikenal istilah percabangan bersarang
(Nested IF), bentuk sederhana dari percabangan bersarang jika digambarkan dalam
flowchart bentuknya akan seperti berikut:

24
Algoritma & Pemrograman I(Pascal) by:chairuddin

Pada flowchart tersebut, “perintah 1” dilakukan saat “kondisi 1” bernilai benar,


sedangkan jika nilainya salah, maka akan dijalankan “kondisi 2”. Selanjutnya pada
“kondisi 2”, jika nilainya benar maka “perintah 2” akan dijalankan, sedangkan jika salah
maka “perintah 3” yang akan dijalankan.

Kedua bentuk percabangan di atas merupakan dasar dari bentuk percabangan selanjutnya,
yaitu percabangan kompleks. Dalam percabangan kompleks, sebuah percabangan dapat
mempunyai percabangan lain didalamnya, hal ini akan sangat dibutuhkan dalam sebuah
program yang kompleks. Berikut flowchart yang menggambarkan sebuah percabangan
kompleks.

Pada percabangan kompleks di atas, saat “kondisi 1” bernilai benar, maka akan dilakukan
pengecekan pada “kondisi 2” jika benar maka “perintah 1” akan dilakukan, jika salah
maka “perintah 2” yang akan dilakukan. Sedangkan pengecekan pada “kondisi 3” akan
dilakukan jika hasil pengecekan pada “kondisi 1” bernilai salah, selanjutnya hasil

25
Algoritma & Pemrograman I(Pascal) by:chairuddin

pengecekan dari “kondisi 3” akan menentukan perintah yang akan dilakukan, apakah
“perintah 3” atau “perintah 4”.

Dari gambar flowchart percabangan kompleks tersebut juga dapat dipilah bahwa “kondisi
1” dan “kondisi 3” mewakili percabangan bersarang, sedangkan “kondisi 2” mewakili
percabangan sederhana.

Syntax yang umum digunakan dalam percabangan adalah IF dan IF… ELSE untuk
percabangan sederhana, serta IF… ELSE IF… untuk percabangan bersarang, selain itu
ada syntax alternatif lain yang dalam bahasa pascal dikenal dengan CASE…OF atau
SWITCH dalam bahasa C, untuk lebih jelas anda dapat me-download contoh program
yang menggunakan percabangan di sini. Program tersebut dibuat dengan menggunakan
bahasa pascal.

Dalam membuat program, perintah percabangan akan sangat dibutuhkan, terutama saat
membuat program-program dengan algoritma yang kompleks.

26
Algoritma & Pemrograman I(Pascal) by:chairuddin

STRUKTUR IF THEN
Statemen Penyeleksian Kondisi
Statemen penyeleksian kondisi menunjukkan bahwa suatu statemen akan dikerjakan bila
suatu kondisi adalah benar. Jika kondisi salah satu syarat tidak terpenuhi maka statemen
yang lainnya setelah kata cadangan Else akan dikerjakan atau diproses. Kata else tidak
boleh diawali dengan titik koma (;) karena titik koma menunjukkan akhir dari statemen.

Struktur IF-THEN
Statemen IF-THEN digunakan untuk menyeleksi suatu kondisi, jika kondisi yang
diseleksi terpenuhi, maka statemen yang mengikuti THEN akan diproses. Tetapi, apabila
kondisi tidak terpenuhi, maka yang akan diproses adalah statemen berikutnya.
Contoh program:
1 {*Program Hitung Nilai*}
2 {*keterangan: Nilai per poin=10*}
3 uses wincrt;
4 var
5 Jumlahpoin, nilaiperpoin, nilai:integer;
6
7 begin
8 write('Jumlah poin:');
9 read(Jumlahpoin);
10 write('Nilai per poin:');
11 readln(nilaiperpoin);
12 nilai:=jumlahpoin*nilaiperpoin;
13 if Jumlahpoin&gt;30 then
14 nilai:=nilai+(jumlahpoin-30)*nilaiperpoin;
15 write('Nilai yang diperoleh sebesar:',nilai);
16 End.

Hasil eksekusi dari program adalah:


Contoh1:
Jumlah poin : 20
Nilai per poin : 10
Nilai yang diperoleh sebesar : 200
Contoh 2:
Jumlah poin : 40
Nilai per poin : 10
Nilai yang diperoleh sebesar : 500

STRUKTUR IF THEN ELSE


Statemen IF-THEN…ELSE digunakan untuk menyeleksi suatu kondisi. Statemen 1 akan
diproses jika kondisi yang diseleksi benar, sedangkan statemen 2 akan diproses jika
kondisi yang diseleksi tidak terpenuhi.
Contoh program:

27
Algoritma & Pemrograman I(Pascal) by:chairuddin

uses wincrt;
var
nilai:real;
begin
write(‘Masukkan nilai:’);
readln(nilai);
If nilai>60 then
writeln(‘Bagus’)
Else
writeln(‘Buruk’);
End.

Hasil eksekusi dari program adalah:


Masukkan nilai: 70
Bagus

Konsep IF .. ELSE ..
Statemen IF akan bercabang sesuai dengan hasil dari operasi boolean (true & false).
Pertama-tama kita akan pelajari percabangan satu arah :

if EkspresiBoolean then
StatemenTrue;

Bila ekspresi boolen bernilai benar (true), maka statemen akan dieksekusi. Bila bernilai
salah maka tidak akan dieksekusi. Berikut contohnya :

uses wincrt;
var a : integer;
begin
a := 1;
write('saya');
if a = 1 then
write(' bersama');
end.

Hasil eksekusi:
saya bersama

Penjelasan:
Diawal diberikan nilai pada a yaitu 1. Setelah dilakukan output (’saya’), nilai a diuji,
karena nilai a bernilai benar (a=1) maka dilakukan output (‘ bersama’).

uses wincrt;
var a : integer;
begin
a := 0;
write('saya');
if a = 1 then

28
Algoritma & Pemrograman I(Pascal) by:chairuddin

write(' bersama');
end.

Hasil eksekusi:
saya

Penjelasan:
Diawal diberikan nilai pada a yaitu 1. Setelah dilakukan output (’saya’), nilai a diuji,
karena nilai a bernilai salah (a=0) maka program melewati statemen if dan selesai
dieksekusi.

Bila statemen IF hanya mempunyai satu statemen saja, tidak diperlukan penanda (begin-
end). Tapi bila lebih maka harus menggunakan begin-end.

uses wincrt;
var a : integer;
begin
a := 1;
write('saya');
if a = 1 then begin
write(' bersama');
write(' sahabat');
end;
end.

Hasil eksekusi:
saya bersama sahabat

Penjelasan:
Diawal diberikan nilai pada a yaitu 1. Setelah dilakukan output (’saya’), nilai a diuji,
karena nilai a bernilai benar (a=1) maka dilakukan output (‘ bersama’) dan output (‘
sahabat’).

Juga terdapat percabangan dua arah :

if EkspresiBoolean then
StatemenTrue
else
StatemenFalse;

Bila ekspresi boolean menghasilkan nilai salah (false), maka akan dieksekusi statemen
setelah else. Harus diperhatikan bahwa tanda titik koma (;) sebelum else harus
dihilangkan.

uses wincrt;
var a : integer;
begin
a := 0;
write('saya');
if a = 1 then begin

29
Algoritma & Pemrograman I(Pascal) by:chairuddin

write(' bersama');
write(' sahabat');
end
else begin
write(' pascal');
write(' bersama keluarga');
end;
end.

Hasil eksekusi:
saya pascal bersama keluarga

Diawal diberikan nilai pada a yaitu 0. Setelah dilakukan output (’saya’), nilai a diuji,
karena nilai a bernilai salah (a=0) maka dilakukan output (‘ pascal’) dan output (‘
bersama keluarga’).

Terkadang kita memerlukan lebih dari dua percabangan, maka kita memerlukan if
bersarang (nested if).

if EkspresiBoolean1 then
Statemen1
else
if EkspresiBoolean2 then
Statemen2
else then
Statemen3

Penulisannya lebih mudah dipahami dengan pola seperti :

if EkspresiBoolean1 then
Statemen1
else if EkspresiBoolean2 then
Statemen2
else then
Statemen3
uses wincrt;
var a : integer;
begin
a := 3;
write('saya');
if a = 1 then
write(' bersama');
else if a = 2 then
write(' pascal');
else
write(' pemrograman');
end.

Hasil eksekusi:
saya pemrograman

30
Algoritma & Pemrograman I(Pascal) by:chairuddin

Diawal diberikan nilai pada a yaitu 1. Setelah dilakukan output (’saya’), nilai a diuji,
karena nilai a bernilai salah (a tidak sama dengan 1) maka dilakukan pengujian if
berikutnya, if berikutnya pun bernilai salah (a tidak sama dengan 2) maka dilakukan
statemen pada else yaitu output berupa (‘ pemrograman’).

Program untuk mencari akar persamaan kuadrat


Program PersamaanKuadrat;

uses crt;

var a,b,c,d,x1,x2 :real;


begin
clrscr;
writeln(‘Menghitung akar-akar persamaan kuadrat’);
writeln(‘Nilai a,b,c dimasukkan dengan jeda spasi’);
write(‘Masukkan nilai a,b,c:’);
readln(a,b,c);
d:=b*b-4*a*c;
if d<0 then writeln(‘tidak ada akar real’)
else
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln(‘x1 =’,x1:6:2);
writeln(‘x2 =’,x2:6:2);
end;
readln;
end.

Contoh Hasil Eksekusi :


- jika d = 0
Menghitung akar-akar persamaan kuadrat
Nilai a,b,c dimasukkan dengan jeda spasi
Masukkan nilai a,b,c:1 4 2
x1 = -0.59
x2 = -3.41
- jika d < 0 :
Menghitung akar-akar persamaan kuadrat
Nilai a,b,c dimasukkan dengan jeda spasi
Masukkan nilai a,b,c:1 2 6
tidak ada akar real

Catatan :
1. Di dalam IF boleh ada IF (pernyataan IF yang berkalang)

31
Algoritma & Pemrograman I(Pascal) by:chairuddin

2. Jika diinginkan kondisi = FALSE tidak mengerjakan apa-apa, maka ELSE


tidak perlu dituliskan.

3. Pernyataan ELSE tidak diakhri dengan ; (titik koma) begitu pula baris
pernyataan sebelum ELSE.

STRUKTUR IF TERSARANG
Struktur IF TERSARANG merupakan bentuk dari suatu statemen IF yang berada dalam
lingkungan statemen if lainnya.
Contoh program:
uses wincrt;
var
bil:Integer;
Begin
write(‘Masukkan sebuah bilangan:’);
readln(bil);
If (bil>0) then
Begin
writeln(‘Bilangan positif’);
If (bil mod 2=0) then
writeln (‘Bilangan genap’)
Else
writeln (‘Bilangan ganjil’);
End
Else
Begin
writeln (‘Bilangan negatif’);
End;
End.
Hasil eksekusi dari program adalah:
Masukkan sebuah bilangan: 4
Bilangan positif
Bilangan genap

Program untuk menentukan bentuk padat, cair, atau


gas benda :
uses wincrt;
var a: integer;
ket: string;
begin
write ('suhu : '); readln (a);
if a <= 0 then

32
Algoritma & Pemrograman I(Pascal) by:chairuddin

ket :='padat'
else
if (a > 0) and (a < 100) then
ket :='cair'
else
if a >=100 then
ket :='gas';
writeln('Air pada suhu tersebut berbentuk',' ',ket);
end.

STRUKTUR CASE OF
Script Pascal berikut akan menampilkan 3 pilihan, masing-masing sebagai berikut :

Jika angka = 1, maka yang karakter akan tampil “satu”.


Jika angka = 2, maka yang karakter akan tampil “dua”.
Jika angka = 3, maka yang karakter akan tampil “tiga”.
Selain daripada itu akan menampilkan “Pilihan Salah!”

Program Angka;
uses wincrt;
var
a:integer;
begin
write('Angka (1-3) = ');readln(a);
writeln;
case a of
1:write('Satu');
2:write('Dua');
3:write('Tiga');
else
write('Pilihan Salah!');
end;
end.

Statemen CASE-OF digunakan untuk memilih jika terdapat lebih dari dua kondisi yang
setiapnya memerlukan penanganan yang berbeda.
Contoh program:
uses wincrt;
var
harike:integer;
Begin
write(‘Hari ke..=’);
readln(harike);
case harike of
1:Writeln(‘Senin’);
2:Writeln(‘Selasa’);
3:Writeln(‘Rabu’);

33
Algoritma & Pemrograman I(Pascal) by:chairuddin

4:Writeln(‘Kamis’);
5:Writeln(‘Jumat’);
6:Writeln(‘Sabtu’);
7:Writeln(‘Minggu’);
End;
End.
Hasil eksekusi dari program adalah:
Hari ke..= 4
Kamis

Program Pencari Tanggal


ProgramPencariHar;
uses WinDos, Wincrt;
const
days:array [0..6] of string [9]=
(‘Minggu’,'Senin’,'Selasa’,'Rabu’,'Kamis’,'Jumat’,'Sabtu’);

var
th, tg, bl, dow: word;
begin
GetDate(th,bl,tg,dow);
write(‘Hari ini adalah ‘ ,days[dow],’, ‘,tg:0,’ ‘);
case bl of
1:begin
write(‘Januari’);
end;
2:begin
write(‘Februari’);
end;
3:begin
write(‘Maret’);
end;
4:begin
write(‘April’);
end;
5:begin
write(‘Mei’);
end;
6:begin
write(‘juni’);
end;
7:begin
write(‘Juli’);
end;
8:begin

34
Algoritma & Pemrograman I(Pascal) by:chairuddin

write(‘Agustus’);
end;
9:begin
write(‘September’);
end;
10:begin
write(‘Oktober’);
end;
11:begin
write(‘November’);
end;
12:begin
write(‘Desember’);
end;

end;
write(‘ ‘,th:0)

end.

STRUKTUR CASE OF ELSE


Struktur CASE-OF…ELSE merupakan pengembangan dari struktur CASE-OF dan juga
merupakan pengembangan dari standar Pascal. Pada struktur CASE-OF bila tidak ada
kondisi yang terpenuhi berarti tidak ada statemen di dalam lingkungan CASE-OF yang
diproses. Dengan struktur CASE-OF…ELSE, bila tidak ada kondisi yang terpenuhi,
maka statemen yang akan diproses dalam lingkungan CASE-OF adalah statemen yang
ada di ELSE.
Contoh program:
uses wincrt;
var
Pilihan:byte;
R,L,T,Luas:real;
Begin
R:=0;
L:=0;
T:=0;
ClrScr;
GotoXY(10,2);Writeln(‘–> PILIHAN < --');
GotoXY(10,4);Writeln('1.Menghitung Luas Lingkaran');
GotoXY(10,6);Writeln('2.Menghitung Luas Segitiga');
GotoXY(10,8);Writeln('3.Menghitung Luas Bujur Sangkar');
GotoXY(10,20);Write('Pilih Nomer(1-3)?');Read(pilihan);
ClrScr;

35
Algoritma & Pemrograman I(Pascal) by:chairuddin

case Pilihan of
1:Begin
Write ('Jari-jari lingkaran?');Readln(R);
Luas:=Pi*R*R;
Writeln('Luas Lingkaran=',Luas:9:2);
End;
2:Begin
Write('Panjang sisi alas?');Readln(L);
Write('Tinggi Segitiga?');Readln(T);
Luas:=0.5*L*T;
Writeln;
Writeln('Luas segitiga=',Luas:9:2);
End;
3:Begin
write('Panjang bujur sangkar?');Readln(T);
Write('Lebar bujur sangkar?');Readln(L);
Luas:=T*L;
Writeln;
Writeln('Luas bujur sangkar=',Luas:9:2);
End;
Else
Begin
Writeln('Pilihannya hanya 1,2,atau3');
Writeln('Anda tadi pilih nomer berapa?......Sembarangan aja milih!!!!!!!');
End;
End;
End.
Hasil eksekusi program adalah:
-->PILIHAN<–
Menghitung Luas Lingkaran
Menghitung Luas Segitiga
Menghitung Luas Bujur-Sangkar

Pilih Nomer (1-3)? 9


Anda tadi pilih nomer berapa?……

36
Algoritma & Pemrograman I(Pascal) by:chairuddin

Contoh Program Pemesanan Tiket Bus


uses crt;
var
jurusan,jenisbus: string;
total,diskon,bayar: integer;
harga:real;
begin
clrscr;
writeln(‘ Pemesanan Tiket Bus Online ‘);
writeln(‘ Selamet Jaya Perkasa ‘);
writeln(‘ Jurusan Jakarta, Cianjur dan Majalengka ‘);
writeln(‘+—————+———————–+———–+’);
writeln(‘| Kode Jurusan | AC | Ekonomi |’);
writeln(‘+—————+———————–+———–+’);
writeln(‘|[1] Jakarta | Rp.40.000 (Disc. 10%) | Rp.30.000 |’);
writeln(‘|[2] Cianjur | Rp.25.000 | Rp.20.000 |’);
writeln(‘|[3] Majalengka | Rp.30.000 (Disc. 5%) | Rp.25.000 |’);
writeln(‘+—————+———————–+———–+’);
writeln(”);
writeln(”);
writeln(‘Silahkan isi data dibawah ini :’);
begin
write(‘- Kode Jurusan : ‘);readln(jurusan);
write(‘- Jenis Bus : ‘);readln(jenisbus);
write(‘- Jumlah Tiket : ‘);readln(total);
write(‘- Harga bayar : ‘);
if (jurusan=’1′) and (jenisbus=’ac’)then harga:=40000-(40000*0.1);
if (jurusan=’1′) and (jenisbus=’ekonomi’)then harga:=30000;
if (jurusan=’2′) and (jenisbus=’ac’)then harga:=25000;
if (jurusan=’2′) and (jenisbus=’ekonomi’)then harga:=20000;
if (jurusan=’3′) and (jenisbus=’ac’)then harga:=30000-(30000*0.05);
if (jurusan=’3′) and (jenisbus=’ekonomi’)then harga:=25000;

writeln(‘Rp.’,total*harga:0:2);
writeln(”);
writeln(‘Terimaksih atas pemesanannya’);
writeln(‘Data Anda sedang kami proses…’);
readln;
end;
end.

37
Algoritma & Pemrograman I(Pascal) by:chairuddin

Struktur Pengulangan

Perulangan
Pengulangan (loop) merupakan bentuk yang sering ditemui di dalam suatu program aplikasi. Di
dalam bahasa Pascal, dikenal tiga macam perulangan, yaitu dengan menggunakan pernyataan
For, While-Do, dan Repeat…Until.

1.1 Struktur Perulangan For


Perulangan dengan pernyataan For digunakan untuk mengulang pernyataan atau satu
blok pernyataan berulang kali sejumlah yang ditentukan. Perulangan dengan pernyataan
For dapat berbentuk perulangan positif, perulangan negatif dan perulangan tersarang.
1. Perulangan positif.
Perulangan positif adalah perulangan dengan penghitung dari kecil ke besar atau
pertambahan positif. Perulangan positif dapat dibentuk dengan menggunakan
pernyataan For-To-Do, dengan bentuk umum:

For variabel-kontrol:=nilai awal To nilai akhir Do pernyataan

Variabel kontrol, nilai awal, nilai akhir harus betipe integer

Contoh
Var
I:Integer;
Begin
For I:= 1 to 5 Do Writeln(‘Pascal’);
End.

Bila program dijalankan akan menghasilkan:


Pascal
Pascal
Pascal
Pascal
Pascal

Penjelasan:
Pernyataan Writeln(‘Pascal’) akan diulang sebanyak 5 kali, yaitu dengan
penghitung dari nilai awal 1 sampai dengan nilai akhir 5.

Apabila pernyataan diulang lebih dari satu pernyataan maka seteleh DO harus
memakai Begin kemudian beberapa pernyataan yang akan diulang dan diakhiri
dengan End;.

Contoh
Var
I:Integer;
Begin
For I:= 1 to 2 Do

38
Algoritma & Pemrograman I(Pascal) by:chairuddin

Begin
Write(‘Pascal’);
Writeln(‘Turbo’);
End;
End.

Bila program dijalankan akan menghasilkan:

PascalTurbo
PascalTurbo

2. Perulangan negatif
Perulangan negatif adalah perulangan dengan penghitung dari besar ke kecil atau
pertambahan negatif. Perulangan negatif dapat dibentuk dengan menggunakan
pernyataan For-DownTo-Do, dengan bentuk umum:

For variabel-kontrol:=nilai awal DownTo nilai akhir Do penyataan

Contoh
Var
I:integer;
Begin
For I:=5 downto 1 do
Begin
Writeln(I);
End;
End.
Bila program dijalankan maka akan menghasilkan:

5
4
3
2
1

3. Perulangan tersarang
Perulangan tersarang adalah perulangan yang berbeda di dalam perulangan yang
lainnya. Perulangan yang lebih dalam akan diproses terlebih dahulu sampai habis,
kemudian perulangan yang lebih luar baru akan akan bertambah, mengerjakan
perulangan yang lebh dalam lagi mulai dari nilai awalnya dan seterusnya.

Contoh
Var
I,J:Integer;
Begin
For I:=1 to 5 Do
Begin
For j:=1 to 3 Do
Begin
Write(I:8,J:3);
End;

39
Algoritma & Pemrograman I(Pascal) by:chairuddin

Writeln;
End;
End.

Bila program dijakankan akan menghasilkan:

1 1 1 2 1 3
2 1 2 2 2 3
3 1 3 2 3 3
4 1 4 2 4 3
5 1 5 2 5 3

Perulangan tersarang banyak digunakan dalam aplikasi matrik dengan menggunakan


variabel tipe larik. (Lebih lanjut akan di bahas pada materi matrik)

1.2 Struktur Perulangan While-Do


Perulangan ini menggunakan pernyataan While—Do. Pernyataan While—Do digunakan
untuk melakukan proses perulangan suatu pernyataan atau blok pernyataan terus-menerus
selama kondisi ungkapan logika pada While masih bernilai logika benar.

Bentuk Umum

While kondisi ungkapan Do Pernyataan

Contoh
Var
I:Integer;
Begin
I:=0;
While I<5 Do
Begin
Writeln(I);
I:=I+1;
End;
End.
Bila program dijalankan akan menghasilkan:

0
1
2
3
4

Penjelasan:
Perulangan dari while akan terus menerus dikerjakan bila kondisinya masih benar. Dalam
hal ini kondisinya adalah I dan bila nilai I kurang dari 5, berarti kondisi di dalam While
masih terpenuhi dan perulangan akan selesai setelah nilai I lebih besar atau sama dengan
5.

40
Algoritma & Pemrograman I(Pascal) by:chairuddin

1.3 Struktur Repeat…Until


Struktur Repeat…Until digunakan untuk mengulang pernyataan-pernyataan atau blok
pernyataan sampai kondisi yang diseleksi di Until tidak terpenuhi. Bentuk mumnya
adalah:

Repeat pernyataan Until

Contoh
Var
I:Integer
Begin
I:=0;
Repeat
I:=I+1;
Writeln(I);
Until I=5;
End.

Bila program dijalankan akan menghasilkan:


1
2
3
4
5

Struktur pengulangan FOR..TO..DO.. digunakan pada suatu kondisi dimana sebuah


pernyataan akan dillakukan perulangan sebayak X kali tersantung statement yang akan
ditentukan. sebagai contoh:

for a:= 1 to 5 do
write (‘gue gitu loh’)

pada statement diatas maka akan terjadi pengulangan penulisan sebanyak 5 kali.

LaughingWHILE..DO.. digunakan pada kondisi dimana suatu pernyataan yang akan


diulang belum tentu berapa kali terjadi pengulangan. pengulangan baru akan berakhir jika
kondisi sudah terpenuhi.

while ( x > 0 ) do
x := x – 1

statement diatas akan terus terjadi pengulangan selama nilai x masih positif

WinkREPEAT UNTIL : sama seperti WHILE DO hanya saja pengecekan kondisi


dilakukan pada sat terakhir.

41
Algoritma & Pemrograman I(Pascal) by:chairuddin

repeat
x := x – 1
until ( x = 100 )

Foot in mouthIF THEN ELSE : digunakan untuk sebuah kondisi dimana suatu pernyataan
akan di uji. jika kondisi terpenuha maka akan lanjut ke statement berikutnya tetapi jika
tidak terpenuhi maka program akan jalan ke pernyataan linyya.

if lapar then
writeln (’silakan makan sampai puazzzz’);
else
write (‘yuuuuuuuuuuuuuukk’);

perbedaan WHILE DO dengan REPET UNTIL adalah terletak pada pengujian kondisi.
jika REPEAT UNTIL perintah dilakukan terlebih dahulu baru dilakukan pengujian.
sedangkan WHILE DO pengujian dilakukan diawal beru perintah dieksekusi.
perbaaan lainya yaitu REPEAT UNTIL mengulang pernyataan selama kondisi belum
terpenihi sedang WHILE DO mangulang pernyataan selama kondisimasih terpenuhi.

Pascal :: Contoh-Contoh Penggunaan Perulangan


For..Do..
Berikut ini adalah sebagian contoh perulangan dengan penerapan statemen For.. Do..

Uses Wincrt;
const
akhir = 4;
var
baris,kolom : integer;
begin
for baris := akhir downto 1 do
begin
for kolom := baris downto 1 do
write(kolom);
writeln;
end;
end.

Hasil :
4321
321
21
1

Uses Wincrt;
const

42
Algoritma & Pemrograman I(Pascal) by:chairuddin

akhir = 4;
var
baris,kolom : integer;
begin
for baris := akhir downto 1 do
begin
for kolom := 1 to baris do
write(kolom);
writeln;
end;
end.

Hasil :
1234
123
12
1

Uses Wincrt;
const
akhir = 4;
var
baris,kolom : integer;
begin
for baris := 1 to akhir do
begin
for kolom := 1 to baris do
write(baris);
writeln;
end;
end.

Hasil :
1
22
333
4444

Uses Wincrt;
const
akhir = 4;
var
baris,kolom : integer;
begin
for baris := akhir downto 1 do
begin
for kolom := baris downto 1 do
write(baris);
writeln;
end;
end.

43
Algoritma & Pemrograman I(Pascal) by:chairuddin

Hasil :
4444
333
22
1

Uses Wincrt;
const
akhir = 3;
var
baris,kolom : integer;
begin
for baris := akhir downto 1 do
begin
for kolom := baris downto 1 do
write(baris,' ',kolom);
writeln;
end;
end.

Hasil :
3 33 23 1
2 22 1
1 1

Uses wincrt;
var baris,kolom,jumbaris :integer;
begin
write ('Jumlah Baris : ');readln(jumbaris);
FOR BARIS:=1 TO jumbaris do
begin
write ('*': jumbaris baris);
FOR kolom := 2 TO (2 *baris -1 ) do
begin
write('*');
end;
writeln;
end;
end.

Hasil :
(baris = 4)
*
***
*****
*******

Pascal :: Menghitung Faktorial

44
Algoritma & Pemrograman I(Pascal) by:chairuddin

Script berikut akan melakukan perhitungan faktorial dari bilangan yang diinputkan,
silahkan dicoba sendiri.

program Faktorial;
uses wincrt;
procedure faktorial (var fak, hasil : integer);
var
i:integer;
begin
hasil := 1;
for i := 2 to fak do
hasil := Hasil * i;
End;
Var
N,Hasil_fak:integer;
Begin
Write ('Nilai yang akan difaktorialkan = '); Readln (N);
Faktorial (N,Hasil_Fak); Writeln;
Writeln ('Hasil Faktorial = ',Hasil_fak);
End.

Pascal :: Menghitung Nilai Rata-Rata Kelas


Script Pascal berikut adalah aplikasi yang akan melakukan perhitungan nilai rata-rata
kelas, statemen while do akan mengakibatkan perulangan secara terus menerus. Untuk
berhenti menginput data, isikan No. Induk dengan karakter ‘xx’, tanpa tanda kutip.
Selamat Mencoba!

Program data_siswa;
Uses Wincrt;
Var
No_Siswa:String[5];
B_Data,J_Data,Nilai,Bil:Integer;
Rata:Real;
Begin
Writeln;
Writeln(' Program Penghitung Nilai Rata-Rata Kelas');
Writeln(' ----------------------------------------');
Writeln;
Writeln (' Jumlah Data Yang Sudah Masuk : ',B_Data);
Writeln;
Write(' No. Induk : ');
Readln (No_Siswa);
Write(' Nilai : ');
Readln (Bil);
Nilai:=0;
B_Data:=0;
Clrscr;
While No_Siswa <> 'xx' do
Begin
B_Data:=B_Data+1;

45
Algoritma & Pemrograman I(Pascal) by:chairuddin

Nilai:=Nilai+Bil;
Writeln;
Writeln(' Program Penghitung Nilai Rata-Rata Kelas');
Writeln(' ----------------------------------------');
Writeln;
Writeln (' Jumlah Data Yang Sudah Masuk : ',B_Data);
Writeln;
Write(' No. Induk : ');
Readln (No_Siswa);
Write(' Nilai : ');
Readln (Bil);
Clrscr;
End;
Rata := Nilai/B_Data;
Writeln;
Writeln(' Hasil Perhitungan Nilai Rata-Rata Kelas');
Writeln(' ---------------------------------------');
Writeln;
Writeln (' Jumlah Data = ',B_Data);
Writeln (' Nilai Total = ',Nilai);
Writeln (' Rata-rata = ',Rata:5:2);
End.

Kalkulator Pascal
Script berikut menerapkan penggunaan procedure serta statemen Repeat-Until dan
Case-Of untuk membangun sebuah kalkulator sederhana menggunakan Bahasa Pascal.
Untuk lebih jelasnya silahkan dicoba sendiri listing berikut :

Program Calculator;
uses wincrt;
const
Kol = 10; kol2=35;
Var
Bil1,Bil2,Bil3,Pilih : Integer;
procedure masukkan;
begin
clrscr;
gotoxy(kol2,4);writeln('----------------------');
gotoxy(kol2,5);writeln(' Masukan Bilangan ');
gotoxy(kol2,6);writeln('----------------------');
gotoxy(kol2,7);writeln('Bilangan 1 : ');
gotoxy(kol2,8);writeln('Bilangan 2 : ');
gotoxy(kol2,9);writeln('----------------------');
gotoxy(kol2,10);writeln('Hasil Operasi : ');
gotoxy(kol2,11);writeln('----------------------');
gotoxy(kol2+20,7);readln(bil1);
gotoxy(kol2+20,8);readln(bil2);
end;
Procedure Tambah;
begin
masukkan;
bil3 := bil1 + bil2;

46
Algoritma & Pemrograman I(Pascal) by:chairuddin

gotoxy(kol2+20,10);writeln(bil1,'+',bil2,'=',bil3);
readln;
end;
Procedure Kurang;
begin
masukkan;
bil3 := bil1 - bil2;
gotoxy(kol2+20,10);writeln(bil1,'-',bil2,'=',bil3);
readln;
end;
Procedure Kali;
begin
masukkan;
bil3 := bil1 * bil2;
gotoxy(kol2+20,10);writeln(bil1,'*',bil2,'=',bil3);
readln;
end;
Procedure bagi_bulat;
begin
masukkan;
bil3 := bil1 div bil2;
gotoxy(kol2+20,10);writeln(bil1,'div',bil2,'=',bil3);
readln;
end;
Procedure Sisa_bagi;
begin
masukkan;
bil3 := bil1 mod bil2;
gotoxy(kol2+20,10);writeln(bil1,'mod',bil2,'=',bil3);
readln;
end;
(* Program Utama *)
begin
repeat
clrscr;
gotoxy(kol,4); writeln('--------------------------');
gotoxy(kol,5); writeln('Operasi Bilangan Bulat');
gotoxy(kol,6); writeln('--------------------------');
gotoxy(kol,7); writeln('1. Penambahan');
gotoxy(kol,8); writeln('2. Pengurangan');
gotoxy(kol,9); writeln('3. Perkalian');
gotoxy(kol,10);writeln('4. Pembagian Integer {Div} ');
gotoxy(kol,11); writeln('5. Sisa Hasil Bagi {Mod} ');
gotoxy(kol,12); writeln('6. Selesai');
gotoxy(kol,13); writeln('--------------------------');
gotoxy(kol,14); writeln('Pilihan Anda [1..6] : [ ] ');
gotoxy(kol,15);writeln('--------------------------');
gotoxy (kol+25,14);readln(pilih);
case pilih of
1 : Tambah;
2 : Kurang;
3 : Kali;
4 : Bagi_bulat;
5 : Sisa_bagi;
end;
until pilih = 6;
end.

47
Algoritma & Pemrograman I(Pascal) by:chairuddin

Bab 3 Bentuk Perulangan & Penyeleksian Kondisi  

Bab 3 Bentuk Perulangan & Penyeleksian Kondisi

Materi
1. Bentuk – bentuk Perulangan

Dalam hampir setiap program yang kompleks mutlak memerlukan suatu perulangan dan
percabangan. Tujuan perulangan disini adalah untuk mengulang statement atau blok
statement berulang kali sesuai
sejumlah yang ditentukan pemakai. Dalam materi ini akan memberikan gambaran konsep
dasar dari pengertian diatas.

a) Perulangan For.
Perulangan dengan statemen For digunakan untuk mengulang statemen atau suatu blok
statemen berulang kali. Perulangan dengan statemen For dapat berupa perunlangan
positif dan perulangan negatif.

• Perulangan For positif


contoh : perulangan positif untuk satu statement :
Uses Crt;
Var
i : Integer;
Begin
For i := 1 To 5 Do Writeln ('I Love Dinda’);
END.
Maka bila program diatas dicompile
hasilnya :
I Love Dinda
I Love Dinda
I Love Dinda
I Love Dinda
I Love Dinda
Penjelasan : Berati statemen I Love Dinda akan diulang sebanyak 5 kali yaitu dengan
menghitung nilai i dari i ke 1 sampai nilai i terakhir yaitu i ke 5.

# Contoh dengan menggunakan blok statement: cara penulisannya dengan pada awal blok
diawali dengan Begin dan pada akhir blok diakhiri dengan End;
Uses Crt;
Var
i : Integer;
Begin
For i:= 1 To 10 Do
Begin
Writeln ('I Love Dinda'); { blok statement }
End;

48
Algoritma & Pemrograman I(Pascal) by:chairuddin

End.
Hasil yang akan didapat akan sama dengan contoh yang pertama, tapi yang harus diingat
disini untuk penggunaan blok pada perulangan For biasanya mempunyai banyak
statement [lebih dari 1 statement]

# Contoh 3 : Penggunaan perulangan For dalam blok statement untuk membuat tabel

Uses Crt;
Var
a,b,c : Integer;
bagi : Real;
Begin
Writeln('----------------------------------------------');
Writeln(' a a*a a*a*a 1/a ');
Writeln('----------------------------------------------');
For a := 1 To 10 Do
Begin
b:= a*a;
c:=a*a*a;
bagi := 1/a;
Writeln(a:4,c:10,d:10,bagi:12:3);
End;
Writeln ('----------------------------------------------');
End.
maka hasilnya :
----------------------------------------------
a a*a a*a*a 1/a
----------------------------------------------
1 1 1 1.000
2 4 8 0.500
3 9 27 0.333
4 16 64 0.250
5 25 125 0.200
6 36 216 0.167
7 49 343 0.143
8 64 512 0.125
9 81 729 0.111
10 100 1000 0.100
----------------------------------------------
• Perulangan For negatif : Perulangan negatif adalah perulangan dengan menghitung
(counter) dari besar ke kecil.

Statement yang digunakan adalah For-DownTo-Do


contoh :
Uses Crt;

49
Algoritma & Pemrograman I(Pascal) by:chairuddin

Var
i : Integer;
Begin
For i := 10 DownTo 1 Do Write (i:3);
End.
Hasil :
10 9 8 7 6 5 4 3 2 1

• Perulangan For tersarang


Perulangan For tersarang adalah perulangan For yang berada pada perulangan yang
lainnya. Perulangan yang lebih dalam akan diproses terlebih dahulu sampai habis,
kemudian perulangan yang lebih luar baru akan bertambah, mengerjakan perulangan
yang lebih dalam lagi mulai dari nilai awalnya dan seterusnya.
Contoh :
Var
a,b : Integer;
Begin
For a := 1 To 3 Do
Begin
For b := 1 To 2 Do Write (a :4,b:2);
Writeln;
End;
End.
Hasil :
1112
2122
3132

• Perulangan While - Do
Penyeleksian kondisi digunakan untuk agar program dapat menyeleksi kondisi, sehingga
program dapat menentukan tindakan apa yang harus dikerjakan, tergantung dari kondisi
yang diseleksi tersebut. Perulangan While – Do tidak dilakukan jika kondisi tidak
terpenuhi.
Contoh :
Uses Crt;
Var i : Integer;
Begin
i := 0;
While < 5 do
Begin
Write (i:3);
Inc (i); { sama dengan i:=i+1 }
End;
End.
Hasilnya :
01234

50
Algoritma & Pemrograman I(Pascal) by:chairuddin

• Perulangan While – Do tersarang


Perulangan While – Do tersarang (nested While - Do) merupakan perulangan While – Do
yang satu di dalam perulangan While – Do yang lainnya.
Contoh :
Uses Crt;
Var
a, b : Integer;
Begin
ClrScr;
a:=1;
b:=1;
While a < 4 Do{ loop selama a masih lebih kecil dari 4 }
Begin
a := a+1;
While b < 3 Do{ loop selama b masih lebih kecil dari 3 }
Begin
Write (a:3,b:2);
b:=b+1;
End;
End;
Readln;
End.

• Perulangan Repeat - Until.


Repeat – Until digunakan untuk mengulang statement-statemen atau blok statement
sampai (Until) kondisi yang diseleksi di Until tidak terpenuhi.
Sintak dari statement ini adalah :
Contoh :
Var
i : Integer;
Begin
i:=0;
Repeat
i:= i+1;
Writeln (i);
Until i=5;
End.
hasil :
1
2
3
4
5

• Repeat – Until tersarang

51
Algoritma & Pemrograman I(Pascal) by:chairuddin

Repeat – Until tersarang adalah suatu perulangan Repeat - Until yang satu berada
didalam perulangan Repeat – Until yang lainnya.
Contoh :
Var
a,b,c : Real;
Begin
Writeln('========================================');
Writeln(' sisi A sisi B Sisi C ');
Writeln (' =======================================');
a:= 1;
Repeat { perulangan luar }
b := 0;
Repeat{ perulangan dalam }
c:=Sqrt (a*a+b*b);
Writeln (a:6:2, b:9:2, c:9:2);
b:=b+5;
Until b>25; { berhenti jika b lebih besar dari 5 untuk
perulangan dalam }
a:=a+1;
Until a>3; { berhenti jika a lebih besar dari 3 untuk
perulangan luar }
Writeln(' =======================================');
End.

• Percabangan

If - Then
Bentuk struktur If – Then adalah sebagai berikut :
If Kondisi Then Statement
Ungkapan adalah kondisi yang diseleksi oleh statement If. Bila kondisi yang diseleksi
terpenuhi, maka statement yang mengikuti Then akan diproses, sebaliknya bila kondisi
tidak terpenuhi, maka yang akan diproses statement berikutnya.
Misalnya :
If Pilihan = 2 Then
Begin{ jika kondisi terpenuhi, Yaitu jika pilihan = 2 }
......
......
End
Else{ jika kondisi tidak terpenuhi, yaitu jika pilhan tidak sama dengan 2}
Begin
.......
.......
End;
Contoh Program :
Uses Crt;
Var

52
Algoritma & Pemrograman I(Pascal) by:chairuddin

Nilai : Real;
Begin
Write ('Jumlah Nilai :');
Readln (nilai); { Pemasukan data }
If nilai > 60 Then { seleksi kondisi variabel nilai }
Writeln('Lulus') { Dilaksanakan jika nilai lebih besar dari 60 }
Else
Writeln('Tidak lulus'); { Dilaksanakan jika variabel nilai lebih kecil dari 60 }
End.
Hasil :
Jika kita Memasukan 40 pada varibel nilai, Maka program diatas akan mencetak Tidak
lulus.

If tersarang (nested If)♣


Struktur If tersarang merupakan bentuk dari suatu statement If berada di dalam
lingkungan statemen If yang lainya. Bentuk statement If tersarang sebagai berikut :

If kodisi1 Then atau If Kondisi1 Then


If kondisi2 Then Begin
statemen1 IF kondisi2 Then
Else statemen1
statemen2; Else
statemen2
End;

Case - Of
Struktur Case – Of mempunyai suatu ungkapan logika yang disebut dengan selector dan
sejumlah statemen yang diawali dengan suatu label permasalahan (case label) yang
mempunyai tipe sama dengan selector.
Statement yang mempunyai case label yang bernilai sama dengan case label yang bernilai
sama dengan nilai selector akan diproses sedang statemen yang lainya tidak.

Bentuk struktur dari Case - Of:

Case Variabel Kondisi Of


Case – Label 1; Statement 1;
Case – Label 2; Statement 2;
Case – Label 3; Statement 3;
Case – Label 4; Statement 4;
........
........
Case – Label n ; Statement n ;
End ; { end dari case }

Daftar Case label dapat berupa konstanta, range dari konstanta yang bukan bertipe real.
Contoh program ;

53
Algoritma & Pemrograman I(Pascal) by:chairuddin

Program nilai;
Var
nil : Char ;
Begin
Write ('Nilai Numerik yang didapat :');
Readln (nil);
Case nil Of
'A': Writeln ('Sangat Baik’);
'B': Writeln('Baik’);
'C': Writeln('Cukup');
'D': Writeln('Kurang');
'E': Writeln('Sangat Kurang');
End;
End.
hasil : Nilai Numerik yang didapat : B Input Baik
Contoh Listing Program untuk Dicoba

1. Program input data dengan array.


Program Pemakaian_Array_Untuk_10_data_dengan_menggunakan_For;

Uses Crt;
Const
garis='------------------------------------------------------';
Var
nil1,nil2 : Array [1..10] Of 0..100; {Array dgn Type subjangkauan}
npm : Array [1..10] Of String [8];
nama : Array [1..10] Of String [15];
n,i,bar : Integer;
jum : Real;
tl : Char;
Begin
ClrScr;
{ pemasukan data dalam array }
Write ('Mau Isi Berapa Data:');
Readln (n);
For i:= 1 To n Do
Begin
ClrScr;
GotoXY(30,4+1); Write('Data Ke-:',i:2);
GotoXY(10,5+i); Write('NPM :'); Readln (npm[i]);
GotoXY(10,6+i); Write('Nama :'); Readln (nama[i]);
GotoXY(10,7+i); Write('Nilai 1 :'); Realdn(nil 1[i]);
GotoXY(10,8+i); Write('Nilai 2 :'); Readln(nil 2[i]);
End;
{ proses data dalam array }
ClrScr;

54
Algoritma & Pemrograman I(Pascal) by:chairuddin

GotoXY(5,4); Write(Garis);
GotoXY(5,5); Write ('No');
GotoXY(9,5); Write ('NPM');
GotoXY(18,5); Write ('Nama');
GotoXY(34,5); Write ('Nilai 1');
GotoXY(41,5); Write ('Nilai 2');
GotoXY(47,5); Write ('Rata');
GotoXY(54,5); Write ('Abjad’);
GotoXY(5,6); Write (Garis);
{ proses Cetak isi array dan seleksi kondisi }
bar := 7;
For i:= 1 To n Do
Begin
jum:=(nil1[i]+nil2[i])/2;
If jum>= 90 Then tl:='A'
Else
If jum>80 Then tl:='B'
Else
If jum>60 then tl:='C'
Else
If jum 50 Then tl:='D'
Else
tl:='E';
{ cetak hasil yang disimpan di array dan hasil }
{ penyeleksian kondisi }
GotoYX(5,bar); Writeln(i:2);
GotoYX(9,bar); Writeln (NPM[i]);
GotoYX(18,bar); Writeln (NAMA[i]);
GotoYX(34,bar); Writeln (NIL1[i]:4);
GotoYX(41,bar); Writeln (NIL2[i]:4);
GotoYX(47,bar); Writeln (jum:5:1);
GotoYX(54,bar); Writeln (tl);
bar:=bar+1;
End;
GotoXY(5,bar+1);Writeln(garis);
Readln;
End.

2. Program jendela bergerak.


Program Window_Bergerak_dgn_delay;
Uses Crt;
Var i : Integer;
Begin
For i:=1 To 15 Do
Begin
Sound (i*100);

55
Algoritma & Pemrograman I(Pascal) by:chairuddin

Delay (100);
NoSound;
End;
TextBackGround(black);
ClrScr;
For i := 1 To 9 Do
Begin
TextBackGround(white);
Window (42-i*4,10-i,38+i*4,15+i);
ClrScr;
Delay(100);
End;
TextColor(15);
GotoXY(28,2);Writeln('c');
GotoXY (8,3); Writeln ('3');
GotoXY (28,4); Writeln ('A');
TextColor(black);
GotoXY (44,3); Writeln ('3');
GotoXY (44,2); Writeln ('&');
TextColor (29,4); Writeln ('U');
TextColor (red*25);
GotoXY (30,3); Writeln ('B E L A J A R');
TextColor (black);
GotoXY (5,5); Write('c');
For i := 6 To 64 Do
Begin
GotoXY (i,5); Writeln ('');
End;
For i := 6 To 20 Do
Begin
GotoXY(5,i); Writeln('3 ');
End;
GotoXY (5,21); Writeln (' ');
TextColor(white);
GotoXY(65,5); Write('U');
For i := 6 To 65 Do
Begin
GotoXY (i,21); Writeln(' `);
End;
For i := 6 To 20 Do
Begin
GotoXY(65,i); Writeln('3');
End;
GotoXY (65,21); Writeln ('c');
TextColor(yellow);
Readln;

56
Algoritma & Pemrograman I(Pascal) by:chairuddin

End.

Soal Latihan
Buatlah program untuk soal dibawah ini dengan tampilan sebagus mungkin (gunakan
perintah Window, Textcolor dll). Jumlah suku sesuai dengan input dari keyboard.
1. Buat deret hitung 3,7,11,15,......................=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
2. Buat deret ukur 3,9,27,................................=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
3. Buat tabel deret bergoyang 1,-2,4,-8,...........=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
4. Buat deret suku harmonis 1,1/2,1/3,.............=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
5. Buat deret fibbonaci 1,1,2,3,5,.....................=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
6. Buat deret seperti berikut 1,-2,3,-4,.............=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
7. Buat deret kuadrat 1, 4, 9,............................=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
8. Buat deret seperti berikut 100, 90, 70 ,...........=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
9. Buat deret seperti berikut 256, 196, 144,............=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
10. Buat deret seperti berikut 1, 1, 1, 2, 2, 3, 6, 4, 24, 5..........=?
Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T.
11. Buatlah program untuk mencari faktorial, sesuai dengan input yang diminta.
12. Buatlah program huruf yang berjatuhan sehingga membentuk suatu kalimat yang
telah diinput dari keyboard .

57
Algoritma & Pemrograman I(Pascal) by:chairuddin

ARRAY PADA PASCAL

Array adalah variabel yang dapat menyimpan lebih dari satu nilai sejenis. Terdapat dua bagian
penting yaitu elemen array yang merupakan nilai dan endeks array yang merupakan nilai urut
untuk mengakses nilai pada array.

Array adalah tipe data terstruktur yang terdiri dari sejumlah komponen-komponen
yang mempunyai tipe sama. Komponen-komponen tersebut disebut sebagai
komponen type, larik mempunyai jumlah komponen yang jumlahnya tetap.
Banyaknya komponen dalam larik ditunjukkan oleh suatu index, dimana tiap
komponen di array dapat diakses dengan menunjukkan nilai indexnya atau
subskript.

Berikut ini contoh array A dengan 10 buah elemen tiap elemen memiliki nilai antara 10 hingga
100.

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
1 2 3 4 5 6 7 8 9 10
10 20 30 40 50 60 70 80 90 100

Deklarasi Array.
Array dideklarasikan pada bagian deklarasi. Deklarasi umum dari array adalah
NamaArray : array[IndeksAwal..IndeksAkhir] of tipe_data;
Bentuk umum deklarasi array adalah:
type tipe_array = array [range_index] of ipe_data;
var var_array : tipe_array; (1.1)
Atau dapat langsung dituliskan sebagai berikut:
var var_array = array [range_index] of tipe_data; (1.1)
var_array adalah nama variabel array yang dipakai untuk mengidentifikasi array.
Pemilihan nama variabel array mengikuti aturan pemberian nama variabel secara umum.
Range_index adalah batasan index yang digunakan untuk mengidentifikasi elemen array.
Range_index menentukan jumlah elemen array, yang jumlahnya tidak akan berubah
(statis) mulai saat awal disediakan (program dijalankan) hingga program selesai
dijalankan. Misalnya range 0..9 atau 1..10 atau –1..8 atau ‘A’..’J’ akan menentukan
jumlah elemen array sebanyak 10 buah.
Setiap elemen array diidentifikasi oleh salah satu index yang berada dalam range yang
telah ditentukan. Penggunaan index yang berada di luar range Index akan mengakibatkan
kesalah, Index ini tidak harus berupa bilangan positif, tetapi harus berupa bilangan bulat
atau data-data yang masuk kategori tipe data ordinal (seluruh tipe data dasar selain real
dan double), seperti semua varian integer, char, boolean atau tipe data enumerasi yang
dibuat sendiri oleh user.

58
Algoritma & Pemrograman I(Pascal) by:chairuddin

Tipe_data adalah tipe data untuk elemen array. Tipe data elemen array tidak harus berupa
integer, atau tipe data dasar yang lain, tetapi dapat berupa tipe data terstruktur seperti
array.
Tentang pemilihan model deklarasi, model deklarasi dengan membuat sebuah tipe array
seperti model (1.1) akan lebih jelas dan lebih ringkas yang dapat dirasakan saat variabel-
variabel bertipe array digunakan sebagai parameter sebuah fungsi atau prosedur.

B.U :
Array [ 1 . . 20 ] of tipe_data ; (Dimensi 1)
B.U :
Array [1 . . 3 , 1 . . 2] of tipe_data; (Dimensi 2)

Operasi Pada Array

• Operasi Memasukkan dan Mengambil Nilai


Bila array sudah dideklarasikan dan sudah diberi suatu nama, maka dapat dimanfaatkan
sesuai fungsinya sebagai objek data. Operasi memasukkan nilai adalah operasi untuk
memasukkan nilai data ke dalam elemen-elemen array. Biasanya hal ini dilakukan
dengan operasi penugasan (assignment) dengan objek array terletak sebagai operan di
sebelah kiri tanda ‘:=’.
Sedangkan operasi mengambil nilai adalah operasi untuk mendapatkan/membaca nilai
dari suatu array. Hal dini dilakukan ketika menggunakan array sebagai operan nada suatu
operasi atau sebagai parameter sebuah fungsi/prosedur.

• Operasi Mengakses Array


Operasi mengakses suatu objek data merupakan nama yang lebih umum daripada operasi
memasukkan nilai ataupun membaca nilai. Jadi, operasi mengakses array dapat berupa
memasukkan nilai atau membaca nilai array. Operasi ini dapat dilakukan pada array
secara keseluruhan ataupun pada suatu elemen tertentu.

• Mengakses Elemen Array Secara Acak/Random


Setiap elemen array dapat diperlakukan secara individual terlepas dari elemen-elemen
lainnya. Misalnya dalam hal memasukkan data, nilai[7] dapat dimasukkan lebih dulu
daripada elemen lainnya.meskipun akhirnya semua elemen array akan diakses, namun
tidak aturan yang pasti tentang urutan mengaksesnya. Kita bisa saja mengakses nilai[5]
tanpa mengakses komponen array lainnya.

• Mengakses Elemen Array Secara Sequensial (Berurutan)


Struktur array yang elemen-elemennya tersusun secara berurutan, memungkinkan kita
mengakses sebagian atau seluruh elemen array secara berurutan.
Untuk proses mengunjungi elemen array (traversal of array) secara berurutan dapat
dilakukan dengan proses looping (perulangan). Pada model-model di atas, elemen-
elemen array diakses secara berurutan dengan selisih satu index. Jadi elemen ke-6 akan
diakses sebelum atau sesudah elemen ke-5 ataupun ke-7. Pergeseran index dilakukan
dengan menambah atau mengurangi index sebelumnya dengan 1. Kita juga dapat
membuat model yang lain dengan mengubah selisih indexnya. Misalkan menjadi 2, 3,
atau berapa saja sesuai keperluan, asalkan selalu berada pada range index.

59
Algoritma & Pemrograman I(Pascal) by:chairuddin

• Mengakses Array Secara Keseluruhan


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

• Array Multidimensi
Tipe data elemen array tidak harus berupa tipe data elementer, namun juga dapat berupa
tipe data terstruktur, misalnya array. Sebagai contoh, perhatikan deklarasi berikut :
Var Matrix:array[1..3,1..3] of integer;
Bentuk deklarasi mungkin saja dibuat untuk kasus demikian, tipe nilai_ujian adalah
berupa array dengan dua elemen bertipe integer untuk menyimpan nilai ujian midterm
dan ujian akhir. Sedangkan variabel nilai adalah array dengan sepuluh elemen bertipe
nilai_ujian, yang digunakan untuk menyimpan nilai ujian dari 10 mahasiswa. Elemen-
elemen array nilai bertipe array integer. Walaupun terdapat dua buah array, tetapi setiap
deklarasi array hanya dibatasi dengna sebuah range Index saja. Jumlah elemen array nilai
adalah 10, walaupun secara keseluruhan banyaknya bilangan yang dapat disimpan adalah
20 buah. Array demikian dikenal sebagai array berdimensi 1.

• Penggunaan Konstanta untuk Batas Index Arrray


Deklarasi konstanta sering digunakan untuk batas bawah dan batas atas pada range Index
array. Setiap kali menggunakan array, kita pasti berharap agar ruang yang kita sediakan
sesuai dengna banyaknya data yang akan disimpan; jangan sampai berlebihan, ataupun
kekurangan.
Sering kali kita terpaksa harus mengubah batas-batas range Index untuk menyesuaikan
jumlah data. Penggunaan konstanta akan memudahkan bila ada keperluan untuk
mengubah batas-batas range Index array, yaitu cukup mengganti nilai konstanta tersebut.

Contoh: Jika akan mendeklarasikan viriabel A sebagai Array dengan 10 elemen bertipe integer :

Var
A: array [1..10] of Integer;
Contoh lain:
A1: array[0..9] of Integer;
A1: array[10..20] of Integer;
A1: array[‘a’..’j’] of Integer;
Mengakses elemen Array
Untuk memberikan nilai pada variabel array dapat dengan menggunakan parameter berikut :
NamaArray [indeks]:=nilai;

Contoh
Var

60
Algoritma & Pemrograman I(Pascal) by:chairuddin

A: array[1..10] of integer;
Begin
A[1]:=1; {Mengisikan elemen 1 dengan nilai 1}
A[9]:=200; {Mengisi elemen 9 dengan nilai 200};
End.
Array sebagai konstanta

Nilai pada array dapat bernilai konstan. Dapat kita lakukan dengan mendeklarasikannya pada
bagian constanta.

Bentuk umum pendeklrasiannya adalah:

Const
NamaArray : array[IndeksAwal..IndeksAkhir] of Tipe_Data = (nilai1, nilai2,………);
Banyaknya nilai konstanta harus sama dengan jumlah elemennya.

Contoh penggunaanya
Program ArrayKonstanm;
Uses Wincrt;
Const
Hari : array[1..2] oof string = (’senin’,’selasa’,'rabu’,'kamis’,'jumat’,’sabtu’,'minggu’);
Var
noHari:integer;
begin
clrscr;
write(‘Masukan nomor harinya : ‘);readln(noHAri);
write(‘Hari ke’,noHari,’adalah’,Har[noHari]);
end.
Jika dieksekusi maka hasilnya adalah:
Masukan nomor harinya : 2
Hari ke 3 adalah rabu
Array saebagai parameter

Array pada waktu tertentu dapat digunakan sebagai parameter dari suatu proesdur atyau
fungsi. Contoh
Type
Bilangan = array [1..100[ of integer;
Procedure InputArray(A:bilangan; N:integer);
var
i:integer;
begin

61
Algoritma & Pemrograman I(Pascal) by:chairuddin

for i:=1 to N do
write('Masukan elemen array ke ',i); readln(A[i]);
end.
Contoh diatas adalah prenggunaan array sebagai parameter untuk memberikan nilai pada
suatu array tertentu.
Array berisi record
Caranya adalah mendefinisikan record terlebih dahulu yang kemudian akan digunakan sebagai
tipe data pada saat pendeklarasiaan array. Contoh:
Type
Tsiswa = record
NIM:=string[9[;
Nama:string[25];
End;
TkumpulanSiswa = array [1..100] of Tsiswa;

Var
A: TkumpulanSiswa;

Variabel A diatas akan menampung 100 buah record yang bertipe Tsiswa. Sementara untuk
record berisi array dengan contoh perhitungan nilai siswa berikut : Nilai = (20% * kuis) +
(30% * UTS) + (50% * UAS). Maka kita dapat mendefinisikan mahasiswa sebagai tipe record
yang memiliki 3 nilai dengan menggunakan array. Yaitu:
Type
Tsiswa = record
NIM:=string[9[;
Nama:string[25];
Nilai = array [1..3] of real;
Kode diatas menunjukan bahwa setiap mahasiswa memiliki 3 nilai.
Metode pencarian pada Array
Ada beberapa macam teknik dalam mendapatkan nilai dari suatu elemen pada array salh
satunya dengan metode pencarian beruntun.Contoh:
Program CaraiBeruntun;

Uses Wincrt;
Const
N : array[1..5] of integer= (10,20,30,40,50);
Var
a,b,index : integer;
begin
clrscr;
write(‘Masukan nilai yang akan dicari : ’);readln(a);

62
Algoritma & Pemrograman I(Pascal) by:chairuddin

index:=0;
for b:=1 to 5 do begin
if N[b] = a then begin
index:=b;
break;
end;
end;
writeln(a,’ adalah nilai yang ditemukan pada index ke ’,index);
end.
Array 2 dimensi
Array 2 dimensi adalah array yang memiliki 2 buah elemen bertipe array yang berbentuk
kolom dan baris. Pendeklarasiannya adlah sebagai berikut:
NamaArray : array[1..BanyakBaris, 1..BanyakKolom] of tipe_data;
Contoh
Array2D : array[1..3, 1..4] of integer;
Sedangkan untuk mengaskes maupun memberikan nilai dengan parameter:
Array2D [2,3]:=200; {Mengisikan nilai 200 pada baris 2 kolom 3}

Array PASCAL
Array dapat bertipe data sederhana seperti byte, word, integer, real, bolean, char,
string dan tipe data scalar atau subrange. Tipe larik mengartikan isi dari larik atau
komponen- komponenya mempunyai nilai dengan tipe data tersebut.
Contoh:
Var
Untai : array[1..50] of Integer;
Pada contoh Array dengan nama untai telah dideklarasikan dengan tipe integer,
dengan jumlah elemen maksimum 50 elemen, nilai dari elemen array tersebut diatas
harus bertipe integer.

Contoh Program :
Program Contoh_Array_Input;
Uses Crt;
Var
Bilangan : array[1..50] of Integer;
Begin
ClrScr;

63
Algoritma & Pemrograman I(Pascal) by:chairuddin

Bilangan[1]:=3;
Bilangan[2]:=29;
Bilangan[3]:=30;
Bilangan[4]:=31;
Bilangan[5]:=23;
Writeln('nilai varibel bilangan ke 3 =',Bilangan[3]);
Readln;
End.

Array juga dapat dideklarasikan bersama dengan tipe yang beragam seperti contoh
dibawah ini :
Program Contoh_Deklarasi_Array_Beragam;
Uses Crt;
Var
NPM : array[1..20] of string[10];
Nama : array[1..20] of string[25];
Nilai : array[1..20] of real;
Umur : array[1..20] of byte;
banyak,i : integer;
Begin
ClrScr;
Write('Isi berapa data array yang diperlukan :');Readln(banyak);
For i := 1 to banyak Do
Begin
Write('NPM =');Readln(NPM[i]);
Write('Nama =');readln(Nama[i]);
Write('Nilai=');readln(Nilai[i]);
Write('Umur =');readln(Umur[i]);
End;
{cetak varibel array}
Writeln('NPM NAMA NILAI UMUR ');
For i:= 1 to banyak Do
Begin

64
Algoritma & Pemrograman I(Pascal) by:chairuddin

Writeln(Npm[i]:10,Nama[i]:25,Nilai[i]:3:2,' ',Umur[i]:3);
End;
Readln;
End.

Untuk deklarasi array dapat digunakan beberapa cara seperti berikut ini :
Type
Angka = String[20];
Var
Nama : Array [1..50] of Angka;
Begin
.
.
End.

Deklarasi tipe indeks subrange integer Indeks pada array dapat tipe skalar atau
subrange, tetapi tidak bisa real.
Contoh:
Var
Nilai : Array[1..10] of Integer;
pada contoh ini array nilai mempunyai 10 buah elemen yaitu dari 1 sampai 10. Array
tersebut dapat dideklarasikan dengan type seperti berikut ini :

Type
Skala = 1..10;
Var
Nilai : Array [skala] of Integer;
atau :
Type
Skala = 1..10;
Y = Array[skala] of Integer;
Var
Nilai : Y;

65
Algoritma & Pemrograman I(Pascal) by:chairuddin

atau :
Type
Y = Array[1..10] of Integer;
Var
Nilai : Y;
atau :
Const
Atas =1;
Bawah = 5;
type
Y = Array[Atas..Bawah] of Integer;
Var
Nilai : Y;

I. Deklarasi Type Indeks Skalar


Indeks dari larik dapat berupa tipe skalar.
Contoh. :
Program Deklarasi_Indeks_Array_Skalar;
Uses Crt;
Var
Jum : Array[(jan,feb,mar,apr,mei)] of Integer;
Begin
Jum[jan]:=25;
Jum[feb]:=45;
Jum[mar]:=21;
Jum[apr]:=23;
Jum[mei]:=50;
Writeln('Jumlah nilai bulan maret =',Jum[mar]);
Readln;
End.
dapat juga ditulis :
type
Bln = (jan,feb,mar,apr,mei);

66
Algoritma & Pemrograman I(Pascal) by:chairuddin

Var
Jum : Array[bln] of Integer;
atau :
type
Bln =(jan,feb,mar,apr,mei);
Var
Jum : Array[jan..mei] of Integer;

II. Deklarasi Konstanta Array


Array tidak hanya dapat berupa suatu varibel yang dideklarasikan di bagian deklarasi
variabel, tetapi dapat juga berupa konstanta (const).
Contoh Program :
Program Contoh_Deklarasi_Array_Konstan;
Uses Crt;
Const
Tetap : Array[1..4] of Integer=(7,10,21,20);
Var
i : Integer;
Begin
For i:= 1 to 4 Do
Writeln('Nilai Konstan array ke ',i:2,' =',Tetap[i]);
Readln;
End.
konstanta array dapat juga berupa ketetapan dalam bentuk karakter seperti berikut.
Contoh Program :
Program Contoh_Konstan_Array_Char_;
Uses Crt;
Const
Huruf : Array[0..5] of Char=('A','B','C','D','E','F');
Var
i : Integer;
Begin
For i:= 0 to 5 Do

67
Algoritma & Pemrograman I(Pascal) by:chairuddin

Writeln('Nilai konstan array ke',i:2,' = ',Huruf[i]);


Readln;
End.
Konstanta array dapat juga berupa string seperti berikut ini.
Contoh Program :
Program Constanta_Array_String;
Uses Crt;
Type
A = Array [1..5] of String;
Const
Nama : A = ('basic','pascal','cobol','paradox','dbase');
Var
i : Integer;
Begin
For i:= 1 to 5 Do
Writeln('Nilai Array ke-',i:2,'= ',Nama[i]);
readln;
end.

Dalam pascal string merupakan array dari elemen- elemen karakter seperti berikut :
Contoh Program :
Program String_Adalah_Array_Tipe_Char;
Uses Crt;
Var
Nama : string;
i : Integer;
Begin
Nama:='Turbo Pascal';
For i:= 1 to Length(nama) Do
Writeln('Elemen ',i,' dari ',Nama,'= ',Nama[i]);
Readln;
End.

68
Algoritma & Pemrograman I(Pascal) by:chairuddin

contoh program bilangan prima dengan menggunakan bantuan array.


Contoh program :
Program Mencari_Bilangan_Prima_Dengan_Array;
Uses Crt;
Var
Prima : Array[1..100] of Integer;
i,j : Integer;
bil : Integer;
Begin
ClrScr;
For i := 2 to 100 Do
Begin
Prima[i]:=i;
For j:= 2 to i-1 Do
Begin
bil := (i mod j); {* i dibagi j dicek apakah 0*}
If bil = 0 then Prima[i]:=0; {*jika habis dibagi,berarti bkn prima*}
End;
If Prima[i]<> 0 Then Write(Prima[i],' '); {*cetak array yg prima*}
End;
Readln;
End.

Contoh pengurutan data dengan metode buble sort, yaitu dengan cara penukaran,
dapat dilihat pada contoh dibawah ini :
Contoh Program :
Program Penggunaan_Array_Untuk_Sortir_Buble_Sort;
Uses Crt;
Var
nil1 : Array[1..100] of Integer;
n,i,j,dum : Integer;
Begin
ClrScr;

69
Algoritma & Pemrograman I(Pascal) by:chairuddin

Write('mau isi berapa data acak (integer) ='); readln(n);


For i := 1 to n Do
Begin
Write('Data Ke ',i,':');Readln(nil1[i]);
End;
{* penyapuan proses}
for i:= 1 to n-1 do
begin
for j:= i to n do
begin
if nil1[j]
begin
dum:=nil1[j];
nil1[j]:=nil1[i];
nil1[i]:=dum;
end;
end;
end;
writeln;
writeln('Hasil Sortir');
for i := 1 to n do
write(nil1[i]:3);
readln;
end.

III. Array Dua Dimensi


Di dalam pascal Array dapat berdimensi lebih dari satu yang disebut dengan array
dimensi banyak (Multidimensional array), disini akan dibahas array 2 dimensi saja.
Array 2 dimensi dapat mewakili suatu bentuk tabel atau matrik, yaitu indeks
pertama menunjukkan baris dan indeks ke dua menunjukkan kolom dari tabel atau
matrik.
12

70
Algoritma & Pemrograman I(Pascal) by:chairuddin

123
Untuk mengetahui cara mendeklarasikan dari penggunaan aray dua dimensi dapat
dilihat pada listing program dibawah ini .

Contoh Program:
Program Deklarasi_Array_Dua_Dimensi;
Uses Crt;
Var Tabel : Array[1..3,1..2] of Integer;
i,j : Integer;
Begin
ClrScr;
Tabel[1,1]:=1;
Tabel[1,2]:=2;
Tabel[2,1]:=3;
Tabel[2,2]:=4;
Tabel[3,1]:=5;
Tabel[3,2]:=6;
For I := 1 to 3 Do Begin For J:= 1 to 2 Do Begin Writeln('Elemen ',i,',',j,'=
',tabel[i,j]);
End;
End;
Readln;
End.

IV. Alternatif Deklarasi Array Dua Dimensi.


Ada beberapa cara dalam mendeklarasikan array dua dimensi, beberapa cara
tersebut dapat dilihat dibawah ini :
Contoh :
Var
Tabel : Array[1..3] of Array[1..2] of Byte;
atau :
Type

71
Algoritma & Pemrograman I(Pascal) by:chairuddin

Matrik = Array[1..3,1..2] of Byte;


Var
Tabel : Matrik;
atau :
Type
Baris = 1..3;
Kolom = 1..2;
Matrik = Array[Baris,Kolom] of Byte;
Var
Tabel : Matrik;
atau :
Type
Baris = 1..3;
Kolom=1..2;
Matrik= Array[Baris] of Array[Kolom] of Byte;
Var
Tabel : Matrik;
Dibawah ini akan diberikan listing program penggunaan array dua dimensi dalam
aplikasi penjumlahan matrik :
Contoh Prorgam:
Program Penjumlahan_Matrik;
Uses Crt;
Var
Matrik1,Matrik2, Hasil : Array[1..3,1..2] of Integer;
i,j : Integer;
Begin
ClrScr;
{ input matrik ke satu }
Writeln(' Elemen matrik satu');
For i := 1 to 3 Do
Begin
For j := 1 to 2 Do
Begin

72
Algoritma & Pemrograman I(Pascal) by:chairuddin

Write('Elemen baris -',i,' Kolom -',j,'= ');


Readln(matrik1[i,j]);
End;
End;
{input matrik ke dua}
Writeln('input elemen matrik dua');
For i:= 1 to 3 Do
Begin
For j:= 1 to 2 Do
Begin
Write('Elemen baris -',i,' kolom -',j,'= ');
Readln(matrik2[i,j]);
End;
End;
{proses penjumlahan tiap elemen}
For i := 1 to 3 Do
Begin
For j:= 1 to 2 Do
Begin
Hasil[i,j]:=Matrik1[i,j]+Matrik2[i,j];
End;
End;
{proses cetak hasil}
For i:= 1 to 3 Do
Begin
For j:= 1 to 2 Do
Begin
Write(Hasil[i,j]:6);
End;
Writeln;
End;
Readln;
End.

73
Algoritma & Pemrograman I(Pascal) by:chairuddin

V. Array Sebagai Parameter


Array dapat digunakan sebagai parameter yang dikirimkan baik secara nilai (by
value) atau secara acuan (by reference) ke procedure atau ke function. Procedure
yang menggunakan parameter berupa array harus dideklarasikan di dalam judul
procedure yang menyebutkan parameternya bertipe array.

Contoh Program :
Program Contoh_Pengiriman_Parameter_Array_Di_Procedure;
Uses Crt;
Const
Garis ='---------------------------------------------------';
Type
Untai = Array[1..10] of String[15];
Bulat = Array[1..10] of Integer;
Huruf = Array[1..10] of Char;
Var
i,Banyak : Integer;
Procedure Proses(Nama:Untai;Nilai:Bulat);
Var
Ket : String;
Abjad : Char;
Begin
Writeln(Garis);
Writeln('Nama Nilai Abjad Keterangan');
Writeln(Garis);
For i := 1 to Banyak Do
Begin
If Nilai[i] > 90 Then
Begin
Abjad:='A';
Ket :='Istimewa';

74
Algoritma & Pemrograman I(Pascal) by:chairuddin

End;
If (Nilai[i]<90) And (Nilai[i]>70) Then
Begin
Abjad:='B';
Ket :='Memuaskan';
End;
If (Nilai[i]<70) And (Nilai[i]>60) Then
Begin
Abjad:='C';
Ket :='Cukup';
End;
If (Nilai[i]<60) And (Nilai[i]>45) Then
Begin
Abjad:='D';
Ket :='Kurang';
End;
If Nilai[i]< 45 Then
Begin
Abjad:='E';
Ket :='Sangat kurang';
End;
Writeln(Nama[i]:15,' ',Nilai[i]:4,' ',Abjad,' ',Ket:15);
End;
Writeln(Garis);
End;
Procedure Masuk_Data;
Var
Nama : Untai;
Nilai : Bulat;
Begin
Write('Banyak data =');Readln(Banyak);
For i:= 1 to Banyak Do
Begin

75
Algoritma & Pemrograman I(Pascal) by:chairuddin

ClrScr;
Writeln('Data ke - ',i);
Write('Nama =');readln(Nama[i]);
Write('Nilai =');readln(Nilai[i]);
End;
Proses(Nama,Nilai);
End;
{modul Utama}
Begin
Masuk_Data;
Readln;

76
Algoritma & Pemrograman I(Pascal) by:chairuddin

SUB PROGRAM PASCAL


SUB PROGRAM
1. Pemrograman Modular
Modular programming adalah merupakan suatu teknik untuk menulis program yang
berukuran besar. Program dibagi menjadi beberapa bagian kecil. Tiap bagian disebut
module, yang melakukan suatu tugas tertentu.

Contoh :
• Menampilkan menu pilihan
• Menghitung nilai rata-rata
• Mensortir data

dalam pascal ada 2 macam subprogram, yaitu procedure dan function.


bentuk deklarasi procedure ialah :

-------------------------------------------------------------------------
procedure name(parameter declarations);
label
label-declarations
const
constant-declarations
type
type-declarations
var
variable-declarations
procedure and function declarations
begin
Code for procedure
end;
-------------------------------------------------------------------------

sedangkan bentuk deklarasi function adalah persis sama dengan procedure, hanya baris
pertamanya saja yg berbeda yaitu:

function name(parameter declarations):type;

Pascal mengenal module sebagai:


1. PROCEDURE (terbagi menjadi dua)
a) Procedure Sederhana tidak menerima argumen (nilai atau data) ketika dieksekusi.
b) Procedure Kompleks menerima nilai yang diproses ketika dieksekusi.
2. FUNCTION : Function, ketika dieksekusi menghasilkan suatu nilai.
Procedure mendukung desain program terstruktur, dengan membolehkan membuat
module secara terpisah.

77
Algoritma & Pemrograman I(Pascal) by:chairuddin

Kegunaan dari sub program adalah :


Menerapkan konsep modular, yaitu memecah bagian-bagian program yang panjang dan rumit
menjadi program-program bagian yang lebih sederhana.
Untuk proses atau bagian yang dikerjakan berulang-ulang cukup ditulis satu kali saja,
selanjutnya sub program dapat dipanggil sewaktu-waktu jika diperlukan.

PROCEDURE
Deklarasi Procedure
Program nama_program_utama;
PROCEDURE Nama_Procedure;
Begin
-
End;
Begin
-
End.

Perubah Lokal dan Perubah Global


Perubah lokal : Perubah yang dideklarasikan dalam sebuah Prosedur(fungsi).
Perubah Global : Perubah yang dideklarasikan pada program utamaParameter
Parameter dalam prosedur.
Parameter Nyata (Actual Parameter) : Parameter yang dikirim dari modul utama ke modul
prosedur.
Parameter Formal (Formal Parameter) : Parameter yang ada dan dituliskan pada judul
prosedur.
Prosedur dapat tidak berparameter (optional).
Proses pengiriman data melalui parameter (parameter passing) dapat dikirimkan secara :
Pengiriman secara nilai (by value) : bahwa parameter tersebut hanya mengambil nilai dari
Parameter Nyata yang sesuai. Parameter yang digunakan disebut Parameter Nilai, yang memiliki
ciri kata VAR tidak ditulis.
Contoh : PROCEDURE Tambah(A,B:Integer);
Pengiriman secara acuan(by reference) : bahwa perubahan-perubahan yang terjadi pada
Parameter Formal akan mempengaruhi nilai Parameter Nyata-nya. Parameter ini disebut
Parameter Perubah(variabel), dengan ciri menggunakan kata VAR pada deklarasi prosedurnya.
Contoh : PROCEDURE Tambah(VAR A,B,C:Integer);

Memanggil Procedure.

78
Algoritma & Pemrograman I(Pascal) by:chairuddin

Procedure dipanggil menggunakan Nama Procedure yang diikuti olah sejumlah parameter.
Prosedur Standard
Prosedur dibagi menjadi dua kelompok, yaitu prosedur yang didefinisikan sendiri oleh pemakai
dan prosedur standard (Standard Procedure) ang telah tersedia dalam sistem Pascal dan kita
tinggal memakainnya.

Contoh prosedur standard


EXIT
Digunakan untuk keluar dari suatu blox
HALT
Digunakan untuk menghentikan proses di program bagian maupun di program utama
MOVE
Untuk menyalin suatu blok sejumlah ‘banyak’ byte memori dari blok dimulai byte pertama
‘sumber’ dan disalinkan ke byte pertama ‘tujuan’.
FILLCHR
Bentuk penulisan : FILLCHR(x;banyak : word;ch)
Digunakan untuk mengisi sejumlah byte nilai ke dalam suatu variabel.
DELETE
Bentuk penulisan : DELETE(Var A:string;Index:Integer;Count:Integer)
Digunakan untuk menghapus/membuang sejumlah karakter (Count) mulai posisi tertentu (index)
dari suatu nilai String(A).
INSERT
Bentuk penulisan : Insert(Source:String;Var S:String;Index:Integer)
Digunakan untuk menyisipi suatu string (Source) ke nilai string yang lainnya (S) mulai dar posisi
yang ditunjukkan oleh nilai (Index).
STR
Bentuk penulisan : Str(s:String;Var Code)
Untuk merubah nilai numerik (X) menjadi nilai string (S).
VAL
Bentuk penulisan: Val(s:String;V;Var Code)
Untuk mengkonversikan suatu nilai string (s) menjadi nilai numerik (V).

FUNGSI
Perbedaan fungsi dengan procedure :
Pada fungsi, nilai yang dikirim balik terdapat pada nama fungsinya, sedangkan pada prosedur
nilai yang dikirim balik terdapat pada parameter acuan/nyata.
Fungsi akan secara langsung memberikan hasil sesuai dengan tipe yang dideklarasikannya,

79
Algoritma & Pemrograman I(Pascal) by:chairuddin

sehingga dapat langsung dicetak hasilnya.


Mendeklarasikan fungsi
FUNCTION Nama_Fungsi(daftar_parameter ):Tipe_fungsi;
Begin
-
End;
Parameter dalam fungsi
Parameter Nilai, yaitu parameter dalam fungsi yang dikirim secara nilai.
Contoh Penulisannya : Function hitung(a,b:integer):integer;
Parameter Acuan. Pengiriman parameter secara acuan maka akan mengakibatkan perubahan
nilai parameter di fungsi, juga mengubah nilai parameter di modul yang mengirimkannya.
Contoh penulisannya : Function hitung(var a,b:integer):integer;
Fungsi Standard
Disamping jenis fungsi yang didefinisikan sendiri oleh pemakai, Pascal memiliki fungsi-fungsi
standard, antara lain :
Copy
Bentuk penulisan: Copy(s:string;Integer;Index:integer;Count:Integer):String;
untuk menyalin sejumlah karakter (Count) mulai dari posisi yang ditunjuk (Index) dari nilai string
(s).
Concat
Bentuk penulisan: Concat(s1 [,s2,s3…,sn];string):string;
untuk merangkai beberapa nilai string yang ditunjukkan oleh nilai string s1,s2,s3,….,sn.
Pos
Bentuk penulisan : Pos(Substr : string;s : string):Byte;
untuk mencari posisi letak dari suatu nilai string (substr) yang ada di dalam nilai string yang lain
(S). Nilai yang dihasilkan adalah Byte.
Length
Bentuk penulisan: Length(S : string):Integer;
untuk menghitung panjang atau jumlah karakter yang ada di nilai string.
Contoh
Salinlah program berikut, dan simpan dengan nama CONTOH91.PAS
Program contoh_pnilai;
Uses crt;
PROCEDURE Tambah(A,B:Integer);
Var C : Integer;
Begin

80
Algoritma & Pemrograman I(Pascal) by:chairuddin

C:=A+B;
Writeln( 'Hasil Kali ',C);
End;
Var X,Y: Integer;
Begin
Write(' Inputkan Nilai X : ');
Readln(X);
Write(' Inputkan Nilai Y : ');
Readln(Y);
Tambah (X,Y);
End.
Salinlah program berikut, dan simpan dengan nama CONTOH92.PAS
Program contoh_pVar;
Uses crt;
PROCEDURE Tambah(VAR A,B,C:Integer);
Begin
C:=A+B;
End;
Var X,Y,Z : Integer;
Begin
X:=15; Y:=7;
Tambah(X,Y,Z);
Writeln( 'X = ',X,' Y = ',Y,'Z = ',Z);
End.
Salinlah program berikut, dan simpan dengan nama CONTOH93.PAS
Uses crt;
FUNCTION Tambah(A,B:Integer):integer;
Begin
Tambah:=A+B;
End;
Var X,Y : Integer;
Begin
Clrscr;
Write( ' X = '); Readln(X);
Write( ' Y = '); Readln(Y);
Writeln;
Writeln(X,' + ',Y,' = ',Tambah(X,Y));

81
Algoritma & Pemrograman I(Pascal) by:chairuddin

Readln;
End.

Latihan :
Buatlah program dengan prosedur untuk menghasilkan output sebagai berikut:
Ket : Parameter yang digunakan adalah Kol1, Bar1, Kol2, Bar2 dan Warna Background.
Simpan dengan nama LATIH91.PAS
Buatlah program dengan fungsi untuk mengubah sejumlah string yang diinputkan (panjang string
maksimal 30 char), menjadi huruf besar dan huruf kecil secara bergantian.
Contoh : STMIK StMiK
Ket : Parameter yang digunakan adalah Kalimat.
Simpan dengan nama LATIH92.PAS

a. Procedure Sederhana
Procedure sederhana dipakai untuk menampilkan pilihan menu, dsb. procedure (module)
tersebut terdiri atas beberapa pernyataan (statements), yang dikelompokkan dengan kata
kunci begin dan end . Setiap procedure mempunyai nama. Seperti contoh berikut:
SYNTAX
PROCEDURE NAMA;
begin
:
pernyataan
:
end;
Contoh a :
PROCEDURE DISPLAY_MENU;
begin
writeln('Pilihan Menu');
writeln(' 1: Edit file teks');
writeln(' 2: buka file teks ');
writeln(' 3: Simpan file teks);
writeln(' 4: Kopi file teks’);
writeln(' 5: Cetak file teks’)
end;

82
Algoritma & Pemrograman I(Pascal) by:chairuddin

Contoh berikut adalah program untuk menampilkan menu:


Contoh b.
program PROC1 ;
uses wincrt;
PROCEDURE DISPLAY_MENU;
begin
writeln('Pilihan Menu');
writeln(' 1: Edit file teks');
writeln(' 2: buka file teks ');
writeln(' 3: Simpan file teks);
writeln(' 4: Kopi file teks’);
writeln(' 5: Cetak file teks’)
end;
end;
begin
writeln('memanggil prosedur');
DISPLAY_MENU;
writeln('kembali dari prosedur')
end.
Contoh c :
program SIMPLE_PROCEDURE;
uses wincrt;
var waktu, jarak, kecepatan : real;
procedure tampilan_judul;
begin
writeln('Menghitung jarak tempuh berdasar pada');
writeln('dua variabel yaitu: kecepatan dan waktu');
end;
procedure masukkan_data;
begin
write('Masukkan kecepatan dalam km/jam: ');

83
Algoritma & Pemrograman I(Pascal) by:chairuddin

readln(kecepatan);
write('Masukkan waktu dalam jam : ‘);
readln(time)
end;
procedure hitung_jarak;
begin
jarak:= kecepatan *waktu
end;
procedure tampilkan_hasil;
begin
writeln('jarak yang ditempuh adalah ',jarak:5:2,' km.')
end;
begin {program utama}
tampilan_judul;
masukkan_data;
hitung_jarak;
tampilkan_hasil
end.

Output program :

Menghitung jarak tempuh berdasar pada


dua variabel yaitu: kecepatan dan waktu
Masukkan kecepatan dalam km/jam: 30
Masukkan waktu dalam jam : 2
jarak yang ditempuh adalah 60 km
catatan : ketiga variabel waktu, jarak,dan kecepatan adalah berlaku untuk semua
procedure sehingga disebut variabel GLOBAL.

Contoh d.
program Kalkulator_sederhana;
uses wincrt;

84
Algoritma & Pemrograman I(Pascal) by:chairuddin

var salah_tanda : boolean;


operator : char;
angka_1, angka_2, hasil : real;
procedure PERKALIAN;
begin
hasil := angka_1 * angka_2
end;
procedure PEMBAGIAN;
begin
hasil := angka_1 / angka_2
end;
procedure PENJUMLAHAN;
begin
hasil := angka_1 + angka_2
end;
procedure PENGURANGAN;
begin
hasil := angka_1 - angka_2
end;
procedure MASUKAN;
begin
writeln('MASUKKAN DUA ANGKA DAN OPERATOR');
writeln(' angka_1 operator angka_2');
write(' Masukkan angka pertama : ');
readln(angka_1);
write(' Masukkan operatornya : ');
readln(operator);
write(' Masukkan angka kedua : ');
readln(angka_2)
end;
begin
salah_tanda:= FALSE;

85
Algoritma & Pemrograman I(Pascal) by:chairuddin

MASUKAN;
case operator of
'*': PERKALIAN;
'/': PEMBAGIAN;
'+': PENJUMLAHAN;
'-': PENGURANGAN;
else salah_tanda := TRUE
end;
if salah_tanda then
writeln('Maaf Tanda Operatornya Salah')
else
writeln(angka_1:4:2,' ',operator,' ',angka_2:4:2,'=',hasil:5:2);
end.

2. Jangkauan Variabel
a. Variabel Global
Variabel global adalah variabel yang didefinisikan/terletak pada program utama, dimana
semua sub-program bisa mengakses, mempergunakan dan memodifikasinya.
b. Variabel Lokal
Suatu procedure dapat mendeklarasikan variabelnya sendiri. Variabel-variabel itu hanya
bekerja pada procedure dimana mereka dideklarasikan. Variabel-variabel tersebut
dinamakan variabel local (local variable)
Keterangan :
• Semua bisa mengakses variabel global A, F, G.
• Pada procedure alfa definisi global variabel A diganti dengan variabel lokal.
• beta_1 dan beta_2 dapat mengakses betamax dan betako.
• beta_1 tidak dapat mengakses variabel boboho, dan beta_2 tidak dapat mengakses bobo.
• Tdak ada subprogram, kecuali alfa dapat mengakses B dan C.
• Procedure beta dapat mengakses alfa dan beta.
Contoh:

86
Algoritma & Pemrograman I(Pascal) by:chairuddin

program LOKAL_VARIABEL;
uses wincrt;
var nomor1, nomor2 : integer;
{ini bisa dipanggil dari mana-mana GLOBAL VAR}
procedure tambah;
var hasil:integer;{hasil merupakan milik procedure tambah LOCAL VAR}
begin
hasil := nomor1 + nomor2;
writeln(‘hasil adalah', hasil)
end;
begin {program utama}
writeln(‘Masukkan dua angka bulat dengan spasi’);
readln(nomor1, nomor2);
tambah
end.
c. Penggunaan Forward
Dari hal di atas kita tahu bahwa suatu subprogram dapat diakses oleh subprogram apabila
sudah didefinisikan terlebih dahulu.
Ada pengecualian, untuk mengatasi masalah chicken-and-the-egg, bila kita memiliki
dua/lebih subprogram masing- masing bisa memanggil yang lain dengan referensi
forward.
Hal ini berlaku juga untuk FUNCTION (fungsi).
3. Procedure Yang Menggunakan Argumen
Procedure juga bisa memakai variabel (data) untuk bekerja ketika dipanggil.
a. Mendeklarasikan variabel di dalam procedure
• Variabel yang diterima oleh procedure diapit dengan tanda kurung ().
• Deklarasi dari variabel terletak diantara nama procedure dan semi-colon.
b. Memanggil procedure and menyampaikan variabel (atau nilai) ke procedure
• Ketika procedure dipanggil, nama procedure diikuti oleh sepasang ().
• Variabel yang dipanggil diletakkan didalam tanda kurung tersebut.
• Variabel ditulis dalam tingkat yang sama seperti dalam prosedur terkait.

87
Algoritma & Pemrograman I(Pascal) by:chairuddin

<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
Contoh.
Perhatikan contoh program berikut,
program JUMLAH;
uses wincrt;
var nomor1, nomor2 : integer;
procedure CALC_ANSWER ( kesatu, kedua : integer );
var hasil : integer;
begin
hasil := kesatu + kedua;
writeln('hasil adalah ', hasil )
end;
begin
writeln('masukkan dua angka dalam spasi');
readln( nomor1, nomor2 );
CALC_ANSWER( nomor1, nomor2)
end.
4. Procedure Yang Memakai Parameter
program TestNilai;
uses wincrt;
var x, y : integer;

procedure NoEffect ( x, y : integer );


begin
x := y; y := 0;
writeln( x, y )
end;
begin
x := 1; y := 2;
writeln( x, y );

88
Algoritma & Pemrograman I(Pascal) by:chairuddin

NoEffect( x, y );
writeln( x, y )
end.
Output dari Testnilai adalah:
12
20
12

a. Parameter Nilai (pass by value)


Dalam program di atas, ketika variabel disampaikan ke procedure, procedure bekerja
dengan copy dari variabel asli. Nilai dari variabel asli yang disampaikan ke procedure
tidak diubah. Procedure hanya menggantikan variabel asli dengan variabel yang ada di
procedure , tetapi tidak menggantikan nilai dari variabel asli. Ketika procedure bekerja
dengan copy dari variabel, maka dikenal dengan parameter nilai (pass by value).
Perhatikan contoh berikut:
program Parameter_Nilai;
uses wincrt;
var x : byte;
procedure foo(a : byte);
begin
writeln(a); {15}
a:=10;
writeln(a); {10}
end;
begin
x:=15;
writeln(x); {15}
foo(x);
writeln(x); {tetap 10}
end.
Outputnya :

89
Algoritma & Pemrograman I(Pascal) by:chairuddin

15
15
10
15
b. Parameter Variabel (pass by reference)
Procedure bisa juga dipakai untuk mengubah nilai dari variabel asli yang dipanggil oleh
procedure. Untuk menggambarkannya, kita bisa lihat pada contoh program modifikasi
program sebelumnya. Procedure ini menerima dua nilai integer dan menggantikan nilai
aslinya. Untuk membuat procedure menggunakan parameter variabel (pass by reference)
dengan menggunakan kata kunci var.
program Parameter_Variabel;
uses wincrt;
var x : byte;
procedure foo(var a : byte);
begin
writeln(a); {15}
a:=10;
writeln(a); {10}
end;
begin
x:=15;
writeln(x); {15}
foo(x);
writeln(x); {berubah 15}
end.
Outputnya:
Ketika program dijalankan, akan tercetak di layar
15
15
10
10

90
Algoritma & Pemrograman I(Pascal) by:chairuddin

<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

5. Function – Suatu Procedure Khusus Yang Menghasilkan Nilai


Procedure memakai data atau variabel ketika dieksekusi. Function (fungsi) juga memakai
data, tetapi mempunyai kemampuan untuk menghasilkan nilai pada procedure atau
program yang memanggilnya. Function digunakan untuk melakukan operasi matematika
seperti perhitungan faktorial.
Suatu function :
• Dimulai dengan kata kunci function
• Strukturnya sama dengan sebuah procedure
• Didalam fungsi, suatu nilai dihasilkan dengan nama function
• Suatu function dipakai pada sisi sebelah kanan pada suatu ekspresi
• Hanya menghasilkan tipe data sederhana

SYNTAX
function Nama (deklarasi variabel):tipe_data_hasil;
begin
:
pernyataan
:
end;
contoh :
function ADD_TWO ( nilai1, nilai2 : integer ) : integer;
begin
ADD_TWO := nilai1 + nilai2
end;
contoh berikut menggambarkan bagaimana memanggil function,
result := ADD_TWO( 10, 20 );
maka, ketika ADD_TWO dieksekusi, dia menghitung nilai yang terdapat di dalamnya
(dalam hal ini 30), yaitu hasil akhirnya.
Contoh

91
Algoritma & Pemrograman I(Pascal) by:chairuddin

program CONTOH_FUNGSI;
uses wincrt;
var angka, jawaban : integer;
function KUBIK( x : integer ) : integer;
begin
KUBIK := x * x * x
end;
begin
writeln('Masukkan angka.');
readln(angka);
jawaban := KUBIK ( number );
writeln('Hasil pangkat tiga dari ',number,' adalah ', answer)
end.
6. Rekursi dan Iterasi
Subprogram bisa memanggil dirinya (Recursive Call) dengan catatan bahwa memiliki
syarat penghentian operasi (iterasi), sehingga perlu dilakukan kehati-hatian dalam
penulisannya. Lihat contoh tentang faktorial suatu bilangan di bawah ini.
Contoh.
Program faktorial;
Uses wincrt;
Var x : integer;
function factorial (n:integer):integer;
begin
if n<2>
Penjelasan
Jika x= 5,maka Pemanggilan
Ke-1, n=5. Factorial:=5*factorial(4); => Perlu Pemanggilan Ke-2
Ke-2 , n=4. Factorial:=4*factorial(3); => Perlu Pemanggilan Ke-3
Ke-3 , n=3. Factorial:=3*factorial(2); => Perlu Pemanggilan Ke-4
Ke-4, n=2. Factorial:=2*factorial(1); => Perlu Pemanggilan Ke-5
Ke-5, n=1. Factorial:=1;

92
Algoritma & Pemrograman I(Pascal) by:chairuddin

Ke-4 menjadi : Factorial:=2*1; (=2)


Ke-3 menjadi: Factorial:=3*2; (=6)
Ke-2 menjadi: Factorial:=4*6; (=24)
Ke-1 menjadi: Factorial:=5*24; (=120

93
Algoritma & Pemrograman I(Pascal) by:chairuddin

Record
Record adalah sebuah tipe data yang mengumpulkan beberapa item data di mana
masing-masing tipe data dari item data ini berbeda-beda. Masing-masing item data
ini bisa disebut dengan field.
Mendeklarasikan Record
Masih ingat kuliah mengenai tipe data? Dalam Pascal, semua variabel harus
dideklarasikan sebelum bisa dipakai. Sebagai contoh, kitaingin memakai variabel
dengan nama Nama untuk dimasukkan nilai nama-nama mahasiswa. Kita akan
mendefinisikannya menjadi:var Nama: String[80];

Dari kode di atas kita memberitahukan ke Pascal bahwa kita akan memakai variabel
Nama yang tipe datanya string dan kita alokasikan panjang stringnya 80 karakter.

Nah, dalam Pascal, kita dimungkinkan untuk memiliki judul tipe data yang kita
definisikan sendiri. Misalkan kita ingin mengganti judul tipe data integer dengan
bilanganBulat. Dalam Pascal, kita definisikan ini dengan:

type bilanganBulat = integer;

Perhatikan beda pendefinisian variabel dan pendefinisian type. Untuk pendefinisian


variabel kita menggunakan titik dua (:), sedangkan pendefinisian type kita
menggunakan sama dengan (=).

Oke, sekarang kalau memori Anda sudah segar kembali, kita kembali ke
pembahasan record. Untuk mendeklarasikan record, kita memakai reserved word
record, diikuti dengan daftar field dan diakhiri dengan end. Berikut adalah contoh
dari deklarasi sebuah record.

type recMhs = record;


nama : string[80];
NPM : string[8];
nilai : integer;
end;

Untuk bisa memakai record ini, kita mendeklarasikan record ke dalam variabel
seperti ini:

var recordMahasiswa: recMhs;


Menggunakan Record
Menggunakan/ mengakses nilai field dari record adalah menggunakan nama
variabel yang sudah dideklarasikan, diikuti dengan tanda titik (.) dan nama field. Dari
contoh di atas, apabila kita ingin mengakses nilai field nama dari record
recordMahasiswa, kode dalam Pascal adalah sebagai
berikut:recordMahasiswa.nama:=’Suliso Bams Duyodhono’;

Perhatikan contoh program berikut

94
Algoritma & Pemrograman I(Pascal) by:chairuddin

type recMhs = record


nama : string[80];
NPM : string[8];
nilai : integer;
end;

var recordMahasiswa: recMhs;

begin
Write(’Masukkan nama mahasiswa ‘); ReadLn(recordMahasiswa.nama);
Write(’Masukkan NPM ‘); ReadLn(recordMahasiswa.NPM);
Write(’Nilainya berapa ‘); ReadLn(recordMahasiswa.nilai);
WriteLn(’Nama mahasiswa yang Anda masukkan adalah ‘,recordMahasiswa.nama);
WriteLn(’NPM mahasiswa ini adalah ‘,recordMahasiswa.NPM);
WriteLn(’Nilainya adalah ‘,recordMahasiswa.nilai);
end.

Program di atas akan memberikan output seperti berikut.

Masukkan nama mahasiswa Suliso Bams Duyodhono


Masukkan NPM 11207007
Nilainya berapa 45
Nama mahasiswa yang Anda masukkan adalah Suliso Bams Duyodhono
NPM mahasiswa ini adalah 11207007
Nilainya adalah 45

Mengetik nama variabel record berulang-ulang seperti tampak dalam contoh di atas
mungkin bisa melelahkan untuk programmer. Oleh karena itu, dalam Pascal ada
statement with yang bisa membantu memudahkan dan menyingkat penulisan kode
program yang menggunakan record. Sehingga kode program di atas bisa disingkat
menjadi berikut:

type recMhs = record


nama : string[80];
NPM : string[8];
nilai : integer;
end;

var recordMahasiswa: recMhs;

begin
with recordMahasiswa do begin
Write(’Masukkan nama mahasiswa ‘); ReadLn(nama);
Write(’Masukkan NPM ‘); ReadLn(NPM);
Write(’Nilainya berapa ‘); ReadLn(nilai);
WriteLn(’Nama mahasiswa yang Anda masukkan adalah ‘,nama);
WriteLn(’NPM mahasiswa ini adalah ‘,NPM);
WriteLn(’Nilainya adalah ‘,nilai);

95
Algoritma & Pemrograman I(Pascal) by:chairuddin

end;
end.

FILE (BERKAS)
File adalah kumpulan byte-byte yang disimpan dalam media penyimpanan. Merupakan
komponen yang bertipe data sama, yang jumlahnya tidak tentu, yang dapat ditambah atau
dikurangi jika dibutuhkan.
Pointer file adalah bagian yang menunjuk ke komponen file yang akan diakses (dibaca
atau direkam) untuk keperluan pengaksesan file (akan dibahas kemudian).
File pada Pascal dikenal dalam 3 jenis, yaitu :
1. File Text
2. File bertipe
3. File tidak bertipe

Selain kita akan mempelajari tentang bagaimana membuat sebuah file atau menambahkan
isi suatu file, kita dapat pula melakukan manipulasi File, yaitu :
1. Menggunakan parameter
2. Mengenai Atribut File
3. Menghapus file
4. Mengubah nama file
5. Mengenai tanggal dan waktu file
6. Mencari file
7. Mengecek keberadaan file
8. Memberikan directory file

1. File Text
1.1. Karakteristik

• Berisi data karakter ASCII


• Tiap record boleh memiliki panjang yang bervariasi
• Setiap record diakhiri tanda EOL (end of Line)
• Hanya dapat diakses secara sequensial (berurutan).
• Isi filenya dapat dilihat oleh perintah dos type atau editor text

1.2. Membuat file text


Urutan Prosesnya :

1. Mendeklarasikan variabel file


Var NmVar:TEXT;
Dengan :
NmVar : Nama variabel file text
2. Menghubungkan variabel file dengan nama file
Assign (NmVar, nama file);
Dengan :
NmVar : Nama variabel file text

96
Algoritma & Pemrograman I(Pascal) by:chairuddin

nama file : Nama file dalam bentuk string, format 8:3 penamaan dos, ditulis
dalam bentuk string.

3. Membuat file text aktif


Rewrite(NmVar);
Dengan :
NmVar : Nama variabel file text yang sudah di- assign

4. Menulis ke dalam file text


Write / writeln (NmVar, data item1, data item 2, …)
Dengan :
NmVar : Nama variabel file text
Data item : text / string yang akan dituliskan, atau bisa juga berupa isi suatu
variabel

5. Menutup file
Close (NmVar);
Dengan:
NmVar : Nama variabel file text

Contoh :

Program membuat_file_text_namafile_HALLO_TXT;
Uses crt;
Var var_teks:TEXT;
Begin
Clrscr;
Assign(var_teks,’Hallo.txt’);
Rewrite(var_teks);
Writeln(var_teks,’Hallo… ini program pertamaku!’);
Writeln(var_teks,’Contoh file teks’);
Writeln(var_teks,’---------------------------------------’);
Close(var_teks);
End.
 
 
1.3. Membaca File Text 

Urutan Prosesnya :
1. Mendeklarasikan variabel file
Var NmVar:TEXT;

2. Menghubungkan variabel file dengan nama file


Assign (NmVar, nama file)

3. Membaca isi file dan menampilkannya di layar

97
Algoritma & Pemrograman I(Pascal) by:chairuddin

While not eof (NmVar) do


Begin
Read / readln ( NmVar, data item 1, data item 2, … );
Write / writeln ( data item1, data item 2, … );
End;

4. Menutup file
Close (NmVar);

 
Contoh :

Program membaca_file_HALLO_TXT;
Uses crt;
Var var_teks:TEXT;
Pesan:string;
Begin
Clrscr;
Assign(var_teks,’Hallo.txt’);
Reset(var_teks);
While not eof (var_teks) do
Begin
Readln ( var_teks, pesan );
Writeln (pesan);
End;
Close(var_teks);
End.

1.4. Menambah isi File Text 
Urutan Prosesnya :
1. Mendeklarasikan variabel file
Var NmVar:TEXT;

2. Menghubungkan variabel file dengan nama file


Assign (NmVar, nama file)

3. Menambah isi file


Append(NmVar)

4. Menampilkannya di layar
Write / writeln (NmVar, data item1, data item 2, …)

5. Menutup file
Close (NmVar);

98
Algoritma & Pemrograman I(Pascal) by:chairuddin

 
Contoh :

Program menambah_isi_file_HALLO_TXT;
Uses crt;
Var var_teks:TEXT;
Pesan:string;
Begin
Clrscr;
Assign(var_teks,’Hallo.txt’);
Append(var_teks);
Writeln(var_teks,’Ini penambahan data file hallo.txt!’);
Writeln(var_teks,’Contoh file teks’);
Writeln(var_teks,’-----------------------------------------’);
Close(var_teks);
End.

1.5. Metode Pembacaan file oleh Turbo Pascal

‰ Menggunakan statemen operasi READ / READLN


‰ Bergantung pada tipe data variabel yang digunakannya :
♦ Variabel berjenis numerik (byte,integer, real)
¾ Tanda batas akhir pembacaan variabel jika ditemui blank(spasi), EOL (end
of line), EOF (End of File) atau TAB.
¾ Jika sebelum membaca data (atau dengan kata lain tidak ada datanya)
pointer pascal menemukan EOL / EOF, maka variabel tersebut akan diisi
NOL.
¾ Jika string yang dibaca oleh variabel numerik tidak sah, maka terjadi
kesalahan I/O : Invalid numerik format.
♦ Variabel berjenis string
Karakter-karakter file aakan dibaca sampai ditemui EOL / EOF tercapai atau lebih
besar dari ukuran stringnya.
♦ Variabel berjenis Char
Yang dibaca hanya satu karakter saja.
‰ Agar pembacaan file sesuai dengan yang diharapkan, kadangkala perlu kita
deklarasikan secara jelas jumlah byte yang disediakan untuk suatu variabel, atau
mesti kita selipkan pencetakan spasi diantara dua variabel yang akan dibaca.
‰ Perlu diperhatikan kesesuaian tipe data, antara yang dituliskan dengan metode
WRITE/WRITELN dan dengan yang akan kita baca.

2. File Bertipe

2.1. Karakteristik

99
Algoritma & Pemrograman I(Pascal) by:chairuddin

• Berisi data format biner, ukurannya lebih kecil dari file teks.
• Tiap record memiliki tipe dan panjang yang sama. Bisa saja memiliki berbagai
tipe asalkan dikelompokkan dalam RECORD.
• Dapat diakses secara random, elemen-elemennya bisa dibaca secara acak yang
keberapa saja.

2.2. Membuat file Bertipe


Urutan Prosesnya :
1. Mendeklarasikan variabel file
Var NmVar:FILE OF TypeVariabel;
Dengan :
NmVar : Nama variabel file bertipe
TypeVariabel : Char, variabel tipe RECORD, variabel tipe array, real, variabel
array tipe record. Untuk satu file satu tipe elemen.

Contoh :
Type DaftarBarang = Array [1..100] of integer;
DataKonsumen = RECORD
Nama :string[15];
Alamat :string[30];
Kode :1..3;
DaftarKonsumen = Array [1..100] of Datakonsumen ;
Var
FileBarang : File of Daftarbarang;
FileJumlah : File of integer;
FileData : File of DataKonsumen;
FileKode : File of Char;

2. Menghubungkan variabel file dengan nama file


Assign (NmVar, nama file);
Dengan :
NmVar : Nama variabel file bertipe
nama file : Nama file dalam bentuk string, format 8:3 penamaan dos, ditulis
dalam bentuk string.

3. Membuat /membuka file bertipe

Rewrite(NmVar); => untuk membuat

Reset(NmVar); => untuk membuka

4. Menulis / membaca file Bertipe

Write (NmVar, data item1, data item 2, …) => untuk menulis

Read (NmVar, data item1, data item 2, …) => untuk membaca

100
Algoritma & Pemrograman I(Pascal) by:chairuddin

Data item1, data item 2 dan seterusnya, harus berupa variabel, tidak bisa dituliskan
secara langsung dalam bentuk konstanta. Variabelnya harus sama dengan deklarasi
tipe file-nya.
Fungsi Writeln dan Readln tidak dapat digunakan pada file bertipe.

5. Menutup file
Close (NmVar);

2.3. Fungsi-fungsi yang digunakan dalam file Bertipe

Seek (VarFile,N);
Menempatkan pointer ke posisi record ke-N
Contoh :
Seek(namafile,4); {pointer akan menunjuk posisi record ke-4, dengan nomor record 3}

FilePOS (VarFile);
Untuk menunjuk nomor record (nomor record dimulai dari record 0)
Contoh :
Posisi:=Filepos(Varfile); {mengetahui posisi pointer aktual di record mana, dan
hasilnya diletakkan pada variabel posisi}.

Filesize(VarFile);
Mengukur besar file bertipe, yaitu mengetahui jumlah record yang berada dalam suatu
file (jika file baru dibuat = 0)
Contoh :
..
Begin
Write(‘input nomor record yang ingin dilihat’);readln(NoRec);dec(NoRec)
If NoRec >=filesize(VarFile) then
Writeln(‘Nomor record terlalu besar’);
Else
begin
seek(VarFile,NoRec); {Pointer menuju nomor record yang dimaksud}
Read(VarFile,data);
End;
..
end.

EOF(VarFile);
Untuk menunjuk akhir dari file.
Truncate(VarFile);
Untuk menghapus sebagian file
Contoh :
Seek(varfile,5); {pointer menuju record nomor 5}
Truncate(VarFile); {menghapus mulai record nomor 5 sampai habis }

101
Algoritma & Pemrograman I(Pascal) by:chairuddin

Contoh Program File Bertipe :

Program menambah_dan_membuat_file_bertipe
Uses crt;
Type mhs = Record
NPM : string[8];
Nama: string[25];
Alamat : string[20];
End;
Var vfilemhs : FILE of mhs;
Recmhs : mhs;
I : integer;
Oke : char;
Begin
Clrscr;
Assign (vfilemhs,’Dataku.dat’);
{$I-}reset(vfilemhs);{$I+}
if IOResult <>0 then rewrite(vfilemhs);
I:=filesize(vfilemhs);
With recmhs do
Begin
Write(‘NPM :’);readln(NPM);
While NPM <>’ ‘ do
begin
Write(‘Nama :’);readln(Nama);
Write(‘Alamat :’);readln(Alamat);
repeat
Write(‘Save file…(Y/N)?’);readln(oke);
Until oke in [‘Y’,’y’,’n’,’N’];
If oke in [‘Y’,’y’] then
Begin
Seek(vfilemhs,I);
Write(vfilemhs,recmhs);
I:=I+1;
End;
Writeln;
Write(‘NPM:’);readln(NPM);
End;
End;
Close(vfilemhs);

End.

Program_Melihat_file_bertipe
Uses crt;
Type mhs = Record
NPM : string[8];
Nama: string[25];

102
Algoritma & Pemrograman I(Pascal) by:chairuddin

Alamat : string[20];
End;

Var vfilemhs: FILE of mhs;


Recmhs:mhs;
I: integer;

Begin
Clrscr;
Assign(vfilemhs,’dataku.dat’);
Reset(vfilemhs);
Writeln(‘----------------------------------------------------------------------‘);
Writeln(‘No. NPM Nama Alamat ‘);
Writeln(‘----------------------------------------------------------------------‘);

With recmhs
Begin
For I:=1 to filesize(vfilemhs) do
Begin
Seek(vfilemhs),I-1);
Read(vfilemhs),recmhs);
Writeln(I:2,’ ‘,NPM:8,Nama:25,Alamat:20);
End;
End;
Close(vfilemhs);
End.

3. File Tidak Bertipe


3.1. Karakteristik

• File yang mengakses langsung ke media penyimpanan tanpa adanya


pengenalan record dan sebagainya.
• Digunakan untuk tugas-tugas yang berhubungan dengan file biner yang dapat
diproses tanpa mengenal jenis recordnya.

3.2. Membuat file Tidak Bertipe

Urutan Prosesnya :
1. Mendeklarasikan variabel file
Var NmVar:FILE;
2. Menghubungkan variabel file dengan nama file
Assign (NmVar, nama file);
Dengan :
NmVar : Nama variabel file bertipe
nama file : Nama file dalam bentuk string, format 8:3 penamaan dos, ditulis

103
Algoritma & Pemrograman I(Pascal) by:chairuddin

dalam bentuk string.

3. Membuka file bertipe

Rewrite(NmVar[,brec]); => untuk membuat

Reset(NmVar[,brec]); => untuk membuka


Dengan :
Brec : Menunjukkan besar file dalam byte, opsional, boleh ditulis, boleh tidak,
dan besarnya kita tentukan sendiri. Defaultnya 128 Byte.
 

4. Menulis / membaca file tidak Bertipe

Blockwrite (NmVar, Buffer, jumlah[,jumtulis]) => untuk menulis


Dengan :
Buffer : daerah penyimpanan data yang akan ditulis ke dalam file. Buffer dapat
berupa suatu variabel dengan tipe apa saja sesuai dengan ukuran data
yang akan ditulis di file.
Jumlah : jumlah data yang akan ditulis ke file dalam ukuran byte.
Jumtulis : suatu parameter yang tidak tetap yang boleh digunakan dan boleh juga
tidak digunakan, bila digunakan akan berisi jumlah byte yang dapat
ditulis ke file.

Read (NmVar, data item1, data item 2, …) => untuk membaca


Dengan :
Buffer : daerah penyimpanan yang tipe variabelnya disesuaikan dengan jumlah
data yang dibaca.
Jumlah : jumlah byte yang akan dibaca dari file, dapat merupakan suatu variabel
dengan tipe word. Jumlah harus sama dengan besar buffer yang diberikan
dan tidak boleh lebih dari 64 Kilobyte.
Jumbaca : merupakan variabel yang berisi laporan jumlah byte yang dapat dibaca
dari file.

Contoh File tidak bertipe ::

Program menyalin_file
Uses crt;
Var
Fileasal, filetuju :file;
Besar :real;
Buf :array [1..10240] of char;
Hbaca, Hatulis :word;
nfile1,nfile2 :string;

104
Algoritma & Pemrograman I(Pascal) by:chairuddin

Begin
besar:=0;
clrscr;
write (‘Input nama file asal :’);readln(nfile1);
write (‘Input nama file tujuan :’);readln(nfile2);
{$I-}
Assign(fileasal,nfile1);
Assign(filetuju,nfile2);
Reset(fileasal,1);
If IOResult <>0 then
Begin
Writeln(‘File asal tidak ada !’);
Halt(0);
End;
Rewrite(filetuju,1);
If IOResult <>0 then
Begin
Writeln(‘File tujuan tidak bisa dibuat !’);
Halt(0);
End;
{$I+}
Repeat
Blockread(fileasal,buf,10240,hbaca);
Besar:=besar + hbaca;
Blockwrite(filetuju,buf,hbaca,htulis);
If hbaca <> htulis then 
Begin
Writeln(‘Tujuan tidak bisa menampung besar file’);
Halt(0);
End;
Until hbaca <>10240;
Close (fileasal);
Close (filetuju);
Writeln (‘Besar file yang dipindahkan :‘,besar:10:0);
End.

4. Menangani Kesalahan I/O pada File


Beberapa operasi pada file yang dapat mengalami kesalahan I/O :
Reset, rewrite, read, readln, write, writeln, close, append, seek

Agar program tidak berhenti, maka harus digunakan Compiler Directive Fungsi I/O result
Untuk pengecekan I/O file tersebut.

105
Algoritma & Pemrograman I(Pascal) by:chairuddin

Bentuk Umum :
{$ Kode Kondisi}
Dengan :
• Kode : Karakter kode, untuk fungsi I/O result adalah I.
• Kondisi : OFF (-) / ON (+)
• Secara default {$I+} => ON
• I/O Result => bernilai 0 jika operasi berhasil
• Isi nilai selalu dihapus sendiri setiap kali dipanggil
• Penulisannya mengapit operasi-operasi yang rentan kesalahan

Contoh :


Assign(VarFile, ‘data.dat’);
{$I-}
Reset(VarFile);
{$I+}
fileada := IOResult = 0;
if fileada then
begin
writeln(‘file sudah ada…’);

end
else { Kondisi bila file tidak ada }
begin
rewrite(VarFile); { Buat file baru }

write (VarFile, var1, var2, …);

close(VarFile);
end;

5. Manipulasi File
5.1. Parameter
Parameter disebut juga command tail, merupakan informasi tambahan bagi program
utama yang dapat diketikkan sesuai keperluan, untuk menjalankan rutin khusus dalam
program tersebut.
Contoh : program scan.exe
Biasanya dituliskan pada prompt :
C:\scan a: /clean
String ‘a:’ dan string ‘/clean’ merupakan parameter, yang akan membuat scan
program ke drive a dan kemudian menjalankan prosedur CLEAN.

106
Algoritma & Pemrograman I(Pascal) by:chairuddin

Ada dua perintah untuk membuat parameter :

¾ ParamCount : untuk mengetahui jumlah parameter yang diberikan


Bentuk Umumnya :
Var_word := ParamCount;

¾ ParamString : untuk mengambil parameter tersebut dalam bentuk string


Bentuk Umumnya :
Var_string := ParamString(index);

5.2. Atribut File


Atribut file adalah satu byte data yang berisi keterangan dari suatu file. Karena bit –nya
merupakan kode biner, maka dibuat lambang untuk mewakili bit-bit tersebut, sebagai
berikut :

Lambang Angka 
ReadOnly 1
Hidden 2
SysFile 4
VolumeId 8
Directory 16
Archive 32

Ada 2 perintah yang berhubungan dengan atribut file, yaitu :

¾ GetFAttr (Get File Atribut) : Mengambil informasi atribut file.


Bentuk umumnya :
GetFAttr(nm_var,attr);

¾ SetFAttr (Set File Atribut) : Mengeset atribut file.


Bentuk umumnya :
GetFAttr(nm_var,attr);
Dengan :
Nm_var : nama suatu file yang telah di-assign dengan tipe apa saja.
Attr : Bilangan atribut yang akan diambil/diketahui dari suatu file.

Catatan :
1. File yang akan dilihat atau diset atributnya mesti di-assign terlebih dahulu.
2. Kedua perintah ini berada pada unit DOS dan WINDOWS Turbo Pascal, maka perlu
menggunakan ‘Uses DOS’ atau ‘Uses Windows;’ pada deklarasi unit.

5.3. Menghapus File


Untuk menghapus suatu file, file tersebut harus di-assign terlebih dahulu. Bentuk umum
perintahnya :

107
Algoritma & Pemrograman I(Pascal) by:chairuddin

Erase(nm_var);

Contoh :
Program hapus;
Uses crt;
Var f:file;
Begin
Clrscr;
Assign(f,paramstr(1));
Write( ‘File ‘,paramstr(1));
{$I-}
erase(f);
{$I+}
if IOResult <> 0 then writeln(‘Gagal mengapus’);
else writeln(‘Menghapus sukses …’);
end.

5.4. Mengubah nama file


Untuk mengubah nama file, file tersebut harus di-assign terlebih dahulu. Bentuk umum
perintahnya :
Rename(nm_var,nm_baru);

Contoh :
Program Ubah_nama;
Uses crt;
Var f:file;
Begin
Clrscr;
Assign(f,paramstr(1));
Write( ‘File ‘,paramstr(1));
{$I-}
rename(f,ParamStr(2));
{$I+}
if IOResult <> 0 then writeln(‘Gagal mengubah nama’);
else writeln(‘Mengubah nama menjadi ’, ParamStr(2));
end.

5.5. Tanggal dan waktu File


Guna memanipulasi tanggal dan waktu file, Turbo Pascal menyediakan variabel khusus
bernama DateTime dengan tipe data record dengan field-field sebagai berikut :

Type datetime = record;

108
Algoritma & Pemrograman I(Pascal) by:chairuddin

Year, month,day,hour,min,sec:word;
End;

Setelah dideklarasikan, baru kita dapat mengambil dan menset informasi date dan time
dengan menggunakan perintah :

¾ GetFTime : mengambil informasi tanggal dan jam file. Bentuk Umum :


GetFTime(nm_var,waktu);

¾ SetFTime : mengeset informasi tanggal dan jam file. Bentuk Umum :


SetFTime(nm_var,waktu);

Dengan :
Nm_var : variabel file yang telah di-assign.
Waktu : waktu yang akan diambil (dalam bentuk LongInt).

Keterangan :
1. Pada saat GetFTime, variabel waktu masih merupakan tipe data sistem(LongInt),
maka perlu diubah terlebih dahulu sebelum ditampilkan, yaitu dengan perintah :
UnpackTime(waktu,var_datetime);
Waktu : dideklarasikan dalam bentuk longint
Var_datetime : variabel dari record datetime.

2. Sebelum melakukan SetFTime, variabel waktu masih merupakan variabel dari record
datetime, maka perlu dikembalikan ke tipe data sistem(LongInt), yaitu dengan
perintah :
PackTime(var_datetime, waktu);
Var_datetime : variabel dari record datetime.
Waktu : dideklarasikan dalam bentuk tipe data sistem (longint).

3. Harus menggunakan deklarasi unit ‘Uses DOS;’ atau ‘Uses WinDOS;’

5.6. Mencari File


Menggunakan perintah :

Findfirst(path,attr,var_searchrec);
FindNext(var_searcRec);

Dengan :
path : file yang akan dicari, dapat diisi dengan wildcard seperti ‘*’ dan ‘?’. Pada unit
DOS menggunakan tipe string. Harus deklarasi unit ‘Uses Dos;’.
Attr : atribut file yang dicari

109
Algoritma & Pemrograman I(Pascal) by:chairuddin

Var_searchrec : variabel dengan tipe searchrec sebagai berikut ini :


Type
Searchrec = record
Fill : array [1..2] of char;
Attr : byte;
Time : longint;
Size : longint;
Name : string;
End;

Contoh :
Program cari;
Uses crt,dos;
Var dirinfo :searchrec;
Begin
Clrscr;
Findfirst(paramstr(1),archive,dirinfo);
Writeln (‘File-file yang dicari adalah :’);
While doserror=0 do
Begin
Write(dirinfo.name:15, ‘ ‘);
Writeln(dirinfo.size:10);
Findnext(dirinfo);
End;
End.

5.8. Mengecek Keberadaan File


Menggunakan perintah :

¾ Fsearch : untuk deklarasi unit DOS


Bentuk :
Var_pathstr := Fsearch(path,dirlist)
Dengan :
Path : file yang akan dicari
Dirlist : letak dimana akan dicari yang didefinisikan di path tersebut.

¾ FileSearch : untuk deklarasi unit Windows


Bentuk :
FileSearch(var_string1, var_string2, var_string3)
Dengan :
Var_string1 : variabel tempat menaruh hasil proses.
Var_string2 : variabel tempat menaruh file yang dicari.
Var_string3 : variabel tempat melakukan pencarian file.

5.9. Memberikan directory File

110
Algoritma & Pemrograman I(Pascal) by:chairuddin

Menggunakan 2 perintah di bawah ini:

¾ FExpand
Bentuk umum :
Var_pathstr1 := FExpand(Var_pathstr2);
Dengan :
Var_pathstr1 : hasil dari proses dengan penulisan file secara panjang
Var_pathstr2 : nama file yang akan diperpanjang penulisannya
Fungsi ini tidak mengecek keberadaan file yang dimanipulasinya. Bila file tidak ada,
maka tetap akan menghasilkan path yang sedang aktif.

¾ FileExpand
Bentuk umum :
FileExpand(hasil,file_asal);
Dengan :
Hasil : merupakan hasil proses.
File_asal : nama file yang akan diperpanjang penulisannya.

----------

111