You are on page 1of 58

I. PROGRAM.

PENGERTIAN UMUM PROGRAM.

Kumpulan "OPERASI" ( atau langkah kerja ) yang tersusun dengan aturan tertentu, dinyatakan
melalui "bahasa" tertentu, dimaksudkan untuk dilakukan oleh suatu "pelaksana" tertentu,
untuk mencapai suatu "keadaan akhir" yang diinginkan, bertolak dari "keadaan awal" tertentu
pula.

ASPEK KUNCI PADA SEBUAH PROGRAM.

FINAL STATE atau keadaan akhir, merupakan penterjemahan


tujuan program ybs.
INITIAL STATE atau keadaan awal, merupakan titik tolak
program ybs.
OPERASI langkah langkah kerja dalam program.
STRUKTUR aturan hubungan dan susunan operasi operasi.
PELAKSANA atau lazim disebut PEMROSES, yang
menjalankan setiap operasi dalam program.
BAHASA aturan untuk menyatakan operasi dan struktur.

INITIAL STATE DAN FINAL STATE

• identifikasi dan deskripsi initial dan final state memegang peranan penting pada proses
pembuatan program.
• suatu program bisa salah, gagal atau menimbulkan ekses yang tidak diharapkan karena
kesalahan si pembuat program dalam identifikasi initial dan atau final state.

STRUKTUR PADA SEBUAH PROGRAM.

Pengertian struktur pada suatu program adalah :


"established relationship" ( keterkaitan yang dimapankan ) antara 2 atau lebih bagian dari
suatu program ( operasi adalah bagian terkecil dari suatu program ).

Struktur dapat dibedakan dalam 2 kelompok besar sbb :


• PARALEL : lebih dari 1 operasi dilakukan secara serentak.
• NON-PARALEL : tidak ada 2 operasi/lebih yg dilakukan serentak.

Pada masalah pemrograman komputer struktur paralel dianggap "advanced" ( tidak akan dibahas
pada kesempatan ini ). Sedangkan kelompok struktur Non-Paralel terdiri dari 3 kategori sbb :
1. Sequence : atau urutan, suatu operasi dilakukan setelah operasi lain.
2. Selection : atau pilihan, hanya boleh dilaksanakan satu diantara beberapa operasi.
3. Repetition : atau pengulangan, operasi dilakukan terus menerus sampai
suatu kondisi tertentu.

Pengertian struktur mencakup pula aspek hirarki diantara program s/d operasi :
operasi ⇒ himpunan operasi ⇒ super himpunan operasi ⇒ ....dst s/d ⇒ program
atau
program ⇒ subprogram ⇒ sub-sub-program ⇒ ...dst s/d operasi

OPERASI, PELAKSANA dan BAHASA.

Operasi adalah "Action" yang menghasilkan "Effect". Yang dimaksud dengan effect ialah suatu
perubahan state tertentu. Dengan kata lain :

Operasi harus menghasilkan perubahan dari suatu state ke state


lainnya.

Operasi harus bersifat "well-defined", yang berarti : diketahui secara definitif


● OBJEK yang dikenainya, dan

● (PERUBAHAN) STATE yang dihasilkannya

● OPERASI PRIMITIF adalah operasi yang tidak perlu diurai lebih lanjut.

BAHASA
● himpunan aturan untuk menyatakan state ( kondisi ), operasi, objek dan struktur.
● secara implisit setiap "bahasa" disusun berdasarkan anggapan tertentu mengenai
karakterisitik pelaksana, oleh karena itu :
ada kategorisasi bahasa menurut level dan spesialisasi bidang masalah.

Kesimpulan :
• level operasi primitif tergantung pada karakteristik pelaksana ( pintar atau bodohnya ).
• makin tinggi level pemrograman, maka makin kompleks operasi primitif dan objek yang
dikenainya.
• makin tinggi level pemrograman, maka makin banyak kemudahan yang tersedia bagi
pemrogram, dan makin manusiawi bentuk interaksi pemrogram dan pelaksana.
• makin rendah level pemrograman, maka proses pembuatan program makin : time-
consuming, effort-consuming.

II. ALGORITMA.
Algoritma ada, dikarenakan dirasakan perlu adanya suatu cara untuk melepaskan diri dari
pengaruh keragaman bahasa pemrograman dalam penulisan kandungan logika, terutama dalam
kegiatan studi serta perancangan program.
Dengan demikian perhatian dapat difokuskan pada aspek logika yang terkandung di dalam
program komputer.
Saat ini algoritma diartikan sebagai :

“Pernyataan logika (matematis) yang merepresentasikan suatu proses


transformasi dari suatu initial state ke suatu final state yang telah
didefinisikan.”

PROGRAM - KOMPUTER

Program komputer = program yang pelaksananya adalah komputer.


Komputer pada dasarnya adalah pemroses logika elementer ( biner ), dengan objek nilai biner
( octal/ hexadecimal ) yang merepresentasikan data atau objek arsitektural komputer ybs.
Dengan kata lain, dalam pemrogramannya hanya boleh dipergunakan :
1. operasi logika elementer (And, or, not)
2. objek nilai biner/ octal/ hexadecimal
PENGERTIAN ARAS ( LEVEL )

Jika dipergunakan pengertian umum dengan anggapan


komputer sebagai pemroses logika biner, maka dikatakan
bahwa pemrograman dilakukan pada aras rendah atau pada
aras mesin ( "low-level" atau "machine-level" ). Bahasanya
terdiri dari kode kode biner/ hexadesimal yang
merepresentasikan jenis serta objek operasi, disebut sebagai
bahasa mesin ( "machine-language" ). Karena perbedaan
arsitektural diantara mereka, maka semua jenis komputer
mempunyai bahasa mesin yang berbeda. Pemrograman dengan
gaya seperti ini seperti telah disebut diatas akan sangat
merepotkan.
Oleh karena itu mula mula dilakukan pemudahan dengan cara
merubah cara penulisan saja. Operasi dan objeknya sekarang
dapat dituliskan dengan memakai kode mnemonic.
Pemrograman seperti ini disebut pemrograman pada aras "penterjemahan" program bahasa
menengah ( "middle-level" ), atau sering disebut sebagai
pemrograman assembler. Bahasanya disebut sebagai asembly- assembly menjadi program bahasa mesin
language, dan seperti juga bahasa mesin berbeda untuk setiap
jenis komputer. Pemrograman pada level inipun dianggap masih terlalu banyak memakan waktu
dan usaha.
Karena pada hakekatnya sebuah komputer masih tetap merupakan pemroses logika biner, maka
suatu program yang ditulis dalam bahasa assembly masih harus diterjemahkan menjadi kedalam
program bahasa mesin. Penterjemahan ini dilakukan oleh sebuah program yang disebut sebagai
"assembler".

Untuk lebih memudahkan pembuatan program, maka dilontarkan sebuah konsep untuk
menciptakan lingkungan pemrograman yang lebih "manusiawi". Operasi dan objek harus dapat
dapat dinamai, sehingga memudahkan manusia. Selain itupun jenis operasi dan objek harus lebih
"bungkus besar". Maka dikembangkan konsep jenis operasi serta objek yang bersifat matematis.
Dengan demikian diciptakan sebuah lingkungan pemrograman aras tinggi ( "high-level" ),
bahasanya disebut sebagai bahasa-aras-tinggi ( "high-level-language" ).

KOMPILER DAN INTERPRETER

Program yang ditulis dalam bahasa aras tinggi harus


