Anda di halaman 1dari 50

BAHAN AJAR ALGORITMA DAN PEMROGRAMAN I

DEFINISI ALGORITMA

Algoritma berasal dari kata algoris dan ritmis. Pertamakali diungkapkan oleh Abu
Jafar Mohammed Ibnu Musa Al Khowarizmi (825 M) dalam buku Al-Jabr Wa-al
Muqabla. Algoritma adalah serangkaian urutan langkah logis yang terstruktur dan
PASTI dapat dilaksanakan sehingga komputer mengerti dengan apa yang kita
perintahkan kepadanya.

Kriteria algoritma :
1. Setiap langkah/step harus jelas dan pasti (definite)
2. Diperbolehkan tanpa ada input tetapi minimal harus ada satu output.
3. Jumlah langkah harus berhingga atau dengan kata lain harus ada stopping
criteria.

Algoritma ditujukan untuk mempermudah penyelesaian masalah. Hubungan antara


algoritma, masalah dan solusi dapat digambarkan sbb :

MASALAH ALGORITMA SOLUSI

Contoh suatu masalah .


Berikut ini adalah kumpulan bilangan yang terdiri dari :
5, 8, 3, 7, 2, 9, 6, 10

Tentukan bilangan terkecil dari bilangan-bilangan tersebut !


Jawabnya : 2 Kenapa ? Karena 2 lebih kecil jika dibandingkan dengan bilangan-
bilangan yang lain  LOGIS

Untuk mendapatkan algoritma yang baik, kita dapat menyusun proses dan langkah yang
akan dilakukan sebagai berikut :

1. Proses
I II III IV V VI VII VIII

5 8 3 7 2 9 6 10
5
3
3
2
2
2

2 Bil. Terkecil

1
2. Langkah

a. Bandingkan bilangan I dengan bilangan ke-II, ambil yang terkecil


b. Hasil perbandingan langkah 1, bandingkan dengan bilangan ke-III, ambil yang
terkecil
c. Hasil perbandingan langkah 2, bandingkan dengan bilangan ke-IV, ambil yang
terkecil
d. Hasil perbandingan langkah 3, bandingkan dengan bilangan ke-V, ambil yang
terkecil
e. Hasil perbandingan langkah 4, bandingkan dengan bilangan ke-VI, ambil yang
terkecil
f. dst.

Komputer tidak bias membaca data langsung, tetapi menggunakan variabel. Untuk
membaca dan membandingkan data, ambil sebuah variabel untuk data yang akan
dibaca (missal A) dan satu variabel pembanding (misal B) dan beri harga awal.
Contoh B=100

Data Pembanding
(A) (B)
5 100
8 5
3 5
7 3
2 3
9 2
6 2
10 2
2

Dari proses dan langkah diatas, maka dapat disusun suatu algoritma untuk memecahkan
masalah diatas, yakni :

ALGORITMA
1. Ambil sebuah variabel pembanding, sebut B dan beri harga awal. Misalnya B=100
2. Baca bilangan sebagai A dan bandingkan dengan B, ambil yang terkecil.
if A > B then
B=A
3. Cek data :
- Jika data masih ada, ulangi langkah 2
- Jika data habis (End of File) lanjut ke langkah 4
4. Selesai

2
ALGORITMA DAN PEMROGRAMAN TERSTRUKTUR

Konsep pemrograman terstruktur memegang peranan penting dalam merancang,


menyusun, memelihara dan mengembangkan suatu program, khususnya program
aplikasi yang besar dan kompleks.Konsep ini pertama kali dikembangkan oleh Profesor
Edsger Djikstra dari Universitas Eindhoven tahun 1960-an.

Untuk memahami Algoritma dan Pemrograman Terstruktur, ada beberapa istilah dasar
yang harus diketahui, yakni :
1. Program
2. Bahasa Pemrograman
3. Pemrograman
4. Pemrograman Terstruktur

Program adalah serangkaian instruksi/pernyataan yang disusun sedemikian rupa


berdasarkan bahasa tertentu sehingga dapat dieksekusi oleh komputer.
Bahasa pemrograman adalah prosedur/tatacara penulisan program. Ada 2 faktor penting
yaitu sintax (aturan-aturan) dan semantic (makna atau arti).
Pemrograman adalah proses mengimplementasikan urutan langkah untuk
menyelesaikan suatu masalah dengan menggunakan bahasa pemrograman.
Pemrograman terstruktur adalah proses mengimplementasikan urutan langkah untuk
menyelesaikan suatu masalah dalam bentuk program yang memiliki rancang bangun
yang terstruktur dan tidak berbelit-belit sehingga mudah ditelusuri, dipahami dan
dikembangkan oleh siapa saja

Ciri Teknik Pemrograman Terstruktur


a. Mengandung algoritma pemecahan masalah yang tepat, benar, sederhana, standar
dan efektif
b. Memiliki struktur logika dan struktur program yang benar dan mudah dipahami
c. Membutuhkan biaya testing, pemeliharaan dan pengembangan yang rendah
d. Memiliki dokumentasi yang baik

Algoritma pemrograman yang baik memiliki ciri-ciri :


1. Tepat, benar,sederhana,standar dan efektif
2. Logis, terstruktur dan sistematis
3. Semua operasi terdefinisi
4. Semua proses harus berakhir setelah sejumlah langkah dilakukan
5. Ditulis dengan bahasa yang standar dengan format pemrograman agar mudah untuk
diimplementasikan dan tidak menimbulkan arti ganda

Sedangkan standar program yang baik memiliki dasar penilaian sbb :


1. Teknik pemecahan masalah
2. Penyusunan program
3. Perawatan program
4. Standar prosedur

3
Menulis program
Menulis program bukan hanya merupakan suatu bentuk kreativitas saja, tetapi juga
merupakan sebuah penerapan disiplin ilmu secara teliti karena program merupakan
implementasi dari suatu algoritma. Pemrogram adalah orang yang bekerja menyusun
suatu program.

Beberapa kriteria pemrogram yang baik dan berkualitas, yakni :


a. Mampu menyusun algoritma dengan baik
b. Mengusai bahasa dan teknik penulisan program dengan baik
c. Dapat bekerjasama dalam suatu tim kerja
d. Dapat bekerja secara efisien dan tepat waktu

MEMBANGUN PROGRAM

Untuk menyusun program yang besar dan kompleks, pemrogram membutuhkan


tahapan penyusunan yang sistematis dan terpadu, sebagai berikut :
1. Definisi Masalah
2. Analisis Kebutuhan
3. Penyusunan Algoritma
4. Pengkodean/Pemrograman
5. Testing dan Debugging
6. Pemeliharaan
7. Dokumentasi

Definisi Masalah
Tujuannya adalah untuk mendapatkan pengertian atau pemahaman yang lebih
mendalam tentang masalah yang ada sehingga dapat diperoleh asumsi-asumsi yang
baik dan benar guna memecahkan masalah. Ada 2 langkah dalam pendefinisian
masalah :
1. Pahami masalah dengan tepat
2. Identifikasi dan definisi masalah

Analisis Kebutuhan
Tujuan analisis kebutuhan adalah untuk menentukan spesifikasi fungsi, kemampuan
dan fasilitas dari program yang disusun. Analisis kebutuhan juga bermanfaat sebagai
dasar evaluasi setelah program selesai disusun.
Analisis kebutuhan meliputi :
1. Siapa pemakai program ?
2. Pesan-pesan apa yang ingin ditampilkan ?
3. Apakah dibutuhkan password guna menjaga keamanan program?
4. Bagaimana format menu, input, proses dan output yang diinginkan ?
5. Data apa saja yang diinputkan ?
6. Berapa digit angka yang akan diproses ?
7. Rumus apa yang akan digunakan dan bagaimana proses pengolahan dilakukan ?
8. Siapa saja yang membutuhkan informasi yang akan dihasilkan nanti ?
9. Informasi apa yang dibutuhkan oleh masing-masing pemakai ?
10. Apa manfaat dan infromasi yang dihasilkan tersebut ?
11. Kapan informasi tersebut dibutuhkan ?
12. Apa bentuk help yang diinginkan oleh pemakai ?

4
Penyusunan Algoritma
Algoritma dibuat dengan tujuan untuk menyelesaikan masalah. Algoritma tidak dibuat
sekali jadi. Oleh karena itu harus dikaji terus menerus sehingga dapat diperoleh
algoritma yang paling lengkap, tepat, benar dan relevan. Algoritma yang sudah tersusun
juga harus dikoreksi kembali, dan jika terdapat kesalahan maka harus direvisi kembali.

Pengkodean/Pemrograman
Merupakan suatu proses guna mengimplementasikan algoritma dengan menggunakan
suatu bahasa pemrograman. Satu hal yang sangat penting sebelum seorang pemrogram
mulai menyusun program adalah memilih bahasa pemrograman yang akan digunakan.

Secara umum, ada 4 kelompok bahasa pemrograman :

1. Bahasa aras rendah (low level language)


Merupakan bahasa pemrograman yang berorientasi pada mesin. Pemrograman yang
menggunakan bahasa ini harus dapat berfikir berdasarkan logika mesin komputer,
sehingga bahasa ini dinilai kurang fleksibel dan sulit untuk dipahami. Contohnya
adalah bahasa assembly

2. Bahasa aras menengah (midle level language)


Merupakan bahasa pemrograman yang menggunakan aturan-aturan gramatikal
dalam penulisan ekspresi atau pernyataan dengan standar bahasa yang mudah
dipahami oleh manusia serta memiliki instruksi-instruksi tertentu yang dapat
langsung diakses oleh komputer. Contohnya bahasa C

3. Bahasa aras tinggi (high level language)


Bahasa aras tinggi merupakan bahasa pemrograman yang memiliki aturan-aturan
gramatikal dalam penulisan ekspresi atau pernyataan dengan standar bahasa yang
dapat dipahami secara langsung oleh manusia. Contohnya bahasa Pascal, Fortran,
Cobol, Basic dan lain-lain.

4. Bahasa berorientasi object (object oriented language)


Merupakan bahasa pemrograman yang mengandung kapsul-kapsul yang berisi
fungsi-fungsi untuk menyelesaikan suatu masalah. Dengan bahasa ini pemrograman
tidak lagi harus menuliskan secara detail semua pernyataan dan ekspresi pada bahasa
aras tinggi, melainkan cukup dengan memasukkan kriteria-kriteria yang dikehendaki
saja dan kemudian akan menggunakan kapsul-kapsul tersebut untuk memecahkan
masalah tersebut. Contohnya adalah bahasa C++, Visual FoxPro, Visual Basic,
Visual Delphi, Visual Java, dsb.

