Fundamental of Algorithm Programming Dasar Algoritma Dan Pemrograman
Fundamental of Algorithm Programming Dasar Algoritma Dan Pemrograman
Menerangkan dengan sesungguhnya bahwa modul ini digunakan untuk pelaksanaan praktikum di
semester genap tahun ajaran 2015/2016 di Informatics Lab Fakultas Informatika Universitas Telkom.
Menyetujui,
Febryanti Sthevanie, S.T., M.T. Rimba Whidiana Ciptasari, Ph.D Rita Rismala, S.T., M.T.
Yanti Rusmawati, Ph.D Mohamad Syahrul Mubarok Siti Sa’adah, S.T., M.T.,
Dody Qori Utama, S.T., M.T. Said Al Faraby, S.T., M.Sc Untari Novia Wisesty, S.T., M.T.
Mengesahkan, Mengetahui,
Dosen PJMP Kaprodi S-1 Fakultas
Dasar Algoritma dan Informatika
Pemrograman
1. Praktikum diampu oleh dosen kelas dan dibantu oleh asisten laboratorium dan asisten
praktikum.
2. Praktikum dilaksanakan di Gedung Kultubai Selatan (IFLAB 1 s/d IFLAB 5) sesuai jadwal yang
ditentukan.
3. Praktikan wajib membawa modul praktikum, kartu praktikum, dan alat tulis.
4. Praktikan wajib mengisi daftar hadir rooster dan BAP praktikum dengan bolpoin bertinta hitam.
5. Durasi kegiatan praktikum S-1 = 3 jam (150 menit).
a. 15 menit untuk pengerjaan Tes Awal atau wawancara Tugas Pendahuluan
b. 45 menit untuk penyampaian materi
c. 90 menit untuk pengerjaan jurnal dan tes akhir
6. Jumlah pertemuan praktikum:
10 kali di lab (praktikum rutin)
3 kali di luar lab (terkait Tugas Besar dan UAS)
1 kali berupa presentasi Tugas Besar atau pelaksanaan UAS
7. Praktikan wajib hadir minimal 75% dari seluruh pertemuan praktikum di lab. Jika total kehadiran
kurang dari 75% maka nilai UAS/ Tugas Besar = 0.
8. Praktikan yang datang terlambat :
<= 30 menit : diperbolehkan mengikuti praktikum tanpa tambahan waktu Tes Awal
> 30 menit : tidak diperbolehkan mengikuti praktikum
9. Saat praktikum berlangsung, asisten praktikum dan praktikan:
Wajib menggunakan seragam sesuai aturan institusi.
Wajib mematikan/ mengkondisikan semua alat komunikasi.
Dilarang membuka aplikasi yang tidak berhubungan dengan praktikum yang berlangsung.
Dilarang mengubah pengaturan software maupun hardware komputer tanpa ijin.
Dilarang membawa makanan maupun minuman di ruang praktikum.
Dilarang memberikan jawaban ke praktikan lain.
Dilarang menyebarkan soal praktikum.
Dilarang membuang sampah di ruangan praktikum.
Wajib meletakkan alas kaki dengan rapi pada tempat yang telah disediakan.
10. Setiap praktikan dapat mengikuti praktikum susulan maksimal dua modul untuk satu mata kuliah
praktikum.
Praktikan yang dapat mengikuti praktikum susulan hanyalah praktikan yang memenuhi
syarat sesuai ketentuan institusi, yaitu: sakit (dibuktikan dengan surat keterangan medis),
tugas dari institusi (dibuktikan dengan surat dinas atau dispensasi dari institusi), atau
mendapat musibah atau kedukaan (menunjukkan surat keterangan dari orangtua/wali
mahasiswa.)
Persyaratan untuk praktikum susulan diserahkan sesegera mungkin kepada asisten
laboratorium untuk keperluan administrasi.
Praktikan yang diijinkan menjadi peserta praktikum susulan ditetapkan oleh Asman Lab dan
Bengkel Informatika dan tidak dapat diganggu gugat.
11. Pelanggaran terhadap peraturan praktikum akan ditindak secara tegas secara berjenjang di
lingkup Kelas, Laboratorium, Fakultas, hingga Universitas.
Daftar Isi
Lembar Pengesahan ................................................................................................................................ 2
Peraturan Praktikum Laboratorium Informatika 2015/2016 ................................................................. 3
Daftar Isi .................................................................................................................................................. 4
Modul 1 Pengenalan Pascal............................................................................................................... 6
1.1 Pengertian Algoritma .............................................................................................................. 6
1.2 Pengenalan IDE Free Pascal .................................................................................................... 7
1.2.1 Menulis Program ............................................................................................................. 7
1.2.2 Menyimpan Program ...................................................................................................... 7
1.2.3 Menjalankan/ Mengeksekusi Program ........................................................................... 8
Modul 2 Variabel, Record, I/O, Assignment dan Operator ............................................................. 14
2.1 Variabel ................................................................................................................................. 14
2.2 Input / Output ....................................................................................................................... 14
2.3 Tipe Data ............................................................................................................................... 15
2.3.1 Tipe Data Dasar ............................................................................................................. 15
2.3.2 Konstanta ...................................................................................................................... 17
2.3.3 Record / Tipe Bentukan ................................................................................................ 17
2.4 Assignment............................................................................................................................ 18
2.5 Ekspresi dan Operator .......................................................................................................... 19
Modul 3 Percabangan...................................................................................................................... 23
3.1 If – Then ................................................................................................................................ 23
3.1.1 If – Then 1 kondisi ......................................................................................................... 23
3.1.2 If – Then 2 kondisi ......................................................................................................... 23
3.1.3 If – Then lebih dari 2 kondisi ......................................................................................... 24
3.1.4 If – Then Bertingkat ....................................................................................................... 24
3.1.5 Case of ........................................................................................................................... 26
Modul 4 Fungsi dan Prosedur.......................................................................................................... 30
4.1 Fungsi .................................................................................................................................... 30
4.2 Prosedur ................................................................................................................................ 33
4.2.1 Menukar bilangan (menggunakan parameter by reference) ....................................... 33
4.2.2 Menghitung luas dan keliling (menggunakan parameter by value) ............................. 34
Modul 5 Perulangan ........................................................................................................................ 37
5.1 Perulangan For ...................................................................................................................... 37
5.2 Perulangan while – do ........................................................................................................... 39
5.3 Perulangan repeat - until ...................................................................................................... 40
Modul 6 Skema Pemrosesan Sekuensial .......................................................................................... 45
Dalam modul ini, akan .......................................................................................................................... 45
6.1 Skema Pemrosesan Sekuensial dengan Mark....................................................................... 45
6.1.1 Tanpa Penanganan Kasus Kosong ................................................................................. 45
6.1.2 Dengan Penanganan Kasus Kosong............................................................................. 46
6.2 Skema Pemrosesan Sekuensial Tanpa Mark ....................................................................... 46
Soal Latihan ....................................................................................................................................... 48
Modul 7 Larik (Array)....................................................................................................................... 49
7.1 Dimensi Array........................................................................................................................ 49
7.1.1 Array Satu Dimensi (1-D)............................................................................................... 49
7.1.2 Array Multi Dimensi ...................................................................................................... 50
7.2 Array Statis dan Dinamis ....................................................................................................... 51
7.3 Array sebagai Parameter Fungsi/Prosedur ........................................................................... 51
Modul 8 Searching dan Sorting ....................................................................................................... 53
8.1 Searching............................................................................................................................... 53
8.2 Metode Pencarian Datum ..................................................................................................... 54
8.2.1 Sequential Search .......................................................................................................... 54
8.2.2 Binary Search ................................................................................................................ 55
8.3 Sorting ................................................................................................................................... 56
8.4 Metode Pengurutan Data ..................................................................................................... 57
8.4.1 Bubble Sort.................................................................................................................... 57
8.4.2 Insertion Sort ................................................................................................................ 57
8.4.3 Selection Sort ................................................................................................................ 58
8.4.4 Counting sort ................................................................................................................. 58
Modul 9 Sequential File ................................................................................................................... 62
Modul 10 Mesin Abstrak .................................................................................................................. 68
10.1 Mesin Karakter ...................................................................................................................... 68
10.2 Mesin Pencacah .................................................................................................................... 70
Modul Overview .................................................................................................................................... 73
Lampiran 1 – Exit Code dalam Free Pascal ............................................................................................ 51
Lampiran 2 - Fungsi dan Prosedur Bawaan Free Pascal ....................................................................... 53
Lampiran 3 – Programming is Fun ........................................................................................................ 54
Daftar Pustaka ....................................................................................................................................... 91
Modul 1 – Pengenalan Pascal
Tujuan
Praktikan diharapkan mampu :
o Memahami tentang algoritma dan cara kerjanya.
o Menggunakan bahasa Pascal untuk implementasi algoritma
o Menggunakan free Pascal: compile, run, dan lain-lain
o Algoritma adalah deretan instruksi yang jelas untuk memecahkan masalah, yaitu untuk
memperoleh keluaran yang diinginkan dari suatu masukan dalam jumlah waktu yang
terbatas. [LEV03]
o Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang menggunakan
beberapa nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran.
Jadi, algoritma adalah deretan langkah komputasi yang mentransformasikan masukan
menjadi keluaran. [COR89]
*untuk lebih jelasnya silahkan buka buku “ALGORITMA DAN PEMROGRAMAN” hal 3.
Pada dasarnya, sebuah komputer tidak dapat mengerjakan apapun tanpa adanya perintah dari
manusia. Perintah-perintah yang terstruktur dan sistematis untuk membuat komputer bekerja sesuai
dengan apa yang diinginkan disebut dengan program. Komputer dapat diprogram untuk berbagai
hal, misalnya diprogram untuk melakukan perhitungan suatu ekspresi matematika dan menampilkan
hasilnya di layar monitor, diprogram untuk memainkan sebuah lagu, diprogram untuk mengurutkan
data (misalnya mengurutkan data nama siswa, data nilai siswa), diprogram untuk permainan
(game), diprogram untuk menggambar dan sebagainya. Program-program semacam itu dibuat oleh
manusia. Syarat utama dalam membuat program adalah perintah- perintah yang diberikan dalam
program tersebut harus dimengerti oleh komputer.
Bahasa komputer tersebut disebut bahasa pemrograman (programming language). Yang perlu
diingat, konsep bahasa pemrograman adalah merubah/menerjemahkan perintah-perintah
(program) yang diberikan oleh manusia ke dalam bahasa mesin yang dapat dimengerti oleh
komputer. Jadi bahasa pemrograman adalah sarana interaksi antara manusia dan komputer. Seperti
tujuan semula, bahasa pemrograman dibuat mudah dipelajari dan dimengerti agar manusia dapat
mudah membuat program komputer dengan bahasa pemrograman ini (tak perlu menggunakan
bahasa mesin untuk membuat program komputer).
Dalam membuat program, ada beberapa hal yang harus diketahui sebagai tahap awal atau konsep
dasar dalam pemrograman. Konsep-konsep dasar tersebut antara lain kalkulasi (operasi aritmatika
dasar maupun lanjut), kontrol blok program (dalam bentuk sequence, percabangan, perulangan),
komunikasi (input/output), dan jumlah memori yang digunakan (variabel, list, record).
Dalam praktikum ini, bahasa pemrograman yang digunakan sebagai standar adalah bahasa
pemrograman Pascal. Keunggulan bahasa Pascal adalah keteraturan dalam pembuatan program dan
kelengkapan struktur data.
2. Pilih New.
Setelah itu akan muncul jendela baru. Silahkan tuliskan program yang ingin anda tulis. Untuk
mencoba anda dapat menulis program berikut persis seperti apa yang tertulis di buku:
Kode Bahasa Pascal
program Lat1;
begin
writeln(‘Selamat Belajar Free Pascal’);
end.
Gambar berikut akan menunjukkan isi editor setelah program diatas di ketik:
Sebelum kita simpan, kita harus mengganti direktori untuk menyimpan atau membuka program.
Sebaiknya anda membuat 1 folder untuk menempatkan hasil kerja anda. Caranya adalah sebagai
berikut:
3. Ubah menuju ke dalam folder yang telah anda buat (mis: D:/Praktikum),
Kesalahan pada program, terdapat 2 jenis, yang pertama kesalahan sintaks atau penulisan program
seperti yang telah dijelaskan di atas. Yang kedua, yaitu kesalahan pada logika
pemrograman/semantik (misal program yang melakukan looping terus-menerus atau menampilkan
keluaran yang tidak sesuai dengan yang diinginkan).
Anda dapat mengkompilasi suatu program menjadi file yang executable (dapat dieksekusi secara
langsung dari prompt DOS) dengan cara compile seperti ini. Jadi setelah dilakukan Compile maka
akan terdapat file executable pada folder tempat anda menyimpan program.
Apabila program sudah benar. Maka kita akan lanjut ke dalam tahap eksekusi program. Untuk
menjalankan program yang telah berada pada editor, lakukan langkah berikut:
1. Pilih menu Run,
2. Pilih Run.
Kedua cara tersebut dapat disingkat menjadi Ctrl+F9. Setelah itu pada layar akan tampak output:
Selamat Belajar Free Pascal.
Komentar komentar yang diberikan pada program ini, nantinya tidak akan di proses pada saat proses
kompilasi (diabaikan). Dalam Bahasa pemrograman Pascal terdapat 2 cara untuk memberikan
komentar pada program, yaitu :
o Jika ingin memberikan komentar pada suatu baris tertentu, dapat memberikan tanda “//”
pada awal baris pada suatu program
o Jika ingin memberikan komentar lebih dari 1 baris (berurutan), dapat memberikan tanda “{”
pada baris pertama komentar dan tanda “}” pada baris akhir komentar
o 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 dating
o Jangan berlebihan dan bertele-tele dalam memberikan komentar! Usahakan singkat, padat,
tepat dan jelas (kecuali, apabila komentar tersebut dipakai untuk keperluan
pengajaran/tutorial)
o Berikan dokumentasi berupa penjelasan singkat tentang maksud program yang dibuat,
tanggal pembuatan, identitas coder, ataupun instansi yang berkaitan
Soal
Bagian I
1. Dapatkah suatu program dikompilasi tanpa dijalankan? Bagaimana caranya?
Bagian II
Perhatikan program berikut ini.
Program IFLAB;
uses crt; {*}
TYPE karyawan = record nama : String;
jml_lembur,gol : integer;
gaji_pokok,bonus_tetap,bonus_lembur,gaji_bulan,gaji_total: real;
end;
var
a :
karyawan begin
clrscr; {**}
write('Masukkan nama karyawan : '); readln(a.nama);
writeln('Golongan Karyawan : ');
writeln(' 1. Golongan I ');
writeln(' 2. Golongan II ');
writeln(' 3. Golongan III ');
write('Masukkan golongan karyawan : '); readln(a.gol);
write('Masukkan jumlah lembur : '); readln(a.jml_lembur);
case a.gol of
1 : begin
a.gaji_pokok := 250000;
end;
2 : begin
a.gaji_pokok := 500000;
end;
3 : begin
a.gaji_pokok := 750000;
end;
a.bonus_tetap := 0.25*a.gaji_pokok;
a.bonus_lembur := a.jml_lembur*a.bonus_tetap;
a.gaji_bulan := a.gaji_pokok+a.bonus_tetap+a.bonus_lembur;
writeln('---Jumlah Gaji---');
writeln('Nama Karyawan : ',a.nama);
b. Bila program tersebut di-compile apa yang terjadi? Sudah benarkah program tersebut? Jika
belum perbaiki program tersebut hingga benar!
c. Hapus sintaks yang ditandai dengan “{**}”, apa yang terjadi? Apa pula yang terjadi
Shortcut Key
1. Untuk membuka file (open), atau bahkan untuk membuat file baru, tekan F3.
Ketikkan nama file yang ingin dibuka, bila file tersebut tidak ditemukan, FPC
akan membuat file baru dengan nama tersebut.
2. Untuk menyimpan file (save) secara cepat, tekan tombol F2
3. Untuk meng-compile dan me-run program sekaligus tekan tombol CTRL+F9.
4. Untuk melihat output program di layar dos, tekan ALT+F5
5. Untuk change directory dengan cepat gunakan kombinasi tombol ALT+F
kemudian C.
6. Untuk berpindah ke file lain yang sedang dibuka, tekan F6
7. CTRL+C dan CTRL+V tidak berfungsi di IDE FPC, gunakan kombinasi :
a. CTRL+Insert untuk Copy b.
SHIFT+Insert untuk Paste c.
SHIFT+Delete untuk Cut
Tujuan
Praktikan diharapkan dapat :
o Mengetahui tipe primitif maupun tipe bentukan dalam Pascal.
o Mengetahui instruksi masukan dan assignment.
o Memahami ekspresi dan operator.
o Membuat program yang dapat dieksekusi.
o Mengetahui prosedur standar dalam Pascal.
2.1 Variabel
Variabel dapat didefinisikan sebagai sesuatu yang memiliki nilai dan tipe data yang nilainya dapat
berubah-ubah. Penamaan variabel ini memiliki aturan. Aturan penamaan tersebut adalah sebagai
berikut:
o Maksimal 32 karakter.
o Hanya boleh terdiri dari karakter huruf abjad (A-Z, a-z), angka (0-9), dan garis bawah /
underscore ( _ ).
o Harus diawali dengan karakter huruf abjad.
o Tidak boleh sama dengan variabel lain.
o Tidak boleh sama dengan keyword (kata kunci), seperti program, var, begin, end, if, case,
dan lain-lain
Perintah output dalam Pascal ada 2 macam yaitu: write dan writeln. write akan mengoutputkan
data dalam satu baris. writeln akan mengoutputkan data lalu posisi kursor akan berganti baris.
2.3.2 Konstanta
Konstanta adalah sebuah tipe data yang bernilai tetap dan tidak akan pernah berubah selama
program dijalankan. Konstanta dapat bernilai numerik (angka), karakter, ataupun sebuah String.
Dalam penulisan program, konstanta didefinisikan didalam blok CONST yang ada di atas blok VAR.
Contoh Konstanta :
Pseudo Code Kode Bahasa Pascal Output
Program KONSTANTA Program KONSTANTA; Jari-jari lingkaran = 6
Kamus CONST Luas lingkaran = 113.09
r,luas: real pi = 3.1415; Akhir program
Constant VAR
pi=3.1415 r,luas: real;
begin
Algoritma write('Jari-jari lingkaran = ');
input(r) readln(r);
luasphi*r*r luas:=pi*r*r;
output(luas) writeln('Luas lingkaran = ',luas:0:2);
writeln('Akhir program');
readln;
end.
2.4 Assignment
Assignment adalah proses pemberian nilai terhadap suatu variabel. dan tentunya setiap nilai yang
dimasukkan harus sesuai dengan tipe data variabel.
Contoh Assignment:
Pseudo Code Kode Bahasa Pascal Output
(*deskripsi : assignment suatu
variabel dan menampilkan nilai
Program asign variabel yang diassign*)
kamus Program asign;
x: integer y: integer Var
z: string x: integer; y: integer; z:
string;
Algoritma Nilai x : 100
x100 Begin Nilai y : 500
y500 writeln('contoh program Nilai z : prolab
z 'prolab' assignment! '); Nilai max integer :
output(x) x:=100; 32767
1. Ekspresi Boolean
Ekspresi Hasil
True and False False
True or False True
2. Ekspresi Numerik
Ekspresi Hasil
1+5 6
1+3*5 16
1/2 0.5
1.9/0.2 9.5
10 mod 3 1
10 div 3 3
Sama dengan ekspresi, operator juga dibagi menjadi 2 jenis, yaitu operator Boolean (operator
logika) dan operator numerik. Berikut ini daftar operator boolean pada algoritma dan pada bahasa
Pascal.
Tabel 2.2. notasi operator logika pada algoritma dan Tabel 2.3. notasi operator numerik pada algoritma
Bahasa Pascal dan Bahasa Pascal
Dalam Algoritma Dalam Pascal Dalam Algoritma Dalam Pascal
< < + +
> < - -
≥ >= * *
≤ <= / /
= = mod mod
≠ <> div div
Contoh program yang di bawah ini merupakan penggunaan Array atau Larik pada pemrograman
Pascal. Apa itu Array/Larik? Pada dasarnya array sama seperti variabel yang berfungsi untuk
menampung nilai, hanya saja pada array kita dapat menampung lebih dari suatu nilai. Hal ini
berbeda dengan variabel yang hanya dapat menampung satu nilai saja. Layaknya variabel, array
juga memiliki tipe data yang harus dideklarasikan terlebih dahulu, seperti integer, string, boolean,
dan lain-lain. Dikarenakan array dapat menampung lebih dari suatu nilai maka untuk pengaksesan
tiap-tiap elemennya dibutuhkan indeks. Untuk penjelasan lebih lanjutnya akan dibahas pada modul
7.
Pseudo Code Kode Bahasa Pascal Output
Program ApaItuArray;
uses crt;
Program ApaItuArray
Kamus Var
larik : array [1..3] larik : array [1..3] of
of integer integer;
begin
Algoritma Clrscr;
{Proses pengisian elemen {Proses pengisian elemen Masukkan bilangan ke-1
array} array} : 3
input (larik[1]) write ('Masukkan bilangan ke- Masukkan bilangan ke-2
input (larik[2]) 1 : '); : 4
input (larik[3]) readln (larik[1]); Masukkan bilangan ke-3
write ('Masukkan bilangan ke- : 2
Output (larik[1]) 2 : ');
Output (larik[2]) readln (larik[2]); Bilangan ke-1 : 3
Output (larik[3]) write ('Masukkan bilangan ke- Bilangan ke-2 : 4
3 : '); Bilangan ke-3 : 2
readln (larik[3]);
Soal
1. Tuliskan program yang dapat menerima input/masukan biodata diri
mahasiswa meliputi: nim, nama, kelas;
format tampilan :
NIM : <mengisiNIM>
Nama:<mengisiNama>
Kelas :<mengisiKelas>
<selang 2 baris>
Selamat, <nama> anda memiliki NIM = <NIM> dengan kelas <Kelas>
Program anda jalan.
2. Apa perbedaan antara read dan readln?
3. Jelaskan perbedaan antara kedua pernyataan berikut:
WriteLn(279); dan WriteLn(279 : 8);
4. Buatlah sebuah program untuk menghitung selisih waktu awal dan waktu akhir suatu
percakapan dan menuliskan durasi waktu dalam detik. Gunakan tipe bentukan!
Contoh :
---input---
Jam Awal : 08.45.00
Jam Akhir : 09.00.30
---output---
Lamanya waktu pembicaraan : 930 detik
5. Buatlah sebuah program untuk menginputkan 3 mahasiswa (nama, nim, nilai) lalu
menampilkan nilai rata-ratanya! (gunakan record)!
6. Buat program yang dapat menukar isi dua buah variabel yang bertipe integer.
format tampilan
:
Modul 3 Percabangan
Tujuan
Praktikan diharapkan dapat :
o Mengerti esensi penggunaan Percabangan dalam Algoritma dan Pascal.
o Memahami bentuk umum Percabangan (pemilihan)
o Mampu memecahkan masalah sederhana dengan menggunakan Percabangan serta
mengimplementasikan ke dalam Pascal.
Analisis kasus adalah sebuah penentuan kasus-kasus yang mungkin terdapat didalamnya. Untuk
setiap kasus ada aksi tertentu yang dilakukan. Adanya analisis kasus menyebabkan terjadi pemilihan
instruksi (atau percabangan) dalam algoritma, tergantung dari kasus mana yang terpenuhi.
3.1 If – Then
3.1.1 If – Then 1 kondisi
Adalah sebuah kasus dimana aksi akan dilaksanakan bila kondisi bernilai benar (true). Bila kondisi
salah (false), tidak ada aksi apapun yang dikerjakan.
Pseudo Code Kode Bahasa Pascal
(* Deskripsi : program untuk menentukan
apakah angka yang
Program CekNilai diinputkan lebih besar dari 0 atau tidak *)
Kamus Program CekNilai;
Angka : integer Uses crt;
Var
Algoritma Angka:integer;
Input(angka) Begin
Clrscr;
If(angka > 0 ) then write(masukkan suatu angka: „);
Output(“lebih besar dari 0”) readln(Angka);
If (Angka>0) then
write(“ Angka yang anda masukkan lebih
besar dari 0‟);
readln;
End.
Output(“ganjil”) readln(Angka);
Else If (Angka mod 2 = 1) then
Output(“genap”) write('angka yang anda masukkan bilangan
ganjil')
Else
write('angka yang anda masukkan bilangan
genap');
readln;
End.
If (nilai1 = nilai2)then
writeln(nilai1, ' = ',nilai2);
readln;
End.
3.1.5 Case of
Untuk masalah dengan dua kasus atau lebih, konstruksi CASE dapat menyederhanakan penulisan IF-
THEN-ELSE yang bertingkat – tingkat. Konstruksi CASE memeriksa apakah nilai dari ekspresi
tersebut sama dengan salah satu dari nilai1, nilai2, nilai3, ..., nilain (semua nilai berbeda). Jika nilai
ekspresi sama dengan salah satu dari nilai –nilai tersebut, maka aksi yang bersesuaian dilaksanakan.
Apabila tidak terdapat suatu kecocokan maka akan melakukan aksi yang terdapat dalam nilai
otherwise/else. Otherwise/else bersifat optional.
Pseudo Code Kode Bahasa Pascal
(* Deskripsi : program memilih menu*)
Program menu;
uses crt;
Program menu
var
kamus pilihan:char;
pilihan:char begin
clrscr;
Algoritma writeln('Menu Utama');
writeln('1. Input Data');
Output(‘menu’) writeln('2. Update Data');
input(pilihan) writeln('3. Delete Data');
writeln('4. Keluar');
depend on pilihan write('Pilih : ');
case '1': readln(pilihan);
Output('Selamat datang di menu
input case pilihan of
anggota') '1':begin
case '2': writeln('Selamat datang di menu
Output('Selamat datang di menu input
update anggota');
anggota') readln;
case '3': end;
Output('Selamat datang di menu '2':begin
delete writeln('Selamat datang di menu
anggota') update
case '4':begin anggota');
Output('Keluar') readln;
end;
'3':begin
writeln('Selamat datang di menu
delete
anggota');
readln;
end;
'4':begin
writeln('Keluar');
readln;
End
END.
Soal
1. Cari kesalahan dalam kode program berikut, kemudian tuliskan kode program yang
benar (correct).
If Bil < 0 then
writeln(“negatif‟);
Else
writeln(“Positif‟);
writeln(“selesai‟);
3. Su at u h ar i , J on o sed an g be l a ja r an g ka -a n g ka . Ta pi d ia t i da k b i s a m e ne ntu ka n m a
na ang ka ya n g le bi h b e sa r d a r i a n g ka ya n g l a in . K a ka k n ya , Jo n i m en cob a m e
mb a ntu j on o de n g an me mb u at kan s e bu ah p r o gr a m unt u k m en ge t ahu i m a na b i
la n g an ya n g pa l in g b e sa r d an ma na b i l an g an yan g p al i ng ke ci l . Co b a b an tu j on
i u nt u k me n ge r ja ka n pr o g r am t e r se but ! (in pu ta n 4 bi l a n ga n )
4. Tuliskan program untuk menghitung total harga barang yang mengikuti aturan berikut:
a. Jika jumlah barang yang dibeli < 100 buah, maka harga per barang adalah Rp
10.000,00
b. Jika jumlah barang yang dibeli ≥ 100 buah dan 150, maka harga per barang
adalah Rp 9.500,00
c. Jika jumlah barang yang dibeli ≥ 150, maka hargar per barang adalah Rp
9.000,00
5. Tuliskan program yang menghasilkan keluaran nama bulan tertentu berdasarkan angka yang
dimasukkan oleh user.
format tampilan :
Masukkan angka: <mengisi angka>
< selang 2 baris >
Contoh :
Masukkan angka: 4
tampilan program:
==clrscr==
masukkan bilangan pertama :
masukan bilangan kedua :
hasil dari operasi : <keluar hasil operasi yang sudah dipilih dari 2 bilangan yang sudah
dimasukan )
Tujuan
Praktikan diharapkan dapat :
o Mengerti esensi penggunaan Fungsi dan Prosedur dalam Algoritma dan Pascal.
o Memahami bentuk umum fungsi dan prosedur
o Memahami arti dari variabel global, lokal, parameter variabel, parameter konstanta, parameter
formal, dan parameter aktual
o Memecahkan masalah sederhana dengan menggunakan fungsi dan prosedur dan
mengimplementasikan ke dalam Pascal.
4.1 Fungsi
Suatu teknik yang biasa diterapkan dalam pemrograman terstruktur adalah teknik rancang atas-
bawah (top-down design). Berdasarkan falsafah rancang atas-bawah, maka suatu program dipecah
menjadi beberapa sub bagin lebih kecil dengan tugas tertentu. Dalam Pascal proses pemecahan
program menjadi sub program ada 2 macam, yaitu: fungsi dan procedure.
Dalam pembuatan sebuah program, ada kalanya 2 atau lebih linecode dibutuhkan untuk digunakan
berkali-kali dalam alur jalannya program di tempat yang berbeda (tidak sekuensial), misal untuk
menampilkan hasil sebuah operasi, maupun untuk menampilkan sebuah menu dalam sebuah
program. Untuk melakukan hal tersebut, penggunaan linecode tersebut dapat direduksi atau dapat
digantikan dengan pemanggilan sebuah subprogram. Subprogram terdapat 2 jenis, fungsi dan
prosedur. Fungsi digunakan ketika bagian program yang ingin diulang menghasilkan satu nilai hasil
atau keluaran. Prosedur digunakan ketika bagian program yang ingin diulang tidak menghasilkan
apapun (seperti ketika menampilkan menu) atau menghasilkan keluaran lebih dari 1 buah.
Fungsi digunakan apabila modul program mengembalikan sebuah nilai, sementara prosedur
digunakan bila modul menghasilkan efek netto dari (satu atau) sekumpulan aksi. Namun dalam
praktek, sering perbedaan antara keduanya tidak jelas.
Parameter merupakan variabel yang dituliskan di dalam kurung setelah nama prosedur dan fungsi.
Dalam pembuatannya program biasanya diperlukan pertukaran informasi antara prosedur dan
fungsi. Berdasarkan penulisannya terdapat 2 jenis parameter, yaitu: parameter formal dan
parameter aktual. Parameter formal adalah parameter yang dituliskan pada saat pendefinisian
prosedur dan fungsi itu sendiri.
Sedangkan parameter aktual adalah parameter yang disertakan pada saat pemanggilan prosedur
dan fungsi tersebut di blok program utama.
Seperti yang sudah dijelaskan sebelumnya, sebuah fungsi digunakan ketika program yang dibuat
akan menghasilkan satu nilai keluaran. Nilai keluaran ini disebut dengan return value dalam fungsi,
wajib adanya pendefinisian ini nilai dari return value tersebut.
Indeks Nilai
Pseudo Code Kode Bahasa Pascal
{sebaiknya ada deskripsi dari (* Deskripsi : program melakukan penentuan
algoritma yang dibuat} indeks nilai melalui fungsi indeks yang
menghasilkan keluaran berupa karakter *)
Soal
1. Tuliskan program untuk memeriksa sebuah bilangan bulat yang diberikan user
merupakan bilangan genap atau bukan. Pendefinisian bilangan tersebut merupakan
bilangan genap atau bukan dituliskan dalam sebuah function IsGenap().
2. Carilah letak kesalahan pada pendeklarasian subprogram berikut:
End.
4.2 Prosedur
Seperti yang sudah dijelaskan sebelumnya prosedur adalah sebuah subprogram yang digunakan
untuk kasus-kasus yang tidak menghasilkan keluaran apapun atau kasus-kasus yang membutuhkan
nilai keluaran lebih dari sama dengan 2 (walaupun dapat deprogram untuk yang memiliki 1 nilai
keluaran). Dalam pendefinisian sebuah prosedur, dalam algoritma ada yang disebut dengan
parameter input, parameter output, dan parameter input/output. Namun, dalam Pascal, hanya
disediakan dua jenis parameter yaitu parameter input, dan parameter input/output.
Parameter input, adalah parameter yang digunakan sebagai sebuah masukkan dari program utama
ke prosedur yang dipanggil. Karena sifatnya hanya sebagai masukkan, maka nilai dari parameter
tersebut akan tetap sama sebelum dan setelah eksekusi prosedur tersebut (walaupun dalam
prosedur terdapat code yang mengubah nilai parameter input tersebut). Sedangkan parameter
input/output adalah parameter yang digunakan sebagai masukkan sekaligus sebagai keluaran dari
prosedur tersebut. Maka, parameter input/output akan memiliki nilai yang berbeda saat sebelum
dan sesudah eksekusi prosedur (jika dalam prosedur terdapat code yang mengubah nilai parameter
tersebut).
Selain parameter input, dan parameter input/output, dalam subprogram (fungsi dan prosedur)
terdapat dua jenis variabel yang dapat digunakan, yaitu variabel lokal dan variabel global. Variabel
global adalah variabel yang didefinisikan diawal program dan dapat digunakan oleh seluruh blok
program (program utama dan subprogram) sementara variabel lokal adalah variabel yang
didefinisikan dalam sebuah subprogram, dan hanya dapat digunakan oleh subprogram yang
mendefinisikannya saja. Jika sebuah subprogram mendefinisikan sebuah variabel (variabel lokal)
yang dengan nama yang sama seperti pada yang sudah didefinisikan di kamus awal sebelumnya
(variabel global), maka dalam subprogram tersebut, jika variabel tersebut dipanggil, maka variabel
tersebut akan mengacu ke variabel lokal.
Soal
1. Buat procedure untuk menghitung jumlah uang yang harus dikeluarkan oleh mesin
ATM dengan spesifikasi : mesin ATM menyimpan 3 pecahan mata uang yaitu pecahan
Rp 20.000,- ; Rp10.000,-; dan Rp 5.000. Procedure menggunakan 1 parameter
masukan untuk input jumlah uang, dan 3 parameter keluaran untuk jumlah
masing – masing pecahan yang harus dikeluarkan. (Misal bila masukan user 35.000
maka akan dikeluarkan jumlah Rp 20.000,- = 1, jumlah Rp 10.000,- = 1, dan
Rp5.000,- = 1 ).
3. Buat sebuah program dengan menggunakan prosedur dan fungsi untuk menghitung
volume kubus, silinder, dan kerucut.
4. Andi diminta ibunya untuk membuat sebuah program yang dapat memasukkan tanggal
hari ini dan menampilkan tanggal untuk besok hari (dd=mm-yy). Bantulah Andi
untuk membuat program tersebut (Gunakan record dan gunakan fungsi untuk
perhitungan tanggal besok hari, cek juga apakah tahunnya kabisat atau tidak!)
Contoh :
input
hari : 31
bulan : 12
tahun : 92
output
besok adalah tanggal 1-1-93
Modul 5 Perulangan
Tujuan
Praktikan diharapkan dapat :
o Mengerti esensi penggunaan Perulangan (Looping) dalam Algoritma dan Pascal.
o Memilih bentuk pengulangan yang benar dan tepat untuk kelas persoalan tertentu.
o Mampu memecahkan masalah sederhana dengan menggunakan Perulangan dan
mengimplementasikan ke dalam Pascal.
Selain itu, dalam perulangan, apabila code yang ingin diulang memiliki jumlah baris lebih
dari 1, diperlukan sebuah blok kontrol yang dimulai dengan Begin dan end; sehingga,
contoh diatas, apabila ditambahkan perintah writeln(1) misal, maka akan menjadi seperti
berikut
for c:=”A‟ to “Z‟ do
Begin
writeln(c);
writeln(1);
End;
Untuk perulangan for sendiri, terdapat 2 jenis perulangan, yaitu perulangan ascending (for – to – do
) dan perulangan descending ( for – downto – do ). Pada dasarnya proses perulangan kedua for
tersebut adalah sama, yang membedakan adalah perubahan variable setiap iterasi, untuk for – to –
do setiap iterasi, nilai dari variable bertambah, sedangkan for – downto – do nilai dari variable
berkurang setiap iterasi. Perulangan for mencapai iterasi terakhir adalah ketika nilai variable
sudah sama dengan nilai kedua (setelah kata to ). Contoh :
Pada program tersebut, nilai variable i akan terus berubah. Kondisi awal variable I akan bernilai
sama dengan N, karena tipe perulangan downto, maka pada iterasi berikut, variable i akan bernilai
N-1, iterasi berikutnya N-2, dan seterusnya hingga i =1. Iterasi i = 1 adalah iterasi terakhir pada
perulangan tersebut.
Seperti halnya pada bab III, tentang if – then, Penerapan for juga dapat digunakan di dalam for
yang lain (perulangan di dalam perulangan) untuk memahaminya, silakan coba tracing program
pembentuk pola berikut.
Algoritma Begin
writeln(„Masukkan nilai n : '); readln(N);
Input(N) for i:= 1 to N do
begin
i traversal [1..N] for j:=1 to N do
J traversal [1..N] begin
output('*') write('*');
end;
Output(‘/n’) writeln;
end;
Output('akhir program') writeln('akhir program'); readln;
End.
Untuk lebih memahami proses perulangan for, buatlah program untuk membuat sebuah pola
yang memberikan output seperti gambar di bawah dengan inputan N=5.
*****
****
***
**
*
Perulangan pada skema While – do akan memeriksa kondisi setiap iterasi. Jika kondisi benar, maka
perintah akan dilakukan, oleh karena itu perulangan berhenti ketika kondisi bernilai salah. Hati –
hati untuk skema ini, karena jika penentuan kondisi, karena jika kondisi selalu bernilai true, maka
perulangan tidak akan pernah berhenti, dan program akan mengalami error. Berikut contoh
sederhana penggunaan while – do :
Pseudo Code Kode Bahasa Pascal
Algoritma Begin
input(N) writeln('baca N, print 1 s/d N'); write('N
i1 = '); readln(N);
while (i<=N) do i:=1
output(i) while (i<=N) do
ii+1 Begin
writeln(i);
i:=i+1;
end; { i>N }
readln;
End.
Algoritma Begin
Input(n) writeln('baca N, print 1 s/d N');
I1 write('N = '); readln(N);
repeat i:=1
output(i); repeat
ii+1; writeln(i);
until (i>N); i:=i+1;
until (i>N);
readln;
End.
Input(a,b);
function kurang (a,b:integer): writeln('Hasil pengurangan :
integer ',kurang(a,b));
algoritma readln;
kurang a - b end;
3:begin
Input(a,b);
procedure input(var a,b:integer) writeln('Hasil perkalian :
algoritma ',kali(a,b));
input(a) readln;
input(b) end;
end;
until pil=4;
readln;
End.
Soal
1. Tuliskan program untuk membuat sebuah pola angka. Inputan dari
program adalah sebuah angka N. Jika N diberi nilai 5, maka output-nya
adalah :
12 3 4 5
23 4 5 1
34 5 1 2
45 1 2 3
51 2 3 4
2. Buat program untuk menentukan angka yang diinputkan adalah bilangan
prima atau bukan.
Contoh : Input
:
Masukkan angka : 2
Output : Prima
Input :
Masukkan angka : 51
Output : Bukan Prima
Tujuan
Praktikan diharapkan dapat :
o Memahami pengertian sekuensial.
o Memahami item-item sekuensial.
o Memahami kasus kosong.
o Memahami “mark”.
o Memahami penanganan kasus kosong.
o Memahami hubungan berulang dan studi kasusnya.
Skema pemrosesan sekuensial adalah cara menyelesaikan permasalahan secara sekuensial atau
berurutan. Contoh persoalan yang diselesaikan dengan skema pemrosesan sekuensial adalah
menjumlahkan setiap bilangan yang ada dalam jangkauan 1 hingga 100, atau menghitung fungsi
faktorial dari 10! dengan mengalikan angka 1 hingga 10 secara satu per satu dan terurut. Modul ini
sangat membutuhkan pemahaman yang baik mengenai modul perulangan yang telah dipelajari
sebelumnya.
Dalam modul ini, akan dibahas dua jenis skema pemrosesan sekuensial: dengan penanda berakhir
(mark) dan tanpa penanda berakhir. Mark adalah penanda yang memberikan sinyal agar perulangan
berhenti. Mark biasanya berupa nilai yang tidak termasuk dalam elemen permasalahan.
algoritma var
input(N) i : integer; {bilangan yang akan
Sum0 dijumlahkan}
I1 {First-Elmt} n : integer;
while I <= N do {EOP} sum : integer; {jumlah}
output(i) {Current-Elmt}
sumsum + 1 begin
II+1 {Next-Elmt} write('Masukkan banyaknya bilangan : ');
output(sum) readln(n);
sum := 0;
i := 1; {First-Elmt}
Var
Algoritma I : integer; {bilangan yang akan
input(N) dijumlahkan }
Sum0 N : integer; {banyaknya bilangan yang
I1 dijumlahkan, N > 0}
repeat Sum : integer;{jumlah}
sum sum + 1 Begin {Program Utama}
II+1 write('Masukan banyaknyabilangan yang akan
until I > N{Mark} dijumlahkan: ');
output(sum) readln(N);
Sum:=0; I:=1;
repeat
sum:=sum + 1;
I:=I+1;
until I > N;{Mark}
writeln('Jumlah bilangan adalah ', sum);
readln;
End.
[1..N] N>0}
sumsum + 1 Sum : integer;{jumlah}
output(sum) Begin {Program Utama}
write('Masukan banyaknya bilangan yang akan
dijumlahkan : ');
readln(N);
Sum:=0;
for I:=1 to N do
sum:=sum + 1;
writeln('Jumlah bilangan adalah ', sum);
readln;
End.
Berikut adalah salah satu contoh penerapan skema pemrosesan sekuensial untuk masalah
Menghitung Deret S = 1/2 + 1/ 4 + 1/8 +… (Hubungan Berulang)
Begin Begin
Faktorial1 Faktorial:=1;
Input(n) write('Faktorial keberapa ?? '); readln(n);
i traversal [n..1] for i:= n downto 1 do
Output (faktorial) Begin
Faktorial faktorial * writeln('Faktorialnya adalah = ',
I faktorial);
Faktorial := faktorial * I;
end;
readln;
End.
n
Contoh lain adalah memangkatkan m
Algoritma Begin
Pangkat1 Pangkat:=1;
Input(m) write('masukkan M ');
Input(n) readln(m);
for i:= 1 to n do write('Masukkan N');
Pangkat Pangkat*m readln(n);
Output (pangkat) for i:= 1 to n do
Begin
Pangkat:=Pangkat*m;
end;
writeln ('M pangkat N = ',pangkat);
readln;
End.
Soal Latihan
1. Buatlah algoritma untuk mencetak bilangan ganjil sebanyak N bilangan.
Contoh masukan : N = 4
Contoh keluaran : hasil = 1,3,5,7
Gunakan model dengan mark dan tanpa mark juga pemrosesan kasus kosong
1 N
2. Buatlah algoritma untuk memberikan output dari 2 sampai 2 .
Contoh input : N = 3
Contoh output : hasil = 2,4,8
Catatan : Buatlah asumsi sendiri
4. Buatlah program untuk menampilkan n buah bilangan prima dimana n adalah inputan user.
Contoh input : N = 5
Contoh Output : deret = 2, 3, 5, 7, 11
6. Buat program yang terus meminta inputan user berupa angka. Program akan berhenti ketika
angka yang diinputkan user adalah angka prima.
Contoh Input :
Masukkan angka : 4
Masukkan angka : 6
Masukkan angka : 29
Contoh Output : 29 adalah prima
Tujuan
Praktikan diharapkan dapat :
o Mengerti definisi, deklarasi tipe tabel/larik dan mengetahui penggunaan tipe larik tersebut.
o Dapat memprogram tabel dengan fungsi dan prosedur.
o Memahami semua skema searching (sequential, binary, dan mencari harga ekstrim).
o Dapat mengimplementasikan skema searching tersebut terhadap kasus-kasus tertentu.
o Dapat menuliskan kode program seluruh skema sorting yang telah diberikan terhadap
berbagai jenis data (integer dan string).
Array merupakan sebuah tipe data yang dapat menyimpan banyak data bertipe sama. Array dapat
diakses berdasarkan nomor indeksnya. Array dapat dibangun dalam satu, dua atau lebih dimensi.
Dimensi array ini disesuaikan dengan kebutuhan.
Berikut adalah contoh kode untuk menyimpan bilangan-bilangan yang dimasukkan oleh pengguna.
begin
{awal dari memasukkan suatu elemen ke dalam sebuah array}
writeln ('Masukkan Banyak bilangan yg diinput (< 10)');
readln(banyak);
if (banyak <=10)then
for i:= 1 to banyak do
begin
writeln('masukkan bilangan ke ',i);
readln(Bilangan[i]);
end;
{akhir dari memasukkan suatu elemenke dalam sebuah array}
Contoh permasalahan yang membutuhkan array multidimensi misalnya adalah representasi matriks.
Berikut adalah contoh program yang merepresentasikan matriks dua dimensi.
Var
M1 : MatInt;
MA1 : MatArr;
procedure outM2DInt(tabel2d:MatInt);
var
i,j:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
write('M1[',i,',',j,']= ',tabel2d[i,j]);
writeln;
end;
end;
procedure outM2DArr(tabel2d:MatArr);
var
i,j:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do
write('M1[',i,',',j,']=',tabel2d[i][j]);
writeln;
end;
end;
Begin
initM2DInt(M1);
initM2DArr(MA1);
outM2DInt(M1);
outM2DArr(MA1);
readln;
End.
Array dinamis adalah array yang jumlah elemennya belum ditentukan. Awalnya, jumlah elemen
dalam array ini adalah nol. Ukuran array dapat ditambah (serta dipotong) dengan prosedur
bawaan Pascal, yaitu setlength. Prosedur setlength akan mengatur ukuran array sesuai
dengan masukan yang diberikan pada parameter. Berikut adalah contoh potongan program yang
menggunakan array dinamis.
Kode Bahasa Pascal
var
a : array of integer;
begin
writeln( length(a) ); {di awal, jumlah elemen array a adalah nol}
setlength(a,4);
writeln( length(a) ); {elemen array a berubah menjadi 4}
readln
end.
Pada contoh potongan program di atas, array a akan memiliki indeks yang dimulai dari 0 hingga 3
(ukuran array dikurangai satu).
begin
writeln ('Masukkan Banyak bilangan yg diinput(< 10) ');
readln(banyak);
if (banyak <= 10) then
begin
inittab(5,a);
outtab(5,a);
end;
readln;
end.
Tujuan
Praktikan diharapkan dapat :
o Memahami dan dapat mengaplikasikan algoritma sequential dan binary search.
o Memahami dan dapat mengaplikasikan algoritma sorting seperti bubble sort, insertion sort,
selection sort dan counting sort.
8.1 Searching
Diberikan sebuah array yang berisi banyak data nama-nama mahasiswa, kita dapat mencari nama
seseorang yang kita inginkan dengan metode-metode searching. Berikut adalah contoh program
sederhana pencarian nama seseorang, dengan data nama-nama orang yang telah disimpan
sebelumnya.
Pseudo Code Kode Bahasa Pascal
Program pencarian Program pencarian;
Kamus Var
nama : array [1..5] of nama : array [1..5] of string[50];
string[50] nama_dicari : string;
Nama_dicari : string i : integer;
I : integer begin
{pengisian elemen dengan nama}
Algoritma nama[1]:= ‘harry’;
Nama[1] ‘harry’ nama[2]:= ‘hermione’;
Nama[2] ‘hermione’ nama[3]:= ‘ron’;
Nama[3] ‘ron’ nama[4]:= ‘neville’;
Nama[4] ‘neville’ nama[5]:= ‘luna’;
Nama[5] ‘luna’
{awal pencarian}
Input(nama_dicari) writeln('masukkan nama yang dicari');
readln(nama_dicari);
i traversal [1..5]
If (nama_dicari=nama[i]) then {mulai mencari}
Output('Nama ditemukan') for i:=1 to 5 do
{dicari satu dalam elemen array}
If (nama_dicari=nama[i]) then
writeln('Nama ditemukan');
{ jika ditemukan }
end.
Contoh di atas adalah program yang sangat sederhana untuk mencari (search) data dalam array. Jika
kita mencari ‘luna’, maka program akan mengeluarkan ‘Nama ditemukan’ karena nama luna
berada dalam array nama yang ingin dicari. Hal yang berbeda akan berbeda jika kita mencari
‘cedric’ misalnya, karena nama ‘cedric’ tidak terdapat dalam array nama. Dalam hal ini,
program tersebut akan langsung keluar (terminasi) tanpa mengeluarkan output apapun. Padahal,
akan sangat membantu jika kita memberikan keterangan pada pengguna bahwa data yang dicari
tidak ditemukan. Pada contoh selanjutnya, kita akan melihat program yang dapat melakukan hal ini
dengan memanfaatkan sebuah variable bertipe Boolean. Variabel ini akan diset true jika data
ditemukan, dan tetap bernilai false jika hingga ujung pencarian array, data tidak juga ditemukan.
Kemudian, perhatikan bahwa jika kita ingin mencari ‘harry’, maka sebenarnya program akan
menemukan data ‘harry’ pada iterasi pertama. Kondisinya, walaupun tujuan dari program ini telah
selesai (yaitu menemukan data yang ingin dicari), namun sayangnya program sederhana di atas akan
tetap meneruskan mencari keseluruhan array. Hal ini juga akan diperbaiki pada pembahasan berikut,
yaitu program akan berhenti ketika data yang ingin dicari telah ditemukan.
If found then
output(‘data ditemukan pada If found then
indeks ke-‘,i) writeln(‘data ditemukan pada indeks ke-
Else ‘,i);
output(‘data tidak ditemukan’) Else
writeln(‘data tidak ditemukan’);
end;
end;
Variasi lain dari sequential search adalah Skema sequential search dengan sentinel.
Coba perhatikan program berikut :
Pseudo Code Kode Bahasa Pascal
Procedure SEQSearchSentinel(T:TabInt; Procedure SEQSearchSentinel(T:TabInt;
NMax,x:integer; i/o idx:integer) NMax,x:integer; var idx:integer);
kamus Var
i : integer i : integer;
algoritma Begin
i1 i:=1;
T[NMax+1]x {pasang sentinel} T[NMax+1]:=x; {pasang sentinel}
While (T[i]<>x) do While (T[i]<>x) do
ii+1 Begin
i:=i+1;
If i < NMax +1 then end;
output(‘data ditemukan pada
indeks ke-‘,i) If i< NMax +1 then
Else writeln(‘data ditemukan pada indeks ke-
output(‘data tidak ditemukan’) ‘,i);
Else
writeln(‘data tidak ditemukan’);
end;
Foundtrue Found:=true;
Ixtengah Ix:=tengah;
Else if T[tengah]<x then Else if T[tengah]<x then
atastengah+1 atas:=tengah+1
Else Else
bawahtengah-1 bawah:=tengah-1;
end;
{atas>bawah or found,
harga found menentukan hasil pencarian}
end;
Tengah(atas+bawah)div 2 Tengah:=(atas+bawah)div 2;
end; {atas>=bawah or T[tengah]=x}
if (T[tengah]=x) then
ixtengah if (T[tengah]=x) then
else ix:=tengah
ix0 else
ix:=0;
end;
8.3 Sorting
Dalam ilmu komputer, terdapat banyak metode pengurutan data (sorting) yang telah ditemukan
dengan segala kekurangan dan kelebihannya masing-masing. Dalam modul ini, akan dibahas empat
metode pengurutan data yang sederhana dan fundamental, yaitu bubble sort, insertion sort,
selection sort dan counting sort.
Di bawah ini adalah contoh program utama yang akan memanggil prosedur pengurutan data
tertentu. Metode-metode pengurutan data akan dijelaskan pada subbab berikutnya dalam bentuk
kode procedure atau function.
CONST CONST
Nmax = 100 Nmax = 100
TYPE TYPE
Tabel = array[1..Nmax] of integer Tabel = array[1..Nmax] of integer;
kamus VAR
T : Tabel {tabel integer} T : Tabel; {tabel integer}
N : integer N : integer;
I,x : integer Kondisi : boolean {indeks efektif,
maksimum tabel yang terdefinisi 1 ≤ N ≤
algoritma Nmax+1}
While (not(kondisi)) do I,x : integer; Kondisi : boolean;
input(N)
if ((N>=1) and (N<=Nmax+1)) Begin
then While (not(kondisi)) do
kondisitrue Begin
readln(N);
i traversal [1..n] if ((N>=1) and (N<=Nmax+1)) then
input(T[I]) kondisi:=true;
end;
{lakukan pemanggilan prosedur sort
disini……!} for I :=1 to N do
begin
write('masukkan nilai ke ',I,' = ');
readln(T[I]);
end;
End.
begin
Algoritma for i:=Min to Max do
i traversal [min..max] begin
TabCount[i]0 TabCount[i]:=0;
end;
i traversal [i..n]
TabCount[TabInt[i]] for i:=1 to n do
TabCount[TabInt[i]]+1 begin
k<-0 TabCount[TabInt[i]]:=TabCount[TabInt[i]]+1;
i traversal [min..max] end;
if TabCount[i] <> 0 then
j traversal k:=0;
[1..TabCount[i]] for i:=Min to Max do
kk+1 if TabCount[i] <> 0 then
TabInt[k]i for j:=1 to TabCount[i] do
begin
k:=k+1;
TabInt[k]:=i;
end;
end;
Catatan:
o Lakukan pengujian terhadap semua prosedur sorting tersebut dengan menggabungkan
antara program utama pengurutan dan semua prosedurnya.
o Manakah yang lebih mangkus? Selection, insertion, atau bubble sort?
o Lakukan pengujian terhadap
Karakter (mengurutkan abjad) dan
String (mengurutkan nama).
Soal
Isi matrik 1
matrik1 [1,1] = 1
matrik1 [1,2] = 2
matrik1 [2,1] = 3
matrik1 [2,2] = 4
matrik1 [3,1] = 5
matrik1 [3,2] = 6
Isi matrik 2
matrik2 [1,1] = 1
matrik2 [2,1] = 2
2. Buatlah sebuah program untuk mengurutkan array of record berdasarkan field tertentu!
3. Buatlah program untuk melakukan perhitungan modus pada suatu array berdimensi 2!
a n g ka -6 : 2 43
a n g ka -7 : 6 7
Co nt oh Ou tpu t :
u ru t an an g ka yan g a ka n d im a ka n ol eh P ep i a d a la h :
2 4 3, 6 7 , 56 . 5, 4 3 , 2 , -2 , - 28 . 4
5. Buatlah program untuk melakukan inisialisasi array berjumlah 100 item dengan nilai
random kemudian lakukan pengurutan dengan metode sorting tertentu!
Tujuan
Praktikan diharapkan dapat :
o Memahami bentuk-bentuk file sekuensial dalam algoritma.
o Memahami bentuk algoritma konsolidasi.
o Membuka file, menutup file, menuliskan data ke file, menampilkan data, menampilkan data
baik dalam bentuk file skuensial dalam algoritma maupun dalam bahasa Pascal.
Pada modul ini, kita akan belajar bagaimana menyimpan data pada sebuah file. Sebelum
membahas lebih lanjut perlu diketahui beberapa operasi terhadap file yang dapat dilakukan, yaitu
Assign
Berfungsi untuk membuka berkas atau file yang akan dioperasikan.
Sintaks: Assign(Variabel_File,’File_Name’)
Rewrite
Berfungsi untuk membuat file baru dan menempatkan posisi kursor/pointer pada awal berkas
(posisi nol). Perlu diperhatikan, bila ternyata file tersebut sudah ada maka secara otomatis data
sebelumnya akan terhapus.
Sintaks: Rewrite(Variable_File)
Write
Berfungsi untuk menuliskan data dari variabel penampung ke dalam file. Posisi pointer akan
secara otomatis maju ke posisi selanjutnya setelah prose penulisan selesai.
Sintaks: Write(Variable_File,Variable_Penampung)
Read
Berfungsi untuk membaca data dari file dan selanjutnya disimpan ke dalam variable
penampung. Posisi pointer juga secara otomatis akan maju.
Sintaks :
Read (Variable_File,Variable_Penampung)
Reset
Berfungsi mengembalikan posisi pointer ke awal file. Sintaks :
Reset (Variable_File)
Seek
Berfungsi untuk menempatkan pointer pada posisi data tertentu yang ada di dalam file.
Sintaks :
Seek (Variable_File,Posisi_Pointer)
FileSize
Berfungsi untuk mendapatkan jumlah data yang tersimpan dalam file.
Sintaks :
Variable_Penampung := FileSize(Variable_File)
FilePos
Berfungsi untuk mendapatkan posisi pointer pada saat eksekusi operasi ini dilakukan.
Sintaks :
Variable_Penampung := FilePos(Variable_File)
Erase
Berfungsi untuk menghapus berkas.
Sintaks :
Erase (Variable_File)
Rename
Berfungsi untuk mengganti nama berkas yang sudah ada.
Sintaks :
Rename(Variable_File,’New_Name’)
EOF
Berfungsi untuk mengetahui apakah posisi pointer sudah berada di data terakhir (TRUE)
atau tidak (FALSE).
Sintaks :
Variable_Penampung := EOF (Variable_File)
Close
Berfungsi untuk menutup berkas bila tidak akan dioperasikan lagi.
Sintaks :
Close(Variable_File)
Penerapan File Sekuensial untuk menghitung mencari nilai tertinggi dan terendah dari file
Pseudo Code Kode Bahasa Pascal
Program Mencari Nilai Max dan Min dari Program Mencari Nilai Max dan Min dari
File File
Uses crt;
Type Type
Mahasiswa = < Mahasiswa = Record
NIM : String NIM : String;
Nama : String Nama : String;
Nilai : Real Nilai : Real;
> End;
kamus Var
ArsipMhs : file Of Mehasiswa ArsipMhs : file Of Mehasiswa;
RekMhs,RekMhsMax,RekMhsMin : RekMhs,RekMhsMax,RekMhsMin :
Mahasiswa Mahasiswa;
{Dengan Asumsi Range nilai 0-100}
algoritma
RekMhsMax.Nilai0 Begin {Program Utama}
RekMhsMin.Nilai100 RekMhsMax.Nilai:=0;
Assign(ArsipMhs,‟MHS.DAT‟) RekMhsMin.Nilai:=100;
Reset(ArsipMhs) Assign(ArsipMhs,‟MHS.DAT‟);
Reset(ArsipMhs);
While not Eof(ArsipMhs) do While not Eof(ArsipMhs) do
Read(ArsipMhs,RekMhs) begin
If RekMhsMax.Nilai<=RekMhs.Nilai Read(ArsipMhs,RekMhs)
then If RekMhsMax.Nilai <= RekMhs.Nilai
RekMhsMaxRekMhs then
If RekMhsMin.Nilai>=RekMhs.Nilai RekMhsMax=RekMhs;
then If RekMhsMin.Nilai>=RekMhs.Nilai
RekMhsMinRekMhs then
RekMhsMin=RekMhs;
Writeln(RekMhsMax.Nilai,RekMhsMax. end;
Nim)
Writeln(RekMhsMin.Nilai,RekMhsMin. Writeln(“Mahasiswa dengan nilai
Nim) tertinggi:
Close(ArsipMhs) “,RekMhsMax.Nilai,‟dengan
Nim‟,RekMhsMax.Nim);
Writeln(“Mahasiswa dengan nilai
terendah:
“,RekMhsMin.Nilai,‟dengan
Nim‟,RekMhsMin.Nim);
Close(ArsipMhs);
End.
kamus Var
ArsipMhs,TempArsipMhs : file Of ArsipMhs,TempArsipMhs : file Of
Mehasiswa Mehasiswa;
RekMhs : Mahasiswa RekMhs : Mahasiswa;
X:String X:String;
kamus Var
ArsipMhs: file Of Mahasiswa ArsipMhs: file Of Mahasiswa;
Filename :string Filename :string;
boolean begin
assign(ArsipMhs,namafile) assign(ArsipMhs,namafile);
{$I-} {$I-}
reset(ArsipMhs) reset(ArsipMhs);
{$I+} {$I+}
if IOresult=0 then if IOresult=0 then
cekfile<-false cekfile:=false
else else
cekfile<-true cekfile:=true;
end;
Var Var
ArsipMhs1,ArsipMhs2,ArsipMhsOut ArsipMhs1,ArsipMhs2,ArsipMhsOut : file
: Of Mahasiswa;
file Of Mahasiswa RekMhs1,RekMhs2,RekMhsOut: Mahasiswa;
RekMhs1,RekMhs2,RekMhsOut:
Mahasiswa Begin {Program Utama}
Assign(ArsipMhs1,‟MHS1.DAT‟);
algoritma Reset(ArsipMhs1);
Assign(ArsipMhs1,‟MHS1.DAT‟) Assign(ArsipMhs2,‟MHS2.DAT‟);
Reset(ArsipMhs1) Reset(ArsipMhs2);
Assign(ArsipMhs2,‟MHS2.DAT‟) Assign(ArsipMhsOut,‟MHSOUT.DAT‟);
Reset(ArsipMhs2) Rewrite(ArsipMhsOut);
Assign(ArsipMhsOut,‟MHSOUT.DAT‟) While not Eof(ArsipMhs1) do
Rewrite(ArsipMhsOut) begin
While not Eof(ArsipMhs1) do read(ArsipMhs1,RekMhs1);
read(ArsipMhs1,RekMhs1) write(ArsipMhsOut,RekMhs1);
write(ArsipMhsOut,RekMhs1) end;
seek(ArsipMhsOut,filesize(ArsipM
hsOut)) seek(ArsipMhsOut,filesize(ArsipMhsOut));
While not Eof(ArsipMhs2) do
While not Eof(ArsipMhs2) do begin
read(ArsipMhs2,RekMhs2) read(ArsipMhs2,RekMhs2);
write(ArsipMhsOut,RekMhs1) write(ArsipMhsOut,RekMhs1);
end;
Close(ArsipMhs1)
Close(ArsipMhs2) Close(ArsipMhs1);
Close(ArsipMhsOut) Close(ArsipMhs2);
Close(ArsipMhsOut);
End.
Soal
1. Buat sebuah program untuk menampilkan data mahasiswa tertentu saja untuk
data mahasiswa dengan menggunakan file sekuensial!
2. Buat sebuah program untuk menampilkan rata-rata nilai mahasiswa apabila satu
mahasiswa dapat memiliki lebih dari satu mata kuliah!
3. Buat sebuah program untuk mengubah data Mahasiswa berdasarkan NIM- nya!
4. Buatlah sebuah program yang mampu membaca dan menulis data diary dalam
mode text. Setiap elemen diary terdiri dari tanggal, judul dan isi diary. Main menu
program ini adalah :
1. Lihat diary
2. Tambah diary baru
3. Exit
5. Buat sebuah program untuk mengelompokkan file pada mahasiswa berdasarkan
program studi yang diketahui dari Nimnya! Contoh:
NIM : 613060001 ada di file D3.DAT Sedangkan NIM : 113060001 ada di file
S1.DAT
Tujuan
Praktikan diharapkan dapat :
o Memahami pengertian mesin abstrak.
o Memahami item-item mesin abstrak.
o Memahami penggunaan mesin abstrak dalam studi kasus tertentu.
Mesin abstrak adalah yang dapat melakukan sebuah tugas namun tidak mempunyai fisik. Mesin ini
hanya khayalan, oleh sebab itu disebut abstrak. Terdapat dua jenis mesin abstrak yang akan
dibahas dalam modul ini, yaitu mesin karakter dan mesin pencacah.
Seperti tampak pada gambar Gambar 10.1, mesin karakter divisualisasikan sebagai sebuah mesin
sederhana yang hanya memiliki dua tombol untuk dioperasikan: tombol start dan adv. PitaChar
sendiri adalah “kertas” berisi karakter-karakter yang akan dibaca. Dalam gambar yang sama, pitaChar
divisualisasikan sebagai persegi dengan pola strip hitam putih. Mesin abstrak kita akan membaca
karakter yang tertulis dalam pitaChar ini hingga ujung pita. Penting untuk diingat bahwa mesin
sederhana ini hanya mampu membaca satu karakter per satuan waktu.
Ketika tombol start ditekan (dalam program yang akan kita buat pada subbab berikutnya, cara
“menekan” mesin khayalan kita adalah dengan memanggil function yang bersangkutan), mesin akan
menyala dan mulai membaca karakter pertama pada pitaChar. Ketika tombol adv ditekan, mesin
akan menggeser pitaChar selangkah ke kanan dan membaca karakter selanjutnya yang ada dalam
pitaChar.
Selain dua tombol tadi, mesin sederhana ini juga dilengkapi dengan dua buah indikator: CC dan EOP.
Sebelumnya harus diketahui dulu hal – hal dasar yang harus diketahui mengenai mesin karakter. CC
atau current character adalah layar yang menampilkan karakter yang sedang dibaca oleh mesin.
Indikator EOP adalah sebuah lampu (atau dalam program kita nantinya, sebuah variabel bertipe
Boolean) yang berfungsi sebagai indikator habisnya pita untuk dibaca. Lampu EOP yang tadinya
padam, akan menyala (dalam program kita berarti, variabel EOP yang tadinya bernilai false akan
berubah menjadi true) ketika pitaChar telah habis dibaca.
Tipe data yang paling cocok untuk menampung PitaChar adalah dengan menggunakan file bertipe
char, yang dapat diimplementasikan sebagai file of char ataupun textfile, karena string
adalah kumpulan dari banyak karakter. Dalam modul ini, textfile akan digunakan sebagai tipe data
file.
Setiap karakter dapat diproses dengan mengakses variable CC. untuk mendapatkan CC, kita dapat
memakai bantuan variable CI (current integer). Pada mesin karakter, dikenal ADV untuk maju
satu karakter kedepan, namun tidak ada procedure untuk mundur satu karakter kebelakang. Berikut
adalah contoh sederhana dari sebuah mesin karakter. CI pada mesin karakter dimulai dari angka 1,
karena pada bahasa Pascal, index pertama sebuah string dimulai dari angka 1, berbeda dengan
bahasa C yang dimulai dari angka 0.
Berikut adalah contoh program untuk membaca karakter yang dibaca oleh mesin abstrak dari file
pitaChar, kemudian menampilkannya ke layar komputer kita. Sebelum mencoba program berikut,
buatlah terlebih dahulu sebuah file bertipe txt dengan nama abstract0.txt yang di dalamnya berisi
‘0123456789’ tanpa tanda petik.
Gambar 10.3. Alat penghitung lompat tali, representasi nyata dari mesin pencacah
Berikut adalah contoh mesin integer yang digunakan untuk menyelesaikan kasus sederhana:
menghitung panjang pitaChar. Sebelum mencoba, buatlah file abstract2.txt terlebih dahulu yang
berisi ‘abcde’ tanpa tanda petik. Kemudian cobalah apakah program di bawah ini memberikan hasil
jumlah karakter dalam pitaChar yang benar, yaitu 5. Pada contoh di bawah ini, mesin integer
digunakan bersama dengan mesin karakter agar dapat berfungsi.
Catatan:
Cobalah untuk melakukan perhitungan jumlah kata dengan memodifikasi program untuk
menghitung panjang suatu kalimat
Modifikasi kembali program untuk menghitung panjang suatu kalimat untuk melakukan
perhitungan jumlah kemunculan suatu pasangan huruf pada kalimat.
Soal
1. Hitung Kemunculan jumlah huruf konsonan yang ada pada suatu kalimat
2. Buatlah program untuk menghitung frekuensi kemunculan suatu kata tertentu
pada kalimat yang diinputkan oleh user.
3. Buatlah program untuk menghilangkan blank yang berlebihan, yaitu antara
lain:
a. Satu atau lebih blank sebelum huruf pertama yang bukan blank.
b. Satu atau lebih blank sebelum huruf terakhir yang bukan blank.
c. Lebih dari satu blank di antara dua buah kata
4. Buatlah program untuk melakukan konversi pada pita karakter yang
mengandung bilangan biner dan mengubahnya menjadi bilangan integer!
Modul Overview
Tujuan
Praktikan diharapkan dapat :
Memahami konsep assignment dan operasi variabel
Memahami tipe-tipe dasar yang ada dalam bahasa pemrograman Pascal
Memahami dan menerapkan konsep analisa kasus
Memahami dan menerapkan konsep fungsi dan prosedur di berbagai kasus
Memahami dan menerapkan konsep perulangan di berbagai kasus
Program TubuhIdeal;
{ Nama File : TubuhIdeal.pas
Deskripsi : Mengkategorikan berat badan yang diinputkan user ke
dalam
kategori ideal, di atas normal, ataupun di bawah normal
berdasarkan nilai acuan (tinggi badan – 100 – ((tinggi badan-
100)x0.1) }
uses crt;
var
{---Kamus Global---}
a : real;
b,c : real;
begin
{---Program Utama---}
clrscr;
write('Masukkan tinggi badan : '); readln(a);
write('Masukkan berat badan : '); readln(b);
c := a - 100 - ((a-100)*0.1);
if (b = c) then
write ('berat badan anda ideal')
else
if (b>c) then
write('berat badan anda di atas
normal')
else
write('berat badan anda di bawah normal');
readln;
end.
Program PecahinUang;
{ Nama File : PecahinUang.pas
Deskripsi : Menentukan jumlah masing-masing pecahan uang 20000,
10000, dan 1000 terhadap inputan user }
uses crt;
var
{---Kamus Global---}
a : longint;
p1, p2, p3, sisa : longint;
begin
{---Program Utama---}
clrscr;
write('Masukkan jumlah uang yang akan diambil : ') ;readln(a);
sisa := a;
if (a >= 20000) then
begin
p1 := a div 20000;
sisa := a - (p1*20000);
end;
if (sisa >= 10000) and (sisa < 20000) then
begin
p2 := sisa div 10000;
sisa := sisa - (p2*10000);
end;
if (sisa < 10000) then begin
p3 := sisa div 1000;
end;
Program Garis;
{ Nama File : Garis.pas
Deskripsi : Menentukan dua koordinat titik yang diinputkan termasuk
kategori garis vertikal, horizontal, miring, ataupun bukan garis }
uses crt;
var
{---Kamus Global---}
x1, x2, y1, y2, delta_x, delta_y : integer;
m : real;
begin
{---Program Utama---}
clrscr;
write ('Masukkan titik x1 : '); readln(x1);
write ('Masukkan titik y1 : '); readln(y1);
write ('Masukkan titik x2 : '); readln(x2); write ('Masukkan
titik y2 : '); readln(y2); delta_x := x2-x1;
delta_y := y2-y1;
if ( (delta_x = 0) and (delta_y = 0) ) then
write('Bukan merupakan suatu garis')
else
if ( delta_x = 0 ) then
write('Ini merupakan garis Vertikal')
else
if ( delta_y = 0 ) then
write('Ini merupakan garis Horizontal')
else begin
m := delta_y / delta_x;
write ('ini merupakan garis miring dengan gradien = ',m:0:2);
end;
readln;
end.
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 49
Program Diamond;
uses crt;
var
i,j,n : integer;
begin
clrscr;
write('masukkan bilangan : '); readln(n);
for i:=1 to n do
begin
for j:=1 to n do begin
if ( (i+j) = n div 2 + 2 ) OR ( (i-j) = n div 2 )
OR ( (i+j) = n + (n div 2 +1)) OR ( (j-i) = n div 2
) then write('*')
else
write(' ');
end;
writeln;
end;
readln;
end.
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 50
Lampiran 1 – Exit Code dalam Free Pascal
Contoh exit code 201 saat runtime dalam IDE Free Pascal
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 51
Lampiran 1 – Exit Code dalam Free Pascal
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 52
Lampiran 2 – Fungsi dan Prosedur BawaanFree Pascal
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 53
Lampiran 3 – Programming is Fun
Library
Jika anda pernah memanggil prosedur “clrscr;” di program yang anda buat,
maka itu artinya anda sudah menggunakan salah satu prosedur yang sudah dibuat
dalam library “crt”. Sebelum bisa memanggil prosedur clrscr, anda harus meng-
ikutkan library crt dalam program anda dengan menuliskan perintah “uses crt;”
Library adalah kumpulan dari rutin-rutin (prosedur dan fungsi) yang dirasa
akan sering digunakan oleh program lain, seperti misalnya clrscr untuk membersihkan
layar. Anda tidak perlu lagi membuat sendiri prosedur untuk membersihkan layar,
anda cukup menggunakan prosedur clrscr yang sudah disediakan oleh pembuat
bahasa pemrograman Pascal.
Beberapa prosedur lain yang akan anda temukan dalam listing program
Pong.pas di bagian 10.2
adalah :
GotoXY : pergi ke posisi X dan Y tertentu pada sebuah layar
Inc : Increase, atau menambahkan 1 ke sebuah variable integer
Dec : Decrease, atau menambahkan -1 ke sebuah variable integer
Randomize : Menyiapkan sebuah seed angka random, cukup
dipanggil satu kali saja.
Random : Mengeluarkan angka secara acak dari sebuah range.
Misal dengan memanggil fungsi Random(100) maka
keluarannya bisa saja sebuah angka dari mulai 0
sampai
100.
Keypressed : Digunakan untuk mendteksi kejadian sebuah
penekanan tombol keyboard. Biasanya
penggunaannya dibarengi dengan pemanggilan fungsi
readkey (untuk membaca tombol yang barusan
ditekan)
readkey : Menerima inputan satu buah tombol dari keyboard.
Tidak seperti read/readln, readkey hanya menerima satu
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 54
Lampiran 3 – Programming is Fun
program Pascalpongby0263;
uses crt;
type
TipePosisi =
record x, y :
integer;
end;
const
panjangPapan = 4;
var
player1, player2 : TipePosisi;
i : integer;
ch : char;
posBola, arahBola : TipePosisi;
playerKalah, computerKalah : boolean;
procedure Gambar;
begin
clrscr; (* bersihkan layar, biar ada efek "perubahan"
*) (* gambar player*)
for i:=0 to panjangPapan-1 do begin
gotoXY(player1.x, player1.y + i); write('|');
gotoXY(player2.x, player2.y + i); write('|');
end;
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 55
Lampiran 3 – Programming is Fun
(*gambar bola*)
gotoXY(posBola.x, posBola.y); write('0');
end;
procedure updatePosisi;
begin
if (keypressed) then
begin ch := readkey;
case ch of
'w' : dec(player1.y);
's' : inc(player1.y);
end;
(* normalisasi player 1 *)
if (player1.y <= 1) then player1.y := 1;
if (player1.y >= 24-panjangPapan +1) then player1.y :=
24- panjangPapan+1;
end;
end;
procedure updateBola;
begin
posBola.x := posBola.x + arahBola.x;
posBola.y := posBola.y + arahBola.y;
if (posBola.y >= 24) or (posBola.y <= 1)
then arahBola.y := arahBola.y * -1;
if (posBola.x >= 80) then computerKalah := true;
if (posBola.x <= 1) then playerKalah :=
true; (* cek tabrakan bola vs. player1 *)
if (posBola.x = 4) then
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 56
Lampiran 3 – Programming is Fun
procedure UpdateKomputer;
var ran : integer;
begin
ran := random(100);
if (ran <= 50) then begin (* % chance komputer bergerak *)
if (posBola.y <= player2.y + (panjangPapan div 2))
then dec(player2.y)
else inc(player2.y);
end;
(* normalisasi player 2 *)
if (player2.y <= 1) then player2.y := 1;
if (player2.y >= 24-panjangPapan +1)
then player2.y := 24-panjangPapan+1;
end;
(* begin utama *)
begin
Randomize;
playerKalah := false; computerKalah := false;
player1.x := 3; player1.y :=
10; player2.x := 77; player2.y
:= 10; posBola.x := 40;
posBola.y := 10; arahBola.x:= -
1; arahBola.y := 1;
repeat
delay(100); (* di delay tiap frame, biar ga terlalu cepet *)
updatePosisi;
Gambar;
updateBola;
updateKompute
r;
until (ch = #27) or playerKalah or computerKalah;
(* charakter ke 27 adalah kode untuk tombol ESCAPE *)
if (playerKalah) then writeln('cupu ah..');
if (computerKalah) then writeln('wah kamu jago..');
readln;
end.
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 57
Tugas
Siapa yang tidak kenal game snake? Dalam game ini kita harus mengendalikan
seekor ular yang harus makan apel (ularnya vegetarian??) untuk menambah score.
Namun semakin banyak apel yang dimakan, semakin panjang pula tubuh sang ular. Ular
akan mati ketika ia (kepalanya) menabrak bagian tubuhnya sendiri.
Sederhana sekali bukan? Bisakah anda membuat game tersebut dengan bahasa
pemrograman Pascal?
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 90
Daftar Pustaka
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 91
-------------------------------------------------------------------
Praktikum Dasar Algoritma dan Pemrograman 92