modul pascal.pdf
DESCRIPTION
modul dasar bahasa pemrograman pascal yang bisa anda jadikan referensi untuk menguatkan dasar pemrograman yang lain.TRANSCRIPT
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
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}
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
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
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.
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
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.
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
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
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.
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
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
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.
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
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.
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}
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.
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).
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
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
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 (+).
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);
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
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);
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.
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.
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;
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);
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;
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’.
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
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.
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;
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;
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
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.
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
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
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';
III - 10
else writeln('Nilai yang anda masukkan tidaklah benar');
end; writeln;
writeln ('Mahasiswa bernama ',nama,' dengan nim ',nim,'
memperoleh nilai ',indeks);
readln;
end.
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;
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.
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
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.
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.
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.
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.
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');
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;
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.
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;
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;).
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;
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];
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)).
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.
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]);
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;
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
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;
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),
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
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.
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.
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.
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;
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;
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.
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);
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.
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 :
VI - 9
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;….);
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.
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.
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
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;
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 :
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.
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);
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
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
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
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.
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.
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;
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];
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.
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;
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.
VIII - 7
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
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”.
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;
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.
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
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;
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');
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
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;
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);
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
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
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);
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;
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.