Agar komputer dapat memahami program yang disusun dengan suatu bahasa
pemrograman, maka dibutuhkan suatu penerjemah, yaitu interpreter dan compiler.
1. Interpreter
Berasal dari kata to interpret yang berarti menerjemahkan atau mengartikan.
Interpreter merupakan penerjemah bahasa pemrograman yang menerjemahkan
instruksi demi instruksi pada saat eksekusi program. Pada saat menerjemahkan,
interpreter akan memeriksa sintaksis leksikal dan semantik setiap instruksi program.
Jika ditemukan kesalahan sintaks (sintax error) maka interpreter akan menampilkan
pesan kesalahan dan proses eksekusi program akan langsung berhenti. Berikut
adalah cara kerja Interpreter :

5
Machine Execute Output
language

Data

2. Compiler
Berasal dari kata to compile yang berarti menyusun, mengumpulkan dan
menghimpun. Compiler merupakan penerjemah bahasa pemrograman yang
menerjemahkan instruksi-instruksi dalam satu kesatuan modul kedalam bahasa
mesin (object program). Kemudian object program akan mengalami proses linking
yang berfungsi untuk menggabungkan modul tersebut dengan modul lain yang
berkaitan, seperti data tentang karakter mesin, file-file pustaka atau object program
yang berkaitan dengan object program tersebut sehingga dihasilkan suatu file
execute program yang akan dieksekusi oleh komputer. Berikut adalah cara kerja
compiler.

Machine Linker
language
Executable

Data Execute

Output

Sistematika Penulisan Program


Secara umum, sistematika pokok penulisan program terdiri dari dari : inisialisasi,
input, proses, output.

Contoh : Buatlah program untuk menghitung harga premium dan solar bila diketahui
banyaknya bahan bakar yang dibeli 10,5 liter. Sedangkan harga premium liternya
adalah Rp. 4,500 dan harga solar per liternya adalah Rp. 4,200. Tampilan yang
diinginkan adalah jumlah bahan bakar yang dibeli, harga 10,5 liter premium dan harga
10,5 liter solar.

6
Inisialisasi : Rem Program menghitung harga bahan bakar
Input : Liter = 10,5
Proses : Premium = Liter * 4500
Solar = Liter * 4200
Output : Cetak Liter, Premium, Solar
End

Testing dan Debungging


Testing adalah proses mengeksekusi program secara intensif untuk menemukan
kesalahan, sedangkan Debugging adalah saat menemukan kesalahan sampai kesalahan
itu diperbaiki sehingga tidak ada kesalahan lagi.

Dokumentasi
Dokumentasi program merupakan catatan kegiatan pemrograman yang dimulai dari
saat program dibuat sampai program diimplementasikan, dengan tujuan agar program
dapat diubah sewaktu-waktu oleh pemrogram itu sendiri maupun oleh orang lain.

Pemeliharaan
Program yang sudah selesai disusun pasti membutuhkan pemeliharaan atau perawatan
yang meliputi :
 Penambahan atau peningkatan atau perbaikan
 Adaptasi program dengan produk perangkat keras atau perangkat lunak yang baru
 Pembentukan terhadap kesalahan yang timbul

7
PENYAJIAN ALGORITMA

Secara garis besar algoritma dapat disajikan dengan dua teknik yaitu teknik tulisan/teks
dan teknik gambar. Teknik tulisan/teks biasanya menggunakan English Structure atau
Pseudocode. Basis dari English Structure adalah bahasa Inggris, tetapi juga dapat
ditulis dalam bahasa Indonesia. Sedangkan teknik gambar biasanya menggunakan
metode structure chart, hierarchy plus input-process-output, flowchart dan Nassi
Schneiderman chart. (pembahasan hanya pada flowchart).

Penulisan Teks Algortima

Pada dasarnya teks algoritma selalu disusun oleh tiga bagian/blok, yakni :
 Judul algoritma
 Kamus dan
 Algoritma.

Setiap blok disertai dengan komentar untuk memperjelas maksud teks yang dituliskan.
Komentar adalah kalimat yang diapit oleh tanda kurung krawal {} atau kurung buka
dan asterisk dan asterisk kurung tutup (* *)

JUDUL
{penjelasan tentang algoritma, yang berisi uraian singkat mengenai apa yang dilakukan
oleh algoritma}

KAMUS
{semua nama yang dipakai, meliputi tipe, nama tetapan, nama peubah, nama prosedur
dan nama fungsi yang didefinisikan}

ALGORITMA
{semua langkah/aksi algoritma dituliskan disini}

Contoh : Algoritma menghitung luas segitiga.

HIT_LUAS_SEGITIGA
{menghitung luas segitiga untuk panjang dan tinggi tertentu. Panjang alas (a) dan tinggi
segitiga (t) dibaca dari piranti masukan. Luas segitiga adalah L=1/2 at}

KAMUS
a : real {panjang alas segitiga, dalam satuan cm }
t : real {tinggi segitiga, dalam satuan cm }
L : luas {luas segitiga, dalam satuan cm }

ALGORITMA
input(a,t)
L a*t/2
output(L)

8
Terjemahan algoritma kedalam Program Pascal dan C :

Pascal :

Program HIT_LUAS_SEGITIGA;
{menghitung luas segitiga untuk panjang segitiga dan tinggi tertentu. Panjang alas (a)
dan tinggi segitiga (t) dibaca dari piranti masukan. Luas segitiga adalah L=1/2 at}

{ KAMUS }
Var
a : real; {panjang alas segitiga, dalam satuan cm}
t : real; {tinggi segitiga, dalam satuan cm}
L : real; {luas lingkaran, dalam satuan cm}

{ ALGORITMA }
Begin
write(Ketikkan panjang alas segitiga : );readln(a);
write(Ketikkan tinggi segitiga : );readln(t);
L := a*t/2
writeln(Luas segi tiga = , L);
End.

C:
/* PROGRAM HIT_LUAS_SEGITIGA */
/* menghitung luas segitiga untuk panjang segitiga dan tinggi tertentu. Panjang alas (a)
dan tinggi segitiga (t) dibaca dari piranti masukan. Luas segitiga adalah L=1/2 at */

#include <stdio.h>
Main()
{
/* KAMUS */
float a; {panjang alas segitiga, dalam satuan cm}
float t; {tinggi segitiga, dalam satuan cm}
float L; {luas lingkaran, dalam satuan cm2}
/* ALGORITMA */
printf(Ketikkan panjang alas segitiga : ); scanf(%f, &a);
printf(Ketikkan tinggi segitiga : ); scanf(%f, &t);
L = a*t/2
printf(Luas segi tiga = %f \n, L);
}

Beberapa hal penting yang harus diketahui dari bahasa C :


1. Bahasa C bersifat case sensitive. Artinya bahasa C membedakan huruf besar (kapital)
dengan huruf kecil . Nama yang ditulis dengan huruf besar dianggap berbeda kalau
ditulis dengan huruf kecil).

Misalnya :
N tidak sama dengan n
nama_orang tidak sama dengan NAMA_ORANG
HitKar tidak sama dengan hitkar

9
Berbeda dengan Pascal, Pascal tidak memberdakan nama yang ditulis dengan huruf
besar dan huruf kecil. Jadi :
N sama dengan n
nama_orang sama dengan NAMA_ORANG
HitKar sama dengan hitkar

2. Dalam bahasa C, kamus yang didefinisikan diluar sebelum kata Main() diaggap
sebagai kamus global, artinya semua nama yang didefinisikan didalam kamus akan
dikenal diseluruh bagian program, termasuk didalam fungsi dan prosedur yang
digunakan. Apabila kamus dididefinisikan di dalam main(), maka nama didalam
kamus hanya dikenal oleh program utama saja dan tidak dikenal oleh fungsi atau
prosedur.

3. Dalam bahasa C komentar ditulis diantara /* dan */.


Sedangkan dalam bahasa Pascal komentar dapat ditulis diantara { dan } atau
diantara (* dan *).

Flowchart

Adalah suatu metode untuk menggambarkan tahap-tahap pemecahan masalah dengan


merepresentasikan simbol-simbol tertentu yang mudah dimengerti, mudah digunakan
dan standar. Tujuan utama penggunaan flowchart adalah untuk menggambarkan suatu
tahap penyelesaian masalah secara sederhana, terurai, rapi dan jelas dengan
menggunakan simbol-simbol standar.
Dalam penulisan flowchart dikenal dua model, yaitu sistem flowchart dan program
flowchart.

10
1. Sistem Flowchart
Merupakan diagram alir yang menggambarkan suatu sistem peralatan komputer
yang digunakan dalam proses pengolahan data serta hubungan antar peralatan
tersebut. Berikut adalah gambar simbol-simbol standar yang banyak digunakan pada
penggambaran sistem flowchart seberta contoh penggunaannya.

Kartu plong/ Punched On Line


Pita magnetik
keyboard Paper Tape Storage / VDU

Input/Output Magnetic Drum Process Magnetic Disc

Off-Line
Proses sortir Proses merge Arus/alir
Storage

Contoh penerapan sistem flowchart

11
2. Program Flowchart
Merupakan diagram alir yang menggambarkan urutan logika dari suatu
prosedur pemecahan masalah. Berikut adalah gambar dari simbol-simbol
standar yang banyak digunakan pada program flowchart.

Proses Input Output Keterangan

Pengujian Pemberian Nilai Awal/Akhir Program


Awal

Konektor pada suatu Konektor pada Arah/alir/arus


halaman halamain lain

Pada penggambaran program flowchart terdapat dua jenis metode, yaitu


Conceptual Flowchart dan Detail Flowchart. Conceptual flowchart
menggambarkan tentang alur dari suatu pemecahan masalah secara global saja,
sedangkan detail flowchart menggambarkan alur pemecahan masalah secara
rinci.

Contoh Proses Conceptual Flowchart

12
Contoh Detail Flowchart

Start

Write(Berapa data : );readln(N);

Jml:=0

For K:=1 to N do

Readln(bil)

Jml:=jml+bil

Writeln(Jumlah bil : ,jml);

Start

13
TIPE, NAMA DAN HARGA

TIPE
Pada umumnya, program komputer bekerja dengan memanipulasi objek (data) didalam
memory. Objek yang akan diprogram bermacam-macam jenis atau tipenya, misalnya
bilangan, karakter, string, dan rekaman (record). Suatu tipe menyatakan pola penyajian
data dalam komputer. Kita harus mendefinisikan tipe data yang dapat diprogramkan
dengan komputer.

Mendefinisikan tipe data berarti :