diterjemahkan menjadi program bahasa mesin yang setara
dengannya. Penterjemahan ini dapat dilakukan melalui 2 cara :
• interpretasi : penterjemahan dilakukan per pernyataan,
kemudian langsung dilaksanakan. Program penterjemahnya
disebut sebagai "interpreter".
• kompilasi : seluruh program diterjemahkan dahulu
menjadi program bahasa mesin, kemudian baru
dilaksanakan. Program penterjemahnya disebut sebagai
"compiler".
Program bahasa aras tinggi disebut sebagai program-sumber
( "source-program" ), dan program bahasa mesin hasil
terjemahan disebut sebagai program-objek ( "object-
program" ).
kompilasi program bahasa tingkat tinggi

menjadi program bahasa mesin

BAHASA GENERASI KE 4 dan 5

Selanjutnya dilakukan usaha usaha lebih jauh untuk memberi sebanyak mungkin kemudahan
dalam proses pembuatan program komputer sehingga timbul istilah istilah seperti :
• bahasa generasi ke 4 ( "4th generation language" ) : ide pertama mengenai pemrograman
aras tinggi diatas dianggap sebagai bahasa generasi ke 3. Pada bahasa generasi ke 4 timbul
pemudahan dengan cara menghadirkan jenis jenis operasi serta objek yang lebih kompleks.
Biasanya jenis operasi serta objek dibuat berdasarkan suatu konsep tertentu.
• bahasa generasi ke 5 ( "5th generation language" ) : dibuat program program yang sangat
membantu sehingga pembuatan program komputer bersifat "hampir-otomatik", artinya sang
"pemrogram" sebenarnya hanya membuat spesifikasi saja, program komputernya sendiri
dibuatkan oleh program lain.
NOTASI DAN ARTI ALGORITMA.

Usaha untuk menuliskan kandungan logika saja sudah barang tentu menuntut adanya suatu notasi
tertentu yang bersifat cukup umum, harus bersifat seperti notasi notasi pada ilmu matematik.
Sampai saat ini belum ada keseragaman pada penggunaan notasi seperti ini.
Bentuk representasi sebuah program dalam notasi seperti ini disebut sebagai algoritma. Kata ini
baru muncul di Webster's New World Dictionary mulai tahun 1957. Sebelumnya hanya dijumpai
kata "algorism" yang berarti : melakukan proses aritmatika dengan menggunakan numerik Arab.
Sebutan ini berasal dari abad pertengahan dimana aritmatika umum dilakukan dengan 2 cara :
dengan cara abacus atau dengan cara algorism.
Studi sejarah membuktikan bahwa kata algorism berasal dari nama seorang pengarang buku Abu
Jafar Mohammad ibnu Musa al-Khowarizmi ( yang berarti ayah Jafar, Mohammad, anak Musa,
berasal dari Khowarizmi suatu kota yang sekarang disebut Khiva di kawasan Uni Soviet dekat
perbatasan Iran; hidup sekitar tahun 825 ). Ia menulis buku yang berjudul "Kitab al Jabr w'al-
muqabala", yang berisi aturan restorasi dan reduksi. Kata aljabar yang kita kenal berasal dari
nama buku ini.
Menurut para akhli bahasa, secara berangsur angsur kata algorism ini berubah bentuk dan
bergeser artinya. Seperti dijumpai pada suatu kamus matematik tua terbitan Jerman yang berjudul
"Vollstandiges Matematisches Lexicon" ( diterbitkan di Leipzig pada 1747 ), algorithmus
diartikan sebagai : semua hal mengenai perhitungan yang melibatkan operasi kali, bagi, tambah
dan kurang.
Sedangkan dalam bahasa Latin kata algoritma muncul pertama kali sesuai penemuan Leibnitz,
dimana algorithmus infinitesimalis dipergunakan dengan arti : cara perhitungan dengan
menggunakan nilai kecil yang berjumlah tak hingga seperti pada cara yang dipergunakan oleh
Leibnitz.
Pada sekitar tahun 1950 kata algoritma paling sering dikaitkan dengan "algoritma Euclid" ialah
suatu langkah langkah perhitungan untuk menentukan Pembagi Persekutuan Terbesar dari 2 buah
bilangan.

III. KONSEP DATA.

1. ARTI DATA DAN INFORMASI.

Data adalah rekaman mengenai :


1. fakta : sesuatu yang benar benar ada, atau
2. ide : sesuatu yg dibayangkan, hanya ada dalam pikiran manusia
Data dapat menyangkut :
● event : peristiwa, serta

● konsep : benda, objek, jenis dan propertinya

Menurut Langeford ( 1977 ) Informasi adalah :


tambahan pengetahuan yang diperoleh dari data
Berarti informasi bersifat subjektif, sedangkan data bersifat objektif.

2. JENIS DATA.

Data dianggap dapat diuraikan sampai tingkat primitif ( disebut juga elementer atau atomik ).
Jadi ada jenis data primitif dan jenis data non-primitif ( sering disebut juga sebagai jenis
kombinasi, abstrak atau konglomerat ).
Jenis data primitif dibedakan dalam 4 kelompok sbb. :
a. nilai numerik.
b. lambang alfanumerik atau karakter.
c. nilai logika ( biner ) : hanya dapat bernilai TRUE atau FALSE.
d. pointer : merupakan representasi alamat data lain.

Nilai Numerik.

Data jenis ini dapat dikenai operasi matematika terhadap bilangan seperti misanya : kali, bagi,
tambah, kurang, logaritma, sinus dsb.

Selanjutnya jenis ini dibedakan kedalam 2 kelompok besar :


● integer ( bilangan bulat )

● real ( bilangan pecahan )

Lambang Alfanumerik ( Karakter dan String ).

Biasanya diatur sesuai dengan tabel kode ASCII ( American Standard Code for Information
Interchange ). Ada jenis data tunggal biasa disebut sebagai character dan data himpunan lambang
yang biasa disebut sebagai string.
Nilai Logika ( Biner ).

Data jenis ini merepresentasikan nilai TRUE (benar)/FALSE (salah).

Pointer.

Jenis ini berisi nilai yang ditafsirkan sebagai "alamat" data lain. Representasi fisik dari alamat
tersebut untuk sementara dianggap tidak perlu diketahui, karena dalam penggunaannya biasanya
hal tersebut tidak perlu diketahui, kecuali untuk keperluan tertentu saja.

Jenis Abstrak/Konglomerat.

Jenis data ini merupakan jenis yang disusun melalui salah satu atau kombinasi dari 2 cara sbb :
● pendefinisian dengan mengambil sebagian dari angguta himpunan nilai primitif

● pendefinisian dengan melalui kombinasi jenis primitif.

Penamaan jenisnya dapat didefinisikan dengan bebas oleh pemrogram sendiri. Jenis konglomerat
merupakan hasil dari cara ke 2 tersebut diatas.
KONSEP VARIABEL.

1. KONSTANTA vs VARIABEL.

Dalam konsep pemrograman dikenal pengertian konstanta dan variabel.


● Konstanta ialah data yang nilainya tidak dapat berubah/diubah, atau konstan.

● Variabel ialah data yang nilainya dapat diubah ubah melalui operasi.

Variabel harus diberi nama ( atau disebut juga label ), dan referensi terhadapnya dilakukan
dengan menyebut namanya. Aturan penamaan variabel beragam tergantung pada bahasa
pemrograman yang dipergunakan. Dalam algoritma biasanya aturan penamaan ini dianggap
bebas, selama tidak menimbulkan kerancuan.
Referensi terhadap konstanta bentuknya tergantung dari jenis datanya, sebagai contoh :
26 adalah konstanta nilai numerik bulat ( integer )
26.0 adalah konstanta nilai numerik pecahan ( real )
"A" adalah konstanta lambang alfanumerik tunggal ( karakter )
TRUE adalah konstanta nilai logika
"SANDRA" adalah konstanta deretan lambang alfanumerik ( string )

2. JENIS VARIABEL.

Jenis variabel dipandang melalui 2 cara :


● sesuai dengan jenis datanya : lihat uraian jenis data diatas !

● sesuai dengan strukturnya : dikenal berbagai jenis struktur, akan tetapi untuk sementara

hanya diperkenalkan struktur primitif tunggal dan array ( barisan, atau deretan nilai
sejenis ).
Pada algoritma definisi dapat dilakukan melalui kata kata biasa, sedangkan dalam lingkungan
pemrograman harus dilakukan melalui aturan aturan penulisan yang ada.
Misalnya s adalah variabel integer, t adalah array integer yang memiliki 10 elemen, dan p adalah
pointer ke suatu nilai integer; maka cara pendefinisiannya dalam dalam bahasa PASCAL adalah :
var
s : integer;
t : array[1..8] of integer;
p : ^integer;
Sedangkan dalam bahasa C :
int s,t[8],*p;

3. OPERASI ASSIGNMENT.

Operasi assignment ialah operasi pemberian nilai ( baru ) kepada variabel. Dalam sejarah
kehidupannya suatu variabel dapat dianggap tidak mempunyai nilai awal, dapat pula dianggap
sudah mempunyai nilai awal. Kemudian sepanjang kehidupannya variabel ybs akan diubah-ubah
nilainya sesuai dengan keperluan.
Ada 2 macam assignment :
● assignment langsung : pemberian nilai dengan menggunakan konstanta

● assignment tidak langsung : pemberian nilai dengan menggunakan kombinasi dari

konstanta, nilai variabel lain, dan operator.


Dalam algoritma notasi yang dipergunakan adalah seperti contoh sbb :
misalkan ada sebuah variabel integer dengan nama a, maka operasi assignment : a ← 21
dibaca sebagai : berikanlah varabel a nilai 21
Assignment ini termasuk jenis langsung. Perhatikan notasi yang dipergunakan : variabel yang
dikenai perubahan ditulis disebelah kiri, diikuti tanda panah kekiri dan kemudian suatu nilai
konstanta.
Misalkan sesudah operasi ini, ada operasi lain sbb :
a←a+3
dibaca sebagai :
berikanlah nilai terhadap variabel a yang sama dengan nilai (lama) variabel a. sendiri
ditambahkan dengan 3.
Maka sesudah operasi ini nilai variabel a akan = 21 + 3 = 24. Assignment ini termasuk tidak
langsung.

Kesahihan operasi.

Operasi assignment sahih jika memenuhi aturan aturan matematika, jenis data, serta syarat syarat
mengenai ukuran dan state. Sebagai contoh misalnya saja diketahui :
x adalah array integer yang mempunyai 5 buah elemen,
y adalah array karakter yang mempunyai 4 buah elemen,
t adalah variabel integer yang nilai = 2,
Maka operasi operasi dibawah ini tidak sahih :
(operasi-1) x[t] ← x[t+4] + 3
(operasi-2) y[t] ← y[t] + 3
(operasi-3) x[t] ← y[t]

Penjelasan :
● operasi-1 : x[t+4] berarti x[6] karena t=2, karena x hanya berlemen 5 berarti x[6] tidak

ada !
● operasi-2 : y adalah array karakter oleh karena itu y[t], dalam hal ini y[2] tidak dapat

ditambahkan dengan nilai bilangan bulat 3.


● operasi-3 : y[t] yang berjenis karakter tidak dapat disalinkan ke x[t] yang berjenis integer !

Catatan :
● pada lingkungan pemrograman tersedia cara-cara yang sahih (biasanya memakai fungsi)

untuk melakukan konversi nilai dari suatu jenis data ke jenis data lain.
● ada lingkungan pemrograman yang menerapkan aturan yang tegas mengenai jenis operator

dan penyalinan data yang diijinkan terhadap setiap jenis data, ada pula yang agak lunak.
Penerapan aturan yang keras biasa disebut dengan sifat "strong-typed", sedangkan
penerapan yang agak longgar disebut sebagai "weak-typed". Bahasa Pascal termasuk jenis
strong-typed sedangkan bahasa C termasuk weak-typed.

4. VARIABEL NON-PRIMITIF.

Ada 2 cara pendefinisian variabel non-primitif :


a) dengan terlebih dahulu mendefinisikan jenis data non-primitifnya, baru kemudian
mendefinisikan variabel ybs.
b) langsung mendefinisikan variabel ybs.
Sebagai contoh cara pertama :
• didefinisikan jenis data non-primitif sbb :
nama jenis data adalah anu yang terdiri dari 2 bagian sbb :
i. bagian ke 1 disebut satu berjenis integer, dan
ii. bagian ke 2 disebut dua berjenis karakter.
iii. kemudian didefinisikan variabel x yang berjenis anu.
Pelaksanaan cara definisi tersebut dalam bahasa PASCAL adalah:
type
anu = record
satu : integer;
dua : char;
end;

var
x : anu;

Contoh cara kedua :


