modul pascal.pdf

106
I - 1 BAB I PENGENALAN PASCAL TUJUAN PRAKTIKUM Praktikum diharapakan dapat: 1. Mengenal Bahasa Pascal dan struktur pemrograman pada Turbo Pascal 2. Mengetahui dan memahami penggunaan komponen-komponen dasar pada Pascal 3. Menggunakan perintah dasar penulisan dalam membuat program DASAR TEORI 1.1 PENGENALAN PASCAL Bahasa PASCAL pertama kali dikembangkan pada awal tahun 70-an oleh NICLAUS WIRTH di Technical University, Zurich-Swiss. Nama PASCAL diambil dari nama seorang ahli matematika bangsa Prancis, yaitu BLAISE PASCAL yang telah berjasa menemukan alat hitung mekanis pertama di dunia pada abad ke-17. Bahasa pemrograman ini termasuk kategori “High Level Language”. Instruksi-instruksi yang digunakan dalam bahasa pemrograman ini sangat sistematis dan terstruktur. Pada awalnya bahasa pemrograman Pascal diperkenalkan dengan tujuan untuk menjelaskan masalah pemrograman komputer bagi mahasiswa yang belajar pemrograman komputer. Ternyata dalam waktu singkat, bahasa pemrograman ini menjadi salah satu bahasa yang sangat populer dikalangan universitas, sehingga menjadi julukan sebagai bahasa universitas. Keunggulan bahasa ini terletak pada kemudahannya untuk dipelajari dan adanya dukungan fungsi-fungsi matematika yang sangat lengkap. 1.2 STRUKTUR PROGRAM PASCAL

Upload: alfian-pratama

Post on 15-Apr-2016

58 views

Category:

Documents


24 download

DESCRIPTION

modul dasar bahasa pemrograman pascal yang bisa anda jadikan referensi untuk menguatkan dasar pemrograman yang lain.

TRANSCRIPT

Page 1: Modul Pascal.pdf

I - 1

BAB I

PENGENALAN PASCAL

TUJUAN PRAKTIKUM

Praktikum diharapakan dapat:

1. Mengenal Bahasa Pascal dan struktur pemrograman pada Turbo Pascal

2. Mengetahui dan memahami penggunaan komponen-komponen dasar pada

Pascal

3. Menggunakan perintah dasar penulisan dalam membuat program

DASAR TEORI

1.1 PENGENALAN PASCAL

Bahasa PASCAL pertama kali dikembangkan pada awal tahun 70-an oleh

NICLAUS WIRTH di Technical University, Zurich-Swiss. Nama PASCAL

diambil dari nama seorang ahli matematika bangsa Prancis, yaitu BLAISE

PASCAL yang telah berjasa menemukan alat hitung mekanis pertama di dunia

pada abad ke-17. Bahasa pemrograman ini termasuk kategori “High Level

Language”. Instruksi-instruksi yang digunakan dalam bahasa pemrograman ini

sangat sistematis dan terstruktur.

Pada awalnya bahasa pemrograman Pascal diperkenalkan dengan tujuan

untuk menjelaskan masalah pemrograman komputer bagi mahasiswa yang belajar

pemrograman komputer. Ternyata dalam waktu singkat, bahasa pemrograman ini

menjadi salah satu bahasa yang sangat populer dikalangan universitas, sehingga

menjadi julukan sebagai bahasa universitas. Keunggulan bahasa ini terletak pada

kemudahannya untuk dipelajari dan adanya dukungan fungsi-fungsi matematika

yang sangat lengkap.

1.2 STRUKTUR PROGRAM PASCAL

Page 2: Modul Pascal.pdf

I - 2

Struktur dari suatu program Pascal terdiri dari sebuah judul program,

bagian deklarasi dan bagian pernyataan (statement).

Judul program sifatnya adalah optional dan bila ditulis, harus terletak pada

awal dari program dan diakhiri dengan titik koma. Bagian deklarasi digunakan

biladi dalam program digunakan pengenalan (identifier). Kalau suatu program

menggunakan identifier, Pascal menuntut supaya identifier tersebut diperkenalkan

terlebih dahulu sebelum digunakan, yaitu dideklarasikan terlebih dahulu pada

bagian ini.

Struktur Minimal Program

Begin

Statement;

End.

Struktur Lengkap (umum) Program

(* Judul Program *)

Program Nama_Program;

{penjelasan tentang program, yang berisi uraian singkat

mengenai apa yang dilakukan program}

(* Bagian Deklarasi *)

Uses

{semua unit yang digunakan didefinisikan disini}

Label

Semua label yang digunakan didefinisikan disini}

Const

{semua nama konstanta dan harganya didefinisikan

disini}

Tipe

{semua nama type bentukan didefinisikan disini}

Var

{semua nama variabel global ditulis disini}

Page 3: Modul Pascal.pdf

I - 3

{deklarasi prosedur dan fungsi ditulis disini}

(* Bagian Deskripsi / Statement *)

Begin

Statement1;

Statement2;

.......

Statementn;

End.

Secara umum, program akan menerima masukan (input) dari piranti

masukan, melakukan sebuah proses tertentu, dan menghasilkan keluaran (output)

ke piranti keluaran. Berikut adalah contoh program dengan penulisan bahasa

pascal. Untuk contoh dibawah ini, program menerima masukan, dan juga tidak

melakukan proses tertentu, tetapi hanya menghasilkan keluaran yaitu

menampilkan sekumpulan karakter (string) di layar.

Program 1.1. Program menulis string

PROGRAM Hallo; (*Judul*)

{menulis sekumpulan karakter (string) ke layar}

BEGIN

writeln(‘Hallo, SELAMAT DATANG!!!’);

{Statement}

write(‘Anda sedang menggunakan Pascal’); {Statement}

readln;{Statement}

END.

Tampilan pada layar

Hallo, SELAMAT DATANG!!!

Anda sedang menggunakan Pascal

Page 4: Modul Pascal.pdf

I - 4

Beberapa aturan dalan program Pascal :

- Akhir sebuah program Pascal ditandai dengan tanda baca titik (.) setelah

END yang paling akhir.

- Tada titik koma (;) merupakan pemisah antara instruksi satu dengan

instruksi lain.

- Beberapa statement boleh ditulis menjadi satu baris di pisahkan dengan

tanda baca titikkoma(;)

- Baris komentar diletakan diantara tanda (* dan *) atau di antara { dan }

sehingga setiap kali program dijalankan, maka seluruh teks yang ada pada

tanda tersebut tidak akan di baca atau dikompilasi.

1.3 KOMPONEN DASAR PROGRAM PASCAL

Pola susun bahasa pascal dibentuk dengan menggunakan komponen bahasa

pemrograman yang umum, yaitu :

1. Simbol Dasar

2. Reserved Word (Kata Pasti)

3. Identifer(Pengenal)

1. Simbol Dasar.

Simbol dasar terdiri atas :

1. Simbol huruf, yaitu huruf A sampai dengan Z atau a sampai dengan z

(huruf besar dan kecil)

2. Simbol angka atau digit yaitu : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

3. Simbol khusus, yaitu + - * / ; : = < > <= >= <> : { } ( ) [ ]

2. Reserved Word (kata pasti)

Reserved Word adalah suatu kata yang sudah mempunyai arti khusus atau

‘kata kunci’ dan harus digunakan sebagai mana yang telah ditentukan

Page 5: Modul Pascal.pdf

I - 5

kegunaanya oleh bahasa pascal. Reserved Word ini tidak dapat digunakan

sebagai identifier

Contoh beberapa reserved word yang telah di devinisikan oleh bahasa

pascal antara lain :

AND ELSE LABEL REPEAT

ARRAY END MOD SET

BEGIN FILE NOT THEN

CASE FOR OF TYPE

CONST FUNCTION OR UNTIL

DIV GOTO PROCEDURE VAR

DO IF PROGRAM WHILE

DOWNTO IN RECORD WITH

3. Identifier (sebutan/pengenal)

Identifier merupakan sebuah kata yang diberikan oleh programer

dan digunakan sebagai nama atau sebutan terhadap sesuatu didalam

program. Pemakai dapat mendefinisikan sendiri suatu nama sebagai

Identifier. Identifier dapat digunakan untuk menyatakan suatu : program,

konstanta, variable, procedure, fungsi, label, tipe bentukan, objek, dan

hal lain yang dideklarasikan oleh pemrogram.

Identifier ini bebas, tetapi dengan ketentuan-ketentuan sebagai

berikut :

- terdiri dari gabungan huruf dan angka dengan karakter pertama

harus berupa huruf. Huruf besar dan kecil dianggap sama.

- Tidak boleh mengandung blank.

- Tidak boleh berupa reserved word atau kata kunci dalam Pascal.

- Tidak boleh mengandung simbol-simbol khusus, kecuali garis

bawah.

- Panjangnya bebas, tetapi hanya 63 karakter pertama yang

signifikan.

Page 6: Modul Pascal.pdf

I - 6

Contoh :

Identifier Keterangan

Gajikaryawan Benar

No_Mhs Benar

Tinf01 Benar

1X Salah, karakter pertama harus huruf

A&B Salah, tidak boleh mengandung simbol khusus

Nama Mhs Salah, tidak boleh mengandung blank/spasi

Begin, while, array Salah, tidak boleh kata kunci

1.4 PERINTAH WRITE DAN WRITELN

Struktur umum :

Write (parameter); writeln (parameter);

Perintah write dan writeln mempunyai kegunaan yang sama yaitu

menuliskan parameter-nya kelayar. Perbedaanya hanya pada pemindahan posisi

kursos setelah penulisan. Perintah writeln yang merupakan kependekan dari write

line, setelah menulis parameter-nya dilayar, maka kursor penulisan akan langsung

pindah kebaris di bawahnyasehingga hasil yang dicetak berikutnya akan

ditempilkan pada baris yang berbeda.

Perintah write hanya menuliksn parameternya saja, tanpa pindah baris

sehingga tampilan berikutnya akan disambung dengan baris yang sama.

Program 1.2. menjumlahkan dua buah bilangan yang sudah terdefinisi dan

menampilkan hasinya dilayar

Page 7: Modul Pascal.pdf

I - 7

Program Penjumlahan;

Uses crt;

{unit yang harus ditambahkan jika ingin menambah

perintah clrscr}

Begin

clrscr; {perintah untuk membersihkan layar}

writeln(‘penjumlahan dua bilangan’);

write(‘6+4’); {angka berupa string, dianggap

huruf}

write(‘ = ‘);

write(‘6+4’); {angka berupa numberic, dianggap

perhitungan}

readln;

End.

Tampilan pada layar

Penjumlahan dua bilangan

6+4=10

Program 1.3. Program menulis nama lembaga dan alamatnya

PROGRAM Tulis_alamat;

Begin

writeln(‘Teknik Informatika’);

write(‘Fakultas Teknik’);

writeln(‘Universitas Siliwangi’);

writeln;

write(‘Jl. Silwangi No. 24 Tasikmalaya’);

readln;

End.

Page 8: Modul Pascal.pdf

I - 8

Tampilan pada layar

Teknik Informatika Fakultas Teknik

Universitas Siliwangi

Jl. Siliwangi No. 24 Tasikmalaya

1.5 CARA MENJALANKAN PROGRAM

1. Klik menu run

2. Maka akan keluar sejumlah submenu, pilih submenu run

3. Maka program yang sedang aktif dilayar akan segera dijalankan

Perintah diatas bisa disingkat dengan menekan ctrl+F9

Untuk menampilkan hasil dengan menekan alt+F5

1.6 CARA MENYIMPAN PROGRAM

1. Klik menu File

2. Maka akan keluar sejumlah submenu, pilih submenu Save atau Save As

3. Jika memilih Save As maka akan keluar kotak dialog Save file as

4. Pada kotak Save file As ketiklah nama file anda, kemudian tekan Enter.

Contoh pengisian:

C :\ CONTOH

Menyimpan ke drive C dengan nama CONTOH

C :\ DATA\CONTOH

Menyimpan ke drive C ke dalam direktori DATA dengan nama

CONTOH

1.7 CARA MEMANGGIL PROGRAM

1. Klik menu File

2. Maka akan keluar sejumlah submenu, pilih submenu Open...

3. Maka akan keluar kotak dialog Open a file

Page 9: Modul Pascal.pdf

I - 9

4. Pada kotak Name ketikan nama file yang akan di panggil kemudian

enter. Contoh Pengisian :

C :\ CONTOH

Memanggil file CONTOH dari drive C

C :\ DATA \ CONTOH

Memanggil file CONTOH dari direktori DATA pada drive C

D :\ TurboPascal \ DATA \ CONTOH

Memanggil file CONTOH dari direktori TurboPascal\DATA pada drive

C

1.8 LATIHAN

1. Buatlah sebuah program yang mengahasilkan keluaran nama, npm,

kelas, dan alamat anda!

2. Buat program dalalam Pascal yang menghasilkan keluaran di layar

menggunakan perinta write/writeln!

*

* * *

* * * * *

* * * * * * *

3. Buat Program untuk menampilkan hasil penjumlahan, pengurangan,

perkalian, dan pembagian dua buah bilangan!

Contoh tampilan :

***Program Hitung***

120 + 12 = 132

120 – 12 = 108

120 x 12 = 1440

120 / 10 = 10.00

PENYELESAIAN

1. Program nama, npm dan alamat

Page 10: Modul Pascal.pdf

I - 10

Input

program nama;

uses crt;

begin

clrscr;

writeln('Nama : Dede Gunawan');

writeln('NPM : 137006107');