a. Menentukan nama tipe data itu
b. Mendefinisikan ranah (domain) nilai yang dapat dipunyai oleh nama tersebut
c. Perjanjian tentang cara menulis tetapan (constanta) bertipe tersebut
d. Operator yang dapat dioperasikan terhadap objek bertipe tersebut

Tipe data dapat dikelompokkan menjadi 2 macam yakni : tipe data dasar dan tipe
bentukan. Tipe data dasar adalah tipe data yang langsung dapat dipakai, sedangkan tipe
data bentukan dibentuk dari tipe dasar atau dari tipe bentukan lain yang sudah
didefinisikan.

Tipe Dasar
Yang termasuk kedalam tipe dasar adalah :
a. Bilangan logik (boolean)
b. Bilangan bulat :
c. Bilangan riil, dan
d. Karakter

Bilangan Logik
Bilangan logik dinamakan juga boolean (dari ilmuwan matematika Robert Boole).
Bilangan logik hanya mengenal dua nilai, yakni : true (1) atau false (0).
Tipe bilangan logik didefinisikan sebagai berikut :
Nama : boolean
Ranah : true, false
Tetapan : true, false
Operator : not, and, or, xor
Hasil operasi bilangan logik juga menghasilkan bilangan logik

Tabel kebenaran (Truth Table)

A Not A
True False
False True

14
A B A and B A or B A xor B

True True True True False

True False False True True

False True False True True

False False False False False

Bilangan Bulat
Bilangan bulat atau integer adalah bilangan yang tidak mengandung pecahan desimal,
misalnya : 0, 4, 20, 56, 75 dsb.
Tipe bilangan bulat didefinisikan sebagai berikut :
Nama : integer
Ranah : I
Tetapan : 78 -14 7654 0 5 9991
Operator : (a) Operator matematika
+ (tambah)
- (kurang)
* (kali)
div (bagi)
mod (sisa hasil bagi)

Contoh :
3 + 10 hasil : 13
87 11 hasil : 76
5 * 10 hasil : 50
10 div 3 hasil :3
10 mod 3 hasil :1

Operator : (b) Operator relasional/perbandingan


< (lebih kecil)
(lebih kecil atau sama dengan)
> (lebih besar)
(lebih besar atau sama dengan)
= (sama dengan)
(tidak sama dengan)
Contoh :
3 < 8 hasil : true
75 > 100 hasil : false
9 45 hasil : true
17 = 17 hasil : true
98 25 hasil : true

15
Bilangan Riil
Tipe bilangan riil didefinisikan sebagai berikut :
Nama : Real
Ranah : R
Tetapan : 0. 18. 23.1 0.333 9E-6 -3.0085
Operator : (a) Operator matematika
+ (tambah)
- (kurang)
* (kali)
/ (bagi)

Contoh :
3.6 + 2.3 hasil : 5.9
8.0 2.8 hasil : 5.2
10/3 hasil : 3.333..
7.2 * 0.5 hasil : 3.6

Operator : (b) Operator relasional/perbandingan


< (lebih kecil)
(lebih kecil atau sama dengan)
> (lebih besar)
(lebih besar atau sama dengan)
(sama dengan)

Contoh :
0.03 < 0.3 hasil : false
8.0 5.0 hasil : true
3.0 3.5 hasil : true

Karakter
Tipe karakter didefinisikan sebagai berikut :
Nama : char
Ranah : (0, 1, .. , 9, a, b, .. , z, A, B, .. , Z, , .,
#, @, dan karakter khusus lainnya)
Tetapan : a Y - 9 $
Operator : Operator relasional/perbandingan
= (sama dengan)
(tidak sama dengan)
< (lebih kecil)
(lebih kecil atau sama dengan)
> (lebih besar)
(lebih besar atau sama dengan)

Contoh :
a = a hasil : true
T = t hasil : false
y Y hasil : true
Q > Z hasil : false
m < z hasil : true

16
Tipe Bentukan

Tipe bentukan dibentuk dari beberapa elemen yang bertipe dasar atau dari tipe
bentukan lain yang sudah didefinisikan sebelumnya. Tipe bentukan disebut juga dengan
tipe terstruktur. Tipe bentukan diberi nama oleh pemrograman.
Ada dua jenis tipe bentukan, yakni String dan Rekaman (record)

1. String
String adalah deretan karakter dengan panjang tertentu.
Tipe string didefinisikan sebagai berikut :
Nama : string
Ranah : deretan karakter yang didefinisikan pada ranah
karakter
Tetapan : BANDUNG Ganesha Jurusan Sistem Komputer
ABC 7865
Semua tetapan string harus diapit oleh tanda petik tunggal

Operator : (a) Operator penggabungan (concatenation)


+
(b) Operator relasional/perbandingan
= (sama dengan)
(tidak sama dengan)
< (lebih kecil)
(lebih kecil atau sama dengan)
> (lebih besar)
(lebih besar atau sama dengan)

Contoh :
a + b = ab
1 + 2 = 12
Sistem + Komputer = Sistem Komputer
aa + bb+cc = aa bbcc
abcd = abc hasil : false
aku < AKU hasil : true

String yang disusun oleh gabungan numerik dan karakter string dinamakan
dengan alfanumeric

2. Rekaman
Sebuah rekaman disusun oleh satu atau lebih field. Tiap field berisi data dari tipe
dasar tertentu atau tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama
rekaman ditentukan oleh pemrogram. Sebuah rekaman dengan tiga field dapat
digambarkan sbb :

field 1 field 2 field 3

17
Berikut adalah contoh beberapa cara untuk mendefinisikan tipe data rekaman :

1. Didefinisikan tipe bentukan yang menyatakan data mahasiswa yang terdiri atas
NIM, nama dan usia. Misalkan tipe bentukan ini diberi nama MHS. Cara
mendefinisikan adalah :
Type MHS : record <NIM : integer, nama : string, usia : integer>

Jika dideklarasikan M adalah peubah bertipe MHS, maka cara mengacu tiap
field pada rekaman M adalah :
M.NIM
M.nama
M.usia
Nama : MHS
Ranah : sesuai dengan ranah masing-masing field
Tetapan : <0910453084, Samurya Rahmadhoni,19>
<0910453058, Hafis Fajri, 18>
Operator : Tidak ada operator untuk MHS tetapi kita dapat melakukan :
- operasi integer terhadap MHS.NIM
- operasi string pada MHS.nama
- operasi integer pada usia

2. Titik dalam koordinat kartesian dinyatakan sebagai (x,y), dengan x adalah nilai
arah sumbu X dan y adalah nilai dalam arah sumbu Y, x dan y R. Kita dapat
menyatakan titik sebagai tipe bentukan dengan x dan y sebagai fieldnya sbb :
Type Titik : record <x : real, y : real>

Jika dideklarasikan A adalah peubah bertipe Titik, maka cara mengacu tiap field
pada rekaman A adalah :
A.x
A.y
Tipe titik didefinisikan sebagai berikut :
Nama : Titik
Ranah : (real, real)
Tetapan : <2.7, 15.2> < -1.4, -6.5>
Operator : operator riil terhadap A.x dan A.y

3. Didefinisikan tipe bentukan yang mewakili tanggal dalam kalender Masehi. Hari
dinyatakan sebagai tanggal, bulan dan tahun. Misalkan tipe tersebut diberi
nama TGL.
type tanggal : integer[1..31]
type bulan : integer[1..12]
type tahun : integer > 0
type TGL : record <tangg : tanggal,
bul : bulan
thn : tahun>

Jika DATE adalah peubah bertipe TGL, maka cara mengacu tiep field adalah :
DATE.tang [1..31]
DATE.bul [1..12]
DATE.thn > 0

18
Tipe TGL didefinisikan sebagai berikut :
Nama : TGL
Ranah : Sesuai ranah masing-masing field
Tetapan : <12, 7, 1997> <31, 12, 2008> <29, 2, 2009>
Operator : bergantung tipe tiap field

4. Jadwal keberangkatan kereta api

type jam : integer[0..23]


type menit : integer[0..59]
type WAKTU : record ( j : jam, m : menit)
type JADWAL_KA : record <NoKA : string,
KotaAsal : string,
JamBerangkat : WAKTU,
KotaTujuan : string,
JamTiba : WAKTU>

Jika JKA peubah berttipe JADWAL_KA, maka cara mengacu tiap-tiap field
adalah :
JKA.NoKA
JKA.KotaAsal
JKA.JamBerangkat.j
JKA.JamBerangkat.m
JKA.KotaTujuan
JKA.JamTiba.j
JKA.JamTiba.m

Tipe JADWAL_KA didefinisikan sebagai berikut :


Nama : JADWAL_KA
Ranah : Sesuai ranah masing-masing field
Tetapan : <KA01, Jakarta, <17,2>, Seamarang, <05,54>>
<KA02, Bandung, <9,40>, Solo, <14,10>>
Operator : sesuai operator masing-masing tipe field

NAMA
Setiap objek dialam mempunyai nama. Nama itu didefinisikan oleh manusia agar objek
tersebut mudah diidentifikasi dan dibedakan dari objek yang lain. Didalam program,
nama dipakai sebagai pengidentifikasi sesuatu dan pemrogram mengacu sesuatu
itu melalui namanya. Karena itu tiap nama haruslah unik, tidak boleh ada dua buah
nama yang sama.

Didalam program sesuatu yang diberi nama dapat berupa :


1. Peubah (variabel)
2. Tetapan/konstanta
3. Tipe
4. Nama fungsi
5. Nama prosedur

19
Sebuah nama memiliki aturan penulisan, yakni :
1. Nama harus dimulai dengan huruf alfabet
2. Karakter penyusun nama hanya boleh alfabet, angka dan _ (underscore).
Namun tidak boleh menggunakan simbol/karakter khusus lainnya seperti
operator, aritmatika, operator relasional, dan karakter khusus lainnya.
3. Karakter didalam nama tidak boleh dipisah dengan spasi. Spasi dapat diganti
dengan karakter _ (underscore)
4. Panjang nama tidak dibatasi

Berikut adalah contoh penamaan :

Penamaan yang salah Penamaan yang benar


6Titik Titik6 atau Titik_6
Nilai Ujian NilaiUjian atau Nilai_Ujian
PT-1 PT_1 atau PT1
hari@ Hari
A 1 A1

Berikut ini adalah Konversi Nama, Tipe dan Operator kedalam Bahasa Pascal dan
C.

KELOMPOK ALGORITMA PASCAL C


1. Tipe Dasar Boolean boolean Tidak ada *)
Integer integer Int
Real real Float
Char char Char
String string Tidak ada **)
Record record Struct
2. Operator + + +
- - -
* * *
/ / /
div div /
mod Mod %
< < <
<= <=
> > >
>= >=
= = ==
<> !=
not not !
and and &&
or or ||
xor xor Tidak ada

