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.
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
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
Untuk memahami Algoritma dan Pemrograman Terstruktur, ada beberapa istilah dasar
yang harus diketahui, yakni :
1. Program
2. Bahasa Pemrograman
3. Pemrograman
4. Pemrograman Terstruktur
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.
MEMBANGUN PROGRAM
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.
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
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
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).
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}
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);
}
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.
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.
Off-Line
Proses sortir Proses merge Arus/alir
Storage
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.
12
Contoh Detail Flowchart
Start
Jml:=0
For K:=1 to N do
Readln(bil)
Jml:=jml+bil
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.
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
A Not A
True False
False True
14
A B A and B A or B A xor B
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
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
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
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 :
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
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
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.
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 ini adalah Konversi Nama, Tipe dan Operator kedalam Bahasa Pascal dan
C.
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]
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.
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
.
.
K 5
Jarak 0.03
Ketemu False
NamaKota Bandung
.
.
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.
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)
23
IMPLEMENTASI ALGORITMA
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
a) Tipe Integer
Operator-operator yang berlaku pada tipe data integer, yaitu :
- Operator arithmatik : +, - , *, /, div, mod
- Operator logic : <, = , > , <= , >= , <>
b) Tipe Real
Dibagi menjadi 5 macam, yaitu :
Real (6 byte) Extended (10 byte)
Single (4 byte) Comp (8 byte)
Double (8 byte)
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) ;
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
26
STRUKTUR PEMROGRAMAN/ STRUKTUR KONTROL
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.
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.
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
T
Kondisi
Y
Aksi2
Aksi1
28
(3) if (kondisi1) then aksi1 else
if (kondisi2) then aksi2 else
..
if (kondisi-n) then aksi-n ;
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');
29
writeln('Tidak memiliki akar riil');
end;
readln;
end.
1x*x + (-4) x +4
Determinannya : 0.00
- Baca koofisien : 1 -5 6
1x*x + (-5) x +6
Determinannya :1.00
- Baca koofisien: 1 3 4
1x*x + (3) x +4
Determinannya :-7.00
(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.
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;
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.
31
- Struktur FORDO
- Struktur WHILEDO
- Struktur REPEATUNTIL
Struktur FOR hanya dapat digunakan pada cacah perulangan yang diketahui
(berapa kali perulangan tersebut akan dilakukan).
Contoh program :
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.
32
b). Struktur WHILE .. DO..
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.
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.
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.
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.
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;
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.
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.
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 :
Rata-rata
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 :
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.
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
Proses :
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 ;
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 ;
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 ;
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.
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.
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 ;
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).
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.
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.
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.
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.
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.
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;
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.
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.
50