Professional Documents
Culture Documents
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.
• 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.
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 adalah "Action" yang menghasilkan "Effect". Yang dimaksud dengan effect ialah suatu
perubahan state tertentu. Dengan kata lain :
● 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 :
PROGRAM - KOMPUTER
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" ).
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.
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.
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 ).
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
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.
● 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.
● 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
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
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.
var
x : anu;
● 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”
“Membaca” adalah Menerima data dari I/O device dan menampungnya dalam variabel tertentu.
Contoh :
● Misal : A variabel integer tunggal ↔ Read (keyboard) A.
Read (keyboard) N
i ← 1
while ( i ≤ N)
do write (layar) i
i ← i+1
endwhile
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
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.
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.
Repeat
read(File_x) a,b,c
write(Layar) a,b,c
Untuk EOF Pascal, algoritma di atas masih salah, yaitu pada saat recordnya masih kosong, untuk
memperbaikinya dapat dibuat algoritma sebagai berikut :
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
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
● 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
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.
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))
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)
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 ! )
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
BINARY SEARCHING
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
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 :
final statenya :
"berhasil" a1=k dan eof(FILE-A)=FALSE
"gagal" eof(FILE-A)=TRUE
bahasa PASCAL.
● FUNGSI : dipergunakan dalam bahasa PASCAL untuk menyatakan unit yang
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
j ← 1
i ← 2
while (i ≤ n)
then j ← i
else
endif
i ← i + 1
endwhile
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 :
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)
MAX(a,n,j) i ← 2
z ← a(j)*b(k) else
end UTAMA endif
i ← i + 1
endwhile
end MAX
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
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 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
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
● 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
● 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,
Ingat bahwa :
"Operasi adalah aksi yang merubah state"
sebagai contoh :
Transformasi state seperti pada contoh tersebut dapat digambar dengan 2 macam cara :
cara-1 cara-2
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.
Perhatikan bahwa :
Gambar diatas mengikuti cara ke 1, sedangkan gambar dibawah ini mengikuti cara ke 2.
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
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".
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)*
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.
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.
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 .....
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.
Semua struktur primitif tersebut mempunyai bentuk equivalensi diagramnya masing masing.
Perhatikan gambar di atas.
REGULAR EXPRESSION.
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
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 }
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
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
{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.
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.
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.
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.
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.
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 :
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
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
Ditanyakan :
a). Uraikan Final State nya!
b). Apa tujuan algoritma tersebut ?
(Bobot : 20 %)
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