20
KELOMPOK ALGORITMA PASCAL C
3. Lain-lain const const #define
type type typedef
true true tidak ada
false false tidak ada

*) Bahasa C tidak menyediakan type boolean yang eksplisit. Namun tipe Boolean
dapat didefinisikan dengan typedef sebagai berikut :
typedef enum (false=0, true=1) boolean;

Bahasa C tidak menyediakan tipe string secara eksplisit. Nama peubah yang bertipe
string didefinisikan sebagai char disertai panjang string tersebut :
Char nama_peubah[n]

Dengan n adalah panjang string (termasuk didalmnya karakter null yang


ditambahkan secara otomatis) yang akan ditampung oleh nama_peubah.
Contoh :
char kota[20]

Panjang maksimum string yang dapat ditampung oleh peubah kota adalah
19 + karakter null. Dalam bahasa Pascal, string yang tidak disertai dengan panjang
dianggap panjangnya 255.

HARGA
Harga adalah nilai besaran yang sudah dikenal. Harga berupa nilai yang dikandung oleh
nama peubah atau nama tetapan. Harga yang dikandung oleh peubah dimanipulasi
dengan cara : mengisikannya ke peubah lain yang bertipe sama, dipakai untuk
perhitungan, atau dituliskan ke piranti keluaran.

Beberapa cara pengisian harga ke dalam nama peubah :


1. Penugasan (assignment)
adalah mengisikan sebuah harga pada nama peubah secara langsung. Aksi
penugasan dilambangkan dengan tanda . Harga yang diberikan dapat
beru-pa tetapan, harga nama peubah lain, atau nilai sebuah ekspresi.
Notasi algoritma untuk penugasan :
Nama tetapan (harga tetapan diisikan kedalam nama)
Nama1 nama2 (harga nama2 disalin kenama1)
Nama ekspresi (hasil perhitungan diisikan kedalam nama)

Contoh :
Dalam Kamus sudah didefinisikan nama K bertipe integer, Jarak bertipe real,
Ketemu bertipe boolean dan NamaKota bertipe string. Maka cara pengisian
nama peubah tersebut dengan harga tetapan adalah :

21
ALGORITMA
K 5
Jarak 0.03
Ketemu False
NamaKota Bandung

Dari contoh penugasan ini berarti elemen memory yang masing-masing


bernama K, Jarak, Ketemu, dan NamaKota diisi berturut-turut 5, 0.03, false,
Bandung. Kadaan dimemory diperlihatkan pada gambar berikut ini :

.
.
K 5

Jarak 0.03

Ketemu False

NamaKota Bandung

.
.

Pembacaan Harga dari Piranti Masukan


Harga untuk nama dapat diisi dari piranti masukan, misalnya papan ketik. Mengisi
harga dari piranti masukan dinamakan operasi pembacaan data. Istilah baca ini timbul
karena komputer seakan-akan membaca harga yang diberikan oleh pemakai. Dalam
algoritma, pembacaan harga untuk nama peubah dilakukan dengan perintah input.

Notasi Algoritma untuk pembacaanharga dari piranti masukan adalah :

ALGORITMA
Input(nama1, nama2, ... , namaN)

Dengan syarat nama1, nama2, .. , namaN adalah peubah dan tidak boleh tetapan.

Contoh :
Misalkan M, a1, a2, a3 bertipe real, nama_kota dan nama_mhs bertipe string, NIP dan
nilai bertipe integer, dan P adalah rekaman. Cara pembacaan harga untuk semua peubah
adalah :
ALGORITMA
input(M)
input(a1, a2, a3)
input(nama_kota)
input(nama_mhs, NIP, nilai)
input(P.x, P.y)

22
Ekspresi
Suatu harga dipakai untuk proses transformasi menjadi keluaran yang diinginkan.
Transformasi harga menjadi keluaran dilakukan melalui suatu perhitungan (komputasi).
Cara perhitungan itu dinyatakan dengan suatu ekspresi. Suatu ekspresi terdiri dari
operand dan operator. Operand adalah harga yang dioperasikan dengan operator
tertentu. Dikenal 3 macam ekspresi, yakni ekspresi numerik, ekspresi boolean dan
ekspresi relasional.

Menuliskan harga ke piranti keluaran


Harga yang disimpan didalam memory dapat ditampilkan ke piranti keluaran (misalnya
layar peraga atau printer). Perintah penulisan harga adalah dengan output.

Notasi penulisan harga :

ALGORITMA
output(nama1, nama2, .. , namaN)
output(tetapan)
output(nama, tetapan, ekspresi)
output(ekspresi)
Nama1, nama2, .. , namaN dapat berupa nama peubah atau nama tetapan.

Contoh :
Misalkan A, B, nama_mhs, Nobp, dan nilai telah didefinisikan tipenya di dalam kamus.
Algoritma untuk mencetak harga yang disimpan oleh nama-nama tersebut adalah :

ALGORITMA
output(100)
output(A)
output(A)
output(Program Studi Sistem Komputer)
output(Nilai A = ,A)
output(nama_mhs, nobp, nilai)
output(A+B)
output(Nilai seluruhnya , A+B/2 * 10)

Tabel Konversi Penugasan, Pembacaan, Penulisan ke dalam Bahasa Pasca dan C

KELOMPOK ALGORITMA PASCAL C


Penugasan := =
read
Pembacaan input scanf
readln
write
Penulisan output Printf
writeln

23
IMPLEMENTASI ALGORITMA

Langkah-langkah penyelesaian masalah pada algoritma harus dapat dikerjakan oleh


komputer. Implementasi algoritma pada matakuliah ini digunakan dengan Bahasa
Pemrograman Pascal dengan sistemnya Turbo Pascal 7.0. Pascal adalah bahasa
pemrograman tingkat tinggi untuk kegunaan umum (general-purpose). Nama Pascal
dibuat untuk menghormati Baise Pascal, seorang ahli matematika dan filsafat terkenal
dari Prancis yang hidup pada abad ke-17.

Struktur Program Pascal

1. Judul program (opsional)


Format : { judul program } atau program_nama program;

2. Deklarasi program:
Var {Variabel program}
Const {Constanta program}
Label {Label}
Funct {Function}
Procedure {Prosedur program}

Catatan :
Deklarasi program bersifat opsional khusus, artinya jika diperlukan maka harus ada
dalam program dan apabila tidak diperlukan maka boleh tidak dicantumkan.
Deklarasi program termasuk identifier (pengenal), yaitu kata-kata yang diciptakan
oleh pemrogram untuk mengidentifikasi sesuatu.

Syarat identifier:
a) Harus diawali oleh alphabet
b) Huruf besar/ kecil yang digunakan dianggap sama
c) Penyusun dari sebuah identifier tidak boleh berupa: tanda baca, tanda relasi,
symbol arithmatik, karakter khusus atau reserved word
d) Tidak boleh dipisahkan dengan spasi, apabila hendak dipisahkan maka
menggunakan tanda ( _ )
e) Panjang identifier tidak dibatasi tetapi sebaiknya gunakan se-efektif mungkin.

3. Program Utama
Diawali dengan Begin dan diakhiri dengan End.

24
Tipe data dalam Turbo Pascal

Tipe data berfungsi membatasi jangkauan data yang akan dilaksanakan.


Macam-macam tipe data:
a) Tipe data Standard, terdiri atas :
- Ordinal
- Non-ordinal
b) Tipe data Terstruktur
c) Tipe data Pointer

Tipe Data Standard


I. Tipe Ordinal
Pada tipe data ini akan berlaku operasi-operasi:
- Predesessor (Pred), berfungsi memberikan nilai kembalian berupa nilai
predesessor (urutan sebelumnya) dari suatu nilai ordinal.
- Successor (Succ), berfungsi memberikan nilai successor (urutan
berikutnya) dari suatu nilai ordinal.

a) Tipe Integer
Operator-operator yang berlaku pada tipe data integer, yaitu :
- Operator arithmatik : +, - , *, /, div, mod
- Operator logic : <, = , > , <= , >= , <>

Tipe data integer masih dibagi menjadi 5 tipe:


Shortint (1 byte bertanda) Byte (1 byte tak bertanda)
Integer (2 byte bertanda) Word (2 byte tak bertanda)
Longint (4 bytebertanda)

Catatan : Semua tipe integer adalah tipe Ordinal.

b) Tipe Real
Dibagi menjadi 5 macam, yaitu :
Real (6 byte) Extended (10 byte)
Single (4 byte) Comp (8 byte)
Double (8 byte)

c) Tipe Char (Karakter)


Char adalah semua tombol yang terdapat pada keyboard atau lebih
lengkapnya semua karakter yang terdapat pada kode ASCII.

Catatan : Apabila char ingin dijadikan sebagai konstanta maka karakter yang
dimasukkan harus diapit dengan tanda kutipsatu. Dan apabila karakter itu
berupa tanda kutip satu maka harus diapit dengan dua tanda kutip satu.

d) Tipe Boolean
Mempunyai nilai benar atau salah. Operator yang penghubung untuk tipe
Boolean adalah : = , <> , > , < , >= , <= , IN
Boolean akan menghasilkan False jika nilai = 0 dan akan menghasilkan True
jika nilai = 1.

25
e) Tipe Enumerated (terbilang)
Bentuk umum :
Type
Nama = (Pengenal1, pengenal2,, pengenaln);

Contoh:
Type
Sumbar = (Padang, Pariaman, Bukittinggi, Solok) ;

Sehingga dengan fungsi berikut :


Ord(Padang) = 0
Ord(Pariaman) = 1
Dan seterusnya..

f) Tipe Subrange
Bentuk umum :
Constanta1..Constanta2

Contoh :
0..99 ;
-128..127 ;

II. Real
Ada beberapa macam tipe real
1. Single
2. Real
3. Double
4. Extended

Contoh : Program menghitung Luas Segitiga


Rumus : Luas = x alas x tinggi

(* Program menghitung Luas Segitiga *)


Program segitiga;
Uses crt;
Var
alas,tinggi : integer;
luas : real;
begin
clrscr;
writeln(Menghitung Luas Segitiga);
writeln(--------------------------------);
write(Inputkan Alas : );readln(alas);
write(Inputkan Tinggi : );readln(tinggi);
writeln;
luas:=0.5*alas*tinggi;
writeln(Luas segitiga adalah : ,luas:2);
repeat until keypressed;
end.

