Ada kalanya untuk menyelesaikan suatu masalah, satu atau beberapa instruksi
harus dikerjakan beberapa kali. Misalnya anda hendak menampilkan tulisan
”algoritma” sebanyak tiga kali, maka algoritmanya dapat ditulis
1. Mulai
2. Tulis ‘Algoritma’
3. Tulis ‘Algoritma’
4. Tulis ‘Algoritma’
5. Selesai
1. Mulai
2. Masukkan bilangan X
7. Tulis (Y)
8. Selesai
Atau dalam algoritma teks standar deskripsinya dapat ditulis seperti berikut :
Deskripsi
Read(X)
Y1
YX*Y
YX*Y
YX*Y
Write(Y)
Jika input algoritma (X) adalah 2, maka perubahan nilai dalam variabel dapat dilihat
pada tabel penyimpanan data berikut.
Perintah X Y Ouput
Read(X)
Y1 2
YX*Y 1
YX*Y 4
YX*Y 8
Write(Y) 16
16
Cara ini memang dapat menyelesaikan permasalahan tersebut di atas, tapi sangat
tidak efisien dalam penulisannya. Bayangkan kalau pengulangan yang harus
dilakukan sebanyak 1000 kali, maka kita harus menulisnya sebanyak seribu kali
pula. Tentunya hal ini sangat sangat merepotkan. Untuk itu kita perlu mengenal
satu lagi algoritma dasar yaitu algoritma pengulangan. Dengan algoritma ini kita
cukup menuliskan perintahnya sekali untuk pengulangan berapapun banyaknya.
Bila mengacu pada bahasa pemrograman Pascal, terdapat tiga ekspresi algoritma
untuk pengulangan :
1. for-do
2. while-do
3. repeat-until
Pengulangan For-Do
For-do menaik
Contoh
for i 1 to 3 do
Write(‘Halo’)
i1..3
Write(‘Halo’)
Kondisi pengulangan for secara tersirat dapat dilihat pada ni (nilai_awal) dan nf
(nilai_akhir); Nilai yang terkandung pada var mula-mula sama dengan nilai_awal,
kemudian bertambah (berkurang) sebanyak satu, kemudian berhenti setelah var
lebih besar (lebih kecil) nilai_akhir.
Contoh
for i 3 downto 1 do
Write(‘Halo’)
Penjelasan
Halo
Halo
Halo
For-do menurun
Kita dapat membuat output yang sama seperti di atas dengan for-do menurun.
for i 3 downto 1 do
Write(‘Halo’)
i3..1
Write(‘Halo’)
Studi Kasus
Output :1 2 3 …
Algoritma 0-1
Algoritma deret
Deklarasi
var
N,x : integer
Deskripsi
read(N)
for x 1 to N do
write(x)
Mula-mula masukkan nilai N, misalnya 3. Setelah itu masuk ke dalam loop dengan x
mula-mula 1. Pengulangan dilakukan selama kondisi bernilai true, yaitu selama nilai
x dalam rentang 1..N. Kemudian write (x) menghasilkan keluaran 1. Proses diulang
lagi dengan x (=2) Kemudian write (x) menghasilkan keluaran 2. Demikian
seterusnya. Aksi tidak lagi dikerjakan saat x>N.
Read(N) 3
Studi Kasus
Buat algoritma yang menampilkan jumlah dari deret pada Algoritma 0-1.
Input :-
Output : jumlah deret
Algoritma 0-2
Algoritma jumlah_deret
Deskripsi
read(N)
jum0
for x 1 to N do
jumjum+x
write(jum)
read(N) 4
jum0 0
write(jum) 10
Penjelasan
Latihan
Coba masukkan input N yang lain, misalnya 7, kemudian isi tabel penyimpanan
data dan tuliskan nilai keluarannya.
Pengulangan While-Do
while <kondisi> do
aksi
t
<kondisi>?
Aksi
Teks algoritma dan flowchart di atas menunjukkan bahwa ada pengecekan kondisi
dulu sebelum aksi berikutnya dilakukan. Aksi di bawah kondisi dikerjakan jika
kondisinya atau lebih tepatnya nilai boolean kondisi bernilai benar. Jika kondisi
bernilai salah, maka proses akan ‘melompat’ atau mengerjakan aksi yang berada di
luar loop.
Studi Kasus
Deskripsi masalah
Input :-
Output :2 4 6 …
Algoritma 0-3
Algoritma deret
Deskripsi
read(N)
x 2
while x <= N do
write(x)
x x + 2
Tabel Penyimpanan Data Algoritma 0-3
Read(N) 8
x2 2
xx+2 4
xx+2 6
xx+2 8
xx+2 10
xx+2
Mula-mula inputkan nilai N dalam hal ini adalah 8. Kemudian x diberi nilai 2
(proses inisialisasi). Setelah itu x dibandingkan dengan N. Jika aksi (x<=N) bernilai
benar maka x ditampilkan. Lalu x ditambah 2 dan menghasilkan x baru.
Setelah itu arus data kembali ke atas untuk menguji apakah aksi x<=N bernilai
benar. Jika iya, maka proses yang sama dengan sebelumnya dilakukan kembali.
Pertanyaan
Untuk N=10
Jawab : Tidak ada output yang dihasilkan, karena kondisi sejak awal sudah tidak
terpenuhi, sehingga aksi dalam loop while tidak ada yang dikerjakan
Jawab : aksi (xx+2) memastikan bahwa kondisi pada suatu saat akan bernilai
salah, sehingga pengulangan berhenti. Jika aksi ini dihilangkan, maka kondisi
akan selalu bernilai benar, sehingga pengulangan tidak akan pernah berhenti.
- Bagaimana output algoritma jika aksi (xx+2) dan (write(x)) saling bertukar
tempat (urutannya ditukar)?
read
(N)
x<--2
t
x<=N
write (x)
x<--x+2
End
Pengulangan Repeat-Until
repeat
aksi
until <kondisi>
t
<kondisi>
Studi Kasus
Deskripsi masalah
Output :2 4 6 …
Algoritma deret
Deskripsi
read(N)
x 2
repeat
write(x)
x x + 2
until x>N
Begin
Read(N)
X2
Write(X)
XX+2
N
X>N
End
Dari ketiga algoritma pengulangan yang sudah dibahas, for-do adalah jenis
pengulangan yang sudah jelas banyaknya pengulangan. Itu sebabnya pengulangan
for-do cocok digunakan untuk kasus dimana jumlah pengulangannya sudah jelas.
Misalnya, kita ingin membuat algoritma menampilkan 10 suku pertama yang positif
dari sebuah deret hitung dengan beda merupakan masukan. Jika deret hitung yang
diinginkan memiliki beda sama dengan tiga, maka keluaran yang diharapkan
adalah
3 6 9 12 15 18 21 24 27 30
Algoritma DeretHitung1
Deskripsi
Read(Beda)
Suku 0
For i 1 to 10 do
Suku Suku + Beda
Write(Suku)
Berbeda dengan pengulangan for-do, tidak ada jaminan berhenti pada pengulangan
while-do dan repeat-until kecuali dibuat suatu kondisi yang membuat algoritma
tersebut berhenti pada suatu saat. Oleh karena itu di dalam pengulangan repeat dan
while harus ada kondisi yang membatasi sampai kapan pengulangan tersebut
berlangsung. Itu sebabnya pengulangan while dan repeat lebih cocok digunakan
untuk kasus pengulangan yang belum jelas banyaknya pengulangan yang
diinginkan, namun diketahui kondisi berhentinya.
Contoh.
x 0
while x < 20 do
xx+2
write(‘Halo’)
x 0
repeat
xx+2
write(‘Halo’)
until x>=20
x 0
repeat
write(‘Halo’)
x = x + 3
until x = 10
Pengulangan ini tidak akan pernah berhenti karena nilai x tidak akan pernah
memenuhi kondisi until x = 10.
x 0
while x < 20 do
write(‘Halo’)
tidak pernah berhenti karena kondisi while x < 20 selalu terpenuhi, sehingga
pengulangan tidak akan berhenti.
Oleh karena itu, pemrogram harus lebih jeli dalam menggunakan pengulangan
while-do atau repeat until untuk menghindari pengulangan tanpa batas.
Contoh lain.
Misalkan kita ingin menampilkan suatu deret hitung dengan beda tertentu (input)
yang deret tersebut berhenti sebelum jumlah deret tersebut mencapai suatu nilai
batas. Suku pertama dari deret sama dengan beda. Beda dan batas merupakan
masukan.
Di sini kita tidak bisa memastikan berapa kali pengulangan (disebut juga iterasi)
yang harus dilakukan. Karena input yang berbeda membutuhkan jumlah
pengulangan yang berbeda pula. Misalnya, jika kita ingin menampilkan deret positif
dengan beda 3 dan berhenti sebelum jumlah deret tersebut mencapai 50 maka deret
dimaksud adalah
3 6 9 12 15
Jumlah deret di atas adalah 45, belum mencapai batas 50. Dalam hal ini pengulangan
while-do merupakan pilihan yang lebih memudahkan.
Algoritma 0-5
Algoritma DeretHitung2
Deklarasi
Beda, Suku, Batas, Jum : integer
Deskripsi
Read(Beda, Batas)
Jum 0
Suku 0
While Jum < Batas
Suku Suku + Beda
Jum Jum+Suku
Write(Suku)
Lain halnya jika kondisi berhenti yang diinginkan adalah setelah jumlah deret
tersebut melewati suatu nilai batas. Dengan input beda = 3 dan batas = 50 maka
deret yang dimaksud adalah
3 6 9 12 15 18
Algoritma 0-6
Algoritma DeretHitung3
Deklarasi
Beda, Suku, Jum, Batas : integer
Deskripsi
Read(Beda, Batas)
Jum 0
Suku 0
Repeat
Suku Suku + Beda
Jum Jum+Suku
Write(Suku)
Until Jum > Batas
Contoh lain. Dalam kasus tertentu bisa jadi semua cara ini bisa digunakan.
Misalnya, algoritma menghitung perpangkatan XN, dengan X merupakan bilangan
real dan N merupakan bilangan bulat positif. X dan N merupakan input. Kasus ini
dapat diselesaikan dengan pengulangan for.
Algoritma 0-7
Algoritma XPangkatNFor
Deklarasi
N,i : integer
X, Pangkat : real
Deskripsi
Read(X, N)
Pangkat 1
For i 1 to N do
Pangkat Pangkat * X
Write (Pangkat)
Algoritma 0-8
Algoritma XPangkatNWhile
Deklarasi
N,i : integer
X, Pangkat : real
Deskripsi
Read(X, N)
Pangkat 1
i 0
While i <= N
i i + 1
Pangkat Pangkat * X
Write (Pangkat)
Algoritma 0-9
Algoritma XPangkatNRepeat
Deklarasi
N,i : integer
X, Pangkat : real
Deskripsi
Read(X, N)
Pangkat 1
i 0
Repeat
i i + 1
Pangkat Pangkat * X
Until i > N
Jadi, sebenarnya agak sulit menentukan batasan yang tegas mengenai kasus mana
yang cocok dikerjakan dengan for-do, atau while-do atau repeat-until.
Pengalamanlah dan kebiasaan serta selera pemrogram yang lebih pandai menjawab
hal ini.
Soal Latihan
Soal Runtunan
Algoritma UtakAtik1
Deskripsi
Read(A)
B 0.5 * A + 15
C A * A -3
D B + C
Write(B,C,D)
a. A = 4 b. A = 6 c. A = -3
Algoritma UtakAtik1
Deskripsi
Read(A,B)
C 0.5 * (A + B)
D A * C - 3
E C + D
Write(C,D,E)
6. Setiap pegawai dalam perusahaan X mendapat penghasilan dari gaji pokok dan
tunjangan. Besar tunjangan adalah 20% dari gaji pokok. Selain itu penghasilan
tersebut terkena pajak yang besarnya 5% dari penghasilan. Buatlah algoritma
menghitung penghasilan bersih pegawai dengan masukan gaji pokok.
7. Buatlah algoritma untuk menghitung luas segitiga sama sisi yang panjang sisi
terpanjangnya sama dengan diameter sebuah lingkaran. Input : jari-jari lingkaran
yang dimaksud.
8. Andi 8 tahun lebih tua dari Ali. Ali lebih muda 5 tahun dari Ahmad. Usia Amir
adalah setengah dari jumlah usia Andi dan Ahmad. Buatlah algoritma
menghitung usia Andi, Ali dan Amir, dengan masukan usia Ahmad.
a. 45 b. 28 c. 36
10. Buatlah algoritma teks untuk menghitung besar hambatan pengganti untuk tiga
buah hambatan yang dipasang secara paralel. Input : ketiga hambatan R1, R2, R3.
11. Buatlah algoritma untuk mengkonversi waktu dari satuan jam, menit, dan detik
ke dalam satuan detik.
12. Berkebalikan dengan soal no 11, buatlah algoritma yang mengkonversi waktu
dari satuan detik ke dalam satuan jam, menit, dan detik.
Soal Percabangan
Deskripsi
Read(A,B)
if A+B < 10 then
C A-B
else
C A+B
D 2*C+B
Write(C,D)
Diketahui masukan A dan B masing-masing adalah :
b. 4 dan 6 b. 3 dan 5 c. 9 dan 6
3. Buatlah algoritma teks dan flowchart untuk menyelesaikan masalah berikut ini
a. Menginput sebuah bilangan kemudian menentukan apakah sebuah data
masukan merupakan bilangan kelipatan tiga atau bukan.
b. Menginput dua bilangan kemudian menentukan manakah yang merupakan
bilangan terbesar.
c. Menginput dua buah bilangan kemudian menentukan apakah bilangan yang
satu merupakan kelipatan dari bilangan yang lainnya atau tidak.
d. Menginput sebuah bilangan dan menentukan apakah ia bilangan positif atau
bukan
Buatlah algoritma teks standar untuk menentukan total tagihan yang dibayar
oleh pelanggan PLN. Input algoritma : jumlah pemakaian (kwh) dan golongan.
Output : total tagihan.
8. Seorang salesman sebuah produk mendapat gaji dari perusahaannya terdiri dari
gaji pokok dan bonus. Besar gaji pokok adalah 5000. Jika produk yang terjual
lebih dari 100, salesman tersebut mendapat bonus sebesar 20% omset penjualan,
sedangkan jika kurang mendapat 10% dari omset. Buatlah program menghitung
gaji salesmen dengan masukan banyaknya produk yang terjual dan harga satuan
produk.
Soal Pengulangan
Deskripsi
Read(N)
y0
z0
For x 1 to N do
y y +
z z + y
write(x,y,z)
a. Tuliskan keluaran algoritma untuk N=5
b. Tuliskan algoritma di atas menggunakan pengulangan while dan repeat
Algoritma UtakAtik6
Deskripsi
Read(N,k)
i0
j0
while i <= N do
i i + 1
j j + k
write(j)
a. Tentukan keluaran algoritma untuk (N,k) =(5,2)
b. Nyatakan algoritma tersebut dalam pengulangan repeat dan while
Algoritma UtakAtik6
Deskripsi
Read(M,N)
repeat
if i<5 then
jj+M
else
jj+N
i i + 1
write(j)
until i>8
a. Tentukan keluaran algoritma jika M,N = 2,1
b. Nyatakan algoritma tersebut dalam pengulangan for dan while