writeln('Alamat : Kp. Cioray, Ds. Jatiwaras, Kec.

Jatiwaras');

readln;

end.

Output

Analisis

Akhiran nama sebuah program harus menggunakan titik koma (;).

(program nama;)

Uses merupakan kata kunci yang digunakan untuk menyertakan sebuah

unit, dalam kasus ini unit yang disertakan adalah unit crt yang

merupakan unit yang harus disertakan jika ingin menggunakan fungsi

clrscr.

Fungsi clrscr merupakan sebuah fungsi yang berfungsi untuk

membersihkan layar.

Writeln singkatan dari writeline, merupakan sebuah fungsi untuk

menampilkan output di baris baru.

Page 11: Modul Pascal.pdf

I - 11

Readln merupakan sebuah fungsi untuk menerima input dari user

(pengguna), dalam kasus ini fungsi ini digunakan untuk membuffer

aplikasi agar tidak tertutup otomatis dan baru tertutup ketika pengguna

memasukkan input.

End. merupakan tanda akhir dari suatu program, ingat END harus diakhir

tanda titik (.).

2. Program bintang piramida

Input

program bintang;

uses crt;

begin

clrscr;

writeln(' *');

writeln(' * * *');

writeln(' * * * * *');

writeln('* * * * * * *');

readln;

end.

Output

Page 12: Modul Pascal.pdf

I - 12

Analisis

Aturan umum (penggunaan program, uses, writeln, readln, end.) sama

dengan analisis pada nomor satu.

Kata begin merupakan tanda dimulainya program utama.

String yang ada dalam tanda petik ('…..') perintah writeln akan dicetak apa

adanya, tanpa ada yang dibuang sedikit pun.

3. Program penjumlahan, pengurangan, perkalian dan pembagian

Input

program hitung;

uses crt;

begin

clrscr;

writeln('*** Program Hitung ***');

writeln;

writeln('120+12 = ', 120+12);

writeln('120-12 = ', 120-12);

writeln('120*12 = ', 120*12);

writeln('120/12 = ', 120/12:0:2);

readln;

end.

Output

Page 13: Modul Pascal.pdf

I - 13

Analisis

Konsep dasar sama dengan nomor 1 dan 2.

Dalam kasus ini ada hal unik, yaitu perintah writeln dapat

mengoutputkan suatu hasil operasi, bisa menjadi kalkulator sederhana.

Page 14: Modul Pascal.pdf

II - 1

MODUL 2

TIPE DATA, NILAI, INPUT, DAN OUT PUT

TUJUAN PRAKTIKUM

Praktikum bertujuan :

1. Mengetahui dan memahami penggunaan tipe-tipe data dasar pada Pascal

2. Memhami penggunaan operator dan ekspresi dalam membuat program

3. Memahami penggunan perintah dasar Input-Outputpada Pascal.

DASAR TEORI

2.1 TIPE DATA

Pada umumnya, program komputr bekerja dengan manipulasi objek (data)

didalam memori. Objek (data) yang akan di program bermacam-macam jenis ayau

tipenya.

Jenis-jenis tipe data dasar yang dikenal dalam bahasa pascal antara lain :

1. Boolean : tipe data bilangan logika, hanya bisa bernilai True (Benar) atau

False (Salah)

2. Integer : merupakan tipe data bilangan bulat. Macam tipe data bilangan

bulat :

Tipe Rentang Nilai Ukuran

byte 0….255 8 bit

shortint -128…..127 8 bit

word 0….65535 16bit

integer -32768….32767 16 bit

longint -2147483648…..2147483647 32 bit

Page 15: Modul Pascal.pdf

II - 2

3. Real : merupakan tipe data bilangan desimal. Macam tipe data bilangn real:

Tipe Rentang Nilai Ukuran

real 2.9 x 10-39….1.7 x 1038 6 byte

single 1.5 x 10-45….3.4 x 1038 4 byte

double 5.0 x 10-324…1.7 x 10308 8 byte

extended 3.4 x 10-4932...1.1 x 104932 10 byte

4. Char : merupakan tipe dat karakter

Char (charakter) adalah semua tombol yang terdapat pada keyboard, atau

lebih lengkapnya semua karakter yang terdapat pada kode ASCIL. Karakter

yang dimaksud yaitu karakter yang di tulis diantara tanda petik tunggal,

seperti misalnya ‘A’,’a’, ‘!’, ‘5’ dsb.

5. String

String adalah kumpulan dari beberapa karakteryang terletak diantara tanda

petik tunggal yang panjangnya tidak boleh lebih dari 255 karakter. Jika jika

string tersebut mengandung tanda kutip satu maka tanda kutip tersebut harus

diberi tanda kutip lagi.

Program 2.1 : Deklarasi dan contoh pengisian tipe data dasar

Program Tipe_Data;

Const {nama konstanta}

phi = 3.14; Nmaks = 200;

Var {nama variabel}

luasL : real; nilai : integer;

indeks : char; ketemu : boolean;

Nama_Mhs : string;

Begin {deskripsi program}

luasL := 32.4; nilai := 68;

indeks := ‘A’; ketemu := false;

Nama_Mhs := ‘Blaise Pascal’;

end.

Page 16: Modul Pascal.pdf

II - 3

2.2 VARIABEL DAN KONSTANTA

a. VARIABEL

Variabel digunakan dalam program untuk menyimpan sebuah nilai, dan

nilai yang simpan padanya dapat diubah selama ekstensi program berlangsung.

Setiap variabel mempunyai tiga atribut, yaitu nama, tipe, dan nilai. Nama

variabel adalah sebuah identifier yang ditentukan oleh programmer. Tipe

variabel menentukan jenis nilai/harga yang dipunyai atau melekat padanya.

Untuk menentukan nama dan tipe variabel yang akan digunakan pada program,

maka variabel harus dideklarasikan terlebih dahulu.

Bentuk umum deklarasinya adalah :

VAR

Identifier-1 : tipe data;

Identifier-2 : tipe_data;

Identifier-3, identifier-4, identifier-5,… :

tipe_data;

. . .

Identifier-n : tipe_data

Contoh :

VAR

Nama : String; {variabel nama tipe string}

Nim : integer; {variabel nim bertipe

integer/bilangan bulat}

Jns_kelamin : char; {variabel jns_kelamin

bertipe karakter}

Nilai : real; {variabel nilai

bertipereal/bilangan desimal}

Page 17: Modul Pascal.pdf

II - 4

Nilai_uts, nilai_uas, nilai_tugas : real;

{variabel dengan nama Nilai_uts, nilai_uas,

nilai_tugas bertipe sama yaitu real}

b. KONSTANTA

Konstanta merupakan nilai yang sifatnya tetap dan nilai yang disimpan

padanya tidak dapat diubah selama eksekusi program berlangsung. Untuk

mendefinisikan konstanta harus memakai kata kunci const dengan bentuk umum

:

Const nama_konstanta= nilai;

Konstanta harus langsung diisi dengan nilai tertentu

sebagai contoh:

Const phi = 3.14;

Program 2.2 : program menghitung dan menampilkan Luas dan keliling

lingkaran dengan nilai jari-jari yang sudah terdefinisi.

Program _Lingkaran ;

Const

phi = 3.14;

Var

jari_jari, luas, keliling, : Real;

Begin

jari_jari := 7;

luas := phi * jari_jari * jari_jari;

keliling := 2 * phi * jari_jari;

writeln(‘Luas Lingkaran =’,luas);

writeln(‘Keliling Lingkaran =’,keliling);

readln;

end.

Page 18: Modul Pascal.pdf

II - 5

Tampilan pada layar

Luas Lingkaran = 1.53860000000102E+0002

Keliling Lingkaran = 4.39600000000210E+0001

2.3 OPERATOR DAN EKSPRESI

Operator adalah lambang-langbang yang biasa dilibatkan dalam program

untuk melakukan suatu operasi atau manipulasi. Misalnya untuk perkalian,

penjumlahan, perbandingan, dll. Sedangkan ekspresi dapat berupa variabel,

konstanta atau kombinasi diantara variabel, konstanta dengan operator.

Contoh Ekspresi :

a := b + c – 2

Pada ekspresi ini a, b, dan c merupakan variabel yang berperand sebagai

operand sedangkan simbol :=, + dan – merupakan operator. Dalam hal ini variabel

a di isi dengan hasil penjumlahan b dan c dikurangi 2.

Jenis-jenis operator:

1. Opertor Assignment (Pemberian Nilai)

Bentuk umum :

Nama_variabel := ekspresi;

Statement tersebut akan menyimpan nilai ekspresipada sebelah kanan operator

‘: =’ pada tempat yang ditunjukan oleh nama_variabel disebelah kirioperator

‘:=’

2. Operator perbandingan

Operator perbandingan digunakan untuk membandingkan dua operand.

Operand yang di bandingkan bisa bertipe bilangan bulat, karakter, real,

boolean, atau string. Ekspresi yang menggunakan operator perbandingan akan

menghasilkan nilai booleand (terue atau false).

Page 19: Modul Pascal.pdf

II - 6

Operator Operasi Contoh ekspresi Hasil

= Sama dengan a:= 6 = 9 a= false

<> Tidak sama dengan a:= 7 <> 5 a= true

< Lebih kecila dari a:= 4 < 6 a= true

> Lebih besar dari a:= 10 > 1 a= true

<= Lebih kecil atau sama dengan a:= 8 <= 4 a= false

>= Lebih besar atau sama dengan a:= 3 >= 1 a= true

3. Operator Aritmatika

Operan aritmatika hanya dapat dikenakan pada operand bertipe bilangan bulat

atau bilangan real. Ekspresi yang menggunakan operator ini pun hanya akan

menghasilkan nilai bilangan bulat atau real.

Operator Operasi Contoh Ekspresi Hasil

+ Penjumlahan x:= 8 + 13

x:= 4.3 + 2

x = 21

x = 6.3

- Pengurangan x:= 15 - 2

x:= 2.1 – 1.1

x = 13

x = 1.0

* Perkalian x:= 5 * 6

x:= 2.0 * 1.1

x = 30

x = 2.2

/ Pembagian x:= 6 / 4 x = 1.5

Div Pembagian bilangan bulat x:= 7 div 2 x = 3

mod Sisa pembagian bilangan bulat x:= 7 mod 2 x = 1

Page 20: Modul Pascal.pdf

II - 7

Program 2.3 Program mencari dan menampilkan nilai Determinan

Program Nilai_Determinan;

Var

a, b, c, d : integer;

begin

a := 5;

b := 600;

c := -3;

d := b * b – 4 * a * c; {mencari nilai determinan}

writeln(‘Nilai determinan D = ‘, d);

readln;

end

Tampilan pada layar

Nilai detrminan d = 32380

4. Operator logika

Operator ini dikenal pada operand bertipe booleand dan ekspresinya akan

mengahsikan nilai boolean (true atau false)

Operator Operasi

NOT bitwise negation (negasi)

AND bitwise and (dan)

OR bitwise or (atau)

XOR bitwise xor

Hasil operator NOT, AND, OR, dan XOR untuk berbagai ombinasi kondisi

A B NOT A NOT B A AND B A OR B A XOR B

False False True True False False False

Page 21: Modul Pascal.pdf

II - 8

False True True False False True True

True False False True False True True

true true False False True True False

Program 2.4 Contoh penggunaan operator logika dan perbandingan

Program Logika;

Var

k, l, m, n : boolean;

Begin

k := true;

l := false;

m := (k or l)and l;

n := ((6 >= 8) and (9 <> 1))or (3 <7);

writeln (m,’ ‘,n);

readln;

end.

Tampilan pada layar

FALSE TRUE

5. Operator string

Pascal hanya mengenal satu macam operator string, yaitu penggabungan.

Operator ini digunakan untuk menggabungkan dua atau lebih operator string

menjadi sebuah string yang lebih panjang. Simbol untung operator ini sama

dengan operator penjumlahan (+).

Page 22: Modul Pascal.pdf

II - 9

Program 2.5 Contoh penggunaan operator string

Var

A, B : string [3];

Begin

A :=’Aku’;

B :=’Dia’;

Writeln (A); Writeln (B);

Writeln (A+’ dan ‘ + B);

Readln;

End.

Tampilan pada layar :

Aku

Dia

Aku dan Dia

2.4. OPERATOR INPUT-OUTPUT

2.4.1 Operasi Input

Operasi input dilakukan untuk membaca data atau harga yang akan

diproses. Pembacaan data secara interaktif menggunakan piranti masukan (input

device) seperti keyboard. Untuk menggunakan operasi input dapat menggunakan

piranti Read, Readln, Readkey

a. READ

Perintah untuk membaca data yang dimasukan pemakai melalui keyboard,

data tersebut disimpan pada variabel. Pada statement ini kursor tidak pindah

ke baris selanjutnya.

Sintaks : read (nama_variabel);

Page 23: Modul Pascal.pdf

II - 10

Program 2.6

Porgram Data_Angka;

Var

x, y, z : char;

Begin

Write(‘Masukan 3 buah karakter : ‘); read(x, y,

z); writeln;

Writeln(‘Karakter pertama = ’,x);

Writeln(‘Karakter kedua = ’,y);

Writeln(‘Karakter ketiga = ’,z);

End.

Contoh tampilan pada layar:

Masukan 3 buah karakter : x y z

Karakter pertama = x

Karakter kedua = y

Karakter ketiga = z

b. READLN

Perintah untuk membaca data yang dimasukan pemakai, pada statemen ini

posisi kursor akan pindah ke baris selanjutnya setelah diinput. Readln juga

bias digunakan untuk menghentikan program (menunggu enter ditekan)

Sintaks : readln(nama_variabel); readln;

program 2.7

Page 24: Modul Pascal.pdf

II - 11

Program Jumlah_Bilangan;

Var

Angka1, angka2, : integer;

Begin

Writeln(‘input angka pertama : ‘);readln

(angka1);

Writeln(‘input angka kedua : ‘);readln

(angka2);

Writeln(angka,’ + ‘,angka2,’ =

’,angka1+anka2);

Readln;

End.

Contoh tampilan pada layar :

Input angka pertama : 23

Input angka kedua : 50

23 + 50 = 73

c. READKEY

Untuk membaca sebuah karakter dari keyboard. Tipe data yang dihasilkan

adalah char. Karakteryang dimasukan tidak itampilkan dilayar.

Sitaks : nama_variable=ReadKey;

2.4.2 Operasi Output

Operasi output dilakukan untuk mengirimkan data kepada piranti keluaran

(output device) seperti layar (monitor) dan printer. Untuk melakukan operasi

ouput dapat menggunakan perintah write atau writeln. Perbedaan perintah write

dan writeln telah dibahas pada modul 1.

Sintaks : write (parameter);

writeln (parameter);

Page 25: Modul Pascal.pdf

II - 12

parameter : konstanta, variable, nilai, ekspresi aritmatika, atau ekspresi

yang melibatkan fungsi.

Program 2.8 Operasi output dengan berbagai jenis parameter

Program Param_Output;

Const

Max = 1000;

Var

Bil : real;

Begin

Write (‘Masukan bilangan : ’) readln(bil);

Writeln(bil); {parameter output berupa variable}

Writeln(max); {parameter output berupa konstanta}

Writeln(100); {parameter output berupa nilai bertipe

integer}

Writeln(‘TEknik Informatika’); {parameter output berupa nilai bertipe string}

Writeln(100 * 2 – 4); {parameter output berupa ekspresi}

Writeln(sqr(bil):0:2); {parameter output berupa ekspresi fungsi}

Readln;

End.

Page 26: Modul Pascal.pdf

II - 13

Contoh tampilan pada layar :

Masukan bilangan : 37.5

37.5

1000

100

Teknik Informatika

196

1406.25

SOAL

1. Buatlah sebuah program yang menginputkan nama, nim, dan kelas kemudian

tampilkan output dari program tersebut sebagai berikut : “Nama saya [nama],

dengan NIM [nim] merupakan mahasswa Teknik Informatika kelas [kelas]

[input]

Masukkan nama anda : Dede

NIM : 137xxxxx

Kelas : C

[output]

Nama saya Dede dengan NIM 137xxxxx merupakan mahasiswa Teknik

Informatika kelas C.

2. Buat program untuk mencari sisi miring suatu segitiga siku-siku dengan rumus

phytaghoras c = √a2 + b2 dengan a dan b adalah sisi siku-siku, dan hitung

pula luasnya dengan rumus L = ½ x alas x tinggi.

Page 27: Modul Pascal.pdf

II - 14

3. Diketahui algoritma berikut :

Algoritma still_hidden

Kamus

ra, n, a, b, c : integer

Deskripsi

read(n)

a <- n div 3600

ra <- n mod 3600

b <- ra div 60

c <- ra mod 60

Translasikan algoritma diatas ke dalam bahasa pascal dan jelaskan kegunaan

algoritma tersebut.

4. Lakukan analisa terhadap program 2.6 dan 2.7. Tentukan input dan output dari

program serta jelaskan secara singkat proses yang dikerjakan program tersebut.

PENYELESAIAN & PEMBAHASAN

Nomor 1 : Dalam soal nomor satu ini kita membutuhkan 3 variabel, yaitu nama,

alamat, dan kelas. Untuk nama, alamat tipe datanya harus bertipe string, sedangkan

kelas bisa bertipe data string atau char, praktikan lebih memilih tipe data string.

Kata uses digunakan untuk menambahkan unit (dalam hal ini unit crt), dan unit

crt diperlukan supaya bisa memanggil fungsi clrscr;.fungsi clrscr digunakan untuk

membersihkan layar. Berikut kode program nomor satu :

program dua_satu;

uses crt;

var

nama, nim, kelas : string;

Page 28: Modul Pascal.pdf

II - 15

begin

clrscr;

write('Masukkan nama anda : ');readln(nama);

write('NIM : ');readln(nim);

write('Kelas : ');readln(kelas);

writeln;

write('Nama saya ',nama,' dengan NIM ',nim);

write(' merupakan mahasiswa Teknik Informatika kelas

',kelas);

readln;

end.

Dan output dari kode diatas adalah :

Nomor 2 : dibutuhkan empat buah variabel (a, b, c, d) yang bertipe real. Sama

seperti nomor satu, nomor dua masih menggunakan unit crt. Satu hal yang unit

dalam nomor dua ini digunakan fungsi sqr() dan fungsi sqrt(). Fungsi sqr()

merupakan fungsi untuk mempangkatkan sebuah bilangan, sedangkan fungsi sqrt()

digunakan untuk mengakarpangkatkan suatu bilangan. Berikut kode program

untuk nomor dua :

program segitiga_siku_siku;

uses crt;

var d,a,b,c : real;

begin

clrscr;

writeln('** Ini program Sigitiga Siku-siku**');

write('Masukkan a : ');readln(a);

Page 29: Modul Pascal.pdf

II - 16

write('Masukkan b : ');readln(b);

c := sqrt(sqr(b) + sqr(a));

writeln('Panjang sisi miringnya adalah ',c:0:2);

d := 0.5*a*b;

writeln('Luasnya adalah ',d:0:2);

readln;

end.

Dan outputnya adalah :

Nomor 3 : algoritma tersebut merupakan algoritma untuk mengkonversikan

bilangan detik ke dalam format jam menit detik, dimana jam disimbolkan dengan

a, menit b, dan detik disimbolkan dengan c. Div merupakan sebuah operator yang

berfungsi sebagai pembagi sebuah bilangan dan menghasilkan nilai integer,

contoh: 5 div 2 = 2, 6 div 3 = 2, 7 div 2 = 3, 8 div 2 = 4. Sedangkan mod

merupakan sebuah operator yang berfungsi sebagai sisa hasil bagi dan suatu

pembagian. Contoh 1 mod 3 = 1, 4 mod 3 = 1, 5 mod 3 = 2. Berikut kode

programnya :

program jam;

uses crt;

var

n,ra, a, b,c : integer;

begin

clrscr;

read(n);

a := n div 3600;

ra := n mod 3600;

Page 30: Modul Pascal.pdf

II - 17

b := ra div 60;

c := ra mod 60;

writeln(a,' ',b,' ',c);readln;

end.

Dan outputnya

Nomor 4 : program 2.6 mempunyai 3 variabel X Y dan Z yang bertipe char. Pada

program 2.6 input yang dimasukkan adalah g h e. Dan menghasilkan output

karakter pertama = g, --baris baru – karakter kedua = h --baris baru – karakter

ketiga = e. Mekanisme prosesnya adalah program meminta input dari pengguna

sebanyak tiga karakter (melalui perintah read(X, Y,Z). Kemudian akan

mengeluarkan output lewat perintah writeln();

Program 2.7 mempunyai dua variabel angka1 dan angka2 dan bertipe integer.

Input dibaca pada perintah readln(angka1) dan readln(angka2), dan output terletak

pada kode writeln(angka1,’ + ‘, angka2, ‘ = ‘ angka1+angka2). Mekanisme

prosesnya adalah program akan meminta input terlebih dahulu (23 dan 50),

kemudian menghasilkan output ’23 + 50 = 73’.

Page 31: Modul Pascal.pdf

III - 1

MODUL III

ANALISIS KASUS ( PEMILIHAN )

1.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Mengenal Bahasa Pascal dan struktur program pada Turbo Pascal.

2. Mengetahui dan memahami penggunaan komponen-komponen dasar pada

Pascal

3. Menggunakan perintah dasar penulisan dalam membuat program

1.2. Dasar Teori

Analisis kasus adalah konstruktor terpenting dalam algoritma pemrograman

sehingga membuat teks algoritma yang sama dapat menghasilkan eksekusi yang

berbeda-beda. Setiap statement dalam pascal normalnya dijalankan secara

sekuensial ( beruntun ), dari atas kebawah seperti yang tertulis pada source code

programnya. Analisis kasus dapat merubah urutan eksekusi.

Jika kita mendefinisikan analisis kasus berarti juga mendefinisikan :

Kondisi : yang berupa suatu ekpresi Boolean yang menghasilkan true atau

false.

Aksi : yang akan dilaksanakan jika kondisi yang dipasangkan dengan aksi

yang bersangkutan dipenuhi.

Suatu aksi hanya akan dilaksanakan jika kondisi yang dipasangkan dengan

aksi yang bersangkutan terpenuhi (bernilai true). Penentuan kondisi Boolean dan

aksi yang dilakukan bergantung pada jumlah kasus yang terdapat pada masalah

tersebut.

Ungkapan kondisi dapat dihasilkan dengan operator perbandingan dan

operator logika. ungkapan kondisi dapat dibentuk dengan mengkombinasikan

operand yang bertipe sama dengan salah satu operator.

Contoh kondisi

X > y

A + b >1

I >= 100

Not true

Page 32: Modul Pascal.pdf

III - 2

Str = ‘daspro’

Ketemu = true

( x < 0) and (y>20)

( x<0) or (y > 20)

1. Struktur if…then

A. Satu kasus

Bentuk ini menunjukan, jika (if) kondisi yang diseleksi adalah benar( true ) maka

statement yang mengikutinya akan diproses. Sebaliknya jika tidak benar (false)

maka statement berikutnya tidak diproses.

Sintaks dalam pascal

If kondisi then

Aksi;

If kondisi then

Begin

Aksi 1;

Aksi 2;

End;

Jika kondisi true (benar), maka aksi dikerjakan. Jika kondisi false ( tidak benar)

maka tidak terjadi apa-apa (efek neto “kosong”)

Program 1 Menerima masukan sebuad nama,jika nama tidak diisi tampilkan

pesan

Program Name;

Uses crt;

var nama:string;

begin

clrscr;

write('ketikan nama anda:'); readln(nama);

if nama='' then writeln('isi dulu nama anda!!');

readln;

end.

Program 2 program untuk mengecek apakah sebuah bilangan termasuk bilangan

genap atau bukan. Jika termasuk bilangan genap tampilkan pesan.

Page 33: Modul Pascal.pdf

III - 3

program Bilangan_genap;

uses crt;

var bil:integer;

begin

clrscr;

write('Masukan bilangan :'); readln(bil);

if bil mod 2=0 then

begin

writeln('bilangan genap'); writeln('pengecekan bilangan

selesai');

end;

readln;

end.

B. Dua kasus komplementer.

Sintaks untuk analisis dengan dua kasus adalah dengan menggunakan struktur IF-

ELSE

Sintaks dalam pascal

If kondisi then

Aksi1

Else

Aksi2;

If kondisi then

Begin

Aksi1; .....

End

Else

Begin Aksi2; . . . .

End;

Aksi satu akan dilaksanakan jika kondisi bernilai true (benar), tetapi jika kondisi

bernilai false (salah), maka aksi-aksi yang akan dilaksanakan, ‘else’ menyatakan

ingkaran/negasi dari kondisi.

Program 3 program untuk mengecek apakah sebuah bilangan termasuk bilangan

genap atau bilangan ganjil.Jika termasuk bilangan genap,tampilkan pesan

’bilangan genap’,Jika termasuk bilangan ganjil tampilkan pesan’bilangan ganjil’

program genap_ganjil;

uses crt;

var bil:integer;

begin

clrscr;

Page 34: Modul Pascal.pdf

III - 4

write('masukan bilangan :'); readln(bil);

if bil mod 2 = 0 then writeln('bilangan genap')

else writeln('bilangan ganjil');

readln;

end.

Program 4 program untuk menentukan bilangan terbesar diantara dua bilangan

yang dimasukkan.

program bilangan_terbesar;

uses crt;

var bill,bil2:integer;

begin

clrscr;

write('masukan 2 bilangan :'); readln(bill,bil2);

if bill>bil2 then

begin

writeln(bill,'>',bil2); writeln(bill,'bilangan terbesar');

end

else

begin

writeln(bil2,'>',bill); writeln(bil2,'bilangan terbesar');

end;

readln;

end.

2. Struktur case…of

Struktur case-of dapat menyederhanakan penulisan if-else yang bertingkat-tingkat

pada permasalahan dengan dua kasus atau lebih.

Sintaks dalam pascal

Case nama_variabel of

Nilai1 : nilai2;

Nilai2 : aksi2;

. . .

nilaiN : aksiN;

[else aksiX;]

End;

Case nama_variabel of

Nilai1 : begin

Aksi1; Aksi2;

. . . .

End;

Nilai2 : aksi3;

. . .

nilaiN : aksiN;

Page 35: Modul Pascal.pdf

III - 5

[else aksiX;]

End;

Nama variable sudah dideklarasikan sebelumnya dan sudah berisi nilai

tertentu yang memiliki tipe data yang sama dengan nilai1, nilai2,…..nilaiN

Nilai1, nilai2,….,nilaiN adalah nilai yang bertipe integer, char, atau

Boolean.

Program 6 program penentuan nama bulan jika diinput nomor bulannya

Program Nama_bulan;

Uses crt;

Var bulan:integer;

begin

clrscr;

write('masukan nomor bulan: ');readln(bulan);

case bulan of

1:writeln('januari'); 2:writeln('februari');

3:writeln('maret'); 4:writeln('april');

5:writeln('mei'); 6:writeln('juni');

7:writeln('juli'); 8:writeln('agustus');

9:writeln('september'); 10:writeln('oktober');

11:writeln('november'); 12:writeln('desember');

else

writeln('bukan belan yang benar');

end;

readln;

end.

1.3. Analisis Latihan

program determinan;

uses crt;

var

a,b,c,d : real;

hasil_determinan : string;

begin

clrscr;

writeln(‘Ini adalah program mencari determinan’);

write('a : '); readln(a); write('b : '); readln(b);

write('c : '); readln(c); D := b*b -4.0*a*c;

if (D<0) then

Page 36: Modul Pascal.pdf

III - 6

hasil_determinan := 'negatif'

else if (D=0) then

hasil_determinan := 'nol'

else hasil_determinan := 'positif' ;

writeln; writeln;

write('Determinannya bernilai ', hasil_determinan);

readln;

end.

Tampilan Output

Analisis

Logika program : program akan terlebih dahulu menampilkan kata “Ini

adalah program mencari determinan”. Kemudian user diminta menginput a, b dan

c. Kemudian determinan dicari dengan rumus D = b2 – 4ac. Jika determinan < 0,

hasil_determinan akan menjadi “negatif”, jika determinan = 0, hasil_determinan

akan menjadi “nol” dan jika determinan > 0, hasil_determinan akan menjadi

“positif”. Program akan mengeluarkan output “Determinannya bernilai

hasil_determinan”.

Proses pemilihan ada pada penetuan hasil_determinan. Program terlebih

dahulu akan mengecek kondisi yang disyaratkan pada if (D<0) then jika

terpenuhi maka akan dieksekusi kode hasil_determinan := 'negatif' dan

pada contoh diatas kondisi tidak terpenuhi, maka program akan mengeksekusi

blok else. Pada blok else pun program akan kembali menemukan percabangan

dimana program akan mengecek kondisi else if (D=0) then jika terpenuhi

akan mengeksekusi blok hasil_determinan := 'nol' dan jika tidak, akan

mengeksekusi blok else. Pada contoh diatas pengecekan kondisi else if (D=0)

then terpenuhi.

Page 37: Modul Pascal.pdf

III - 7

Program indeks_nilai_ujian;

uses crt;

var nama, nim :string; nilai:real; indeks:char;

begin

clrscr;

write('masukan nama:');readln(nama);

write('nim:');readln(nim);

write('nilai:');readln(nilai);

writeln;

if nilai>=80 then indeks:='A'

else if(nilai>=70)and(nilai<80) then indeks:='B'

else if(nilai >=55)and(nilai<70) then indeks:='C'

else if (nilai>=40)and(nilai<55) then indeks:='D'

else indeks:='E';

writeln ('Mahasiswa bernama ',nama,' dengan nim ',nim,'

memperoleh nilai ',indeks);

readln;

end.

Tampilan pada Output

Analisis No2

Logika program : pengguna diminta memasukkan input nama, nim, dan

nilai. Kemudian input nilai akan di konversi ke index nilai A,B,C,D atau E.

Terakhir akan program akan mengeluarkan kata “Mahasiswa bernama [nama]

dengan nim [nim] memperoleh nilai [index nilai].

Pemilihan dalam kasus ini adalah pada pengonversian dari nilai ke index

nilai. Pemilihan ini hanya bisa menggunakan if then, dan tidak bisa menggunakan

case of karena variabel yang akan di konversi mempunyai tipe data real (nilai :

real). Penggunaan case of untuk soal ini akan dibahas lebih jauh pada soal nomor

4.

Sama seperti pemilihan sebelumnya, penggunaan if then akan melakukan

pengecekan pada kondisi yang disyaratkan, jika kondisi terpenuhi maka akan di

eksekusi kode yang ada diantara then aksi else dan jika tidak terpenuhi akan

Page 38: Modul Pascal.pdf

III - 8

mengeksekusi blok else, begitu seterusnya sampai pemilihan menemukan else

terakhir.

program luas ;

uses crt;

var p,pj,lb,s : integer; l : real ;

begin

clrscr;writeln('******MENU*****'); writeln('1.luas

bujursangakar');writeln('2.luas persegi panjang');writeln('3.luas

lingkaran ');writeln; write('masukan pilihan :');readln(p);

writeln;

case p of

1 : begin writeln('#anda memilih menu luas bujur sangkar #');

write('input sisi bujursangkar : ');readln(s); l :=s*s; writeln;

writeln('luas bujur sangkar = ',l:0:2); end;

2 : begin writeln ('#anda memilih menu luas persegi panjang#');

write('input panjang persegi panjang :');readln(pj); write('input

luas persegi panjang :');readln(lb); l :=pj*lb; writeln;

writeln('luas persegi panjang = ',l:0:2); end;

3 : begin writeln('#anda memilih menu lingkaran#'); write('input

jari jari lingkaran :');;readln(l); l :=3.14*l*l; writeln;

writeln('luas lingkaran = ',l:0:2); end;

else writeln ('tidak ada pilihan'); end;

readln;

end.

Tampilan pada output

Analisis

Logika program : program ini untuk menghitung luas (bujur sangkar,

persegi panjang, atau lingkaran). Program akan meminta input dari user terlebih

dahulu, (pilihan 1, 2, atau 3). Jika pilihan 1, user akan diarahkan pada

penghitungan luas bujur sangkar dimana user diminta memasukkan sisi bujur

Page 39: Modul Pascal.pdf

III - 9

sangkar. Jika pilihan 2, user akan diarahkan pada penghitungan luas persegi

panjang, dimana user diminta memasukkan panjang dan lebarnya. Jika pilihan 3

user akan diarahkan pada penghitungan luas lingkaran, dimana user diminta

memasukkan jari-jarinya. Penggunaan case of pada program ini terjadi pada

proses saat user memilih pilihan 1, 2 atau 3.

Soal Nomor 4 : proses penggantian struktur pemilihan nomor dua (if-then)

menjadi case of. Perlu ada sedikit modifikasi agar struktur pemilihan if then di

nomor dua bisa menjadi struktur pemilihan case of. Berikut beberapa hal yang

harus dimodifikasi :

1. Penggantian tipe data “nilai”, dari yang awalnya real menjadi integer.

Resikonya : input nilai tidak dapat berupa angka desimal. Mengapa harus

diganti? Karena kondisi yang disyaratkan pada kondisi case kondisi of

hanya dapat berupa nilai integer dan char.

2. Penjelasan dan penggantian batas nilai, dengan tidak mengubah konteks

yang dimaksud. Maksud : penggantian nilai >= 80 menjadi 80..100, nilai

>=70 dan <80 menjadi 70..79, nilai >=70 dan <80 menjadi 70..79, nilai

>=55 dan <70 menjadi 55..69, nilai >=40 dan <55 menjadi 40..54, dan

nilai <40 menjadi 0..39.

3. Else pada case of nanti adalah kode writeln(‘Nilai yang anda

masukkan tidak benar’); untuk menghindari kesalahan jika user

memasukkan nilai yang bukan 0-100.

Berikut kode setelah mengalami perubahan dari if then ke case of :

Program indeks_nilai_ujian;

uses crt;

var nama, nim :string; nilai:integer; indeks:char;

begin

clrscr;

write('masukan nama : ');readln(nama);

write('nim : ');readln(nim);

write('nilai : ');readln(nilai);

writeln;

case nilai of

80..100: indeks := 'A'; 70..79 : indeks := 'B';

55..69 : indeks := 'C'; 40..54 : indeks := 'D';

0..39 : indeks := 'E';

Page 40: Modul Pascal.pdf

III - 10

else writeln('Nilai yang anda masukkan tidaklah benar');

end; writeln;

writeln ('Mahasiswa bernama ',nama,' dengan nim ',nim,'

memperoleh nilai ',indeks);

readln;

end.

Page 41: Modul Pascal.pdf

IV - 1

MODUL IV

PENGULANGAN

1.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Mengetahui struktur Pengulangan dalam Pascal.

2. Memahami penggunaan struktur pengulangan WHILE-DO, REPEAT-

UNTIL dan FOR-DO dalam pascal.

3. Mengimplementasikan struktur WHILE-DO, REPEAT-UNTIL dan FOR-

DO dalam membuat program.

1.2. Dasar Teori

Pengulangan dalam program didefinisikan sebagai bentuk algoritma yang

berfungsi untuk mengulang perintah-perintah baris program dengan aturan

tertentu.

Pascal menyediakan beberapa macam struktur pengulangan yang berbeda,

antara lain :

1.2.1. Struktur FOR

Struktur FOR digunakan untuk menghasilkan pengulangan sejumlah kali

tanpa penggunaan kondisi apapun. Struktur ini digunakan untuk perulangan yang

telah diketahui berapa kali akan dilakukan, misalnya menjumlahkan integer 1

sampai 1000, akan diperlukan sebanyak 1000 perulangan. Bentuk umum struktur

For ada dua macam yaitu menaik dan menurun.

a) For menaik (ascending)

Bentuk umum :

For variable := ekspresi1 to ekspresi2

do

Aksi1:

For variable := ekpresi1 to ekspresi2 do

Begin

Aksi1;

Aksi2;

……

End;

Page 42: Modul Pascal.pdf

IV - 2

Program 4.1. Program menampilkan kalimat (string) sebanyak 10 kali.

program kalimat;

uses crt; var x : integer;

begin

clrscr;

for x := 1 to 10 do

begin write(x); writeln(' Halloo');

end;readln;

end.

b) For menurun (descending)

Bentuk umum

For variable := ekspresi1 downto

ekspresi2 do

Aksi1:

For variable := ekpresi1 downto

ekspresi2 do

Begin

Aksi1;

Aksi2;

……

End;

Program tulis;

Uses crt;

Var kar : char;

Begin

Clrscr;

For kar := ‘e’ downto ‘a’ do Write(kar);

Readln;

End.

Page 43: Modul Pascal.pdf

IV - 3

c. Struktur for bersarang

Perulangan for bersarang 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.

Untuk pengulangan bersarang ini, tiap-tiap statetment for harus

menggunakan variable control pengulangan yang berbeda satu dengan yang

lainnya.

Contoh Program :

program sarang;

uses crt;

var a, b : integer;

begin

clrscr;

for a := 1 to 4 do

begin

writeln('A = ',a); writeln('B = ....');

for b := 1 to 5 do write(b,' ');

writeln;

end;

readln;

end.

1.2.2. Struktur WHILE-DO

Page 44: Modul Pascal.pdf

IV - 4

While digunakan untuk pengulangan yang jumlah pengulangan yang tidak

dipastikan sebelumnya.

Bentuk umum

While kondisi do

Aksi;

While kondisi do

Begin

Aksi1;

Aksi2;

. . . .

End;

program cetakto;

uses crt;

var a : integer;

begin

clrscr;

a := 1;

while(a<10) do

begin

writeln('Haloo ');

writeln(a);

a := a+1;

end;

readln;

end.

1.2.3. Struktur REPEAT-UNTIL

Bentuk umum

Repeat

Aksi1;

Aksi2;

. . .

Until kondisi

Penjelasan

Kondisi = kondisi berhenti

Struktur ini mendasarkan pengulangan pada kondisi behenti. Aksi di dalam badan

pengulangan diulang sampai hasil pengecakan kondisi berhenti Boolean bernilai

true. Jika hasil pengecekan kondisi berhenti masih false(salah), pengulangan

masih terus dilakukan.

Page 45: Modul Pascal.pdf

IV - 5

program cetakto;

uses crt;

var a : integer;

begin

clrscr;

a := 1;

repeat

writeln('Haloo ');

writeln(a);

a := a+1;

until a>=10;

readln;

end.

Program diatas mirip dengan program pada contoh sebelumnya, hanya saja

pengulangan yang dibunakan sekarang adalah repeat-until.

1.2.4. While-Do atau Repeat-Until?

While do dan repeat until memiliki makna yang sama, akan tetapi

pemilihan struktur yang tepat perlu dilakukan tergantung masalah yang akan

deprogram karena tidak semua permasalahan dapat dipecahkan dengan baik

menggunakan kedua struktur tersebut. Perlu diingat bahwa perbedaan antara

struktur REPEAT-UNTIL dengan WHILE-DO yaitu:

Pada struktur REPEAT-UNTIL, aksi (atau sekumpulan aksi) dilaksanakan

minimal satu kali, karena kondisi pengulangan diperiksa pada akhir

struktur, sedangkan

Pada WHILE-DO, kondisi pengulangan diperiksa pada awal struktur

sehingga memungkinkan pengulangan tidak akan pernah dilaksanakan bila

kondisi pengulangan bernilai false.

Struktur repeat-until lebih tepat untuk permasalahan tersebut sebab menu

ditampilkan lebih dahulu baru kemudian nomor pilihan menu dibaca.

Page 46: Modul Pascal.pdf

IV - 6

Latihan.

1. Buat program untuk mengalikan N bilangan integer positif pertama

menggunakan struktur for dan while-do (N merupakan input user).

program kali;

uses crt;

var N, b : integer;

jumlah : real;

begin

clrscr;

write('Masukkan Angka : ');readln(n);

jumlah := 1;

for b := 1 to n do jumlah := (jumlah * b);

writeln;

writeln('Hasil Perkalian : ', jumlah:0:0);

end.

program kali;

uses crt;

var N, b : integer;

jumlah : real;

begin

clrscr;

write('Masukkan Angka : ');readln(n);

jumlah := 1;b := 1;

while b <= n do

begin

jumlah := (jumlah * b);

b := b +1;

end;

writeln;

writeln('Hasil Perkalian : ', jumlah:0:0);

end.

Page 47: Modul Pascal.pdf

IV - 7

2. Buat program yang menerima masukkan jumlah baris dari user. Kemudian

tampilkan gambar bintang berdasarkan jumlah baris yang diinputkan.

Contoh jika user menginputkan 4, maka output akan menjadi

*

**

***

****

Berikut kode yang dibuat :

program bintang;

uses crt;

var a, b, c, d : integer;

begin

clrscr;

write('Masukkan sebuah Angka : ');readln(a);

for b := 1 to a do

begin

for c := (a-b) downto 1 do

write(' ');

for d := 1 to b do

write('*');

writeln;

end;

writeln;readln;

end.

3. Modifikasi program 4.7 dengan mengubah struktur pengulangan menjadi

repeat-until.

Page 48: Modul Pascal.pdf

IV - 8

program hitung;

uses crt;

var i, nilai, N : integer;jumlah : real;

begin

clrscr;

write('Banyaknya Nilai : ');readln(n);

i := 1;

jumlah := 0;

repeat

write('Nilai ke - ',i,' : ');readln(nilai);

jumlah := jumlah + nilai;

i := i +1;

until i>n;

writeln('Total Jumlah = ',jumlah:0:0);

readln;

end.

4. Buat program yang menerima masukkan jam dan menit yang diinputkan

valid (jam valid 1-24 dan menit 0 – 59) dengan menggunakan struktur

while-do dan repeat-until. Kemudian lakukan analisa untuk menentukan

struktur pengulangan mana yang paling baik untuk menyelesaikan

permasalah tersebut.

Berikut kode yang dibuat :

program detikshow;

uses crt;

var a, b : integer;

begin

clrscr;

repeat

write('Waktu (jam menit) :

');read(a);readln(b);

writeln;

until ( ((a >= 0) and (a <=

23)) and ((0 <= b) and (b <=

59)) );

writeln('Waktu Valid');

readln;

program detikshow;

uses crt;

var a, b : integer;

begin

clrscr;

a := 100;b := 100;

while ( ((a < 0) OR (a >

23)) OR ((0 > b) OR (b >

59)) ) do

begin

write('Waktu (jam menit) :

');read(a,b);

end;

writeln('Waktu Valid');

Page 49: Modul Pascal.pdf

IV - 9

end. readln;

end.

5. Tulislah program untuk menampilkan semua bilangan yang habis dbagi 3

atau 5 antara 1 – n (n input user) dengan menggunakan for-do, while-do,

repeat-until. Kemudian lakukan analisa untuk menentukan struktur

pengulangan mana yang paling baik untuk menyelesaikan permasalah

tersebut.

program bil;

uses crt;

var a, b : integer;

begin

clrscr;

write('Masukkan Sebuah Angka : ');readln(b);

for a := 1 to b do

if ((a mod 3 = 0) or (a mod 5 = 0)) then write(a,'

');

writeln;readln;

end.

program bil;

uses crt;

var a, b : integer;

begin

clrscr;

write('Masukkan Sebuah Angka : ');readln(b);

a := 1;

while(a <= b) do

begin

if ((a mod 3 = 0) or (a mod 5 = 0)) then write(a,'

');

a := a +1;

end;

writeln;readln;

end.

program bil;

uses crt;

var a, b : integer;

Page 50: Modul Pascal.pdf

IV - 10

begin

clrscr;

write('Masukkan Sebuah Angka : ');readln(b);

a := 1;

repeat

if ((a mod 3 = 0) or (a mod 5 = 0)) then write(a,'

');

a := a +1;

until(a>b);

writeln;readln;

end.

6. Buat program untuk menampilkan bilangan prima antara 1 sampai 20

(Kata Kunci : Bilangan prima adalah bilangan yang hanya bisa habis

dibagi dengan 1 dan bilangan itu sendiri) kecuali 1.

program prima;

uses crt;

var a, b, c, d,e : longint;

begin

clrscr;

writeln('Program menemukan bilangan prima dari 1-N');

writeln('Ditulis Oleh Dede Gunawan');writeln('UNSIL TI-C 2013');

writeln('Nilai Maksimal input adalah nilai maksimal longInt -

32bit- ');

writeln('###############');writeln('_______________');

writeln;

write('Masukkan Angka : ');readln(a);

writeln;

e := 0;

for b := 1 to a do

begin

d := 0;

for c := 1 to b do

if (b mod c = 0) then d := d +1;

if (d = 2) then begin write(b,' ');e:=e+1;end;

end;

writeln;writeln;writeln('Total Jumlah Biangan Prima : ',e);

readln;

end.

Page 51: Modul Pascal.pdf

IV - 11

7. Modifikasi latihan pada modul 3 nomor 3 sehingga program tersebut dapat

menerima pilihan menu selama user belum memutuskan untuk keluar dari

program. (Ada tambahan pilihan menu nomor 4, jika user memilih menu

nomor 4 maka eksekusi program akan berhenti).

Pada kasus ini, praktikan lebih memilih menggunakan repeat-until karena

kemudahan penggunaannya dalam menu. Berikut kode dan screen shootnya :

program luas ;

uses crt;

var p,pj,lb,s : integer; l : real ;

begin

repeat

clrscr;

writeln('******MENU*****'); writeln('1.luas bujursangakar');

writeln('2.luas persegi panjang');writeln('3.luas lingkaran ');

writeln('4. Keluar');

writeln; write('masukan pilihan :');readln(p);

writeln;

case p of

1 : begin

writeln('#anda memilih menu luas bujur sangkar #');

write('input sisi bujursangkar : ');readln(s); l :=s*s; writeln;

writeln('luas bujur sangkar = ',l:0:2);

readln;end;

2 : begin

writeln ('#anda memilih menu luas persegi panjang#');

write('input panjang persegi panjang :');readln(pj);

write('input lebar persegi panjang :');readln(lb);

l :=pj*lb; writeln;

writeln('luas persegi panjang = ',l:0:2);

readln;end;

3 : begin

writeln('#anda memilih menu lingkaran#');

write('input jari jari lingkaran :');;readln(l);

l :=3.14*l*l; writeln;

writeln('luas lingkaran = ',l:0:2);

readln;

end;

Page 52: Modul Pascal.pdf

IV - 12

4 : begin

clrscr;

writeln('Anda akan keluar program');

end;

else

writeln ('tidak ada pilihan');

readln;

end;

until(p=4);

readln;

end.

Pada menu diatas, sengaja penulis memberikan buffer (readln) agar program

berhenti sementara, sehingga menu tidak akan otomatis muncul, melainkan akan

muncul setelah menekan enter, itu pun layar akan kembali bersih, seperti baru

dibuka (membersihkan layar menggunakan fungsi clrscr;).

Page 53: Modul Pascal.pdf

V - 1

MODUL V

RECORD DAN ARRAY

5.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Mengerti dan menggunakan tipe data record dan array

2. Membuat dan dapat menganalogikan pembuatan struktur data array

dengan baik

5.2. Dasar Teori

5.2.1. Record

Record adalah suatu tipe data terstruktur yang berguna untuk

mengelompokan sejumlah elemen dengan tipe data berlainan. Elemen data ini

biasa disebut field. Struktur umum pendeklarasian record pada pascal sebagai

berikut :

Type Nama_record = record

Namafield1 : tipe_data1;

Namafield2 : tipe_data2;

................ : .........;

NamafieldN : tipe_dataN;

End;

Contoh :

Type titik = record

x : integer;

y : integer;

End;

Type l_tanggal = record

tanggal : integer;

bulan : integer;

tahun : integer;

End;

Type mahasiswa = record

nim : longint;

nama : string[40];

tanggal_lahir : l_tanggal;

End;

Page 54: Modul Pascal.pdf

V - 2

Pada contoh diatas kita mendefinisikan tiga buah record. Pertama record

titik yang mempunyai anggota x dan y bertipe data integer. Kedua record

l_tanggal yang mempunyai tiga anggota dan semuanya bertipe integer. Ketiga

record mahasiswa yang mempunyai 3 anggota, nim bertipe data integer, nama

bertipe data string, dan tanggal_lahir bertipe data l_tanggal.

Pada dasarnya record merupakan sebuah tipe data baru, oleh karena itu

untuk bisa menggunakan record kita harus membuat sebuah variabel baru dan

variabel itu sendiri bertipe record tadi.

Var

Nama_variabel : nama_record;

Contoh

Var

Z : titik ;

lahir : l_tanggal;

m_siswa : mahasiswa;

Ketika sebuah variabel sudah di definisikan, maka untuk bisa mengakses

field dari record tadi harus menggunakan dot (.). Contoh : variabel m_siswa

merupakan sebuah variabel yang bertipe data record mahasiswa, untuk bisa

mengakses filed nim, maka digunakan systax m_siswa.nim, untuk mengakses

field nama digunakan syntax m_siswa.nama. Sedangkan untuk bisa mengakses

field tanggal_lahir dan field tanggal_lahir sendiri merupakan sebuah record, maka

field tanggal_lahir tidak bisa diakses (m_siswa.tanggal_lahir akan error).

Walau field tanggal_lahir tidak bisa diakses, tapi field dari record tanggal_lahir

bisa diakses (syntaxnya m_siswa.tanggal_lahir.tanggal,

m_siswa.tanggal_lahit.bulan, m_siswa.tanggal_lahir.tahun).

Contoh Program 5.1 Data Mahasiswa

Program Data_Mahasiswa;

Uses Crt;

Type l_tanggal = record

Tanggal, bulan, tahun : integer;

End;

Type mahasiswa = record

nim : longint;

nama : string[40];

Page 55: Modul Pascal.pdf

V - 3

tanggal_lahir : l_tanggal;

End;

Var

M_siswa : mahasiswa;

Begin

Clrscr;

M_siswa.nim := 137006107;

M_siswa.nama := ‘Dede Gunawan’;

M_siswa.tanggal_lahir.tanggal := 12;

M_siswa.tanggal_lahir.bulan := 09;

M_siswa.tanggal_lahir.tahun := 1994;

Writeln;

Writeln(‘NIM : ‘,M_siswa.nim);

Writeln(‘Nama : ‘,M_siswa.nama);

Writeln(‘TTL : ‘,M_siswa.tanggal_lahir.tanggal,’

‘,M_siswa.tanggal_lahir.bulan,’ ‘,M_siswa.tanggal_lahir.tahun);

Readln;

End.

Pada contoh diatas dapat terlihat bahwa kita mendefinisikan dua buah

record. Record pertama bernama l_tanggal dan mempunyai field tanggal, bulan

dan tahun. Record kedua bernama record mahasiswa dan mempunyai anggota

nim, nama, dan tanggal_lahir. Semua field dapat diakses kecuali record yang

bertipe record. Filed yang bertipe record hanya bisa mengakses field-field dari

record tersebut (dalam kasus diatas field tanggal_lahir tidak dapat diakses, hanya

anggota dari field tanggal_lahir yang dapat diakses (field tanggal, bulan dan

tahun)).

Page 56: Modul Pascal.pdf

V - 4

5.2.2. Array

Array (larik) merupakan tipe data terstruktur yang dapat menyimpan

sejumlah data yang bertipe sama dengan menggunakan nama yang sama. Setiap

elemen array mempunyai indeks. Dengan menggunakan indeks ini, setiap elemen

array dapat diakses secara tersendiri. Elemen array juga mempunyai sebuah nilai

maksimal dan nilai maksimal itu kita definisikan pada saat mendefinisikan array.

Keadaan tersebut diilustrasikan seperti sebuah asrama mahasiswa dimana

sebuah asrama mempunyai nomor urut dan setiap kamar diisi oleh setiap

mahasiswa. Jumlah kamar yang ada di asrama itu tidak akan pernah berubah

sampai kapanpun. Asrama merupakan arraynya, kamar-kamar merupakan elemen

arraynya, nomor urut merupakan indeksnya, mahasiswa merupakan value (nilai)

dari elemen array dan jumlah kamar merupakan jumlah Maksimal elemen array.

Array secara umum dapat mempunyai beberapa dimensi, tapi pada bab ini

array yang akan dibahas hanyalah array berdimensi satu. Pada array berdimensi

satu, setiap elemen dapat diakses menggunakan sebuah indeks. Misal sebuah array

mempunyai sepuluh elemen, maka indeks yang ada dari 1 sampai 10.

Untuk mendeklarasikan sebuah array harus menggunakan syntax berikut :

Nama_array : array [tipe_ordinal_indeks] of integer

Tipe ordinal indeks merupakan jangkauan indeks [indeksMini..

IndeksMax], bisa berupa integer atau char. Tipe elemen simpelnya merupakan

tipe data elemen array, bisa merupakan tipe data dasar atau tipe data bentukan.

Telah dijelaskan pada paragraf sebelumnya bahwa array mempunyai jumlah

maksimal elemen, lalu dimana kita mendefinisikannya? Tipe ordinal indeks

adalah jawabannya. Tipe ordinal indeks mempunyai IndeksMin dan IndeksMax.

(IndeksMax – IndeksMin) + 1 merupakan rumus untuk menentukan jumlah

maksimal elemen array. Misal kita ingin membuat sebuah array yang mempunyai

elemen sebanyak dua puluh buah dan mempunyai IndeksMin 12, berapa

IndeksMax yang harus kita gunakan.

(IndeksMax – IndeksMin) +1 = JumlahMax,

IndeksMax – 12 + 1 = 20 IndeksMax = 31.

Page 57: Modul Pascal.pdf

V - 5

Contoh Pendeklarasian Array :

Var

Data : array[1..5] of integer;

Huruf : array[13..22] of char;

Frek : array[‘a’..’z’] of integer;

Pada contoh diatas membuat tiga buah variabel bertipe array. Variabel

pertama bernama Data mempunyai 5 buah elemen dan elemen-elemennya bertipe

integer. Variabel kedua bertipe huruf mempunyai 20 elemen (20-13+1) dan

elemennya bertipe char. Variabel ketiga frek mempunyai 26 elemen (z(26) – a(1)

+1) dan bertipe integer.

Cara untuk mengakses sebuah array dengan menggunakan syntax berikut :

Nama_Variabel_Array[Indeks_Array];

Contoh : Kita mempunyai Sebuah Array Asrama, mempunyai tipe ordinal

indeks integer [1..10]. elemen dari array itu bertipe string, dan nilai dari elemen

pertama akan diisi dengan ‘Anto’. Maka untuk memberi value pada elemen array

itu adalah :

Asrama[1] := ‘Anto’;

Contoh Program 5.2, untuk memasukkan 5 buah data yang bertipe string

dan disimpan pada array buku. Kemudian akan data akan ditampilkan ke layar.

program databuku;

uses crt;

var indeks : integer;

buku : array[1..5] of string;

begin

clrscr;

writeln('Masukkan Buku ');writeln;

for indeks := 1 to 5 do

begin

write('Buku ke ',indeks, ' = ');readln(buku[indeks]);

end;

writeln;writeln;

for indeks := 1 to 5 do writeln('Buku ke-',indeks,' =

',buku[indeks]);

Page 58: Modul Pascal.pdf

V - 6

writeln;readln;

end.

Pada contoh diatas terlihat bahwa array Buku mempunyai jumlah

maksimal elemen (5-1+1 = 5 elemen) dan semua elemennya bertipe string

(terlihat dari kata buku : array[1..5] of string;). Untuk mengisikan nilai pada

elemen array digunakan perintah read(buku[indeks]); . Pada contoh diatas proses

pengisian array menggunakan proses pengulangan, agar kode lebih sederhana.

Perintah write(buku[indeks]) akan membuat array buku elemen ke-indeks akan

ditampilkan ke layar, dan pada kasus diatas perintah untuk menampilkan array

menggunakan pengulangan.

program penjumalahArray;

uses crt;

const Nmaks = 20;

type LAngka = array[1..Nmaks] of real;

var

nilai : LAngka;

i, n : integer;

jum : real;

begin

clrscr;

writeln('# INPUT NILAI #');

write('Input Berapa Nilai ? ');readln(i);

for n := 1 to i do

begin

write('Nilai Ke-',n,' = ');readln(nilai[n]);end;

jum := 0;

for n := 1 to i do jum := jum + nilai[n];

writeln('Toatal Nilai = ',jum:0:2);

readln;

Page 59: Modul Pascal.pdf

V - 7

end.

Program diatas mencontohkan bahwa nilai dari sebuah elemen array akan

terus disimpan sampai program ditutup. Ketika user menginputkan nilai pada

sebuah elemen array readln(nilai[i]); maka sejak saat itu nilai elemen array akan

terus disimpan.

5.3. Latihan

5.3.1. Buat program yang inputannya berupa data mata kuliah dalam bentuk

record (kode_mk, nama_mk, sks), dan kemudian outputnya adalah data

mata kuliah tersebut.

Soal diatas akan dibuat sebuah record (dengan nama m_siswa) yang

mempunyai tiga field yaitu kode_mk bertipe string[12] , nama_mk bertipe

string[60] dan sks bertipe integer. Berikut syntaxnya :

type m_siswa = record

kode_mk : string[12]; nama_mk : string[60]; sks : integer;

end;

Karena merupakan sebuah tipe data baru, maka kita perlu mendefinisikan

variabel agar record itu bisa digunakan. Berikut syntaxnya :

var mahasiswa : m_siswa;

Untuk bisa mengaksesnya, gunakan dot (.). Berikut Syntaxnya :

mahasiswa.kode_mk Untuk mengakses field kode_mk

Page 60: Modul Pascal.pdf

V - 8

mahasiswa.nama_mk Untuk mengakses field nama_mk

mahasiswa.sks Untuk mengakses field sks

Berikut syntax lengkapnya :

program mahasiswa_data;

uses crt;

type m_siswa = record

kode_mk : string[12]; nama_mk : string[60]; sks : integer;

end;

var mahasiswa : m_siswa;

begin

clrscr;

write('Masukkan Kode MK : ');readln(mahasiswa.kode_mk);

write('Masukkan Nama MK : ');readln(mahasiswa.nama_mk);

write('Jumlah SKS : ');readln(mahasiswa.sks);

writeln;writeln;

writeln('Kode MK : ',mahasiswa.kode_mk);

writeln('Nama MK : ',mahasiswa.nama_mk);

writeln('SKS : ',mahasiswa.sks);

readln;

end.

5.3.2. Dibaca Dua buah titik pada diagram cartesian P1(x1,y1) dan P2(x2, y2).

Buat program untuk menghitung titik tengah P1 dan P2 — Titik dibentuk

menggunakan record dan mempunyai dua buah filed (x,y).

Definiskan dahulu nama record beserta fieldnya :

type titik = record x,y : real; end;

Definisikan variabel P1, P2, PT. (PT merupakan variabel untuk

menampilkan titik tengah).

var p1, p2, pt : titik;

Untuk mengakses fieldnya, gunakan syntax nama_variabel.nama_field.

Berikut kode lengkapnya :

program titikDua;

Page 61: Modul Pascal.pdf

V - 9

uses crt; type titik = record x,y : real; end; var p1, p2, pt : titik; begin clrscr; write('Masukkan titik P1 (x,y) : ');readln(p1.x, p1.y); write('Masukkan titik P2 (x,y) : ');readln(p2.x, p2.y); writeln;writeln; pt.x := (p1.x + p2.x)/2 ;pt.y := (p1.y + p2.y)/2; writeln('Titik Tengah antara keduanya adalah :

',pt.x:0:1,',',pt.y:0:1); readln; end.

5.3.3. Buat program untuk menyimpan sejumlah bilangan bulat (banyak

bilangantergantung user) dalam sebuah array kemudian menampilkan isi

array tetapi hanya yang termasuk ke dalam bilangan bulat dan kelipatan

dua.

Logika : program menerima input sebuah bilangan, (satu variabel

dibutuhkan misal namanya xy bertipe integer). Kemudian user juga diminta untuk

memasukkan bilangan sebanyak xy kali, dan bilangan itu disimpan ke dalam

sebuah array (satu array dibutuhkan, misal namanya : Arr_Bil dari integer). Agar

kode lebih sederhana, dibutuhkan pengulangan, dan dalam pengulangan itu

menggunakan variabel kontrol (misal namanya ijk bertipe integer. Dibutuhkan

sebuah pemilihan agar perintah mencetak bilangan ke layar hanya untuk bilangan

positif dan kelipatan dua.

Kesimpulan : dibutuhkan tiga variabel (xy, ijk integer, Arr_Bil

array[1..N] of integer. Dibutuhkan dua buah pengulangan (menggunakan for),

Page 62: Modul Pascal.pdf

V - 10

satu digunakan ketika proses input, satu lagi ketika proses output. Dibutuhkan

sebuah percabangan, digunakan untuk memilih untuk mencetak bilangan, ketika

bilangan itu positif dan kelipatan dua.

Tambahan : dibuthkan sebuah constanta untuk membatasi jumlah array

yang dapat diterima (const N = 30);

Berikut kode lengkap & screen shoot :

program Array_of;

uses crt;

const N = 30;

var

xy, ijk : integer;

Arr_Bil : array[1..N] of integer;

begin

clrscr;

write('Mau berapa angka ? ');readln(xy);

for ijk := 1 to xy do

begin

write('Masukkan bilangan ke-',ijk,' : ');

readln(arr_bil[ijk]);

end;

write('Bilangan yang merupakan kelipatan dua adalah : ');

for ijk := 1 to xy do

begin

if((arr_bil[ijk] mod 2 = 0) and (arr_bil[ijk] > 0))

write(arr_bil[ijk],' ');

end;

readln;

end.

5.3.4. Buat program untuk menerima masukan sejumlah karakter dalam array

(banyaknya input karakter ditentukan user) kemudian menampilkannya

dalam urutan terbalik.

Variabel yang dibutuhkan :

1. Xy untuk menerima jumlah input

Page 63: Modul Pascal.pdf

V - 11

2. Ijk untuk variabel kontrol pengulangan.

3. Arr_char array untuk menyimpan karakter yang dimasukkan

(arr_char : array [1..N] of char;)

Konstanta digunakan untuk membatasi jumlah array yang dapat

dimasukkan. (const N = 30).

Pengulangan yang dibutuhkan sebanyak dua pengulangan. Pengulangan

pertama digunakan untuk menerima input masukkan karakter. Pengulangan kedua

digunakan untuk menampilkan karakter.

Pengulangan pertama menggunakan pengulangan menaik dari 1 to xy,

sedangkan untuk pengulangan kedua menggunakan pengulangan menurun dari xy

down to 1.

Berikut kode program lengkap screen shootnya :

program cetak_char;

uses crt;

const n = 30;

var

xy, ijk : integer;arr_char : array[1..N] of char;

begin

clrscr;

write('Mau berapa karakter ? ');readln(xy);

for ijk := 1 to xy do

begin

write('Karakter ke-',ijk,' : ');

readln(arr_char[ijk]);

end;

for ijk := xy downto 1 do write(arr_char[ijk],' ');

readln;

end.

Page 64: Modul Pascal.pdf

VI - 1

MODUL VI

ARRAY BERTIPE RECORD

6.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Memahami penggunaan tipe record pada array

2. Mengimplementasikan array bertipe record dalam sebuah stud kasus

6.2. Dasar Teori

6.2.1. Array Bertipe Record

Elemen dari array selain bertipe sederhana(integer, char, real, Boolean,

string) juga dapat bertipe terstruktur(record). Contohnya jika ingin menyimpan

sekumpulan data mahasiswa (data mahasiswa terdiri dari NIM, Nama, Kode Mata

Kuliah dan Nilai) maka dibutuhkan sebuah array/table untuk menampung

sekumpulan data tersebut.

Ilustrasi :

NIM Nama KodeMK Nilai

1 037006001 Anton Parlin MPK1112 B

2 037006010 Jaya Amalia MBB1144 A

3 037006013 Dessy Purnama MPB2233 A

99 037006068 Indriani MKK4441 A

100 037006070 Sutiyana Arta MBB1144 C

Array tersebut terdiri dari 100 elemen dimana masing-masing elemennya bertipe

record yang terdiri dari field NIM, Nama, KodeMK, Nilai.

Page 65: Modul Pascal.pdf

VI - 2

Deklarasi array :

Const Nmaks = 100;

Type Mahasiswa = record

NIM : Longint;

Nama : string[25];

KodeMK : string[6];

Nilai : char;

End;

Var

Tabmhs : array [1..Nmask] of mahasiswa

Untuk mengakses elemen tabmhs :

Tabmhs[5].NIM {mengakses field NIM dari elemen kelima array

TabMhs}

Tabmhs[5].Nama {mengakses field Nama dari elemen kelima array

TabMhs}

Tabmhs[5].KodeMK {mengakses field KodeMK dari elemen kelima

array TabMhs}

Tabmhs[5].Nilai {mengakses field Nilai dari elemen kelima array

TabMhs}

Program 6.1. Membaca sejumlah data mahasiswa, menyimpannya dalam

sebuah array, kemudian menampilkannya.

Page 66: Modul Pascal.pdf

VI - 3

program dataMHS;

uses crt;

const Nmaks = 50;

type

mahasiswa = record

NIM : longint; Nama : string [25]; KodeMK : string [6];

Nilai : char;

end;

var

TabMhs : array[1..Nmaks] of Mahasiswa;

i, JumMhs : integer;

input : char;

begin

i:=0;

repeat

clrscr;

i:=i + 1;

writeln('INPUT DATA MAHASISWA');

writeln('====================');

write('NIM : '); readln(tabmhs[i].NIM);

write('nama : '); readln(tabmhs[i].nama);

write('kode mata kuliah : '); readln(tabmhs[i].kodeMk);

write('Nilai : '); readln(tabmhs[i].nilai);

write('input data lagi(y/t)? : '); readln(input);

until (input = 't') or (input='T') or (i = nmaks);

jummhs :=i; writeln;

Page 67: Modul Pascal.pdf

VI - 4

if i = nmaks then

writeln('tabel array penuh, ngak muat lagi!!!');

writeln(' output data mahasiswa ');

writeln('===============================================');

writeln(' NPM nama KOdeMK nilai ');

writeln('===============================================');

for i:=1 to jumMHs do

writeln(tabmhs[i].NIM:9,tabmhs[i].nama:20,tabmhs[i].kodeMK:10,

tabmhs[i].nilai:10);

readln;

end.

Program diatas merupakan contoh dari sebuah array bertipe record. Untuk

menggunakannya, terlebih dahulu harus didefiniskan record yang dibutuhkan

(type mahasiswa = record ..............end;) kemudian deklarasikan arraynya (tabmhs

: array [1..Nmaks] of record). Untuk mengaksesnya gunakan syntax

tabmhs[index_ke_x].nama_record;

Page 68: Modul Pascal.pdf

VI - 5

6.3. Latihan

6.3.1. Pengelola sebuah perpustakaan ingin agar data buku di perpustakaanya

dapat di olah dengan lebih mudah sehingga data tersebut tersimpan dengan

baik, dan ketika ingin melihat kembali dapat dilihat dengan mudah.

Buatlah sebuah program dalam pascal untuk memenuhi permintaan

pengelola. Program tersebut minimal memiliki fasilitas input dan dapat

menambah data buku, menampilkan data buku dan keluar dari program.

Struktur Data buku

Kode Buku Judul Pengarang Jumlah

C001 Fisika dasar Suprayogi 3

C002 Algortma

Pemograman

Rinaldi munir 10

C005 Microsoft office Aldi kusumah 5

N001 Harry potter j.k.Rowling 8

... ... ... ...

NF001 Aplikasi iklan Yunuar iman 5

Definisikan apa saja yang dibutuhkan pada program.

1. Pada program membutuhkan menu untuk input data buku, tampil data

buku dan keluar dari program. Kita gunakan pemilihan case..of untuk

masalah ini. Jika menginput 1, maka akan masuk ke perintah untuk

menginput data buku, 2, tampil buku dan 3 keluar dari program.

2. Agar program hanya dapat keluar jika user menginputkan perintah keluar,

maka gunakan pengulangan repeat-until.

Page 69: Modul Pascal.pdf

VI - 6

3. Untuk membentuk sebuah struktur data buku, kita gunakan record dengan

nama data_buku & field-field : kode_buku, judul_buku, auth_buku,

jumlah_buku.

type data_buku = record

kode_buku : string[8];

judul_buku : string[30];

auth_buku : string[30];

jumlah_buku : integer;

end;

4. Agar data-data buku bisa disimpan, kita gunakan array buku ( array

tersebut bertipe data_buku)

buku : array[1..N] of data_buku;

Berikut kode lengkap program :

program perpus_data;

uses crt;

const N = 200;

type data_buku = record

kode_buku : string[8];judul_buku : string[30];

auth_buku : string[30];jumlah_buku : integer;

end;

var

buku : array[1..N] of data_buku;

xy, pil_menu, Arr : integer; pil_isi : char;

begin

Arr := 0;

repeat

clrscr;

writeln('Pilih Menu :');

writeln('1. Input Buku');

writeln('2. Tampil Buku');

writeln('3. Keluar program');

write('Menu : ');readln(pil_menu);

case pil_menu of

1 :

repeat

Arr := Arr + 1;

if(Arr > N) then writeln('Array Penuh')

else

begin

write('Masukkan Kode Buku : ');readln(buku[Arr].kode_buku);

write('Masukkan Judul Buku : ');readln(buku[Arr].judul_buku);

write('Masukkan Pengarang Buku : ');readln(buku[Arr].auth_buku);

Page 70: Modul Pascal.pdf

VI - 7

write('Masukkan Total Buku : ');readln(buku[Arr].jumlah_buku);

write('Masukkan data lagi (y/n): ');readln(pil_isi);

end;

until ((pil_isi = 'n') or (pil_isi = 'N') or (Arr=N)) ;

2 : begin

if(Arr = 0) then writeln('Data Kosong')

else

begin

writeln(' output data Buku ');

writeln('==================================================');

writeln(' Kode Judul Pengarang Total

');

writeln('==================================================');

for xy:=1 to Arr do

begin

writeln(buku[xy].kode_buku:7,buku[xy].judul_buku:20,buku[xy].auth_

buku:15,

buku[xy].jumlah_buku:8);

end;

end;

end;

3 : writeln('Keluar dari Program');

else writeln('Pilihan Salah');

end;

readln;

until (pil_menu = 3);

end.

Page 71: Modul Pascal.pdf

VI - 8

6.3.2. Tambahkan pada latihan no. 1 fasilitas untuk menampilkan total jumlah

buku yang tersedia di perpustakaan.

Untuk menambah fasilitas total jumlah buku, ubah menu nomor 3,

menjadi tampil total buku, dan pada case of ubah nomor 3 menjadi kode

seperti berikut :

3 : begin

total := 0;

for xy := 1 to Arr do

total := total + buku[xy].jumlah_buku;

writeln('Total : ',total);

end;

Berikut Screen Shoot program setelah dimodifikasi :

Page 72: Modul Pascal.pdf

VI - 9

Page 73: Modul Pascal.pdf

VII - 1

MODUL VII

PROSEDUR DAN FUNGSI

7.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Memahami struktur prosedur dan struktur fungsi

2. Menggunakan prosedur dan fungsi dalam membuat program

7.2. Dasar Teori

Program yang besar mungkin saja terdiri dari puluhan ribu hingga ratusan

ribu baris instruksi. Program ini biasanya dipecah menjadi sejumlah bagian yang

berukuran relative kecil, yang disebut subrutin atau subprogram. Pada pascal,

subrutin dibagi menjadi dua macam : Prosedur dan Fungsi.

7.2.1. Prosedur

Prosedur memiliki struktur yang sama dengan struktur program, yaitu

terdiri dari nama prosedur, deklarasi-deklarasi, dan bagian deskripsi (statement /

aksi di dalam prosedur ).

Semua deklarasi di dalam prosedur dikatakan sebagai deklarasi local

sehingga hanya bisa digunakan dalam prosedur itu saja, sedangkan deklarasi di

dalam program utama bersifat global sehingga dapat dikenali di seluruh bagian

program. Prosedur dapat memiliki satu lebih parameter. Parameter dalam sebuah

program yang mengandung sebuah prosedur terdiri dari parameter formal dan

parameter actual.

1. Parameter formal

Adalah variable yang ada pada daftar parameter dalam definisi (judul) prosedur.

2. Parameter actual

Adalah variable (parameter) yang dipakai dalam pemanggilan prosedur,

dideskripsikan dalam badan program utama.

Struktur umum prosedur :

Procedure nama_prosedur (param_formal1 :

tipe_param1;param_formal2: tipe _param2;….);

Page 74: Modul Pascal.pdf

VII - 2

{jika prosedur tidak memiliki parameter, tanda kurung tidak

disertakan}

Var

{bagian deklarasi prosedur, sifatnya local}

Begin

Statement_1;

….

Statement_n;

End;

Procedur dipanggil oleh program utama dengan menuliskan nama procedure

dan parameter actual yang mengikutinya (jika ada). Struktur umum pemanggilan

procedur:

Nama_prosedur(param_aktual1 : tipe_param; param_aktual2:

tipe_param2;….);

Aturan penamaan prosedur sama dengan aturan penamaan pada identifier

lainnya(variable.konstanta, dll). Sebuah prosedur tidak harus mempunyai

parameter sehingga terdapat dengan parameter dan prosedur tanpa parameter.

1. Prosedur tanpa parameter

Prosedur tanpa parameter mendapatkan masukan dari konstanta atau

variable global, dan dapat menghasilkan keluaran yang diisikan kepada variable

global juga.

program keliling_lingkaran;

uses crt;

const phi = 3.14;

var r, kell : real;

procedure hitung_kel_ling;

begin

write('Masukkan Jari-jari : ');readln(r);

kell := 2 * phi * r; writeln('Keliling : ',kell:0:2);

end;

begin

clrscr;

writeln('program untuk menghitung keliling lingkaran');

hitung_kel_ling;

readln;

end.

Page 75: Modul Pascal.pdf

VII - 3

2. Prosedur dengan parameter

Prosedur dengan parameter dapat dibagi menjadi tiga yaitu parameter input,

parameter output dan parameter input/output.

Parameter Input/Parameter Nilai

Parameter yang nilainya berlaku sebagai masukan untuk prosedur

Nilai dari parameter actual akan disalin ke parameter formal

Perubahan nilai parameter di dalam badan prosedur tidak mengubah isi

parameter actual di bagian program yang memanggilnya.

Pengiriman nilai parameter dilakukan searah, yaitu dari bagian program

yang memanggil prosedur ke prosedur yang dipanggil

program pembagian;

uses crt;

var bil1, bil2 : integer;

procedure bagi(x,y : integer);

var hasil : real;

begin

if y = 0 then writeln('Error') else

begin

hasil := x/y;

writeln('Hasil Pembagian x dan y : ',hasil:0:3);

end;

end;

begin

clrscr;

write('Bilangan pertama : ');readln(bil1);

write('bilangan Kedua : ');readln(bil2);

bagi(bil1,bil2);

end.

Page 76: Modul Pascal.pdf

VII - 4

Parameter output

a. Parameter yang menampung keluaran yang dihasilkan oleh prosedur

b. Bila prosedur dipanggil, nama parameter actual pada program utama

menggantikan nama parameter formal pada prosedur.

c. Setelah prosedur dilaksanakan, parameter actual berisi suatu nilai yang

merupakan keluaran dari prosedur tersebut. Berarti, perubahan nilai

parameter di dalam badan prosedur mengubah isi parameter actual di

bagian program yang memanggilnya.

program upah_karyawan;

uses crt;

var nama : string[25]; jjk : longint; upah : real;

procedure hitung_upah(jum : longint; var upah_kerja : real);

const har = 201000;

begin

upah_kerja := jum * har;

end;

begin

clrscr;

write('Siapa Anda ? ');readln(nama);

write('Berapa jam Kerja Anda ? ');readln(jjk);

hitung_upah(jjk, upah);

writeln('Upah Anda Adalah : Rp.',upah:0:2,' rupiah');

end.

Parameter input/output

a. Parameter yang berfungsi sebagai masukan sekaligus keluaran bagi

prosedur tersebut.

b. Nama dan nilai parameter actual dari program yang memanggil prosedur

digunakan di seluruh bagian prosedur

c. Perubahan nilai di prosedur akan merubah nilai asli di bagian program

yang memanggil prosedur

Page 77: Modul Pascal.pdf

VII - 5

program pertukaran;

uses crt;

var bil1, bil2 : integer;

procedure tukar(var xyzh, xzyh : integer);

var temp : integer;

begin

temp := xyzh;

xyzh := xzyh;

xzyh := temp;

end;

begin

clrscr;

write('Masukkan a dan b (dipisah spasi) ');readln(bil1,bil2);

writeln('A = ',bil1,' dan B = ',bil2);

writeln('Tekan Enter Untuk Menukar');

readln; tukar(bil1, bil2);

writeln('A sekarang = ',bil1); writeln('B sekarang = ',bil2);

end.

7.2.2. Fungsi

Fungsi adalah subprogram yang mengembalikan sebuah nilai. Secara

umum fungsi hampir sama dengan prosedur, fungsi juga diakses dengan

memanggil namanya, dan dapat mengandung daftar parameter formal. Jenis

parameter formal fungsi adalah parameter input.

Bentuk umum deklarasi fungsi :

Function nama_fungsi(param_formal1 : tipe_param1; param_formal2 :

tipe_param2;….): tipe hasil;

Var

{variable local}

Begin

{statement-satement pada fungsi}

End.

Keterangan : tipe_hasil adalah tipe data dari nilai yang dikembalikan oleh fungsi.

program penambahan;

Page 78: Modul Pascal.pdf

VII - 6

uses crt;

var a,b,c : real;

function tambah(x, y : real) :real;

begin

tambah := x + y;

end;

begin

clrscr;

write('Masukkan a dan b : ');readln(a,b);

c := a + b;

writeln('A + B = ',c:0:2);

end.

program volume;

uses crt;

var r : real;

function vol_kubus(rusuk : real) : real;

begin

vol_kubus := rusuk*rusuk*rusuk;

end;

begin

clrscr;

write('Masukkan Rusuk : ');readln(r);

write('Volum Kubus : ',vol_kubus(r):0:2);

end.

7.3. Latihan

7.3.1. Diketahui hambatan yang besarnya R1 dan R2. Rs adalah hambatan jika

R1 dan R2 dirangkai seri dan Rp adalah besar hambatan jika R1 dan R2

dirangkai paralel. Buatlah procedure program ntuk menghitung Rs dan Rp

menggunakan sebuah procedure untuk proses perhitungannya. (R1 dan R2

tidak boleh 0) Rs = R1 + R2, Rp = 1/R1 + 1/R2.

Analisis :

Page 79: Modul Pascal.pdf

VII - 7

Pada soal ini akan dibuat sebuah prosedur menggunakan 4 parameter

terdiri dari 2 parameter input dan 2 parameter output. Parameter input digunakan

untuk melewatkan R1 dan R2 ke prosedur dan parameter output digunakan untuk

mendapatkan Rs dan Rp dari prosedur. { procedure hitungRsRp(R1, R2 : integer;

var Rs, Rp : real);}. Untuk mencegah user memasukkan R1 atau R2 dengan 0

gunakan percabangan if. { if ((R1 = 0) or (R2 = 0)) then writeln('Error R1 atau R2

Tidak Boleh 0') else }.

Pada program ini juga akan dibuat 4 variabel, R1 dan R2 dengan tipe data integer

dan Rs dan Rp dengan tipe real. { var R1, R2 : integer; Rs, Rp : Real;}.Nilai R1

dan R2 akan didapat dari input user menggunakan readln(var); dan nilai Rs dan

Rp akan didapat dari hasil prosedur hitungRsRp. Berikut kode lengkap program :

program procdure;

uses crt;

procedure hitungRsRp(R1, R2 : integer; var Rs, Rp : real);

begin

if((R1 = 0) or (R2 = 0)) then writeln('Error R1 atau R2 Tidak

Boleh 0')

else begin

Rs := R1 + R2;Rp := (1/R1) + (1/R2);

end;

end;

var R1, R2 : integer; Rs, Rp : Real;

begin

clrscr;

write('Masukkan R1 : ');readln(R1);

write('Masukkan R2 : ');readln(R2);

hitungRsRp(R1,R2,Rs,Rp);

writeln;

writeln('Rs = ',Rs:0:2,', Rp = ',Rp:0:2);

readln;

end.

Page 80: Modul Pascal.pdf

VII - 8

Catatan : Parameter Formal adalah parameter yang terdapat pada saat

pendefinisian prosedur, sedangkan parameter aktual adalah parameter yang ada

saat pemanggilan prosedur. Patut dicatat pula bahwa walau nama dari parameter

formal dan parameter aktual itu adalah sama, tapi itu merupakan dua hal yang

berbeda.

7.3.2. Buatlah sebuah procedure dan fungsi untuk menghitung luas segitiga

Analisis :

Rumus untuk menghitung luas segitiga adalah luas = ½ x alas x tinggi.

Pada program ini akan dibuat sebuah prosedur dengan nama segitiga dengan

menggunakan dua parameter input dan satu parameter output. Parameter input itu

adalah alas dan tinggi, dan paramater output itu adalah luas. { procedure

segitiga(alas, tinggi : integer; var luas : real); }. Pada program ini juga akan

dibuat sebuah fungsi dengan nama triangle dengan dua buah parameter (alas dan

tinggi) dan mempunyai tipe kembalian real. {function triangle(alas,tinggi :

integer) : real;} Pada bagian utama program akan mempunyai 4 buah variabel,

alas dan tinggi bertipe integer dan luasp dan luasf bertipe real. { var alas, tinggi :

integer;luasp, luasf : real;}. Berikut kode lengkap program :

program hitungSegitiga;

uses crt;

procedure segitiga(alas, tinggi : integer; var luas : real);

begin

luas := (1/2) * alas * tinggi;

end;

function triangle(alas,tinggi : integer) : real;

begin

triangle := (1/2) * alas * tinggi;

end;

var alas, tinggi : integer; luasp, luasf : real;

begin

clrscr;

write('Masukkan Alas : '); readln(alas);

write('Masukkan Tinggi : ');readln(tinggi);

segitiga(alas,tinggi, luasp);

luasf := triangle(alas,tinggi);

writeln('Nilai Segitiga Menggunakan procedure : ',luasp:0:2);

writeln('nilai Segitiga Menggunakan Fungsi : ',luasf:0:2);

Page 81: Modul Pascal.pdf

VII - 9

readln;

end.

7.3.3. Modifikasi program 7.3 dengan mengubah subrutin procedure menjadi

subrutin fungsi kemudian lakukan analisa terhadap program hasil

modifikasi.

Mengubah prosedur pada 7.3 menjadi fungsi. Pahami dahulu perbedaan

antara fungsi dan prosedur. Prosedur mempunyai apa yang namanya parameter

output, sedangkan pada fungsi tidak mempunyai parameter output. Fungsi akan

mempunyai nilai kembalian sedangkan pada prosedur tidak mempunyai nilai

kembalian.

procedure hitung_upah(jum : longint; var upah_kerja : real);

{nilai real akan menjadi tipe kembalian}

const har = 201000;

begin

upah_kerja := jum * har; {ganti dengan nama fungsi, utk

mendapatkan nilai kembalian}

end;

Ubah menjadi :

function hitung_upah(jum : longint) : real;

const har = 10000;

begin

hitung_upah := jum * har;

end;

Berikut kode lengkap program setelah melalui modifikasi :

program upah_karyawan;

uses crt;

var nama : string[25]; jjk : longint;{Variabel mana yang tidak ada

????? }

function hitung_upah(jum : longint) : real;

const har = 10000;

begin

hitung_upah := jum * har;

end;

begin

Page 82: Modul Pascal.pdf

VII - 10

clrscr;

write('Siapa Anda ? ');readln(nama);

write('Berapa jam Kerja Anda ? ');readln(jjk);

writeln('Upah Anda Adalah : Rp.',hitung_upah(jjk):0:2,' rupiah');

{lihat dimana perbedaannya ????}

readln;

end.

7.3.4. Apakah soal latihan nomor 1 bisa diubah menjad fungsi? Jika bisa buatlah

fungsinya, jika tidak bisa berikan penjelasan.

Bisa, soal nomor 1 bisa diubah menjadi fungsi. Hanya kita perlu memberi

sedkit modifikasi.

{--------------------------------------}

procedure hitungRsRp(R1, R2 : integer; var Rs, Rp : real);

begin

if((R1 = 0) or (R2 = 0)) then writeln('Error R1 atau R2 Tidak

Boleh 0')

else begin

Rs := R1 + R2;Rp := (1/R1) + (1/R2);

end;

end;

{--------------------------------------}

function hitungRsRp(R1, R2 : integer;RsOrRp : string) : real;

begin

if((R1 = 0) or (R2 = 0)) then writeln('Error R1 atau R2 Tidak

Boleh 0')

else begin

if(RsOrRp = 'Rs') then hitungRsRp := R1 + R2

else if(RsOrRp = 'Rp' ) then hitungRsRp := (1/R1) + (1/R2)

else writeln('Rs Or Rp ?? Tidak di Definisikan dengan benar');

end;

end;

Berikut Kode Lengkap program hasil modifikasi :

program procdure;

uses crt;

function hitungRsRp(R1, R2 : integer;RsOrRp : string) : real;

begin

if((R1 = 0) or (R2 = 0)) then writeln('Error R1 atau R2 Tidak

Page 83: Modul Pascal.pdf

VII - 11

Boleh 0')

else begin

if(RsOrRp = 'Rs') then hitungRsRp := R1 + R2

else if(RsOrRp = 'Rp' ) then hitungRsRp := (1/R1) + (1/R2)

else writeln('Rs Or Rp ?? Tidak di Definisikan dengan benar');

end;

end;

var R1, R2 : integer;Rs, Rp : real;signal: string;

begin

clrscr;

write('Masukkan R1 : ');readln(R1);

write('Masukkan R2 : ');readln(R2);

signal := 'Rs';

Rs := hitungRsRp(R1,R2,signal);

signal := 'Rp';

Rp := hitungRsRp(R1,R2,signal);

writeln;

writeln('Rs = ',Rs:0:2,', Rp = ',Rp:0:2);

readln;

end.

7.3.5. Buatlah function fx(x : real) : real; yang menghasilkan nilai 3x2 + 6x + 10

untuk nilai x >= 10 atau 1/x2 untuk x<10 tetapi lebih dari 0, 0 untuk nilai x

lainnya.

Analisis Fungsi Fx(x) : Fungsi Fx bertipe kembalian real dan mempunyai

sebuah parameter x real. { function fx(x : real) : real;} Parameter pada saat

pendefinisian disebut parameter formal, sedangkan parameter pada saat

pemanggilan disebut parameter aktual. Pada fungsi ini, parameter X akan dicek

nilainya menggunakan percabangan if. Jika ternyata nilai X lebih besar dari sama

dengan 10, maka fungsi akan mempunyai nilai kembalian 3x2 + 6x : 10 (if (x >=

10) then fx := 3*x*x + 6*x + 10). Sedangkan jika X mempunyai nilai lebih kecil

sema dengan 0, maka Fx akan mempunyai kembalian 0, dan Fx mempunyai

Page 84: Modul Pascal.pdf

VII - 12

kembalian 1/x2 untuk nilai X lainnya. { if (x >= 10) then fx := 3*x*x + 6*x + 10

else if (x<=0) then fx := 0 else fx := 1/(x*x) ;}.

Pada program diatas, mula-mula program diatas akan meminta input dari

user untuk memasukkan X. Kemudian nilai x itu akan dilewatkan kedalam fungsi

Fx(x) seperti yang telah dijelaskan sebelumnya dan dungsi Fx akan

mengembalikan nilai kembalian. Satu hal yang harus diingat, variabel X pada saat

pendefinisian Fungsi Fx (function fx(x : real) : real;) bukanlah variabel X

program (var x : real;). Hanya namanya saja yang kebetulan sama. Ini

dimungkinkan dengan penjelasan penggunaan scope variabel (ruang lingkup

program). Variabel X pada Fx mempunyai ruang lingkup yang spesifik hanya

pada fungsi Fx, sedangkan X yang lain adalah nilai X yang mempunyai ruang

lingkup global.

program x_function;

uses crt;

var x : real;

function fx(x : real) : real;

begin

if (x >= 10) then fx := 3*x*x + 6*x + 10 else

if (x<=0) then fx := 0 else fx := 1/(x*x) ;

end;

begin

clrscr;

write('Masukkan X-nya : ');readln(x);

writeln('Fx(x) = ',fx(x):0:2);

writeln;readln;

end.

Page 85: Modul Pascal.pdf

VIII - 1

MODUL VIII

ARRAY DUA DIMENSI

8.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Mengenali array dan array berdimensi dua

2. Memahami dan menggunakan array dalam pemrograman

3. Mengenal array dan manipulasinya

8.2. Dasar Teori

8.2.1. Array Berdimensi Banyak

Pada array berdimensi banyak, setiap elemen array diakses melebihi lebih dari

satu indeks’ Modul ini hanya akan membahas array berdimensi dua (setiap

elemen array diakses melalui dua buah indeks, indeks baris dan indeks kolom)

Bentuk umum deklarasi array berdimensi dua :

Nama_variable_array : array [indeks_baris,indeks_kolom] of type_elemen

Contoh 1: Program untuk mengisi sebuah matrik kemudian menampilkannya

program MatriksBilangan;

const

n=3; m=4;

var

baris, kolom : integer;

matriks : array[1..n,1..m] of integer;

begin

writeln('input elemen array ::');

for baris:=1 to n do

for kolom:=1 to m do

begin

write('data[',baris,'][',kolom,']:');

readln(matriks[baris][kolom]);

end;

writeln;

writeln('output elemen array ::');

for baris:=1 to n do

begin

for kolom:=1 to m do

write(matriks[baris][kolom]:5);

writeln;

end;

readln;

end.

Page 86: Modul Pascal.pdf

VIII - 2

Program 6.1. Membaca sejumlah data mahasiswa, menyimpannya dalam

sebuah array, kemudian menampilkannya.

program add2matriks;

const

n=50; m=50;

type

arr=array [1..n,1..m] of integer;

var

i,j, barA,kolA,barB,kolB : integer;

matA,matB : arr;

procedure input(bar,kol : integer; var mat :arr);

begin

for i:=1 to bar do

for j:=1 to kol do

begin

write('matrik[',i,'][',j,']:');

readln(mat[i][j]);

end;

end;

procedure display(bar,kol : integer; var mat :arr);

begin

for i:=1 to bar do

begin

for j:=1 to kol do

write(mat[i,j]:3);

writeln;writeln;

end;

end;

begin

writeln ('input matrik A:');

write('jumlah baris:'); readln(barA);

write('jumlah kolom:'); readln(kolA);

input(barA,kolA,matA); writeln;

writeln('input matrik B:');

write('jumlah baris:');

write('jumlah kolom:');

input(barB,kolB,MatB); writeln;

writeln('tampilan');

writeln('matrik A =');

display(barA,kolA,matA);

writeln('matrik A =');

display(barB,kolB,matB); writeln;

if (barA<>barB) or (kolA<>kolB) then

writeln('matrik tidak dapat dijumlahkan')

else

begin

writeln('hasil penjumlahan matrik=');

for i:=1 to kolA do

write((matA[i,j]+matB[i,j]):3);

writeln; writeln;

end;

Page 87: Modul Pascal.pdf

VIII - 3

readln;

end.

8.3. Latihan

8.3.1. Buatlah program untuk menerima masukan sejumlah nilai yang disimpan

di array kemudian tentukan nilai maksimum dan minimum dari nilai-nilai

tersebut!

8.3.2. Buatlah program untukmengalikan dua buah matriks!

Jawaban :

Nomor 1 :

Definisi Masalah : Mencari Nilai Maksimum dan Minimum (Maks dan Min)

Keadaan Awal / Pembantu : Sebuah Array yang ingin dicari nilainya. (Arr).

Nilai Maksimum adalah nilai terbesar dari sebuah data, cara menemukannya

adalah dengan membandingkan semua data terhadap variabel tambahan z dimana

nilai mula z adalah nilai pertama dari data itu. Jika data ke –x lebih besar dari z,

masukkan data tersebut ke z. Syntax :

for b := 1 to y do if(z < x[b]) then z := x[b];

Page 88: Modul Pascal.pdf

VIII - 4

Nilai Minimum dapat dicari dengan cara hampir sama dengan nilai maksimum

dengan menggunakan sedikit modifikasi. Syntax :

// for b := 1 to y do if(z < x[b]) then z := x[b];

for b := 1 to y do if(z > x[y-b+1]) then z := x[y-b+1];

Berikut Kode Lengkap Program :

Program arrays;

uses crt;

const EMaks = 100;

type arraynya = array[1..EMaks] of integer;

procedure isiArray(var x : arraynya; y : integer);

var a : integer;

begin

for a := 1 to y do

begin

write('Masukkan Array Ke-',a,' ');readln(x[a]);

end;

end;

procedure MaksMin(x : arraynya; y : integer; var z : integer; var

a : integer);

var b : integer;

begin

z := x[1];a := x[y];

for b := 1 to y do

begin

if(z < x[b]) then z := x[b];

if(a > x[(y-b)+1]) then a := x[(y-b)+1];

end;

end;

var

Arr : arraynya;

EArr, Maks, Min : integer;

begin

clrscr;

write('Mau Berapa Elemen Arraynya ? ');readln(EArr);

isiArray(Arr, EArr);

MaksMin(Arr, EArr, Maks, Min);

writeln('Nilai Maksimal = ',Maks,', dan nilai minimal = ',Min);

readln;

end.

Page 89: Modul Pascal.pdf

VIII - 5

Nomor 2 :

program kalimatriks;

const EMaks = 50;

type Mmatriks = array[1..EMaks, 1..EMaks] of integer;

type ThisMatriks = record

matriks : Mmatriks;

baris, kolom : integer;

end;

procedure isiMatriks(var x : ThisMatriks);

var b, c : integer;

begin

write('Mau Matriks Berapa (x y): ');readln(x.baris,x.kolom);

for b := 1 to x.baris do

begin

for c := 1 to x.kolom do

begin

write('Masukkan elemen ke-',b,',',c,'

');readln(x.matriks[b][c]);

end;

end;

writeln;

end;

procedure displayMatriks(var x : ThisMatriks);

var b, c : integer;

begin

for b := 1 to x.baris do

begin

for c := 1 to x.kolom do

begin

write(x.matriks[b][c]:6,' ');

end;

writeln;

end;

writeln;

end;

procedure kaliMatriks(y, x : ThisMatriks;var z : ThisMatriks);

var b, c,d : integer;

Page 90: Modul Pascal.pdf

VIII - 6

begin

if (y.kolom = x.baris) then

begin

for b := 1 to y.baris do

begin

for c := 1 to x.kolom do

begin

z.matriks[b][c] := 0;

for d := 1 to x.baris do z.matriks[b][c] :=

z.matriks[b][c] + ( y.matriks[b][d] * y.matriks[d][c]);

end;

end;

z.baris := y.baris;

z.kolom := x.kolom;

end

else writeln('Error');

end;

{for b := 1 to x.x do

begin

for c := 1 to x.y do

begin

write(x.matriks[b][c]:6,' ');

end;

writeln;

end;

end;

}

var M1, M2, M3 : ThisMatriks;

begin

isiMatriks(M1);

isiMatriks(M2);

displayMatriks(M1);

displayMatriks(M2);

kaliMatriks(M1, M2, M3);

displayMatriks(M3);

readln;

end.

Page 91: Modul Pascal.pdf

VIII - 7

Page 92: Modul Pascal.pdf

IX - 1

MODUL IX

SEARCHING

9.1. Tujuan Praktikum

Praktikum diharapkan dapat :

1. Memahami metode-metode pencarian

2. Menggunakan metode pencarian untuk ke perluan pemograman

9.2. Dasar Teori

Searching (pencarian) merupakan proses menemukan suatu nilai (data)

tertentu dalam sekumpulan data yang bertipe sama (baik bertipe dasar atau bertipe

bentukan).

Metode-metode Pencarian:

9.2.1. Pencarian Beruntun (Sequential Search)

Proses pencarian dengan metode sequential search adalah dengan

melakukan perbandingan nilai yang dicari dengan setiap elemen pada array mulai

dari indeks terkecil sampai indeks terbesar. Pencarian dihentikan jika nilai yang

dicari telah ditemukan atau semua elemen array sudah diperiksa.

Ilustrasi Kasus:

Terdapat sebuah array TabInt yang terdiri dari n = 10 elemen

Isi Tabel

Indeks 1 2 3 4 5 6 7 8 9 10

Kasus 1 : Misalkan nilai yang dicari adalah x = 7

Elemen yang dibandingkan : 7 (ditemukan)

Karena data langsung diteukan maka pengulangan dihentikan

Indeks larik yang dikembalikan : idx = 1

Kasus 2 : Misalkan nilai yang dicari adalah x=17

Elemen yang dibandingkan: 7, 5, 23, 1, 15, 8, 17 (ditemukan)

Setelah data ditemukan pengulangan dihentikan

7 5 23 1 15 8 17 75 10 4

Page 93: Modul Pascal.pdf

IX - 2

Indks larik yang dikembalikan : idx = 7

Kasus 3 : Misalkan nilai yang dicari adalah x = 25

Elemen yang dibandingkan : 7, 5, 23, 1, 15, 8, 17, 75, 10, 4 (tidak ditemukan)

Karena pencarian data sudah mencapai indeks terbesar dan nilai yang dicari

belum ditemukan maka pencarian dihentikan

Indeks larik yang dikembalikan : idx = 0

Program9.1 Implementasi Program Sequential Search

Program Sequential_Search;

uses crt;

const Nmax = 100;

type

TabInteger = array[1..Nmax] of integer;

var

TabInt : TabInteger;

jml_data, x, i : integer;

begin

clrscr;

write('Banyaknya integer : '); readln(jml_data);

for i := 1 to jml_data do

begin

write('Nilai ke - ',i,' : ');

readln(TabInt[i]);

end;

write('Data yang akan dicari : '); readln(x);

i := 1;

while(i<jml_data) and (TabInt[i]<>x) do

i := i + 1;

if TabInt[i] = x then

writeln('Data ditemukan pada posisi ke - ',i)

else

writeln('Data tidak ditemukan!');

readln;

end.

Analisis

Nama Program : Sequential_Search

Input : jml_data, x , dan TabInt[i] yang semuanya bertipe integer.

Output : Akan memberikan kalimat “Data ditemukan pada posisi

ke-x” jika data yang dicari ada, dan jika tidak ditemukan akan mengeluarkan

kalimat “Data tidak Ditemukan”.

Page 94: Modul Pascal.pdf

IX - 3

Salah satu ciri rogram yang baik adalah program tersebut memiliki sifat

prosedural. Tujannya untuk memudahkan dalam pengembangan dprogram,

menghemat ukuran program (jika ada beberapa intruksi yang sama digunakan

pada beberapa tempat dalam program), mempermudah pembacaan program, dan

mempermudah pendeteksian kesalahan pada program. Program 9.1 bukan

program yang prosedural karena belum membagi bagian-bagian tertentunya

menjadi prosedural karena beum membagi bagian-bagian tertentuna menjadi

prosedur atau fungsi. Program 9.2 merupakan modifikasi dari program 9.1 dan

sifatnya lebih prosedural.

Program 9.2 Implementasi Program Sequential Search dengan Prosedur

Program Sequential_Search2;

uses crt;

const Nmax = 100;

type

TabInteger = array[1..Nmax] of integer;

var

TabInt : TabInteger;

jml_data, data, indeks : integer;

cari : char;

procedure InputData(n : integer; var T : TabInteger);

var

i : integer;

begin

for i := 1 to n do

begin

write('Nilai ke - ',i,' : ');

readln(T[i]);

end;

end;

procedure SeqSearch(T : TabInteger; n, x : integer;

var idx : integer);

var

i : integer;

begin

i := 1;

while (i<n) and (T[i]<>x) do

i := i + 1;

if T[i] = x then

idx := i

else

idx := 0

end;

begin

clrscr;

Page 95: Modul Pascal.pdf

IX - 4

write('Banyaknya integer : '); readln(jml_data);

InputData(jml_data,TabInt);

repeat

write('Data yang akan dicari : '); readln(data);

SeqSearch(TabInt, jml_data, data, indeks);

if indeks = 0 then

writeln('Data tidak ditemukan!')

else

writeln('Data ditemukan pada posisi ke-',indeks);

write('Cari data lagi (y/t) ? '); readln(cari);

until (cari ='t') or (cari ='T');

readln;

end.

Program sequential_search2 memanggil dua prosedur yaitu prosedur input

data (dengan parameter jml_data sebagai input untuk n dan TabInt sebagai output

untuk Parameter output T) dan prosedur SeqSearch (dengan parameter TabInt

sebagai input untuk T, jml_data sebagai input untuk n, data sebagai input untuk x,

dan indeks sebagai output untuk idx)

Algoritma pencarian dengan metode Sequential Search memiliki banyak

versi tergantung kebutuhan output, kreatifitas programmer, dan faktor lainnya.

Program 9.1 atau procedure Sequential Search pada program 9.2 merupakan salah

satu versinya.

9.2.3. Pencarian Bagi Dua (Binary Search)

Pencarian bagi dua adalah metode pencarian yang diterapkan sekumpulan

data yang sudah terurut baik manaik maupun menurun. Maksud dari metode ini

adalah mempersingkat waktu pencarian data/nilai pada tabel.

Proses Pencarian :

1. Bandingkan nilai yang kita cari (x) dengan data yang berada pada posisi

tengah. Jika sama, maka pencarian selesai.

Page 96: Modul Pascal.pdf

IX - 5

2. Jika x lebih kecil daripada data pada posisi tengah, pencarian dilakukan

pada daerah yang data-datanya lebih kecil dari data tengah

3. Jika x besar daripada data pada posisi tengah, pencarian dilakukan pada

daerah yang data-datanya lebih besardari data tengah

4. Kembali ke proses nomor 1 jika masih ada daerah pencarian. Ika tidak ada

berarti data tidak ditemukan.

Program 9.4 Prosedur Binary Search

Program Binary_Search;

uses crt;

const Nmax = 100;

type

TabInteger = array[1..Nmax] of integer;

var

TabInt : TabInteger;

jml_data, data, indeks : integer;

cari : char;

procedure InputData(n : integer; var T : TabInteger);

var

i : integer;

begin

for i := 1 to n do

begin

write('Nilai ke - ',i,' : ');

readln(T[i]);

end;

end;

procedure BinSearch(T : TabInteger; n, x : integer;

var idx : integer);

var

BatasAtas, BatasBawah, Tengah : integer;

begin

BatasAtas := 1;

BatasBawah := n;

Tengah := (BatasAtas + BatasBawah) div 2;

while(BatasAtas <= BatasBawah) and (T[Tengah] <> x) do

begin

Tengah := (BatasAtas + BatasBawah) div 2;

if T[Tengah] > x then

BatasBawah := Tengah - 1

else

if T[Tengah] < x then

BatasAtas := Tengah + 1;

end;

if T[Tengah] = x then

idx := Tengah

else

idx := 0;

end;

begin

Page 97: Modul Pascal.pdf

IX - 6

clrscr;

write('Banyaknya integer : '); readln(jml_data);

InputData(jml_data,TabInt);

repeat

write('Data yang akan dicari : '); readln(data);

BinSearch(TabInt, jml_data, data, indeks);

if indeks = 0 then

writeln('Data tidak ditemukan!')

else

writeln('Data ditemukan pada posisi ke-',indeks);

write('Cari data lagi (y/t) ? '); readln(cari);

until (cari ='t') or (cari ='T');

readln;

end.

9.3. Latihan

1. Implementasikan procedure Sequential Search2 pada program 9.3 ke dalam

program yang memanggil procedure tersebut untuk pencarian nilai pada

array!

Mengimplementasikan procedure ke dalam program adalah sangat mudah,

parameter formal dan parameter aktual harus sama jumlahnnya dan sama

tipe datanya. Jika procedure tidak menggunakan parameter, maka variabel

global yang dipanggil di procedure, harus di deklarasikan.

program cari;

uses crt;

const Nmaks = 100;

type TabInteger = array[1..Nmaks] of integer;

procedure SeqSearch2 (T : TabInteger ; n, x : integer ; var

idx : integer ; var found : boolean);

var i : integer;

begin

i := 1 ;

found := false;

while (i<= n) and (not found) do

begin

if T[i] = x then found := true

else i := i + 1;

end;

Page 98: Modul Pascal.pdf

IX - 7

if found then idx := i

else idx := 0;

end;

procedure buatArray(var T : TabInteger; var n : integer; var

xErr : boolean);

var i : integer;

begin

write('Masukkan Mau Berapa Array : ');readln(n);

if (n>Nmaks) then

begin

writeln('error');

xErr := false;

end

else

begin

xErr := true;

for i := 1 to n do

begin

write('Masukkan Array ke-',i,' : '); readln(T[i]);

end;

end;

end;

procedure displayArray(T : TabInteger; n : integer; xErr :

boolean);

var i : integer;

begin

writeln;

if xErr then for i := 1 to n do write(T[i],' ')

else writeln('Data Tidak Dapat Ditampilkan');

writeln;

end;

var

Tx : TabInteger;

jumlahx, carix, posisi : integer;

xErr, found : boolean;

begin

clrscr;

buatArray(Tx, jumlahx, xErr);

displayArray(Tx, jumlahx, xErr);

writeln;

if xErr then

begin

write('Masukkan Angka Yang Mau Dicari : ');readln(carix);

SeqSearch2(Tx, jumlahx, carix, posisi, found);

end;

if found then writeln(carix, ' ditemukan di posisi ke-

',posisi)

else writeln('Data tidak ditemukan');

Page 99: Modul Pascal.pdf

IX - 8

readln;

end.

2. Modifikasi program Sequential Search pada program 9.1 sehingga jika nilai

yang dicari lebih dari satu dapat menampilkan jumlah data yang sama, jika

tidak ditemukan tampilkan pesan “tidak ditemukan”!

Contoh:

Isi Tabel

Indeks 1 2 3 4 5 6 7 8

Jika x = 6 maka output : Data ditemukan!!! Ada 3 nilai yang sama

Jika x = 1 maka output : Data ditemukan!!! Ada 1 nilai yang sama

Jika x = 4 maka output : Data tidak ditemukan!!!

Hanya perlu sedikit perubahan,

{ while(i<jml_data) and (TabInt[i]<>x) do

i := i + 1; }

while(i<jml_data) do

if (TabInt[i]=x) then i := i + 1;

{ if TabInt[i] = x then

writeln('Data ditemukan pada posisi ke - ',i) }

if i > 0 then

writeln('Data ditemukan Ada ',i, ‘ nilai yang sama)

6 1 9 3 6 2 8 6

Page 100: Modul Pascal.pdf

IX - 9

3. Buat program yang mencari nilai terbesar dan terkecil dari elemen-elemen

array yang bertipe integer beserta posisinya!

{Anggap Sebelumnya sudah didekalarasikan tipe data baru

bernama arraynya sebagai berikut :

Type = array[1..Emaks] of integer;

Hampir sama dengan latihan 1 Bab 8, Hanya dengan sedikit

tambahan Posisi.

Lebih efektif tidak menggunakan searching

}

procedure MaksMin(x : arraynya; y : integer; var z : integer;

var a : integer; var pZ : integer; var pA : integer);

var b : integer;

begin

z := x[1];a := x[y];

for b := 1 to y do

begin

if(z < x[b]) then

begin

z := x[b];

pZ := b;

end;

if(a > x[(y-b)+1]) then

begin

a := x[(y-b)+1];

pA := (y-b+1);

end;

end;

end;

{Pada Program Utama tambahkan Dua Variabel, untuk menghandle

pZ dan pA, masing-masing bertipe integer dan sertakan

variabel itu sebagai parameter pada saat memanggil

procedure.}

{Kode Lengkap Program :}

Program arrays;

uses crt;

const EMaks = 100;

type arraynya = array[1..EMaks] of integer;

procedure isiArray(var x : arraynya; y : integer);

var a : integer;

begin

for a := 1 to y do

begin

write('Masukkan Array Ke-',a,' ');readln(x[a]);

end;

end;

{Procedure MaksMin Disini, Tidak ditulis.......}

var

Arr : arraynya;

Page 101: Modul Pascal.pdf

IX - 10

EArr, Maks, Min, pMax, pMin : integer;

begin

clrscr;

write('Mau Berapa Elemen Arraynya ? ');readln(EArr);

isiArray(Arr, EArr);

MaksMin(Arr, EArr, Maks, Min, pMax, pMin);

writeln('Nilai Maksimal = ',Maks,’ di posisi ‘, pMax', dan

nilai minimal = ',Min, ‘ di posisi ‘, pMin);

readln;

end.

4. Buat program untuk menyimpan data-data record mahasiswa yang terdiri

dari NIM, Nama Mhs, dan nilai ke sebuh array. Kemudian tambahkan

fasilitas untuk pencarian data record mahasiswa. Gunakan metode pencarian

squencial search untuk pencarian data mahasiswa berdasarkan :

a. Nim

Jika pencarian berdasarkan nim, outputkan nama dan nilai bila data

ditemukan

b. Nama

Jika pencarian berdasarkan nama, outputkan nim dan nilai bila data

ditemukan

Program Data_Mahasiswa1;

uses crt;

const Nmaks = 50;

type

mahasiswa = record

NIM : string;

Nama : string;

Nilai : string;

end;

var

tabmhs : array [1..Nmaks] of mahasiswa;

i, jml : integer;

no : string;

isi : char;

begin

clrscr;

write('Masukkan banyak data : '); readln(jml);

Page 102: Modul Pascal.pdf

IX - 11

writeln('# DATA MAHASISWA #');

i := 1;

for i := 1 to jml do

begin

write('NIM [',i,'] : '); readln(tabmhs [i].NIM);

write('Nama [',i,'] : '); readln(tabmhs [i].Nama);

write('Nilai [',i,'] : '); readln(tabmhs [i].Nilai);

end;

writeln;

repeat

write('Masukkan Nama mahasiswa yang datanya akan dicari : ');

readln(no);

i := 1;

while (i < jml) and (tabmhs [i].NIM <> no) do

i := i + 1;

if tabmhs [i].NIM = no then

begin

writeln('Mahasiswa dengan NIM ',no,' adalah : ');

writeln('Nama : ',tabmhs [i].Nama);

writeln('Nilai : ',tabmhs [i].Nilai);

writeln;

end

else

begin

writeln('Data tidak ditemukan!!!');

writeln;

end;

write('Cari data lagi (y/t) ? '); readln(isi);

until

(isi = 't') or (isi = 'T');

readln;

end.

5. Implementasikan procedure binary search ke dalam program yang

memanggil procedure tersebut untuk pencarian nilai pada array!

Sebenarnya ini tidak bisa diimplementasikan tanpa menggunakan sorting.

Mengapa, karena user biasanya akan memasukkan data secara acak. Tapi untuk

menyelesaikan soal ini, anggap user memasukkan data secara berurut.

Program Binary_Search;

uses crt;

const Nmax = 100;

type

TabInteger = array[1..Nmax] of integer;

var

TabInt : TabInteger;

jml_data, data, indeks : integer;

cari : char;

procedure InputData(n : integer; var T : TabInteger);

var

i : integer;

begin

Page 103: Modul Pascal.pdf

IX - 12

for i := 1 to n do

begin

write('Nilai ke - ',i,' : ');

readln(T[i]);

end;

end;

procedure BinSearch(T : TabInteger; n, x : integer;

var idx : integer);

var

BatasAtas, BatasBawah, Tengah : integer;

begin

BatasAtas := 1;

BatasBawah := n;

Tengah := (BatasAtas + BatasBawah) div 2;

while(BatasAtas <= BatasBawah) and (T[Tengah] <> x) do

begin

Tengah := (BatasAtas + BatasBawah) div 2;

if T[Tengah] > x then

BatasBawah := Tengah - 1

else

if T[Tengah] < x then

BatasAtas := Tengah + 1;

end;

if T[Tengah] = x then

idx := Tengah

else

idx := 0;

end;

begin

clrscr;

write('Banyaknya integer : '); readln(jml_data);

InputData(jml_data,TabInt);

repeat

write('Data yang akan dicari : '); readln(data);

BinSearch(TabInt, jml_data, data, indeks);

if indeks = 0 then

writeln('Data tidak ditemukan!')

else

writeln('Data ditemukan pada posisi ke-',indeks);

write('Cari data lagi (y/t) ? '); readln(cari);

until (cari ='t') or (cari ='T');

readln;

end.

6. Procedure binary search pada program 9.3 digunakan untuk pencarian nilai

pada array yang elemen-elemenya terurut membesar. Buat procedure untuk

Page 104: Modul Pascal.pdf

IX - 13

pencarian nilai pada array yang elemen-elemennya terurut mengecil

kemudian implementasikan dalam program !

Program Binary_Search;

uses crt;

const Nmax = 100;

type

TabInteger = array[1..Nmax] of integer;

var

TabInt : TabInteger;

jml_data, data, indeks : integer;

cari : char;

procedure InputData(n : integer; var T : TabInteger);

var

i : integer;

begin

for i := 1 to n do

begin

write('Nilai ke - ',i,' : ');

readln(T[i]);

end;

end;

procedure BinSearch(T : TabInteger; n, x : integer;

var idx : integer);

var

BatasAtas, BatasBawah, Tengah : integer;

begin

BatasAtas := 1;

BatasBawah := n;

Tengah := (BatasAtas + BatasBawah) div 2;

while(BatasAtas <= BatasBawah) and (T[Tengah] <> x) do

begin

Tengah := (BatasAtas + BatasBawah) div 2;

if T[Tengah] > x then

BatasAtas := Tengah + 1

else

if T[Tengah] < x then

BatasBawah := Tengah - 1;

end;

if T[Tengah] = x then

idx := Tengah

else

idx := 0;

end;

begin

clrscr;

write('Banyaknya integer : '); readln(jml_data);

InputData(jml_data,TabInt);

repeat

write('Data yang akan dicari : '); readln(data);

BinSearch(TabInt, jml_data, data, indeks);

if indeks = 0 then

writeln('Data tidak ditemukan!')

else

writeln('Data ditemukan pada posisi ke-',indeks);

write('Cari data lagi (y/t) ? '); readln(cari);

Page 105: Modul Pascal.pdf

IX - 14

until (cari ='t') or (cari ='T');

readln;

end.

7. Modifikasi program pada latihan no 4 sehingga terdapat menu yang terdiri

dari input data, searching data dan output data!

Program Data_Mahasiswa1;

uses crt;

const Nmaks = 50;

type

mahasiswa = record

NIM : string;

Nama : string;

Nilai : string;

end;

var

tabmhs : array [1..Nmaks] of mahasiswa;

i, jml, pil : integer;

no : string;

isi : char;

begin

clrscr;

writeln('***PILIHAN MENU***');

pil := 0;

while pil <> 4 do

begin

writeln('1. Input Data');

writeln('2. Sequential Search');

writeln('3. Output Data');

writeln('Pilihan Menu ? '); readln(pil);

case pil of

1: begin

writeln('Masukkan banyaknya data ? '); readln(jml);

writeln('# DATA MAHASISWA #');

i := 1;

for i := 1 to jml do

begin

write('NIM [',i,'] : '); readln(tabmhs[i].Nim);

write('Nama [',i,'] : '); readln(tabmhs[i].Nama);

write('Nilai [',i,'] : '); readln(tabmhs[i].Nilai);

writeln;

end;

Page 106: Modul Pascal.pdf

IX - 15

writeln;

end;

2: begin

write('Masukkan NIM yang akan dicari datanya ? ');

readln(no);

i := 1 ;

while (i < jml) and (tabmhs[i].NIM <> no) do

i := i + 1;

end;

3: begin

if tabmhs[i].NIM = no then

begin

writeln('Mahasiswa dengan NIM ',no,' adalah : ');

writeln('Nama : ',tabmhs[i].Nama);

writeln('Nilai : ',tabmhs[i].Nilai);

end

else

begin

writeln('Data tidak ditemukan!!!');

writeln;

end;

end;

else

writeln('Pilihan Menu Salah!!!');

end;

readln;

end;

end.