26
STRUKTUR PEMROGRAMAN/ STRUKTUR KONTROL

Ada tiga macam struktur pemrograman yaitu :


1. Runtutan / Berurutan /Sequential
2. Seleksi / Pemilihan Kondisi / Conditional
3. Perulangan / Repetition/ Looping

1. Sequential / Runtutan
Berfungsi mengontrol program sehingga berjalan secara berurutan. Program dibaca
dari mulai perintah yang pertama dituliskan kemudian turun ke perintah selanjutnya
demikian seterusnya sampai pada akhir perintah.

Struktur algoritma ini memiliki karakteristik :


a. Tiap aksi dikerjakan satu persatu
b. Tiap aksi dilaksanakan tepat satu kali, tidak ada aksi yang diulang
c. Urutan aksi yang dilaksanakan pemroses sama dengan urutan aksi sebagaimana
tertulis dalam algoritmanya
d. Akhir dari aksi terakhir merupakan akhir algoritma

Contoh :

Program_Selisih_Jam;
Uses crt;
var j1,j2,m1,m2,d1,d2,B1,B2,J,M,S,Delta,sisa: integer;
begin
clrscr;
write('Baca jam mulai =');readln(j1,m1,d1);
writeln;
write('Baca jam selesai =');readln(j2,m2,d2);
B1:= 3600 * j1 + 60 * m1 + d1;
B2:= 3600 * j2 + 60 * m2 + d2;
Delta:= B2 - B1;
J:= Delta div 3600;
sisa:= Delta mod 3600;
M:= sisa div 60;
S:= sisa mod 60;

27
write('Selisih jam =',J);
writeln;
write('Selisih menit =',M);
writeln;
write('Selisih detik =',S);readln;
end.

Hasil Run program:


Baca jam mulai = 3 23 29
Baca jam selesai = 4 30 27
Selisih jam = 1
Selisih menit = 6
Selisih detik =58
Catatan : Tanda (:= ) disebut sebagai Operator Penugasan.

2. Seleksi / Pemilihan Kondisi / Conditional


Sistem kontrol ini memungkinkan programmer untuk membuat program yang dapat
memilih satu langkah di antara sejumlah langkah untuk dikerjakan.
Dalam Turbo Pascal disediakan 2 buah struktur kontrol seleksi, yaitu:
a. Struktur IFTHEN..
b. Struktur CASEOF

a). Struktur IF
Merupakan struktur kontrol di mana suatu aksi dilaksanakan berdasarkan
kondisi logikanya (benar atau salah).
Bentuk umum :
(1) if (kondisi) then aksi ;
{Jika kondisi benar maka aksi akan dilaksanakan dan sebaliknya }

T
Kondisi
Y

Aksi

(2) if (kondisi) then aksi1 else aksi2 ;


{Jika kodisi benar maka aksi1 diaksanakan, jika kondisi salah
maka aksi2 akan dilaksanakan}

T
Kondisi

Y
Aksi2
Aksi1

28
(3) if (kondisi1) then aksi1 else
if (kondisi2) then aksi2 else
..
if (kondisi-n) then aksi-n ;

{ Jika kondisi1 benar maka aksi1 dilaksanakan tanpa membaca


kondisi2 dan seterusnya. Jika kondisi1 salah maka aksi2
dilaksanakan tanpa membaca aksi3 dan selanjutnya. Demikian
seterusnya}

(4) if (kondisi1) then aksi1 ;


if (kondisi2) then aksi2 ;
.
if (kondisi-n) then aksi-n ;

{Masing-masing kondisi akan dibaca dan aksi akan tetap


dilaksakan. Jadi masing-masing struktur terpisah satu dengan
yang lain}

Contoh program :

(1) program_menghitung_akar_kwadrat:
uses crt;
var A,B,C:integer;
x1,x2,D:real;
begin
clrscr;
write('Baca koofisien:');readln(A,B,C);writeln;
writeln(A,'x*x + (',B,') x +',C);
if A=0 then writeln('Bukan persamaan kwadrat') else
begin
D:=(B*B) - (4*A*C);
writeln('Determinannya :',D:2:2);readln;
if D>0 then
begin
writeln('Persamaan kwadrat mempunyai 2 akar yang berbeda');

x1:= (-B + sqrt(D))/(2*A);


x2:= (-B - sqrt(D))/(2*A);
writeln('Akar-akarnya adalah:',x1:2:2,'dan',x2:2:2);
end else
if D=0 then
begin
writeln('Persamaan kwadrat mempunyai akar yang sama'
x1:= -B/(2*A);
x2:= -B/(2*A);
writeln('Akar-akanya adalah:',x1:2:2);
end else

29
writeln('Tidak memiliki akar riil');
end;
readln;
end.

Hasil Run Program :


- Baca koofisien : 1 -4 4

1x*x + (-4) x +4
Determinannya : 0.00

Persamaan kwadrat mempunyai akar yang sama


Akar-akanya adalah : 2.00

- Baca koofisien : 1 -5 6

1x*x + (-5) x +6
Determinannya :1.00

Persamaan kwadrat mempunyai 2 akar yang berbeda


Akar-akarnya adalah : 3.00 dan 2.00

- Baca koofisien: 1 3 4

1x*x + (3) x +4
Determinannya :-7.00

Tidak memiliki akar riil

(2) Program_Konversi_nilai:
Uses Crt;
var Nilai : Byte;
begin
clrscr;
write('Baca nilai :');readln(Nilai);
if nilai>=80 then write('Nilai = A') else
if nilai>=65 then write('Nilai = B') else
if nilai>=41 then write('Nilai = C') else
if nilai>=26 then write('Nilai = D') else
write('Nilai = E');
readln;
end.

Hasil Run Program :


Baca nilai : 90 Baca nilai :55
Nilai = A Nilai = C
Baca nilai :75 Baca nilai :25
Nilai = B Nilai = E

30
b). Struktur CASEOF..
Merupakan peluasan dari struktur IF. Karena kalau dalam struktur IF hanya
disediakan dua pilihan (berdasarkan kondisi logikanya) maka dalam struktur
Case ..of dimungkinkan untuk memilih satu pilihan di antara banyak pilihan
yang ada.
Bentuk umumnya :
Case var.pilih of atau Case var.pilih of
Pilih1 : aksi1 ; pilih1 : aksi1 ;
Pilih2 : aksi2 ; pilih2 : aksi2 ;
. ; . ;
pilih-n : aksi-n ; pilih-n : aksi n;
else aksi-n+1
end; end;

Catatan : Ekspresi yang digunakan dalam statemen Case adalah yang


mempunyai tipe ordinal yaitu dengan batas antara (-32768 s/d 32767). Sehingga
tipe lain seperti integer yang bertipe longint, tipe string atau word tidak boleh
digunakan.

Contoh program :
Program_Konversi_nilai2;
Uses Crt;
Var Nilai : integer;
begin
Clrscr;
write('Baca nilai =');readln(Nilai);
Case Nilai of
0..25 : writeln('Nilainya = E');
26..39 : writeln('Nilainya = D');
40..64 : writeln('Nilainya = C');
65..79 : writeln('Nilainya = B');
80..100: writeln('Nilainya = A');
else
writeln('Tidak ada nilai yang dimaksud');
end;readln;
end.

Catatan : Program ini akan memberikan nilai yang sama persis dengan yang
menggunakan struktur IF.

3. Perulangan / Looping / Repetition


Dalam membuat suatu program kadang-kadang diinginkan agar program tersebut
mampu memproses hal yang sama secara berulang-ulang sampai ditemukan suatu
nilai tertentu yang diinginkan atau mencapai batas yang telah ditentukan. Untuk itu
maka Turbo Pascal telah menyediakan suatu struktur perulangan yang memudahkan
untuk melakukan proses tersebut, sehingga kode-kode dalam program menjadi lebih
sederhana. Ada beberapa struktur perulangan, yaitu :

31
- Struktur FORDO
- Struktur WHILEDO
- Struktur REPEATUNTIL

a). Struktur FOR


Ada 2 jenis struktur FOR, yaitu :
- Ascending (naik)
- Descending (turun)
Naik
Format : For count := awal to akhir do aksi/ blok aksi ;
Catatan : - awal <= akhir
- variabel count akan naik satu setelah menyelesaikan aksi
Turun
Format : For count := awal downto akhir do aksi1/ blok aksi ;
Catatan : - awal >= akhir
- variabel count akan turun satu setelah menyelesaikan aksi

Struktur FOR hanya dapat digunakan pada cacah perulangan yang diketahui
(berapa kali perulangan tersebut akan dilakukan).

Contoh program :

Program Latihan: Program Latihan 2:


uses crt; uses crt;
var N,i,j :integer; var N, I, j, data : integer;

begin begin
clrscr; clrscr;
write('Baca nilai : ');readln(N); write(Baca nilai:);
for i:= 1 to N do readln(N);Data:=N;
begin for i:=1 to N do
for j:=1 to i do begin
write(i:3); for j:=1 to N do
writeln; write(data:3);
end; writeln;
readln; data := data -1;
end. end;
end.

Hasil Run Program : Hasi Run Program :


Baca nilai : 7 Baca nilai : 7
1 7
2 2 6 6
3 3 3 5 5 5
4 4 4 4 4 4 4 4
5 5 5 5 5 3 3 3 3 3
6 6 6 6 6 6 2 2 2 2 2 2
7 7 7 7 7 7 7 1 1 1 1 1 1 1

32
b). Struktur WHILE .. DO..

Format : While (kondisi) do Aksi/blok aksi


Kondisi: Ekspresi Boolean
Pengecekan untuk melakukan perulangan dilakukan pada awal proses dan
perulangan akan dikerjakan selama kondisi benar. Oleh karena itu, perlu adanya
suatu proses yang dapat mengontrol kondisi agar dapat menghentikan proses.

Contoh program :

uses crt;
var i:integer;
begin
clrscr;
write('Masukkan angka :');readln(i);
while i<5 do
begin
writeln('Sistem Komputer FMIPA Unand ');
i:=i+1;
end;
readln;
end.

Hasil Run program :


Masukkan angka : 5
Sistem Komputer FMIPA Unand
Sistem Komputer FMIPA Unand
Sistem Komputer FMIPA Unand
Sistem Komputer FMIPA Unand
Sistem Komputer FMIPA Unand

Keterangan :
Program di atas akan dilaksanakan jika angka yang kita masukkan kurang dari
atau sama dengan lima. Dan dalam program di atas yang bertugas menghentikan
perulangan adalah proses i := i+1; sebab jika tidak ada statement itu, apabila
angka yang kita masukkan benar <= 5 maka program akan berulang sampai tak
hingga banyak.