• langsung didefinisikan suatu variabel dengan nama x yang terdiri dari 2 sub
variabel sbb :
i. sub-variabel ke 1 disebut satu berjenis integer, dan
ii. sub-variabel ke 2 disebut dua berjenis karakter.
Pelaksanaan definisi seperti ini dalam bahasa PASCAL adalah sbb :
var
x : record
satu : integer;
dua : char;
end;
STRUKTUR DAN NOTASI SEQUENSIAL

Struktur primitif adalah :

● struktur yang tidak dapat dinyatakan melalui struktur lainnya (tidak dapat diuraikan lagi);
● merupakan komponen dasar pembentukan struktur algoritma.

Menurut Bohm dan Jacopini terdapat 3 macam struktur primitif non paralel (= struktur
sequential), yaitu :
1. Sequence
2. Selection
3. Repetition
Tool yang dapat digunakan untuk menggambarkan struktur sequential ini diantaranya adalah
FLOWCHART, dengan notasi sebagai berikut :
Sequence (Berurutan)

Adalah suatu operasi atau kelompok operasi yang dilaksanakan setelah operasi atau kelompok
operasi lain.
Pada struktur ini, setiap instruksi akan dijalankan (dieksekusi) satu demi satu secara berurutan,
mulai dari instruksi yang pertama sampai dengan instruksi yang terakhir.
Selection (Pemilihan)

Adalah struktur yang memilih satu atau beberapa kelompok operasi untuk dilaksanakan
berdasarkan hasil evaluasi terhadap suatu kondisi.

Repetition (Perulangan)

Adalah struktur yang melakukan satu operasi atau beberapa kelompok operasi untuk
dilaksanakan berulang-ulang berdasarkan hasil evaluasi terhadap suatu kondisi.
Ada dua struktur primitif untuk perulangan, yaitu :
1. Struktur Do While, yaitu :
• Dilakukan selama kondisi TRUE;
• Dilakukan minimal 0 kali (tidak ada perulangan)
2. Struktur Repeat - Until , yaitu :
• Dilakukan sampai kondisi TRUE
• Dilakukan minimal 1 kali
Kesimpulan
● Notasi bukan alat untuk merancang, tetapi alat komunikasi/dokumentasi;
● Penggunaan notasi flowchart kurang baik, karena lebih sukar melihat struktur secara
keseluruhan;
● Pemakaian flowchart yang tidak hati-hati merangsang “pola-fikir” yang melanggar prinsip
“struktur”;
● Algoritma harus mencapai state seperti yang diinginkan, dengan kata lain algoritma harus
benar;
● Algoritma harus memperhitungkan kemungkinan sesuai dengan asumsi masalah;
● Algoritma yang baik dipilih dari beberapa algoritma yang benar (jadi pertama-tama harus
ada dulu beberapa algoritma yang benar !!)
OPERASI BACA (dari) DAN TULIS (ke) I/O DEVICE
DEFINISI YANG DIPERLUKAN :
● I/O device tidak memiliki fungsi untuk “mengingat”

● File/storage device memiliki fungsi untuk “mengingat”.

OPERASI BACA DARI I/O DEVICE.

“Membaca” adalah Menerima data dari I/O device dan menampungnya dalam variabel tertentu.

Notasinya : Read (Nama I/O Device) Nama_variabel

Contoh :
● Misal : A variabel integer tunggal ↔ Read (keyboard) A.

● Misal:B variabel integer tunggal ↔ Read (keyboard) A,B.

● Variabel X adalah variabel array dengan type integer.

Read (keyboard) N

i ← 1

while ( i ≤ N)

 do write (layar) i

 Read (keyboard) X(i)

 i ← i+1
endwhile

Final state : N = sesuai dengan yang diberikan oleh user


Fungsi : Menerima masukan “N” dan X(1), X(2),..., X(N)
(Penggunaan While lebih defensif daripada Repeat).

FILE
Perbedaan file dan variabel :

FILE VARIABEL
Memory (mengingat) Jangka Panjang Jangka pendek
Proses (CPU) Tidak dapat dima-nipulasi Manipulasi langsung
langsung, tetapi harus READ
dahulu
KONSEP FILE SEDERHANA

● File terdiri dari kumpulan Record (analogi = 1 baris)


● Record terdiri dari satu atau lebih Field (analogi = 1 kolom)
● Setiap Field berisi satu jenis data
● Satu kali Read file, maka terbaca 1 record data.

Contoh : Terdapat satu file dengan isi :

FILE X Field 1 Field 2 Field 3


Record 1 ABDUL Jln. ABC 17
Record 2 ANI Jln. Dago 19
Record 3 SANDRA KPAD 18
... ... ... ...
Record n ... ... ...

Read (File X) A,B,C atau Write (File X) A,B,C

Sebenarnya ada 5 organisasi dasar file, yaitu :


• Sequential
• Index Sequential
• Indexed
• Direct (Hash)
• Multi ring

Namun yang akan dibahas hanya organisasi ke - 1 saja.


File dengan organisasi Sequential sering disebut sebagai “SIMPLE FILE”
Selain penyeragaman record seperti telah dicontohkan di atas, mungkin ada penambahan pengaturan urutan record.
Jika ada aturan pengurutan tertentu, maka file tersebut disebut “SORTED”.

Sorted dan Key Field :


Perhatikan 3 contoh file berikut :
File A File B File C
1 P 22 8.0 1 A 33 2.5 1 T 44 6.2
2 A 33 2.5 2 K 11 9.7 2 P 22 8.0
3 M 55 7.2 3 M 55 7.2 3 M 55 7.2
4 K 11 9.7 4 P 22 8.0 4 K 11 9.7
5 T 44 6.2 5 T 44 6.2 5 A 33 2.5

File A : Tidak ada aturan pengurutan record;


File B : Record terurut dari kecil ke besar menurut isi field-1, kita katakan bahwa : File B sorted ascending dengan
key field ke 1.
File C : Record terurut dari besar ke kecil menurut isi field-1, kita katakan bahwa:File C sorted descending
dengan key field ke 1.

OPERASI PRIMITIF terhadap SIMPLE-FILE


• READ (Atau Membaca)
Menyalin isi suatu record kedalam 1 atau lebih variabel. Jumlah variabel atau struktur variabel identik dengan
struktur record.
Syntaks untuk membaca tanpa nomor record (operasi sequential) :
Read (Nama_file) Var1, Var2, ...
Syntaks untuk membaca dengan nomor record:
Read (Nama_file, Record_ke) Var1, Var2, ...

• WRITE (atau menulis)


Menyalin isi 1 atau lebih variabel kedalam suatu record.
Syntaks untuk menulis tanpa nomor record (operasi sequential) :
Write (Nama_file) Var1, Var2, ...
Syntaks untuk menulis dengan nomor record:
Write (Nama_file, Record_ke) Var1, Var2, ...

• REWIND (atau menggulung)


Mengembalikan posisi seperti pada saat awal file akan mulai diproses (pada record ke 1)
Syntaks : Rewind (Nama_file)

Pada hampir semua bahasa pemrograman dikenal operasi membuka (Open) dan menutup (close) file.
Secara konseptual logika algoritma, kedua operasi ini sebenarnya bisa diabaikan, karena sifatnya yang pseudo
file operation.

EFEK OPERASI PRIMITIF SIMPLE-FILE


Misalkan ada FILE-X dengan struktur record :

KODE PROPINSI NAMA PROPINSI

dengan isi file seperti terwakili oleh tabel sebagai berikut :


Record 1 A1 AAA
2 A2 BBB
3 B7 KKK
4 B2 FFF

pada saat awal “pointer” file menunjuk posisi awal record ke-1, maka jika ada operasi Read (File-X) x, y ;
efeknya adalah variabel x bernilai “A1” dan y bernilai “AAA”, serta “pointer” menunjuk posisi awal record ke-2.
Pada pembahasan algoritma ini, operasi simple-file bersifat “Record-wise” , yaitu sekali baca 1 record penuh.

KONDISI END OF FILE

Biasa disingkat EOF (Nama File);


Keluarannya berisi nilai TRUE atau FALSE.

• EOF versi Pascal :


Bernilai TRUE tepat sesudah operasi read record terakhir dilaksanakan;
Bernilai TRUE jika file “kosong”

• EOF versi Non Pascal (Cobol, Basic, C, dll):


Bernilai TRUE sesudah operasi read gagal (tidak ada record);
Bernilai FALSE jika file “kosong”, dan akan bernilai TRUE sesudah usaha melaksanakan Read pertama.
Contoh Penggunaan :

Repeat

read(File_x) a,b,c

write(Layar) a,b,c

Until EOF (File_x)

Untuk EOF Pascal, algoritma di atas masih salah, yaitu pada saat recordnya masih kosong, untuk
memperbaikinya dapat dibuat algoritma sebagai berikut :

while Not EOF (file_x)

do Read(file_x) a,b,c

Write(layar) a,b,c

endwhile

Untuk EOF Non Pascal, juga masih terdapat kesalahan, yaitu pada record ke-5 nilai a,b,c tidak terdefinisi, tapi
masih ditampilkan/dituliskan, untuk memperbaikinya dapat dibuat algoritma sebagai berikut :

Read(file_x) a,b,c

while Not EOF (file_x)

do Write(layar) a,b,c

Read(file_x) a,b,c

endwhile.
SEARCHING

1. DEFINISI SEARCHING.

● searching adalah mencari satu ( atau beberapa ) anggauta himpunan yang memenuhi syarat
tertentu
● syarat tersebut biasa disebut "searching criterion".
● himpunan tersebut dalam bentuk objek dapat berupa :
VARIABEL dan nilainya, atau
Isi RECORD pada suatu FILE

2. SEARCHING PADA ARRAY 1 DIMENSI.

Contoh kasus spesifik :


● array integer a telah diisi oleh n buah nilai numerik.

● variabel integer tunggal k juga telah diisi nilai numerik tertentu.

● buat algoritma untuk mencari elemen pada array a yang pertama bernilai = nilai pada

variabel k.
searching criterion :
a(i) = k dimana i adalah pointer pada array, 1 ≤ i ≤ n

Misalkan calon algoritma searching sbb :


