07 pengulangan atau looping 2
DESCRIPTION
yjfyjTRANSCRIPT
Algoritma Pemrograman
Pertemuan Ke-7 (Pengulangan atau Looping [2])
1
Sub Pokok Bahasan
Struktur WHILE
Struktur REPEAT
WHILE vs REPEAT
2
Struktur WHILE
while kondisi do
aksi
endwhile
aksi (atau runtunan aksi) dilaksanakan berulang kali selama kondisi bernilai true. Jika kondisi bernilai false, badan pengulangan tidak akan dilaksanakan, yang berarti pengulangan selesai
Pengulangan harus berhenti. Pengulangan yang tidak pernah berhenti menandakan bahwa logika algoritma tersebut salah
Pengulangan berhenti apabila kondisi bernilai false. Agar kondisi suatu saat bernilai false, maka di dalam badan pengulangan harus ada instruksi yang mengubah nilai peubah kondisi
3
Contoh 1: Mencetak tulisan ‘Informatika’ sebanyak 5 kali
Program CETAK_INFORMATIKA; Algoritma CETAK_INFORMATIKA { Mencetak ‘Informatika’ sebanyak { Mencetak ‘Informatika’ sebanyak 5
5 kali } kali }
(* DEKLARASI *) DEKLARASI
var k : integer { pencacah
pengulangan } k : integer;
DESKRIPSI : (* DESKRIPSI *) k←1
begin while k ≤ 5 do { ulangi sebanyak 5 k := 1;
kali } while k <= 5 do write(‘Informatika’) begin k←k+1
writeln(’Informatika‘); endwhile { kondisi berhenti: k > 5} k := k + 1;
end;
end.
4
Contoh 2: Algoritma PENJUMLAHAN_DERET
{ Menjumlahkan deret 1 + 2 + 3 + ... + N,
dengan N adalah bilangan bulat positif
yang dibaca dari piranti masukan.
Jumlah deret dicetak ke piranti
keluaran } Menghitung jumlah angka- angka dari 1 sampai N. DEKLARASI Nilai N dibaca terlebih k : integer { pencacah pengulangan } dahulu dari piranti N : integer masukan jumlah : integer
Misalnya, jika N = 5, maka DESKRIPSI : jumlah angka dari 1 read(N) { banyaknya suku deret } sampai 5 adalah deret jumlah ← 0
1 + 2 + 3 + 4 + 5 = 15 k ← 1 { inisialisasi }
while k ≤ N do
jumlah ← jumlah + k
k←k+1
endwhile { kondisi berhenti: k > N }
write(jumlah)
5
Program PENJUMLAHAN_DERET;
{Menjumlahkan deret 1 + 2 + 3 + ... + N, dengan N adalah
bilangan bulat positif yang dibaca dari piranti
masukan}
(* DEKLARASI *)
var
k, N, jumlah : integer;
(* DESKRIPSI *)
begin
write(‘Masukkan banyaknya bilangan : ‘); readln(N);
k := 1;
jumlah := 0;
while k <= N do
begin
jumlah := jumlah + k;
k := k + 1;
end;
writeln(jumlah);
end.
6
Algoritma HITUNG_RATA_RATA { Menghitung rata-rata N buah bilangan Contoh 3:
bulat yang dibaca dari piranti masukan.
N>0}
DEKLARASI
k : integer { pencacah pengulangan }
N : integer { jumlah data, > 0 } Menghitung nilai rata-rata X : integer {bilangan bulat yang dibaca} dari N buah data bilangan jumlah : integer bulat yang dibaca dari rata : real piranti masukan. Nilai rata-
DESKRIPSI : rata adalah jumlah seluruh read(N) { banyaknya suku deret } nilai dibagi dengan jumlah ← 0 banyaknya nilai k ← 1 { inisialisasi }
Misalkan, N = 5 dan data while k ≤ N do bilangan yang dibaca
read(x) berturut-turut adalah 12, 10, jumlah ← jumlah + x 6, 2, 4, maka nilai rata- k←k+1 ratanya:
endwhile { kondisi berhenti: k > N } (12 + 10 + 6 + 2 + 4)/5 rata ← jumlah/N
= 34/5 write(rata) = 6.8
7
Program HITUNG_RATA_RATA;
{ Menghitung rata-rata N buah bilangan bulat yang dibaca dari
piranti masukan. N > 0 }
(* DEKLARASI *)
var
k, N, x, jumlah : integer;
rata : real;
(* DESKRIPSI *)
begin
write(‘Masukkan banyaknya suku deret : ‘);
readln(N);
jumlah := 0;
k := 1;
while k <= N do
begin
write(‘Bilangan ke-’,k,’ : ‘);readln(x);
jumlah := jumlah + x;
k := k + 1;
end;
rata := jumlah/N;
writeln(rata);
end.
8
Perihal WHILE
Kesalahan yang biasa terjadi pada penggunaan struktur WHILE adalah tidak menuliskan instruksi yang mengubah peubah kondisi, misalnya tidak menuliskan instruksi k←k+1. Sehingga pengulangan
tidak pernah memenuhi kondisi pengulangan berhenti
WHILE juga dapat digunakan sebagai penggunaan FOR. (WHILE juga dapat digunakan untuk proses yang jumlah pengulangannya tidak dapat ditentukan)
9
Algoritma JUMLAH_DAN_KALI {Menjumlahkan atau mengalikan sebuah Contoh 4:
bilangan dengan 10, bergantung kepada
nilai x (genap atau ganjil)}
DEKLARASI
M : integer
x : integer Dalam algoritma JUMLAH_DAN_KALI, DESKRIPSI :
ditetapkan bahwa dari M←1 { inisialisasi M dengan 1 }
read(x) masukan nilai integer x, while x ≠ 0 do {lakukan komputasi jika x ganjil, maka peubah
selama x tidak nol } M yang telah diinisialisasi if x mod 2 = then { x ganjil } dengan 1 ditambah 10, dan
M ← M+10 jika x genap maka M
else dikali 10 M ← M*10
Pengulangan ini akan terus endif
dilakukan selama x tidak read(x)
endwhile { x = 0 } sama dengan 0 write(M)
10
Program JUMLAH_DAN_KALI;
{ Menjumlahkan atau mengalikan sebuah bilangan dengan 10,
bergantung kepada nilai x (genap atau ganjil) }
(* DEKLARASI *)
var
M, x : integer;
(* DESKRIPSI *)
begin
M := 1;
write(‘Masukkan bilangan : ‘); readln(x);
while x <> 0 do
begin
begin
if x mod 2 = 1 then
M := M + 10
else
M := M * 10;
end;
write(‘Masukkan bilangan : ‘); readln(x);
end;
writeln(M);
end.
11
Struktur REPEAT
repeat
aksi
until kondisi
Notasi ini mendasarkan pengulangan pada kondisi boolean. Aksi di dalam badan pengulangan diulang sampai kondisi boolean bernilai true. Dengan kata lain, jika kondisi boolean masih false, pengulangan masih terus dilakukan. Karena proses pengulangan suatu saat harus berhenti, maka di dalam badan pengulangan harus ada aksi yang mengubah nilai peubah kondisi
Struktur REPEAT mempunyai makna yang sama dengan WHILE, dan dalam beberapa masalah kedua struktur tersebut komplemen satu sama lain
12
Contoh 1: Mencetak tulisan ‘Informatika’ sebanyak 5 kali
Algoritma CETAK_INFORMATIKA { Mencetak ‘Informatika’ sebanyak 5 kali }
DEKLARASI
k : integer { pencacah pengulangan } • Badan pengulangan berisi dua
DESKRIPSI : instruksi: k←1 { inisialisasi } write(‘Informatika’) dan
repeat k←k+1
write(‘Informatika’) • Kondisi berhenti pengulangan k←k+1 adalah k > 5, artinya jika k
masih ≤ 5, maka badan until k > 5
pengulangan masih boleh dimasuki Program CETAK_INFORMATIKA;
• k harus terdefinisi nilainya var sebelum pengulangan k : integer; dilaksanakan pertama kali.
begin Karena itu, pada bagian k := 1; inisialisasi, k diisi dengan nilai 1 repeat • Instruksi yang mengubah nilai begin peubah kondisi adalah instruksi
writeln(‘Informatika’); k←k+1. Instruksi ini mencacah
jumlah pengulangan, sehingga k := k + 1; jika k > 5, pengulangan end; dihentikan
until k > 5;
end.
13
Contoh 2: Menghitung 1 + 2 + 3+ … + N
Nilai N dibaca terlebih dahulu (N > 0).
Algoritma PENJUMLAHAN_DERET
{ Menjumlahkan deret 1 + 2 + 3 + ... + N, dengan N adalah
bilangan bulat positif yang dibaca dari piranti masukan.
Jumlah deret dicetak ke piranti keluaran }
DEKLARASI
k : integer { suku deret }
N : integer { banyaknya suku deret, N > 0 }
jumlah : integer { jumlah deret }
DESKRIPSI :
read(N) { banyaknya suku deret } jumlah ← 0 { inisialisasi jumlah deret }
k ← 1 { suku deret yang pertama }
repeat jumlah ← jumlah + k { jumlah deret sekarang }
k ← k + 1 { suku deret berikutnya }
until k > N
write(jumlah)
14
Program PENJUMLAHAN_DERET;
{ Menjumlahkan deret 1 + 2 + 3 + ... + N, dengan N adalah
bilangan bulat positif yang dibaca dari piranti masukan }
(* DEKLARASI *)
var
k, N, jumlah : integer;
(* DESKRIPSI *)
begin
write(‘Masukkan banyaknya bilangan : ‘); readln(N);
k := 1;
jumlah := 0;
repeat
begin
jumlah := jumlah + k;
k := k + 1;
end;
until k > N;
writeln(jumlah);
end.
15
Contoh 3: Menghitung nilai rata-rata N buah data bilangan
bulat yang dibaca dari piranti masukan
Algoritma HITUNG_RATA_RATA { Menghitung rata-rata N buah bilangan bulat yang dibaca dari
piranti masukan. N > 0 }
DEKLARASI
k : integer { pencacah banyak bilangan }
N : integer { banyak bilangan, N > 0 }
x : integer { bilangan bulat yang dibaca }
jumlah : integer { pencatat jumlah bilangan }
rata : real { rata-rata bilangan }
DESKRIPSI :
read(N) jumlah ← 0 { inisialisasi }
k ← 1 { inisialisasi pencacah banyak bilangan }
repeat
read(x) jumlah ← jumlah + x
k←k+1
until k > N rata ← jumlah/N
write(rata)
16
Program HITUNG_RATA_RATA;
{ Menghitung rata-rata N buah bilangan bulat yang dibaca dari
piranti masukan. N > 0 }
(* DEKLARASI *)
var
k, N, x, jumlah : integer;
rata : real;
(* DESKRIPSI *)
begin
write(‘Masukkan banyaknya suku deret : ‘);
readln(N);
jumlah := 0;
k := 1;
repeat
begin
write(‘Bilangan ke-’,k,’ : ‘);readln(x);
jumlah := jumlah + x;
k := k + 1;
end;
until k > N;
rata := jumlah/N;
writeln(rata);
end.
17
WHILE vs REPEAT
Seperti halnya pada struktur WHILE, struktur REPEAT juga dapat digunakan untuk masalah yang jumlah pengulangannya tidak diketahui atau tidak dapat ditentukan
Pemilihan struktur WHILE atau REPEAT bergantung pada karakteristik dari persoalan. Ada permasalahan yang hanya benar bila menggunakan struktur WHILE, tetapi bisa fatal bila menggunakan REPEAT
Perbedaan antara struktur REPEAT dan WHILE:
struktur REPEAT kondisi pengulangan diperiksa pada akhir pengulangan. Jadi, instruksi di dalam badan pengulangan dilaksanakan dulu, baru kemudian pengetesan kondisi dilakukan. Sehingga badan pengulangan dilaksanakan paling sedikit satu kali
struktur WHILE kondisi pengulangan diperiksa di awal pengulangan. Jadi, instruksi di dalam badan pengulangan hanya dapat dilaksanakan bila pengetesan kondisi menghasilkan nilai true. Sehingga, badan pengulangan mungkin tidak akan pernah dilaksanakan bila kondisi pengulangan pertama kali bernilai false
18
WHILE vs REPEAT: Jumlah Pengulangan
Algoritma PERBANDINGAN_WHILE_REPEAT Algoritma PERBANDINGAN_WHILE_REPEAT
{Algoritma untuk menunjukkan {Algoritma untuk menunjukkan
perbandingan pengulangan WHILE perbandingan pengulangan WHILE
dan REPEAT tentang jumlah dan REPEAT tentang jumlah
pengulangannya} pengulangannya}
DEKLARASI DEKLARASI
x : integer x : integer
DESKRIPSI : DESKRIPSI : x←7 x←7
while x < 5 do repeat
write(x) write(x) x←x+1 x←x+1
endwhile until x > 5
Hasil dari algoritma tidak ada Hasil dari algoritma adalah 8
(karena badan pengulangan tidak (karena badan pengulangan telah
pernah dimasuki) dimasuki satu kali)
19