Catatan :
Struktur perulangan while..do dapat digunakan untuk melakukan perulangan
baik yang diketahui maupun yang tidak diketahui jumlah perulangannya.

c). Struktur REPEAT..UNTIL..

Format : Repeat aksi/ blok aksi until (kondisi) ;


(kondisi) di sini berupa Boolean.

33
Perulangan dilakukan terus-menerus hingga diperoleh kondisi bernilai benar.
Dalam hal inipun diperlukan adanya kondisi yang dapat mengontrol program
agar program dapat berhenti namun berbeda dengan while do yang kontrolnya
ditempatkan pada awal proses, maka repeat until kontrolnya diletakkan pada
akhir proses.

Contoh program :

Program contoh_repeat;
Uses crt;
var
n,tot,x : integer;
mean : real;
begin
clrscr;
tot:=0;
n:=0;
write ('Baca data :');readln(x);
repeat
tot:= tot + x;
n:= n + 1;
write('Data ke-,n, : ');readln(x);
until x=0;
end.

Hasil Run Program :


Baca data :12
Data ke-1 : 3
Data ke-2 : 4
Data ke-3 : 5
Data ke-4 : 0
{setelah dimasukkan nol maka pembacaan akan berhenti dan akan kembali ke
menu awal}

34
ARRAY (LARIK)

Larik/Array adalah sekumpulan data yang disimpan dengan nama dan tipe sama. Isi
data didalam larik disebut dengan elemen. Elemen larik dapat diakses melalui
indeksnya. Indeks larik haruslah tipe data dengan tipe ordinal, artinya menyatakan
keterurutan.

Misalnya : sebuah larik bernama A dengan 10 elemen dapat dilukiskan secara logik
sebagai kumpulan kotak yang terurut :

Tiap kotak pada larik diberi indeks integer 1, 2, 3, 4 .. dst. Tiap elemen larik ditulis
dengan notasi A[1], A[2], A[3], A[4], .. dst.

Perbedaan Larik dengan Variabel Biasa : Larik dapat menyimpan sejumlah data,
sedangkan variabel biasa hanya menyimpan satu data.

Misalkan kita akan menyimpan 3 nilai mahasiswa. Kita harus menyediakan 3 variabel
seperti : nilai1, nilai2, nilai3.
Contoh : Nilai1=90, Nilai2=89, Nilai3 =70. Apabila kita akan menyimpan seratus nilai
mahasiswa, tentu kita harus menyediakan 100 pula variabelnya. Hal ini jelas tidak
mungkin. Untuk mengatasi hal ini, kita dapat menyimpan dengan menggunakan
larik/array.

Ada beberapa jenis larik/array :


1. Larik dimensi satu
2. Larik dimensi dua
3. Larik dimensi banyak (dibahas pada kesempatan lain)

Larik Dimensi Satu


Adalah larik dengan satu baris indeks keterurutan. Bentuk pendeklarasiannya :
Nama_larik : array[1 .. n] of type_data

Dimana :
Nama_larik : sama dengan variabel biasa
1 : indeks awal dari larik (indeks pada program Pascal dimulai dengan 1)
.. : menunjukkan range
n : indeks maksimum larik
type_data : tipe data larik

35
Beberapa contoh pendeklarasian larik dimensi satu :

Const M : integer=100;
A : array[1..10] of integer;
Nm_mhs : array[1..50] of string;
Tinggi : array[1..100] of real;
Type mat_kul : record (kode : string,
nm_mk : string,
sks : integer);
Kuliah : array[1..10] of mat_kul;

Mengakses Data larik :


Nama_larik[indeks] ;

Misal : tinggi[1] berarti mengakses data larik x pada indeks ke-1.


tinggi[2] berarti mengakses data larik x pada indeks ke-2.

Keuntungan :
Menggunakan data larik adalah bahwa kita tidak akan kehilangan nilai dari suatu data.

Kelemahan :
Saat ditentukan suatu variable bertipe data array maka ia akan langsung mengambil
tempat pada memory penyimpanannya sesuai dengan tipe data yang digunakan pada
array, baik nantinya semua komponen pada array itu digunakan ataupun tidak.

Algoritma mengisi dan menampilkan data dalam larik/array :

Start

I:=1

T
I<=10
Y
I:=1
Read A[I]
T
I<=10 STOP
I:=I+1 Y

Write A[I]

I:=I+1

36
Program Pascal-nya :

program isi_dan_cetak_array;
uses crt;
var A : array[1..10] of integer;
i : integer;
begin
clrscr;
write(' Mengisi array ');
writeln;
I:=1;
while I<=10 do
begin
write('A[',I,'] : ');readln(A[I]);
I:=I+1;
end;
writeln
(' Mencetak array ');
writeln;
I:=1;
while I<=10 do
begin
write(A[I]:4);
I:=I+1
end;
repeat until keypressed;
end.

Hasil Run Program :


Mengisi array

A[1] : 2
A[2] : 7
A[3] : 9
A[4] : 11
A[5] : 15
A[6] : 12
A[7] : 8
A[8] : 20
A[9] : 15
A[10] : 22

Mencetak array :
2 7 9 11 15 12 8 20 15 22

37
Contoh soal :

Buatlah flowchart dan program Pascal-nya untuk menginputkan nilai 50 orang


mahasiswa dan kemudian mencetaknya ke layar dengan lay-out :

Daftar nilai mahasiswa Program Studi : Sistem Komputer


Mata Kuliah : Algoritma dan Pemrograman I

No. NoBP Nama Uts Uas Angka Huruf

99 9999999999 xxxxxxxxxxxxx 999 999 99,99 x

99 9999999999 xxxxxxxxxxxxxx 999 999 99,99 x

99 9999999999 Xxxxxxxxxxxxxx 999 999 99,99 x

99 9999999999 xxxxxxxxxxxxxx 999 999 99,99 x

Rata-rata

Larik Dimensi Dua


Adalah sekumpulan data yang memiliki nama dan tipe data yang sama yang terdiri dari
lajur baris dan lajur kolom. Larik dimensi dua disebut dengan table atau matriks.

Bentuk pendeklarasian Matriks adalah :


Var Matriks : array[1... n-baris, 1 n-kolom] of type_data;

Dimana :
Matriks : nama matriks
1 n-baris : indeks jumlah baris matriks
1 n-kolom : indeks jumlah kolom matriks
type_data : type data matriks

Sebuah matriks A yang berordo 4x5 memiliki indeks dalam matriks sbb :

A11 A12 A13 A14 A15

A21 A22 A23 A24 A25

A31 A32 A33 A34 A35

A41 A42 A43 A44 A45

38
Matrik A tersebut dideklarasikan dengan cara :
MatriksA : array[1..4,1..5] of integer;

Berarti matriks itu akan mempunyai dimensi (4x5), namun itu hanya batas atas dari
indeks yang dipesan dalam memori penyimpanan (di atas itu tidak akan disimpan),
sedangkan apabila nantinya kita hanya memasukkan jumlah baris missal 2 dan jumlah
kolom 2 itu boleh saja selama tidak lebih dari 10.

Contoh program larik dimensi dua

Program Entri_Cetak_Matriks(Input_Output);
uses crt;
type matriks = array[1..5,1..5] of integer;
var a : matriks;
i,j,m,n : integer;
ch : char;
begin
repeat
clrscr;
gotoxy(15,1);writeln('=== input entri-entri matriks a ===');
gotoxy(10,3);write('jumlah baris matriks a <maks.5> ');
readln(m);
gotoxy(10,4);write('jumlah kolom matriks a <maks.5> ');
readln(n);

gotoxy(10,5);writeln('------------matriks a ---------------');

for i:=1 to m do
for j:=1 to n do
begin
gotoxy(10*j-5, i+10); write('a[',i,', ', j, '] = ');
readln(a[i,j]);
gotoxy(10*j-5, i+10); clreol;write(a[i,j]);

end;
gotoxy(20,24);write('mau ulang lagi ? [y/t] ');
repeat ch:=readkey; until upcase(ch) in ['y','t'];
until upcase(ch)='t';
end.

Penjumlahan Matriks
Penjumlahan/pengurangan dua buah matriks dapat dilakukan apabila kedua matriks
mempunyai ordo yang sama. Misalkan matriks A dengan ordo (M x N) dan B (M x N),
maka hasil penjumlahan/pengurangan kedua matriks adalah C dengan ordo (M x N)
dengan entri Cij dengan rumus :

39
Cij = Aij + Bij untuk i = 1, 2, 3, .. , M
j = 1,2,3, .. , N
M adalah jumlah baris matriks
N adalah jumlah kolom matriks

Perkalian Matriks
Perkalian dua buah Matriks A dan B dapat dilakukan apabila jumlah kolom pada
matriks A sama dengan jumlah baris pada Matriks B. Apabila syarat tersebut tidak
terpenuhi, maka kedua matriks tersebut tidak dapat dikalikan. Untuk menjamin syarat
ini, cukup di entri baris matriks A dan kolom matriks A kemudian jumlah baris pada
matriks B. Jumlah baris pada matriks B bisa diambil dari banyaknya kolom pada
matriks A. Misalkan matriks A dengan ordo (M x N) dan B (N x K), maka hasil
perkalian kedua matriks adalah C dengan ordo (M x K) dengan entri Cij dengan rumus :

Input :
M adalah jumlah baris pada matriks A
N adalah jumlah kolom pada matriks A
K adalah julah kolom pada matriks B
Aij , i = 1,2,3, ... , M dan j = 1,2,3, ... , N
Bij , i = 1,2,3, ... , N dan j = 1,2,3, ... , K

Output : Cij, i = 1,2,3, ... , M dan j = 1,2,3, ... , K

Proses :

Untuk i=1,2,3, ... , M


Untuk j=1,2,3, ... , K
Cij = 0
Untuk i=1,2,3, ... , N

Cij = Cij + Aij Bij

40
TIPE DATA RECORD

Tipe data ini merupakan perluasan dari tipe data Array, yaitu karena pada array masing-
masing komponennya harus menggunakan tipe data yang sama, maka pada record hal
itu tidak berlaku lagi. Artinya diperbolehkan untuk menggunakan tipedata yang
berbeda pada masing-masing komponen (field) dari record tersebut. Dalam aktifitas
sehari-hari pemakaian rekaman lebih banyak dibandingkan dengan larik. Beberapa
contoh pemakaian misalnya rekaman data akademis mahasiswa, rekaman gaji pegawai,
persediaan barang dalam gudang dan lain sebagainya.

