AlPro_07 [Pengulangan atau Looping [2]]

advertisement
Algoritma Pemrograman
Pertemuan Ke-7
(Pengulangan atau Looping [2])
Noor Ifada
[email protected]
S1 Teknik Informatika-Unijoyo
1
Sub Pokok Bahasan
Struktur WHILE
Struktur REPEAT
WHILE vs REPEAT
S1 Teknik Informatika-Unijoyo
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
S1 Teknik Informatika-Unijoyo
3
Contoh 1: Mencetak tulisan ‘Informatika’ sebanyak 5 kali
Program CETAK_INFORMATIKA;
Algoritma CETAK_INFORMATIKA
{
Mencetak
kali }
DEKLARASI
k
:
‘Informatika’
integer
sebanyak
{
5
pencacah
pengulangan }
DESKRIPSI :
k ← 1
while k ≤ 5 do
{ ulangi sebanyak 5
kali }
write(‘Informatika’)
k←k+1
endwhile { kondisi berhenti:
k > 5}
{ Mencetak ‘Informatika’ sebanyak
5 kali }
(* DEKLARASI *)
var
k : integer;
(* DESKRIPSI *)
begin
k := 1;
while k <= 5 do
begin
writeln(’Informatika‘);
k := k + 1;
end;
end.
S1 Teknik Informatika-Unijoyo
4
Contoh 2:
Algoritma PENJUMLAHAN_DERET
Menghitung jumlah angkaangka dari 1 sampai N.
Nilai N dibaca terlebih
dahulu dari piranti
masukan
Misalnya, jika N = 5, maka
jumlah angka dari 1
sampai 5 adalah deret
1 + 2 + 3 + 4 + 5 = 15
{ 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 { pencacah pengulangan }
N : integer
jumlah : integer
DESKRIPSI :
read(N) { banyaknya suku deret }
jumlah ← 0
k ← 1 { inisialisasi }
while k ≤ N do
jumlah ← jumlah + k
k ← k + 1
endwhile { kondisi berhenti: k > N }
write(jumlah)
S1 Teknik Informatika-Unijoyo
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.
S1 Teknik Informatika-Unijoyo
6
Algoritma HITUNG_RATA_RATA
Contoh 3:
Menghitung nilai rata-rata
dari N buah data bilangan
bulat yang dibaca dari
piranti masukan. Nilai ratarata adalah jumlah seluruh
nilai dibagi dengan
banyaknya nilai
Misalkan, N = 5 dan data
bilangan yang dibaca
berturut-turut adalah 12, 10,
6, 2, 4, maka nilai rataratanya:
(12 + 10 + 6 + 2 + 4)/5
= 34/5
= 6.8
{
Menghitung rata-rata N buah bilangan
bulat yang dibaca dari piranti masukan.
N > 0 }
DEKLARASI
k : integer { pencacah pengulangan }
N : integer { jumlah data, > 0 }
X : integer {bilangan bulat yang dibaca}
jumlah : integer
rata : real
DESKRIPSI :
read(N) { banyaknya suku deret }
jumlah ← 0
k ← 1 { inisialisasi }
while k ≤ N do
read(x)
jumlah ← jumlah + x
k ← k + 1
endwhile { kondisi berhenti: k > N }
rata ← jumlah/N
write(rata)
S1 Teknik Informatika-Unijoyo
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.
S1 Teknik Informatika-Unijoyo
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)
S1 Teknik Informatika-Unijoyo
9
Algoritma JUMLAH_DAN_KALI
Contoh 4:
Dalam algoritma
JUMLAH_DAN_KALI,
ditetapkan bahwa dari
masukan nilai integer x,
jika x ganjil, maka peubah
M yang telah diinisialisasi
dengan 1 ditambah 10, dan
jika x genap maka M
dikali 10
Pengulangan ini akan terus
dilakukan selama x tidak
sama dengan 0
{Menjumlahkan atau mengalikan sebuah
bilangan dengan 10, bergantung kepada
nilai x (genap atau ganjil)}
DEKLARASI
M : integer
x : integer
DESKRIPSI :
M ← 1
{ inisialisasi M dengan 1 }
read(x)
while x ≠ 0 do {lakukan komputasi
selama x tidak nol }
if x mod 2 = then
{ x ganjil }
M ← M+10
else
M ← M*10
endif
read(x)
endwhile { x = 0 }
write(M)
S1 Teknik Informatika-Unijoyo
10
Program JUMLAH_DAN_KALI;
{ Menjumlahkan atau mengalikan sebuah bilangan
bergantung kepada nilai x (genap atau ganjil) }
dengan
10,
(* 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.
S1 Teknik Informatika-Unijoyo
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
S1 Teknik Informatika-Unijoyo
12
Contoh 1: Mencetak tulisan ‘Informatika’ sebanyak 5 kali
Algoritma CETAK_INFORMATIKA
{ Mencetak ‘Informatika’ sebanyak 5 kali }
DEKLARASI
k : integer { pencacah pengulangan }
DESKRIPSI :
k←1 { inisialisasi }
repeat
write(‘Informatika’)
k←k+1
until k > 5
Program CETAK_INFORMATIKA;
var
k : integer;
begin
k := 1;
repeat
begin
writeln(‘Informatika’);
k := k + 1;
end;
until k > 5;
end.
S1 Teknik Informatika-Unijoyo
• Badan pengulangan berisi dua
instruksi:
write(‘Informatika’) dan
k←
←k+1
• Kondisi berhenti pengulangan
adalah k > 5, artinya jika k
masih ≤ 5, maka badan
pengulangan masih boleh
dimasuki
• k harus terdefinisi nilainya
sebelum pengulangan
dilaksanakan pertama kali.
Karena itu, pada bagian
inisialisasi, k diisi dengan nilai 1
• Instruksi yang mengubah nilai
peubah kondisi adalah instruksi
k←
←k+1. Instruksi ini mencacah
jumlah pengulangan, sehingga
jika k > 5, pengulangan
dihentikan
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)
S1 Teknik Informatika-Unijoyo
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.
S1 Teknik Informatika-Unijoyo
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)
S1 Teknik Informatika-Unijoyo
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.
S1 Teknik Informatika-Unijoyo
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
S1 Teknik Informatika-Unijoyo
18
WHILE vs REPEAT: Jumlah Pengulangan
Algoritma PERBANDINGAN_WHILE_REPEAT
{Algoritma
untuk
menunjukkan
perbandingan pengulangan WHILE
dan
REPEAT
tentang
jumlah
pengulangannya}
Algoritma PERBANDINGAN_WHILE_REPEAT
{Algoritma
untuk
menunjukkan
perbandingan pengulangan WHILE
dan
REPEAT
tentang
jumlah
pengulangannya}
DEKLARASI
x : integer
DEKLARASI
x : integer
DESKRIPSI :
x ← 7
while x < 5 do
write(x)
x ← x + 1
endwhile
DESKRIPSI :
x ← 7
repeat
write(x)
x ← x + 1
until x > 5
Hasil dari algoritma tidak ada
(karena badan pengulangan tidak
pernah dimasuki)
Hasil dari algoritma adalah 8
(karena badan pengulangan telah
dimasuki satu kali)
S1 Teknik Informatika-Unijoyo
19
Download