i ← 1
while a[i]≠k
 do i ← i+1
endwhile

Maka algoritma ini salah !! Alasannya :


Jika pada array a tidak ada elemen yang = k, maka nilai i akan bertambah terus
menerus. Maka algoritma tersebut diatas tidak akan pernah berhenti (infinite looping).
Oleh karena itu misalnya timbul ide untuk merubah algoritma dengan jalan menambahkan suatu
syarat lain mengenai batas nilai i. Bentuknya sesudah diubah adalah sbb :
i ← 1
while (a[i]≠k)and(i≤n)
 do i ← i+1
endwhile

Algoritma ini masih juga mengandung kesalahan logika, karena:


jika tidak ada elemen pada a yang = k, nilai i akan bertambah terus sehingga
mencapai n+1, dan kondisi :
(a[i]≠k)and(i≤n)
akan melakukan referensi evaluasi terhadap nilai a(n+1), nilai yang tidak terdefinisi !!

3. SEARCHING DENGAN METODA SENTINEL.

Prinsip sentinel :
sebelum melakukan searching pada array, buatlah dibelakang range pencarian suatu
nilai (atau deretan nilai) yang akan menyebabkan searching berhasil, inilah yang
disebut sebagai sentinel.

jika tidak ada elemen "asli" pada array yang memenuhi seraching criterion, maka
searching seakan akan berhasil, akan tetapi pada posisi sentinel tersebut.

Bentuk algoritma untuk kasus diatas :


a[n+1] ← k {buat sentinel}
i ← 1
while (a[i]≠k)
 do i ← i+1
endwhile
atau
a[n+1] ← k {buat sentinel}
i ← 0
repeat
 i ← i+1
until (a[i]=k)

final-state nya :
searching berhasil menemukan elemen ke i pada array a yang = k (~ i≤n)
searching gagal menemukan elemen ke i pada array a yang = k (~ i=(n+1))

Kerangkanya secara umum adalah sbb :


buat sentinel

inisialisasi awal range pencarian

while not "searching-criterion"


do
maju ke anggauta berikut
endwhile

4. SEARCHING TANPA SENTINEL.

Bentuk algoritma searching tanpa menggunakan sentinel untuk contoh kasus diatas adalah sbb :
s ← TRUE
i ← 1
while (i<=n) and (s)
 do if a(i)=k
  then s ← FALSE
  else i ← i+1
 endif
endwhile

final-state nya :
searching berhasil menemukan elemen ke i pada array a yang = k
s=FALSE dan i≤ n,
searching gagal menemukan elemen ke i pada array a yang = k
s=TRUE dan i=(n+1)

5. SEARCHING PADA HIMPUNAN "SORTED" ( TERURUT ).

Misalkan kasus searching pada array 1 dimensi tersebut diatas diubah sedikit, dengan
menambahkan bahwa misalnya : nilai pada array a telah sorted ascending ( terurut mulai dari
KECIL ke BESAR, dari elemen ke 1 s/d ke n ).
Kedua algoritma pokok seperti diatas sebenarnya dapat saja dipergunakan, meskipun hasilnya
kurang efisien. ( jika belum ketemu akan terus mencari sampai akhir range, meskipun misalnya
telah menjumpai elemen yang bernilai lebih besar dari nilai k yang dicari ! )

Modifikasi Algoritma Searching Non-Sentinel supaya menjadi lebih efisien :

s ← TRUE
i ← 1
while (i<=n) and (s)
do if (a(i)=k) or (a(i)>k)
  then s ← FALSE
 else i ← i+1
endif
endwhile

Perhatikan bahwa final-state nya agak berubah sbb :


"berhasil" s=FALSE dan i<=n dan a[i]=k
searching berhasil menemukan di i
"gagal" s=TRUE dan i=n atau
s=FALSE dan i<=n dan a[i]>k

BINARY SEARCHING

Khusus dipergunakan untuk HIMPUNAN TERURUT !!

Prinsip :
1. Definisikan selang : batas_atas = 1, dan batas_bawah = anggauta terakhir seluruh deret.
2. Periksalah nilai yang dicari, diperoleh 4 kemungkinan :
a. lebih kecil dari anggauta teratas pada selang.
b. lebih besar dari anggauta terakhir pada selang.
c. sama dengan anggauta teratas pada selang.
d. sama dengan anggauta terakhir pada selang.
e. di antara keduanya.
3. Jika dijumpai kondisi a atau b berarti searching gagal, algoritma berhenti.
4. Jika dijumpai kondisi c atau d berarti searching berhasil, algoritma berhenti.
5. Jika dijumpai kondisi e dan batas_bawah ≤ (batas_atas + 1) , maka berarti searching
gagal, algoritma berhenti.
5. Jika dijumpai kondisi e dan batas_bawah > (batas_atas + 1) , maka :
hitung : posisi_tengahnya = ( atas + bawah )/2 dibulatkan .
5. Periksa apakah nilai yang dicari "diatas" atau "dibawah" nilai anggauta tengah tersebut,
dijumpai 3 kemungkinan sbb:
a. jika "sama", maka berari searching berhasil, algoritma berhenti.
b. jika "diatas", definisikan selang baru dengan batas_atas tetap dan
batas_bawah = posisi_tengah, ulangi langkah ke 2.
c. jika "dibawah", definisikan selang baru dengan batas_bawah tetap dan batas_atas =
posisi_tengah, ulangi langkah ke 2.