Pendeklarasian record :
Type
Nama_record = record
Field1: tipe_data1 ;
Field2: tipe_data2 ;


Fieldn: tipe_dataN ;
End ;

Contoh :
Type Barang = record
Nama : string[20] ;
Jenis : string [20]
Jumlah : integer ;
End ;

Memasukkan data ke dalam record :


Untuk memberikan nilai dari masing-masing field maka kita harus menuliskan :
Nama_record.field := nilainya;

Misalkan, dari contoh diatas kita akan mengisikan nama barang dengan piring, jenis
barang pecah belah dan jumlah barang 3 lusin, maka kita dapat menuliskan pada
program :
Barang.Nama := Piring ;
Barang.Jenis := Pecah belah ;
Barang.Jumlah:= 36 ;

Kita juga bisa membaca data dengan menggunakan statemen :


readln(barang.nama);
readln(barang.jenis);
readln(barang.jumlah);

Cara lain yang lebih singkat untuk memasup data kedalam record adalah dengan
menggunakan statemen with. Bentuk penggunaan statemen with adalah :
with nama_record do

41
Contoh diatas kita tulis dengan statemen with adalah :
with barang do
begin
readln(nama);
readln(barang);
readln(jenis);
readln(jumlah);
end;

mberikaNilai-nilai dari field ini akan disimpan dalam record. Untuk melihat apakah
benar data yang dimasukkan telah tersimpan dalam record, maka pada variabel kita
deklarasikan suatu variabel misal :
x : array[1..n] of barang ;

Maka apabila dilakukan pemanggilan dengan mengetikkan :


write(barang[i].nama);

data dari field yang tersimpan dalam record tersebut akan ditampilkan.

Contoh program :

program database_mhs;
uses crt;
type mahasiswa=record
nama : array[1..20] of string[20];
nobp : array[1..20] of string[10];
alamat : array[1..20] of string[35];
ipk : array[1..20] of real;
end;
var mhs : mahasiswa;
n,i : integer;

begin
clrscr;
write('Masukan jumlah mahasiswa : ');readln(n);

writeln;
for i:= 1 to n do
begin
writeln('Masukan data mahasiswa ke - ',i);
writeln;
write('Nama Mahasiswa : ');readln(mhs.nama[i]);
write('NoBP Mahasiswa : ');readln(mhs.nobp[i]);
write('Alamat Mahasiswa : ');readln(mhs.alamat[i]);
write('IPK : ');readln(mhs.ipk[i]);
writeln;
end;
writeln;
writeln('DATA MAHASISWA');

42
writeln;
writeln('===============================================================');
writeln('|','No':5,'Nama':20,'NOBP':10,'Alamat':20,'IPK':6,'|':2);
writeln('===============================================================');

for i:=1 to n do
with mhs do
begin
writeln('|',i:5,nama[i]:20,nobp[i]:10,alamat[i]:20,ipk[i]:6:2,'|':2);
end;
writeln('===============================================================');
repeat until keypressed;
end.

Hasil Run Program :

Masukan jumlah mahasiswa : 4

Masukan data mahasiswa ke - 1


Nama Mahasiswa : Herlambang
NoBP Mahasiswa : 08001
Alamat Mahasiswa : Sawahan
IPK : 3.5

Masukan data mahasiswa ke - 2


Nama Mahasiswa : Rusdi
NoBP Mahasiswa : 08002
Alamat Mahasiswa : Ulak karang
IPK : 2.5

Masukan data mahasiswa ke - 3


Nama Mahasiswa : Zaskia
NoBP Mahasiswa : 08003
Alamat Mahasiswa : Pasar Baru
IPK : 2.9

Masukan data mahasiswa ke - 1


Nama Mahasiswa : Cecilya
NoBP Mahasiswa : 08004
Alamat Mahasiswa : Indarung
IPK : 3.7

DATA MAHASISWA
============================================================
| No Nama NOBP Alamat IPK |
============================================================
1 Herlambang 08001 Sawahan 3.5
2 Rusdi 08002 Ulak Karang 2.5
3 Zaskia 08003 Pasar Baru 2.9
4 Cecilya 08004 Indarung 3.7
============================================================

43
TIPE DATA POINTER

Pemakaian array tidak selalu tepat untuk program-program terapan yang kebutuhan
pengingatnya selalu bertambah selama eksekusi program tersebut. Untuk itu diperlukan
satu tipe data yang dapat digunakan untuk mengalokasikan (membentuk) dan
mendealokasikan (menghapus) pengingat secara dinamis, yaitu sesuai dengan
kebutuhan pada saat suatu program dieksekusi. Oleh karena itu akan dijelaskan suatu
tipe data yang dinamakan sebagai Tipe Data Pointer.

Nama peubah yang kita gunakan untuk mewakili suatu nilai data sebenarnya
merupakan / menunjukkan suatu lokasi tertentu dalam pengingat computer di mana
data yang diwakili oleh tipe data tersebut disimpan. Pada saat sebuah program
dikompilasi maka compiler akan melihat pada bagian deklarasi peubah (Var) untuk
mengetahui nama-nama peubah apa saja yang digunakan, sekaligus mengalokasikan
atau menyediakan tempat dalam memory untuk menyimpan nilai data tersebut. Dari
sini kita bisa melihat bahwa sebelum program dieksekusi, maka lokasi-lokasi data
dalam memory sudah ditentukan dan tidak dapat diubah selama program tersebut
dieksekusi. Peubah-peubah yang demikian itu dinamakan sebagai Peubah Statis (Static
Variable).

Dari pengertian diatas kita perhatikan bahwa sesudah suatu lokasi pengingat ditentukan
untuk suatu nama peubah maka dalam program tersebut peubah yang dimaksud akan
tetap menempati lokasi yang telah ditentukan dan tidak mungkin diubah. Dengan
melihat pada sifat-sifat peubah statis maka bisa dikatakan bahwa banyaknya data yang
bisa diolah adalah sangat terbatas. Misalnya peubah dalam bentuk Array yang
dideklarasika sbb : Var matriks: array[1..100,1..100] of integer; maka peubah
tersebut hanya mampu menyimpan data sebanyak 100x100=10000 buah data. Jika kita
tetap nekat memasukkan data pada peubah tersebut setelah semua ruangnya penuh
maka eksekusi program akan terhenti dan muncul error. Memang kita dapat mengubah
deklarasi program diatas dengan memperbesar ukurannya. Tetapi jika setiap kali kita
harus mengubah deklarasi dari tipe daa tersebut sementara, banyaknya data tidak dapat
ditentukan lebih dahulu, maka hal ini tentu merupakan pekerjaan yang membosankan.

Sekarang bagaimana jika kita ingin mengolah data yang banyaknya kita tidak yakin
sebelumnya bahwa larik yang telah kita deklarasikan sebelumnya mampu menampung
data yang kita miliki ? Untuk menjawab pertanyaan di atas maka pascal menyediakan
satu fasilitas yang memungkinkan kita untuk menggunakan suatu peubah yang disebut
dengan Peubah Dinamis (Dynamic Variable). Peubah dinamis adalah peubah yang
dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi. Dengan
kata lain, pada saat program dikompilasi, lokasi untuk peubah belum ditentukan
sebagai peubah dinamis. Hal ini membawa keuntungan pula, bahwa peubah-peubah
dinamis tersebut dapat dihapus pada saat program dieksekusi sehingga ukuran memory
selalu berubah. Hal inilah yang menyebabkan peubah tersebut dinamakan sebagai
peubah dinamis.

Pada peubah statis, isi dari peubah adalah data sesungguhnya yang akan diolah. Pada
peubah dinamis nilai peubah adalah alamat lokasi lain yang menyimpan data
sesungguhnya. Dengan demikian data yang sesungguhnya tidak dapat dimasup secara
langsung. Oleh karena itu, peubah dinamis dikenal dengan sebutan POINTER yang

44
artinya menunjuk ke sesuatu. Dalam peubah dinamis, nilai dari data yang ditunjuk oleh
suatu pointer biasanya disebut Simpul / node.

Dekarasi Pointer dan Alokasi Tempat


Bentuk umum deklarasi pointer :

Type Pengenal = ^simpul ;


Simpul = tipe data ;

dengan pengenal : nama pengenal yang menyatakan tipe data pointer


simpul : nama simpul
tipe data : tipe data dari simpul

Tanda ^ di depan simpul harus ditulis apa adanya karena itu menunjukkan bahwa
pengenal bertipe pointer. Tipe data dari simpul dapat berupa tipe data sebarang,
misalnya char, integer, atau real.

Contoh :
Type Str30 = string[30] ;
Point = ^Data ;
Data = record
Nama_Peg : Str30 ;
Alamat : Str30 ;
Pekerjaan : Str30 ;
End ;
Var
P1, P2 : Point ;
A, B, C : Str30 ;

Mengakses Data Dalam Tipe Data Pointer


Pada saat program dikompilasi maka P1 dan P2 akan menempati lokasi tertentu dalam
memory. Kedua peubah ini masing-masing belum menunjuk ke suatu simpul atau
nilainya dinyatakan dengan NIL. Oleh karena itu sebelum diakses varabel yang bertipe
pointer harus dipersiapkan terlebih dahulu, yaitu dengan menggunakan perintah NEW.
Deklarasi : NEW(peubah bertipe pointer);

Contoh :
New(P1); New(P2);
Maka sekarang kita mempunyai dua buah simpul yang ditunjuk oleh P1 dan P2. Setelah
itu kita dapat melakukan pengaksesan data, yaitu dengan menuliskan :
P1^.Nama_Peg := Ariswan;
P1^.Alamat := Semarang;
P1^.Pekerjaan := Pengajar;

Jika statemen New(P1)diulang beberapa kali maka hanya simpul yang terakhir yang
bisa dimasup. Hal ini terjadi karena setiap kali kita memberikan statemen New(P1)
maka nilai P1 yang lama akan terhapus. Dengan terhapusnya nilai P1 maka secara
otomatis simpul yang ditunjuk oleh P1 tidak ditunjuk lagi dan tidak ditunjuk pula oleh

45
pointer yang lain sehingga karena alamatnya tidak dapat ditentukan maka simpul
tersebut tidak dapat dimasup lagi.

Dari sini dapat dilihat bahwa sifat kedinamisan pointer agak tersamar, disebabkan
apabila kita menghendaki sejumlah simpul aktif dalam pengingat maka kita perlu
menyediakan sejumlah pointer yang sesuai untuk masing-masing simpul. Oleh karena
itu, apabila kita hendak mempunyai sebuah peubah yang benar-benar dinamis maka
peubah itu harus mampu memasup sejumlah lokasi tertentu.

Untuk itu akan diperkenalkan apa yang dinamakan sebagai Senarai Berantai (Linked
List).

Operasi Pada Pointer


Secara umum ada 2 operasi yang dapat dilakukan dengan tipe data pointer, yaitu :
1. Mengkopy pointer, sehingga sebuah simpul akan ditunjuk oleh lebih dari sebuah
pointer
2. Mengkopy isi dari simpul, sehingga dua atau lebih simpul yang ditunjuk oleh
pointer yang berbeda mempunyai isi yang sama

Catatan :
Syarat yang harus dipenuhi oleh kedua operasi tersebut adalah bahwa pointer-pointer
yang akan dioperasikan harus mempunyai deklarasi yang sama.
Jika dalam statemen pemberian tanda ^ tidak diberikan maka operasinya
dinamakan sebagai mengkopi pointer, dengan konsekuensi simpul yang ditunjuk
oleh suatu pointer akan bisa terlepas dan tidak dapat dimasup lagi.
Contoh : P1 := P2 ;

Jika tanda ^ diberikan maka operasinya dinamakan sebagai operasi mengkopi isi
simpul pointer, dengan konsekuensi bahwa isi dua buah simpul atau lebih akan
menjadi sama.
Contoh : P1^ := P2^ ;

Menghapus Pointer
Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai
bentuk umum :
Dispose(peubah) ;
dengan : peubah = sebarang peubah yang bertipe pointer.

Catatan :
Setelah suatu pointer dihapus maka lokasi yang semula ditempati oleh simpul
yang ditujuk oleh pointer tersebut akan bebas, sehingga bisa digunakan oleh peubah
yang lain.

SENARAI BERANTAI ( LINKED LIST )

Cara lain untuk menyimpan sekumpulan data selain dengan menggunakan record
adalah dengan menggunakan bantuan tipe data pointer. Dalam hal ini, masing-masing
data dengan sebuah medan yang bertipe pointer perlu digunakan.

46
Salah satu struktur data dinamis yang paling sederhana adalah Senarai Berantai
(Linked List). Yaitu kumpulan komponen (node) yang disusun secara berurutan dengan
menggunakan bantuan pointer. Node ini terbagi menjadi dua bagian yaitu bagian
medan informasi, yang berisi informasi yang akan disimpan atau diolah dan bagian
penyambung (link field), yang berisi alamat simpul selanjutnya.

Operasi Pada Senarai Berantai :

1. Menambah Simpul di Belakang


Misal dideklarasikan:
Type Point = ^Data ;
Data = record
Info : char ;
Berikut : Simpul
End;
Var Elemen : char ;
Awal, Akhir, Baru : Simpul ;

Untuk menyambung simpul yang ditunjuk oleh Akhir dan Baru maka pointer pada
simpul yang ditunjuk oleh Akhir dibuat sama dengan Baru , kemudian diubah
pointer Akhir sama dengan Baru.

Procedure Tambah_Belakang(Awal,Akhir,Elemen: Data);


Var Baru : point;
Begin
New(Baru); Baru^.Info := elemen;
If Awal = NIL then
Awal:= Baru
Else Akhir^.Berikut := Baru;
Akhir:= Baru; Akhir^.Berikut:= NIL;
End;

2. Menambah Simpul di Depan


Pertama kali pointer pada simpul yang ditunjuk oleh pointer Baru dibuat sama
dengan Awal. Kemudian Awal dibuat sama dengan Baru. Dengan cara ini maka
simpul baru akan selalu diperlakukan sebagai simpul pertama dalam senarai.

Procedure Tambah_Depan(var Awal,Akhir: point; Elemen:Data);


Var Baru : point;
Begin
New(Baru); Baru^.Info :=Elemen;
If Awal= NIL then Akhir:= Baru
Else Baru^.Berikut:= Awal;
Awal := Baru;
End;

3. Menambah/ menyisipkan Simpul di Tengah


Untuk menambah simpul ditengah maka kita perlu sebuah pointer lain misal
dinamakan Bantu. Dalam hal ini simpul baru akan diletakkan setelah simpul yang
ditunjuk oleh pointer Bantu. Pertama kali ditentukan dimana simpul baru akan
ditempatkan. Kemudian pointer pada simpul yang ditunjuk oleh Baru dibuat sama

47
dengan pointer pada simpul yang ditunjuk oleh Bantu. Selanjutnya pointer pada
simpul yang ditunjuk oleh simpul Bantu dibuat sama dengan Baru. Urutan kedua
proses ini tidak boleh dibalik.

Procedure Tambah_Tengah(Var Awal,Akhir: point; Elemen: Dat);


Var Baru,Bantu : point;
Begin
New(Baru); Baru^.Berikut:= Elemen;
If Awal = NIL then
Begin
Awal:= Baru; Akhir:= Baru;
End
Else
Begin
Bantu:= Awal;
While (Elemen > Bantu^.Berikut^.Info) and (Bantu <> NIL) then
Bantu:= Bantu^.Berikut;
Baru^.Berikut:= Bantu^.Berikut;
Bantu^.Berikut:= Baru;
End;
End;

4. Menghapus Simpul Pertama


Simpul yang dapat dihapus oleh operasi penghapusan simpul adalah simpul yang
berada sesudah simpul yang ditunjuk oleh suatu pointer, kecuali untuk simpul
pertama.
Untuk menghapus simpul pertama, maka pointer Bantu kita buat sama dengan
pointer Awal. Kemudian pointer Awal kita pindah dari simpul yang ditunjuk oleh
pointer Bantu. Selanjutnya, simpul yang ditunjuk oleh pointer Bantu kita Dispose.

Procedure Hapus_Awal_Simpul(var Awal, Akhir: point; Elemen: Dat);


Var Hapus: point;
Begin
Awal:= Awal^.Berikut;
Dispose(Hapus);
End;

5. Menghapus Simpul di Tengah atau Terakhir

Pertama kita letakkan pointer Bantu pada simpul di sebelah kiri simpul yang akan
dihapus. Simpul yang akan dihapus kita tunjuk dengan pointer lain, misalnya
Hapus. Kemudian pointer pada simpul yang ditunjuk oleh Bantu kita tunjukkan
pada simpul yang ditunjuk oleh pointer pada simpul yang akan dihapus. Selanjutnya
simpul yang ditunjuk oleh pointer Hapus kita Dispose.

Procedure Hapus_Awal_Simpul(var Awal, Akhir: point; Elemen: Dat);


Var Bantu, Hapus : point;
Begin {senarai masih kosong}
If awal= NIL then
Writeln(Searai berantai masih kosong !)
Else
Begin {menghapus simpul diawal}

48
Hapus:= Awal;
Awal:= Hapus^.Berikut;
Dispose(Berikut);
End
Else {menghapus simpul ditengah atau akhir}
Begin
Bantu:= Awal;
While (Elemen <> Bantu^.info) and (Bantu^.Next <> NIL) do
Bantu:= Bantu^.Berikut;
Hapus:= Bantu^.Berikut;

If Hapus <> NIL then


Begin
If Hapus = Akhir then
Begin
Akhir:= Bantu;
Akhir^.Berikut:= NIL;
End
Else Bantu^.Berikut:= Hapus^.Berikut;
Dispose(Hapus);
End
Else writeln(Tidak ketemu yang dihapus !!);
End;
End;

6. Membaca Isi Senarai Berantai secara Maju

Pertama kali kita atur supaya pointer Bantu menunjuk ke simpul yang ditunjuk oleh
pointer Awal. Setelah isi simpul itu dibaca, maka pointer Bantu kita gerakkan ke
kanan untuk membaca simpul berikutnya. Proses ini kita ulang sampai pointer
Bantu sama dengan pointer Akhir.

Procedure Baca_Maju(Awal,Akhir : point);


Var Bantu : point;
Begin
Bantu:= Awal;
Repeat
Write(Bantu^.info:2);
Bantu:= Bantu^.Berikut;
Until Bantu = NIL;
Writeln;
End;

7. Membaca Isi Senarai Berantai secara Mundur

Ada 2 cara membaca mundur isi dari Senarai Berantai, yaitu dengan cara biasa
seperti diatas atau dengan memanfaatkan proses rekursi. Cara pertama yaitu kita
atur pointer Bantu sama dengan pointer Awal. Berikutnya, pointer awal kita
arahkan ke simpul Akhir dan kita pakai pointer lain misalkan Bantu1 untuk
bergerak dari simpul pertama sampai simpul sebelum simpul terakhir. Langkah

49
selanjutnya adalah mengarahkan medan pointer dari simpul terakhir ke simpul
Bantu1. Langkah ini diulang sampai pointer Akhir Berimpit dengan pointer Bantu.
Cara kedua dengan rekursi. Caranya hampir sama dengan cara membaca senarai
berantai secara maju hanya saja pencetakan isi simpul ditunda sampai pointer Bantu
sama dengan pointer akhir.

Procedure Baca_Terbalik(var Awal,Akhir: point);


Var Bantu,Bantu1 : point;
Begin
Bantu:= Awal;
Awal:= Akhr;
Repeat
Bantu1:=Bantu;
While Bantu1^.Berikut <> Akhir do
Bantu1:= Bantu1^.Berikut;
Akhir^.Berikut:= Bantu1;
Akhir:= Bantu1;
Until Akhir = Bantu;
Akhir^.Berikut:= NIL;
End;

Dengan cara rekursi :

Procedure Terbalik(Bantu: point);


Begin
If Bantu <> NIL then
Begin
TERBALIK(Bantu^.Berikut);
Write(Bantu^.Info:2);
End;
End;

8. Mencari Data dalam Senarai Berantai


Misalkan data yang dicari disimpan dalam peubah Elemen. Pertama kali, pointer
Bantu dibuat sama dengan pointer Awal. Kemudan isi simpul yang ditunjuk oleh
pointer Bantu dibandingkan dengan Elemen. Jika belum sama, maka pointer Bantu
dipindah ke simpul disebelah kanannya dan proses perbandingan diulang lagi
sampai bisa ditentukan apakah Elemen ada dalam senarai berantai yang dimaksud
atau tidak.

Function Cari_Data(Awal: point; Elemen : Dat): Boolean;


Var ketemu: Boolean;
Begin
Ketemu: false;
Repeat
If Awal^.info = Elemen then
Ketemu:= true
Else
Awal:= Awal^.Berikut;
Until (ketemu) or (Awal = NIL);
Cari_Data:= ketemu;
end;

50

Anda mungkin juga menyukai