Bentuk algoritmanya untuk kasus searching pada array 1 dimensi seperti diatas :
{ awal, akhir dan tengah integer }
awal ← 1
akhir ← n
case of
 k=a[awal] : { sama dengan batas awal }

 k=a[akhir] : { sama dengan batas akhir }

 k<a[awal] : { di bawah range }

 k>a[akhir] : { di atas range }

 default : { dalam range }
 tengah ← (awal+akhir)/2
 while (a[tengah]#k) and ((akhir-awal)>1)
  do if k>a[tengah]
   then akhir ← tengah
   else awal ← tengah
  endif
  tengah ← (awal+akhir)/2
 endwhile
endcase

final-state :
"berhasil" a[awal]=k atau a[akhir]=k dan a[tengah]=k
"gagal" (awal-akhir)<=1

6. SEARCHING PADA FILE TIDAK SORTED.

Tidak dapat dipergunakan metoda SENTINEL ( karena melibatkan operasi menulis record baru
pada file ybs yang akan berfungsi sebagai record sentinel, sedangkan perubahan terhadap isi file
sebaiknya dihindari ! ).
misalkan contoh kasusnya :

FILE-A berisi data kota dengan struktur record sbb :


Kode Nama Jumlah Penduduk
Kota Kota Kota
Organisasi : tidak-sorted !
Variabel k berisi kode kota yang dicari.

Maka bentuk algoritmanya untuk Eof Versi Non-Pascal :


read(FILE-A)a1,a2,a3
while (a1#k) and (not(EOF(FILE-A)))
 do read(FILE-A)a1,a2,a3
endwhile

final statenya :
"berhasil" a1=k dan eof(FILE-A)=FALSE
"gagal" eof(FILE-A)=TRUE

catatan : bagaimana dengan algoritma untuk Eof Ala Pascal ?


HIRARKI PROGRAM DAN PEMODULAN
Program terdiri atas kumpulan MODUL yang saling berhubungan. Struktur program bukan saja
hasil dari algoritma yang ada didalam modulnya, akan tetapi juga merupakan semacam
"abstraksi" hubungan antar modulnya.
MODUL : bagian dari program/algoritma yang merupakan suatu unit dengan tujuan yang spesifik.
Istilah istilah yang serupa tapi tak sama :
● PROCEDURE : biasa dipergunakan dalam konteks algoritma, dipergunakan juga dalam

bahasa PASCAL.
● FUNGSI : dipergunakan dalam bahasa PASCAL untuk menyatakan unit yang

"menghasilkan" 1 buah nilai saja.


● SUB-PROGRAM : dipergunakan dalam bahasa FORTRAN.

● RUTIN/SUB-RUTIN : dipergunakan dalam bahasa FORTRAN.

HUBUNGAN ANTAR MODUL.

Ilustrasi :
misalkan suatu program harus berisi fungsi-fungsi sbb :
● mencari nilai maksimum pada array integer a yang telah terisi n buah elemennya

● mencari nilai maksimum pada array integer b yang telah terisi n buah elemennya

● mengalikan kedua nilai maksimum tersebut

bentuk algoritma sementaranya :


{ cari posisi nilai maksimum pada array a }

j ← 1

i ← 2

while (i ≤ n)

do if a(j)< a(i)

  then j ← i

  else

 endif

 i ← i + 1
endwhile

{ cari posisi nilai maksimum pada array b }

k ← 1

i ← 2

while (i ≤ m)

 do if b(k)< b(i)

  then k ← i

  else

 endif

 i ← i + 1
endwhile

{ kalikan keduanya }

z ← a(j)*b(k)

Tampak bahwa ada bagian dari algoritma yang "serupa tapi tidak sama". Bentuknya tidak tepat
sama, akan tetapi sangat serupa, karena fungsinya sama : mencari posisi nilai maksimum pada
sebuah array.
Perbedaan terjadi karena :

cari posisi nilai cari posisi nilai maks


maks pada array a pada array b
array yang menjadi objek pencarian a b
batas pencarian s/d elemen ke n m
hasil (posisi nilai maksimum) tersimpan j k
di

Maka algoritma diatas dapat "direstrukturisasi" dengan cara memisalkan bahwa ada "modul"
yang berfungsi mencari posisi nilai maksimum tersebut. Modul ybs membutuhkan "input" : array
yang menjadi objek serta jumlah elemennya; dan akan menghasilkan "output" posisi nilai
maksimum pada array.
Misalkan modul ybs diberi nama MAX, dengan asumsi bahwa :
input : array objek bernama x dengan t buah elemen
output : posisi maksimum di var p
maka pada algoritma akan berubah sbb :
UTAMA MAX( x,t,p)

 { cari posisi nilai maksimum pada array a }  p ← 1

 MAX(a,n,j)  i ← 2

 { cari posisi nilai maksimum pada array b }  while (i ≤ t)

 MAX(b,m,k)   do if x(p)< x(i)

 { kalikan keduanya }   then p ← i

 z ← a(j)*b(k)   else
end UTAMA   endif

  i ← i + 1

 endwhile
end MAX

Perjanjian Penulisan Modul

Perhatikan Perjanjian Penulisan Modul Yang Dipergunakan :


● Setiap Modul Dimulai Dengan Nama Modul Dan Asumsi Nama Input Serta Output ( Jika

Ada ), Diakhiri Dengan End Diikuti Nama Modul; Semua Diberi Garis Bawah.
● Ada Garis Penghubung Awal Definisi Dan Akhir Definisi Sebuah Modul.
Dari ilustrasi Diatas Dapat Disimpulkan Bahwa
Hubungan Elementer Antar Modul Adalah Sbb :
● Ada Modul Yang Memanggil Atau "Calling

Module" (Dalam Ilustrasi Ialah Modul Utama )


● Ada Modul Yang Dipanggil Atau "Called

Module" (Dalam Ilustrasi Ialah Modul Max )


● Calling Module Memasok Parameter Ke Called

Module ( Dalam Ilustrasi Ialah Array, Jumlah


Elemen )
● Called Module Memberikan Hasil Dengan 2

Cara (Prosedur Atau Fungsi Dalam Pascal )

Keadaan Tersebut Sering Digambarkan Melalui


Diagram Hubungan Disamping.

PENGOPERAN NILAI PARAMETER ( PARAMETER-PASSING ).

Pada ilustrasi diatas pada saat pemanggilan modul MAX dari modul UTAMA, harus ada
"pengoperan" nilai parameter array objek dan jumlah elemen. Demikian pula pada saat modul
MAX selesai menjalankan fungsinya, harus ada "pengoperan" hasil yang berupa posisi nilai
maksimum didalam array objek.
Pengoperan nilai dapat dilakukan melalui 2 cara : passing by value atau passing by address.

● Passing by value : pada saat pemanggilan MAX(a,n,j) maka nilai a(1) s/d a(n) disalinkan
ke x(1) s/d x(n), dan nilai n serta j disalinkan ke t serta p. Demikian pula pada saat
pemanggilan MAX(b,m,k) akan terjadi pengoperan seperti ini. Perhatikan bahwa setelah
modul MAX selesai tidak terjadi penylainan nilai apapun, sehingga nilai j pada modul
UTAMA tidak berubah.

● Passing by address : pada saat pemanggilan MAX(a,n,j) tidak terjadi penyalinan nilai
seperti diatas. Yang terjadi adalah bahwa alamat array x disamakan dengan alamat array
a., demikian pula alamat t disamakan dengan alamat n, dan alamat j disamakan dengan
alamat p. Dengan demikian maka referensi terhadap nilai x(1) akan sama dengan referensi
terhadap nilai a(1) dst. Maka jika pada modul MAX ada perubahan nilai, maka perubahan
nilai tersebut akan dibawa sampai ke modul UTAMA.
Berdasarkan uraian tersebut, jelas bahwa jika yang terjadi ialah passing by value maka modul
MAX harus berbentuk FUNGSI. Karena jika bentuknya PROSEDUR, nilai var j pada modul
UTAMA tidak akan terisi pada saat pemanggilan modul MAX. Pada konteks algoritma secara
umum tidak dianggap perlu untuk membedakan kedua jenis parameter passing tersebut ! Masalah
parameter-passing ini baru perlu ditinjau pada level pembuatan program.

Catatan : pelajari pengaturan dan syntax untuk menerapkan kedua jenis passing-parameter ini
pada bahasa PASCAL dan C !

Variabel Lokal Dan Variabel Global.

Variabel lokal adalah variabel yang hanya dikenal dalam lingkup sebuah modul saja, sedangkan
variabel global adalah variabel yang dikenal oleh semua modul yang ada.
Variabel global dapat digunakan untuk menampung nilai nilai yang dipergunakan baik pada
modul pemanggil maupun modul yang dipanggil. Akan tetapi sebaiknya tidak dipergunakan
untuk menggantikan mekanisme passing parameter ( kekecualian ada untuk beberapa kasus
khusus ). Jika prinsip ini dilanggar maka besar kemungkinan timbulnya semacam "kericuhan"
dalam program ybs.

SIFAT REKURSIF.

Istilah rekursif dipergunakan untuk mewakili keadaan dimana suatu modul memanggil dirinya
sendiri. Sebagai contoh :
berdasarkan definisi matematis untuk faktorial sbb :
n! = n * (n-1)! untuk n>1, dan

1! = 1

maka dibuat sebuah modul fungsi bernama FAK dengan parameter y sbb :
{ perjanjian ala bahasa PASCAL }
FAK(y)

 if y > 1

 then FAK ← y * FAK(y-1)


 else FAK ← 1

 endif
end FAK

Perhatikan bentuk dibelakang then, ada pemanggilan terhadap fungsi FAK dengan nilai
parameter y-1. Demikian pula dibelakang else ada assignment nilai FAK.
Jika modul FAK ini dipanggil dari modul lain misalnya melalui operasi
z ← FAK(1), maka akan terjadi :
● parameter y diberi nilai 1, kemudian

● operasi pada modul FAK dijalankan, kemudian

● karena y=1 maka operasi dibelakang else akan dijalankan, sehingga

● nilai kembalian fungsi (var FAK ) akan diberi nilai 1, selanjutnya

● kembali ke modul pemanggil, var z akan memperoleh nilai 1 ( sesuai dengan nilai

kembalian).

Jika modul FAK ini dipanggil dari modul lain misalnya melalui operasi
z ← FAK(2), maka akan terjadi :
● parameter y diberi nilai 2, kemudian

● operasi pada modul FAK dijalankan, kemudian

● karena y=2 maka operasi dibelakang then akan dijalankan, sehingga

● nilai kembalian fungsi (var FAK ) akan diberi nilai = 2 * nilai kembalian dari pemanggilan

fungsi FAK(1). Oleh karena itu fungsi FAK harus dipanggil lagi, dan perhitungan nilai
kembalian ini akan ditunda dahulu.
● pada pemanggilan fungsi FAK yang kedua kalinya ini, parameter y ( yang baru ) akan

diberi nilai 1, kemudian operasi pada modul FAK ( yang baru ) dijalankan mulai dari atas,
sehingga
● karena y yang baru = 1 maka operasi dibelakang else akan dijalankan, sehingga

● fungsi FAK ( yang baru ) akan mengembalikan nilai = 1 ke fungsi FAK yang terdahulu,

kemudian kembali ke perhitungan yang tertunda


● fungsi FAK ( yang lama ) akan melanjutkan perhitungan nilai kembalian, diperoleh nilai =

2 * 1 = 2. Nilai inilah yang dikembalikan ke modul pemanggil awal, sehingga


● kembali ke modul pemanggil, var z akan memperoleh nilai 2 ( sesuai dengan nilai

kembalian yang terakhir ).


Perhatikan bahwa modul FAK dipanggil 2 kali ! Pemanggilan pertama dari modul lain,
sedangkan pemanggilan kedua dari dalam modul FAK sendiri.
1. TRANSFORMASI STATE.

Ingat bahwa :
"Operasi adalah aksi yang merubah state"
sebagai contoh :

state-sebelum : variabel integer a isinya belum terdefinisi ( a=?)


operasi :a←2
state-sesudah : a=2, atau var a bernilai 2

Transformasi state seperti pada contoh tersebut dapat digambar dengan 2 macam cara :

cara-1 cara-2

bulatan adalah operasi garis+panah adalah operasi


garis+panah adalah state bulatan adalah state

Cara ke 1 umum dipergunakan dalam berbagai metoda perancangan program, sedangkan cara ke 2
dalam analisis algoritma secara matematis. Cara ke 1 menghasilkan diagram data-flow, atau diagram
state-transformation sedangkan cara ke 2 menghasilkan diagram state-transition.

2. ALGORITMA SEBAGAI TRANSFORMASI STATE.


Algoritma dapat dipandang sebagai transformasi dari initial-state ke final-state. Transformasi ini
merupakan ujung dan pangkal dari sejumlah transformasi yang saling berhubungan.
Contoh sebuah algoritma yang digambarkan sebagai suatu rangkaian transformasi :

Perhatikan bahwa :

• ada 2 operasi, ialah a dan b


• ada 4 state, ialah initial-state, final-state, state-1 dan state-2.
• operasi a dapat melakukan 4 macam transformasi sbb :
1. dari initial-state ke final-state
2. dari initial-state ke state-1
3. dari state-2 ke final-state
4. dari state-2 ke state-1

Gambar diatas mengikuti cara ke 1, sedangkan gambar dibawah ini mengikuti cara ke 2.

initial state final-state


a= ? a a= 0
a a

a
state - 1 state - 2
a <> 0
b

3. REGULAR EXPRESSION.

adalah pernyataan himpunan words yang dibentuk dari suatu himpunan symbol ( atau alphabet ).

misalnya : diketahui alphabet atau himpunan symbol bernama H yang terdiri dari simbol a dan b, atau
secara matematis : H { a,b }

Words dibentuk dari deretan lebih dari 1 symbol, misalnya dalam hal ini ada 6 word sbb :
a, ab, aba, ba, bb, aa
Ke 6 word tersebut misalnya saja membentuk suatu himpunan word yang bernama W, maka secara
matematis ditulis : W { a,ab,aba,ba,bb,aa }
misalnya ada himpunan words lain yang bernama W1 dengan deskripsi : kumpulan semua kombinasi
symbol alphabet H yang mengandung hanya 1 buah a dan diakhiri dengan b.
Berarti anggauta W1 adalah : ab, abb, abbb, abbbb, abbbbb .......dst

Dalam hal ini kita tidak dapat mendeskripsikan anggauta W1 dengan cara seperti pada himpunan W,
karena anggauta W1 banyak sekali ( tak hingga ).
Untuk keperluan menyatakan suatu himpunan word dibuat notasi sbb :
* dengan arti : { Null, a , aa, aaa, aaaa dst } ditulis sebagai a*
⊕ dengan arti : { a,b,c } ditulis sebagai a ⊕ b ⊕ c

Dengan cara demikian maka W1 dapat diwakili oleh : ab(b)*


Ini yang disebut sebagai Regular Expression.

Perhatikan bahwa :
(a ⊕ b)* berarti {Null,a,b,aa,bb,ab,ba,aaa,bbb,abb,aab,aba,baa,bba,bab ......dst }
bb* berarti {b, bb, bbb, bbbb,.....dst } tanpa Null !
(a* ⊕ b*) berarti : {Null, a, aa, aaa.....dst, b, bb, bbb....dst}

4. HIMPUNAN "WALK".

Perhatikan contoh diagram transformasi state seperti pada butir 2 diatas,


digambarkan lagi tanpa memperhatikan perincian state maupun operasi.
"Walk" ( atau perjalanan ) dari initial state ke final state mempunyai banyak
kemungkinan :
langsung a
meliwati b 1x aba
meliwati b 2x ababa
.......dst

Maka himpunan walk dari initial state ke final state tersebut adalah :
{ a, aba, ababa, .........dst }
atau dapat diwakili oleh suatu regular expression :
R1=(ab)*a atau R2=a(ba)*

PROGRAM SEBAGAI TRANSFORMASI STATE.

Transformasi state adalah suatu proses "perpindahan" dari suatu state satu ke state lainnya.
Seperti pernah disinggung terdahulu suatu program dapat dianggap sebagai proses transformasi dari
suatu initial state ke final state tertentu. Sedangkan state sendiri dapat dinyatakan secara formal
melalui kombinasi hal hal sbb :
● variabel beserta deskripsi nilainya
●file beserta deskripsi isi dan parameter lainnya ( mis. penunjuk posisi record ).
Sama halnya dengan program maka modul dan operasi dapat pula dianggap sebagai transformasi state
pula.

Diagram Transformasi State.

Transformasi state sering digambar melalui sebuah


diagram. Notasi yang biasa dipergunakan adalah seperti
pada contoh di samping ini. Bulatan atau titik
melambangkan sebuah state, sedangkan garis berpanah
melambangkan transformasi state.
Bentuk tersebut diatas dalam lingkup ilmu matematika
sering dipergunakan untuk merepresentasikan sebuah
graph. Demikian pula halnya dengan program, algoritma
lambang lambang dasar pada diagram dan diagram transformasi statenya dalam bentuk
tansformasi state abstraknya adalah sebuah graph berarah (directed graph).
Analisis lanjut mengenai program dan algoritma
merupakan terapan teori teori matematika mengenai graph.

Contoh Diagram Transformasi State untuk Sebuah Algoritma.

Sebuah algoritma dapat direpresentasikan oleh sebuah diagram transformasi atate. Sebagai contoh,
perhatikan algoritma ALGO1 dibawah ini.
 { x adalah array integer }
 proc ALG01
 i ← 1 {operasi 01}
 while i<5
  do x(i)←i {operasi 02}
  i←i + 1 {operasi 03}
 endwhile
 endproc ALG01
initial state: x dan i nilainya tidak diketahui
final state : x[1] =1, x[2]=2, x[3]=3, x[4]=4, i=5
atau secara matematis x[k]=k untuk k=1 s/d i; dan i=5
state antara
S1 sesudah operasi i ← 1 ; maka i=1 dan x tidak diketahui nilainya.
S2 sesudah operasi i ← i + 1 ; maka secara matematis x[k]=k; k=1 s/d i.
dari initial state dengan transformasi melalui operasi O1 dapat dicapai state S1.
dari state S1 melalui operasi O2 diikuti O3 dapat dicapai state S2.
dari state S2 melalui operasi O2 dikuti oleh O3 dapat dicapai state S2 atau final state.

ALGO1 sebagai tansformasi state

Jika algoritma diatas diubah, dimana batas pengulangan pada struktur while diganti dengan suatu
"parameter", ialah suatu nilai n yang >=0; maka akan diperoleh bentuk ALGO2 dibawah ini. Gambar
diagram transformasi state sekarang menjadi lebih rumit.

proc ALG02
 { x adalah array integer, n>=0 }
 i ← 1 {operasi O1}
 while i<n
  do x(i)←i {operasi O2}
  i←i + 1 {operasi O3}
 endwhile
endproc ALG02

Pada algoritma ALGO2 ini, kemungkinan perjalanan dari initial state ke final state yang dapat terjadi
adalah sbb :
• jika nilai n=0, maka sesudah dilakukan O1, langsung dicapai final state
• jika nilai n=1, maka sesudah dilakukan O1, langsung dicapai final state
• jika nilai n=2, maka dilakukan O1 diikuti oleh O2 dan O3, pengulangan while hanya 1 x.
• jika nilai n=3, maka dilakukan : O1, O2, O2, O2, O3 kemudian dicapai final state.
• dst jika nilai n=4,5 .....

Sesuai dengan bahasan diatas maka :


• dari initial state dengan operasi O1 sampai ke state S1, kemudian tanpa operasi (NIHIL)
sampai ke final state.
• dari initial state dengan operasi O1 sampai ke state S1, kemudian melalui operasi O2 dan O3
sampai ke state S2, kemudian tanpa operasi ( NIHIL ) sampai ke final state.
• dari initial state dengan operasi O1 sampai ke state S1, kemudian melalui operasi O2 dan O3
sampai ke state S2, melalui operasi O2 dan O3 kembali ke state S2, kemudian akhirnya tanpa
operasi ( NIHIL ) sampai ke final state.
• dst

Gambar yang diperoleh dapat dilihat dibawah ini. Akan tetapi bentuk diagram yang lebih lazim
adalah seperti pada gambar ke 3. Bentuk ini diperoleh dengan melebur state S1, S2 dan final state
menjadi sebuah state saja.

ALGO2 sebagai tansformasi state


Equivalensi Struktur Primitif Dengan Diagram Transformasi State.

Pada pemrogram kita kenal 3 buah struktur primitif ialah :


• struktur urutan
• struktur pilihan : IF
• struktur pengulangan : WHILE-DO dan REPEAT-UNTIL

diagram tansformasi state untuk struktur primitif

Semua struktur primitif tersebut mempunyai bentuk equivalensi diagramnya masing masing.
Perhatikan gambar di atas.

REGULAR EXPRESSION.

Algoritma sebagai suatu Himpunan Perjalanan.

Suatu program dapat direpresentasikan oleh suatu diagram transfomasi state, hal ini dapat
disimpulkan lebih lanjut bahwa program mempunyai hubungan langsung dengan suatu graph-
berarah. Program atau algoritma tidak lain adalah :
suatu himpunan perjalanan dari "node initial state" ke "node final state" pada suatu graph-
berarah yang mewakilinya.

proc ALG03
 a
 while C
  do b
 endwhile
endproc ALG03

Sebagai contoh perhatikan contoh algoritma ALGO3 di bawah ini. a dan b adalah suatu operasi
tertentu, sedangkan C adalah suatu kondisi. Karena ketiganya tidak diketahui dengan pasti bentuknya,
maka jika algoritma dilaksanakan kemungkinan "perjalanan" dari initial-state ke final-state adalah
sbb :
jika while dilakukan 0x : a
jika while dilakukan 1X : ab
jika while dilakukan 2X : abb
dst

atau jika H adalah himpunan semua kemungkinan perjalanan, maka secara pernyataan himpunan :
H={a,ab,abb,abbb,abbbb,......}
Perhatikan bahwa :
• ab berarti operasi a diikuti operasi b, tidak sama dengan ba !
• H tidak dapat dinyatakan melalui semua anggautanya ( dengan cara extension ), karena
sebenarnya himpunan tidak boleh dinyatakan dengan masih memakai titik titik

Himpunan Perjalanan dengan Cara Regular Expression.

Untuk dapat menyatakan himpunan perjalanan seperti diatas secara formal dan benar, ada suatu cara
pernyataan matematis yang dapat dipergunakan. Cara tersebut disebut sebagai regular-expression.
Komponen notasinya adalah :
lambang contoh keterangan
⊕ a ⊕ b artinya : { a, b }
- - sering dibaca sebagai "kleene-star"
a
artinya : { Λ,a,aa,aaa,aaaa,aaaa,........ }
Λ berarti "null" ( "kosong" )
atau berarti juga :
{ Λ Å a Å aa Å aaa Å aaaa Å aaaaa
Å........ }

Dengan menggunakan notasi seperti ini maka himpunan H diatas dapat ditulis :
H= { a(Λ ⊕ b ⊕ bb ⊕ bbb ⊕ bbbb ⊕...} }
-
= { ab }

Sifat Sifat Aljabar Regular Expression.

Perhatikan bahwa aturan aljabar yang dipergunakan dalam regular expression "mirip" dengan aturan
dalam ekspresi matriks. Misalnya mengenai aturan distributif :
xy ⊕ xz = x ( y ⊕ z )
xy ⊕ zy = ( x ⊕ z ) y
Perhatikan pula bahwa :
x ⊕ xz = x ( Λ ⊕ z )
y ⊕ zy = ( Λ ⊕ z ) y

Sifat sifat lain :


- -
xx = x x = ( x ⊕ xx ⊕ xxx ⊕ xxxx ⊕ .... )
- -
x(yx) = (xy) x = ( x ⊕ xyx ⊕ xyxyx ⊕ xyxyxyx ⊕ ....)

Himpunan Super dan Closure.

Jika suatu algoritma dijalankan, maka pada suatu saat akan berhenti tepat pada saat final statenya
tercapai. Per definisi suatu algoritma tidak akan pernah mengandung jumlah langkah yang tidak
terhingga. Oleh karena itu himpunan perjalanan yang diwakili oleh suatu algoritma bersifat terhingga.
Dilain pihak suatu regular expression ( yang mengandung "kleene-star" ) mungkin
merepresentasikan suatu himpunan perjalanan yang anggautanya tak berhingga. Oleh karena itu suatu
regular expression mungkin menjadi himpunan super dari suatu algoritma.

{diketahui : 0 ≤ n ≤ 4 }
proc ALG04
 i←1 {op.a}
 while i<=n
  do i←i+1 {op.b}
 endwhile
endproc ALG04

Sebagai ilustrasi :
ALGO4 disamping ini mempunyai himpunan perjalanan :
{ a, ab, abb, abbb, abbbb }
-
maka : RE1: ab dan
RE2 : a(Λ⊕b⊕bb⊕bbb⊕bbbb⊕bbbbb)
sama sama merupakan himpunan super dari ALGO4.
Akan tetapi jika nilai n berubah maka hanya RE1 yang pasti masih merupakan himpunan super dari
ALGO4 tersebut !
Suatu regular expression juga dapat menjadi himpunan super dari regular expression lainnya.
Sebagai contoh misalnya saja :
- -
RE1 : a ⊕ b
= (Λ ⊕ a ⊕ aa ⊕ aaa ⊕....)⊕( Λ ⊕ b ⊕ bb ⊕ bbb ⊕....)
= Λ ⊕ a ⊕ b ⊕ aa ⊕ bb ⊕ aaa ⊕ bbb ⊕......
atau sebagai himpunan { Λ, (a,b) , (aa,bb) , (aaa,bbb) , ..... }

-
RE2 : ( a ⊕ b )
= ⊕ (a⊕b) ⊕ (a⊕b)(a⊕b) ⊕ (a⊕b)(a⊕b)(a⊕b) ⊕ .....
= Λ ⊕ a⊕b ⊕ aa⊕ab⊕ba⊕bb ⊕ (a⊕b)(aa⊕ab⊕ba⊕bb) ⊕ .....
= Λ ⊕ a⊕b ⊕ aa⊕ab⊕ba⊕bb ⊕ aaa⊕aab⊕aba⊕abb⊕
baa⊕bab⊕bba⊕bbb ⊕ .....
atau sebagai himpunan
{ Λ, (a,b) , (aa,ab,ba,bb) , (aaa,aab,aba,abb,baa,bab,bba,bbb) , ..... }
maka jelas bahwa : RE1 ∈ RE2

Ada perbedaan antara pengertian himpunan super dan closure. Pada masalah algoritma vs regular-
expression yang dimaksud dengan closure dari suatu algoritma adalah :
himpunan yang dapat melingkupi semua kemungkinan perjalanan
dari is ke fs pada sebuah algoritma sekaligus dengan "tepat"
mencerminkan "karakteristik" algoritma ybs

Sebagai ilustrasi, perhatikan ALGO5, serta kedua RE dibawah ini :

{diketahui : 0 n 3 }

proc ALG05

 i←0 {op.a}
 repeat
  do i←i+1 {op.b}
 until i>n
endproc ALG05

RE1 : abb-
RE2 : ab-b
RE3 : ab ⊕ abb ⊕ abbb ⊕ abbbb
RE4 : ab-

• RE3 dengan tepat mewakili jumlah anggauta himpunan perjalanan ALGO5, sedangkan RE1,
RE2 dan RE4 terlalu "berlebih". Berarti RE1, RE2 dan RE4 adalah himpunan super dari ALGO5.
• RE1, RE2 dan RE4 dengan baik merepresentasikan karakteristik struktural pada ALGO5,
-
ialah dengan adanya lambang pada regular expression yang identik dengan adanya
"pengulangan" pada.algoritma. Sedangkan pada RE3 tidak dijumpai adanya pengulangan, hanya
ada lambang ⊕ yang identik dengan "pilihan" atau struktur if atau case.
• RE4 kurang tepat dalam merepresentasikan karakteristik pengulangan pada ALGO5, karena
-
a berarti "pengulangan minimal 0x" atau dengan kata lain lebih tepat mewakili struktur while-do,
bukan repeat-until.
• RE2 kurang tepat untuk merepresentasikan struktur repeat-until karena letak tanda
pengulangan (-) tidak identik dengan letak "keputusan" penghentian pengulangan pada algoritma.
Pada algoritma ALGO5, algoritma berhenti tepat setelah pengulangan diputuskan untuk
dihentikan. Sedangkan jika ditulis sebagai b-b berarti bahwa setelah pengulangan berhenti, masih
ada 1 x lagi b akan dilaksanakan, baru algoritma berhenti.

Maka sebagai kesimpulan :


RE1 lah yang dapat dianggap sebagai closure dari algoritma ALGO5.
LATIHAN SEARCHING
A. Diketahui : array a berisi n buah nilai
array b berisi m buah nilai
m<=n
Ditanya : algoritma searching "posisi awal" deretan nilai pada array a yang "match" dengan
nilai pada array b, misalnya posisi tsb p, maka :

(a[p]=b[1]) and (a[p+1]=b[2]) and ........ (a[p+m-1]=b[m])

ilustrasi : misalkan n=6 dan m=3 dan isi array a dan b masing masing adalah,
3 7 1 2 3 6

1 2 3
maka posisi awal match tsb adalah 3, karena a[3]=b[1], a[4]=b[2] dan a[5]=b[3].

Petunjuk :
Pergunakan dulu prinsip sentinel, cobalah dulu untuk m=2, m=3 dst, amati kesulitan yang
timbul sebagai akibat "searching-criterion" yang makin panjang. Cari cara untuk
mengatasinya !
Coba buat pula untuk yang non-sentinel !

B. Cobalah modifikasi algoritma searching untuk himpunan sorted ( terurut ) jika aturan
pengurutan dari besar ke kecil ( sorted descending ) :
untuk kasus array 1 dimensi, dan
untuk kasus file.

C. Terapkanlah algoritma binary search untuk searching pada file yang sorted.
BAGIAN I. KEABSAHAN OPERASI

Carilah syarat-syarat mengenai jenis(type) variabel pada operasi assignment di bawah ini, sedemikian rupa sehingga
operasi “sah”. Pergunakan asumsi lingkungan pemrograman yang strong typed.
1. Operasi : a[b[c]] ← d or e
(a) a array boolean, b array integer, c integer, d boolean, e boolean.
(b) a array boolean, b array integer, c numerik, d integer, e integer.
(c) a array jenis apa saja asal sama dengan jenis d dan e, b array integer, c integer.
(d) a dan b array integer, c integer, d dan e bertipe sama.
(e) Bukan salah satu jawaban di atas.

2. Operasi : x ← y and (z + 11)


(a) x boolean, y boolean, z integer.
(b) x, y, dan z integer.
(c) Operasi pasti tidak sah
(d) x, y, dan z boolean.
(e) Bukan salah satu jawaban di atas.

3. Operasi : s[u + 2] ← u
(a) s array yang sejenis dengan u.
(b) s dan u numerik, dimana s adalah array.
(c) operasi pasti tidak sah.
(d) s array integer, u integer.
(e) Bukan salah satu jawaban di atas.

4. Operasi : w ← (x > y)
(a) operasi pasti tidak sah.
(b) w, x, dan y sejenis
(c) w boolean, x dan y integer.
(d) w numerik, x dan y boolean.
(e) Bukan salah satu jawaban di atas.

5. Operasi : t[3].w ← y.t


(a) t array jenis komposit, dimana salah satu unsurnya adalah subvar w. y juga jenis komposit, dimana salah satu
unsurnya adalah subvar t. Jenis komposit untuk t tidak perlu sama dengan jenis komposit untuk y, akan tetapi jenis subvar w
dari var t harus sama dengan jenis subvar t dari var y.
(b) t array jenis komposit, dimana salah satu unsurnya adalah subvar w. y juga jenis komposit, dimana salah satu
unsurnya adalah subvar t. Jenis komposit untuk t dan y harus sama, demikian juga jenis subvar-nya.
(c) t array jenis komposit, dimana salah satu unsurnya adalah subvar w. y juga jenis komposit, dimana salah satu
unsurnya adalah subvar t. Jenis komposit untuk t dan y harus sama, tetapi jenis subvarnya tidak perlu sama.
(d) Operasi pasti tidak sah.
(e) Bukan salah satu jawaban di atas.

BAGIAN II. KEBENARAN ALGORITMA


Diketahui
X : variabel array 1 dimensi bertipe integer dengan 5 buah elemen.
n : variabel bertipe integer.
B, S : variabel boolean.
Initial State (Keadaan awal isi setiap elemen array X ) : Final State (Keadaan awal isi setiap elemen array X) :

X ? ? ? ? ? X 1 2 3 4 5
1 2 3 4 5 1 2 3 4 5

Periksalah salah atau benarnya algoritma-algoritma di bawah ini apakah dapat menghasilkan final state di atas, kemudian
pilihlah jawaban yang paling benar pada soal nomor 6 sampai dengan 10.
Keterangan : algoritma benar jika tidak mengandung kesalahan logika.

Algoritma-1 Algoritma-2
n←0 n←0
while n <= 5 do while n <= 5 do
n←n+1 X[n] ← n + 1
X[n] ← n endwhile
endwhile

Algoritma-3 Algoritma-4
n←1 n←1
while n <= 5 do B ← True
X[n] ← n Repeat
n←n+1 while n <= 5 do
endwhile X[n] ← n
n←n+1
if (n = 5)
then B ← False
else
endif
endwhile
until (Not B)
Algoritma-5
n←0
B ← True
S ← False
while (B = True) do
if S
then B ← False
else
X[n] ← n + 1
N←n+1
endif
if (n > 5)
then S ← True
else
endif
endwhile

6. Algoritma-1
(a) tidak mengandung kesalahan logika.
(b) masih salah, karena jumlah elemen array X hanya ada 5.
(c) masih salah, karena ada pengisian indeks/elemen ke-0 dari array X.
(d) masih salah, seharusnya syarat while diganti menjadi n > 5
(e) bukan salah satu jawaban di atas.

7. Algoritma-2
(a) tidak mengandung kesalahan logika.
(b) benar, jika operasi X[n] ← n + 1 diganti menjadi X[n+1] ← n + 1.
(c) masih salah, seharusnya operasi n ← 0 diganti menjadi n ← 1.
(d) masih salah, karena ada pengisian elemen ke-0 pada array X (operasi tidak sah) dan terjadi unterminate loop.
(e) bukan salah satu jawaban di atas.

8. Algoritma-3
(a) benar, jika operasi n ← n + 1 dilakukan sebelum operasi X[n] ← n + 1
(b) masih salah, seharusnya syarat while diganti menjadi n < 5.
(c) tidak mengandung kesalahan logika.
(d) masih salah, karena ada pengisian elemen array X yang ke-6, padahal jumlah elemen = 5.
(e) bukan salah satu jawaban di atas.

9. Algoritma-4
(a) benar, jika syarat until diganti menjadi n > 5.
(b) masih salah, karena terjadi unterminate loop.
(c) masih salah, karena elemen ke-5 pada array X tidak terisi.
(d) tidak mengandung kesalahan logika.
(e) bukan salah satu jawaban di atas.

10. Algoritma-5
(a) tidak mengandung kesalahan logika.
(b) benar, jika operasi n ← 0 diganti menjadi n ← 1.
(c) masih salah, karena ada pengisian elemen ke–0 pada array X (operasi tidak sah).
(d) masih salah, karena terjadi unterminate loop.
(e) bukan salah satu jawaban di atas.

BAGIAN III. “FINAL STATE”

Algoritma-6 11. Jika a dan b variabel integer, dan X variabel array integer dengan
a←1 jumlah elemen 10 dimana masing-masing elemennya berisi sebuah nilai,
b←0 maka tujuan Algoritma-6 adalah :
repeat (a) mempermudah pembuatan program
b ← b + X[a] (b) menghitung nilai a dan b.
a←a+1 (c) tidak bisa ditentukan, karena terjadi unterminate loop.
until a > 10 (d) menghitung jumlah elemen array X.
(e) menghitung jumlah total dari nilai-nilai/isi elemen yang ada pada
array X.

12. Jika a variabel numerik, b variabel boolean, maka final state


Algoritma-7 untuk a dan b setelah algoritma 7 dijalankan adalah :
a ← 5 (a) a = 5, b = False
b ← True (b) a = 3, b = True
if (a < 6) And (Not b) (c) a = 2, b = True
then a ← 2 (d) a = 2, b = False
else (e) a = 3, b = False
a ← 3
b ← (a > 3)
endif

Algoritma-8
i←1
while i <= 5 do
j←1
while j <= 6-i do
A[i,j] ← j
j←j+1
endwhile
i←i+1 13. Jika i dan j variabel integer, A variabel array 2 dimensi bertipe integer dengan jumlah baris = 5 dan jumlah
endwhile kolom = 5, maka final state untuk array A setelah Algoritma-8 dijalankan adalah :

(a) (b) (c) (d) (e)


1 1 1 2 3 4 5 1 1 1 1 1 5 4 3 2 1
1 2 2 2 1 2 3 4 2 2 2 2 5 4 3 2
1 2 3 3 3 3 1 2 3 3 3 3 5 4 3
1 2 3 4 4 4 4 4 1 2 4 4 5 4
1 2 3 4 5 5 5 5 5 5 1 5 5

Algoritma-9 14. Jika n, A, B variabel integer dan Bil array integer


n←1 dengan 100 buah elemen, maka tujuan dari Algoritma-9
A←0 adalah :
B←0 (a) mempermudah pembuatan program
repeat (b) menghitung nilai variabel n, A, B dan isi setiap
if (n Mod 2) = 0 elemen array Bil.
then A ← A + Bil[n] (c) mengisi setiap elemen array Bil.
else B ← B + Bil[n] (d) menghitung jumlah elemen array Bil yang bernilai
endif ganjil dan jumlah elemen array Bil yang bernilai genap
(e) menghitung jumlah total nilai dari elemen ganjil
n←n+1
dan jumlah total nilai dari elemen genap array Bil .
until n > 100

Algoritma-10 15. Array karakter P mempunyai 8 elemen dengan nilai : {a,


m←1 a,b,b,b,c,c,d}, sedangkan array karakter Q juga mempunyai
n←2 8 elemen dengan nilai : {A,B,C,D,E,F,G,H}. Setelah
while m < 8 do algoritma-10 selesai dijalankan maka isi array Q adalah :
while (P[n] = P[m]) do (a) {A,A,C,C,C,E,E,G}
Q[n] ← Q[m] (b) {a,a,b,b,b,c,c,d}
n←n+1 (c) {A,a,B,b,b,C,c,D}
endwhile (d) {A,A,C,C,C,F,F,H}
m←n (e) bukan salah satu jawaban di atas.
n←n+1
endwhile

BAGIAN IV. MELENGKAPI ALGORITMA

Alat hitung (ALU (Aritmethic Logical Unit)) yang ada di dalam mesin komputer hanya mengenal operasi tambah (+) dan
kurang (-). Semua perintah matematik yang berhubungan dengan proses kali, bagi, pangkat, akar diterjemahkan/dihitung
dengan menggunakan proses tambah dan kurang. Contoh untuk melaksanakan perintah perkalian bilangan 2 dengan 5,
dilakukan dengan cara menambahkan bilangan 2 dengan 2 sebanyak 5 kali.
(2 * 5 = 2 + 2 + 2 + 2 + 2).
Berikut ini adalah algoritma yang belum selesai (belum lengkap) dalam bentuk modular untuk melakukan proses perkalian
dua buah bilangan bulat dengan proses penjumlahan.

Diketahui
Bil, pengali, hasil adalah variabel global bertipe integer
Algoritma-XXX
Procedure kali(b,p,h)
{ b,p parameter input passing by value bertipe integer.
h parameter output passing by address/reference bertipe integer.
bp, n variabel lokal bertipe integer. }
bp ← p
if (b = 0) OR (p = 0)
then operasi-1
else
if kondisi-1
then operasi-2
endif
n ← 1;
while kondisi-2 do
operasi-3
n ← n + 1;
endwhile
endif
if p < 0
then h ← ekspresi-1
endif
end_procedure_kali

Modul Utama {pemanggilan procedure}


hasil ← 0
Read(bil)
Read(pengali)
Kali(bil,pengali,hasil)
Write(hasil)
end_modul_utama.
Lengkapilah Algoritma-XXX tersebut di atas dengan cara menjawab pertanyaan-pertanyaan berikut ini :

16. Operasi-1 adalah :


(a) b ← -(b)
(b) p ← -(p)
(c) bp ← 0
(d) h ← 0
(e) h ← bp

17. Operasi-2 adalah :


(a) b ← -(b)
(b) p ← -(p)
(c) bp ← h
(d) h ← -(p)
(e) bukan salah satu jawaban di atas
18. Operasi-3 dan Ekspresi-1 berturut-turut adalah :
(a) h ← b + p, bp
(b) h ← h + p, -(p)
(c) h ← h + b, -(h)
(d) h ← h + bp, -(h)
(e) bukan salah satu jawaban di atas

19. Kondisi-1 adalah


(a) p < 0
(b) b < 0
(c) p > 0
(d) b > 0
(e) bp < 0

20. Kondisi-2 adalah


(a) n < p
(b) n <= p
(c) n < bp
(d) n >= bp
(e) bukan salah satu jawaban di atas
1. Diketahui bahwa :
• z array integer berdimensi 2, dengan nilai seperti pada gambar di samping ini.
• a,b dan c integer Z 1 2 3 4
Baris 1 1 3 2 4
Lacaklah Final state algoritma di bawah ini :
2 1 2 3 4
a 1 3 4 2 3 1
b 1 4 1 3 2 4
c 1
Repeat
Z(a,b) Z(a,b) + c
if (a>1) and (b<4)
then b b + 1
a a - 1
else c c + 1
if (b = 4)
then b a + 1
a 4
else a b + 1
b 1
endif
endif
until (a=5) or (b=5)

2. Diketahui : Array karakter A dan B serta Array integer Y ; dengan initial state sebagai berikut :
1 2 3 4 5 6 7 8 9 10 11 12

A = ‘A’ ‘D’ ‘A’ ‘φ‘ ‘K’ ‘A’ ‘φ‘ ‘D’ ‘A’ ‘B’ ‘R’ ‘A’
(Keterangan : ‘φ‘ = Karakter Blank/spasi),
B= ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘ ‘φ‘
1 2 3 4 5 6 7 8 9 10

Y= 0 0 0 0 0 0 0 0 0 0

Dengan menggunakan Algoritma berikut :


k 0
i 1
while i < 13
do j 1
s .True.
while (j ≤ k) and (s)
do if A(i) = B(j)
then Y(j)Y(j)+1
s .False.
else
endif
j j+1
endwhile
if (s)
then k k + 1
B(k) A(i)
Y(k) 1
else
endif
i i + 1
endwhile

Ditanyakan :
a). Uraikan Final State nya!
b). Apa tujuan algoritma tersebut ?
(Bobot : 20 %)

3. Diketahui :A = variabel array bertipe integer dengan 5 buah elemen.


:n = variabel tunggal bertipe integer.
: B, S = variabel boolean.

Initial State : A ? ? ? ? ?
1 2 3 4 5

Final State : A 1 2 3 4 5
1 2 3 4 5

• Periksalah algoritma-algoritma di bawah ini apakah dapat menghasilkan FS array A yang dimaksud. Jika tidak, maka
tunjukkan kesalahannya dan bagaimana perbaikannya.
• Tentukan final state untuk setiap variabel (A,n,B,S) (tuliskan beserta hasil penelusuran Anda!) (Bobot : 30 %)

1. n 0 2. n 0 3.n 0
while n <= 5 do while n <= 5 do while n < 6 do
nn+1 A[n] n + 1 A[n] n
A[n] n endwhile nn+1
endwhile endwhile
4. n 1 5. n 0 6. repeat
repeat repeat n1
A[n] n nn+1 A[n] n
until n <= 5 A[n] n nn+1
until n > 5 until n = 5

7. n 1 8. n 1
while n <= 5 do while n <= 5 do
nn+1 A[n] n
A[n] n nn+1
endwhile endwhile

9. n 1 10. n 0
B True B True
repeat S False
while n <= 5 do while (B = True) do
A[n] n if (S=True)
nn+1 then B False
if (n = 5) else
then B False A[n] n + 1
endif nn+1
endwhile endif
until (not B) if (n > 5)
then S True
endif
endwhile

You might also like