1. BAB 4
PERULANGAN/ LOOP
Salah satu kelebihan komputer adalah dapat melakukan perhitungan dengan sangat
cepat. Dengan demikian, salah satu algoritma yang penting adalah mempelajari aspek –
aspek perulangan.
A. Konsep Counter
Perhatikan penugasan berikut ini :
i i + 1
Arti dari penugasan di atas adalah i disebelah kiri merupakan harga i yang baru setelah
harga i sebelah kanan ditambah dengan 1. Dengan demikian, i merupakan counter
(pencacah) dimana setiap kali pernyataan penugasan itu dieksekusi, harga i akan bertambah
1.
B. Konsep Total
Misalnya kita diminta untuk menghitung jumlah deret :
Harga awal dari nilai kumulatif penjumlahan i ini dimulai dengan 0 (mengingatkan kita
pada unsur identitas penjumlahan adalah 0). Misalkan :
jumlah 0
Dengan menggunakan salah satu bentuk perulangan, misalnya for, kita dapat menghitung
jumlah deret diatas dengan pernyataan :
for i 1 to n do
jumlah jumlah + i
Konsep total ini merupakan konsep dasar untuk penerapan yang melibatkan harga
kumulatif.
Konsep inipun dapat digunakan untuk operator perkalian. Misalkan kita diminta
menghitung :
2. Harga awal dari kumulatif perkalian dimulai dengan 1 (mengingatkan kita pada unsur
identitas perkalian adalah 1). Misalkan :
kali 1
kemudian dengan perulangan yang mirip (hanya mengganti operator penjumlahan (+)
dengan perkalian (*)) kita peroleh :
for i to n do
kali kali * i
C. Pemrograman
Hampir semua bahasa pemrograman mempunyai pernyataan yang berkaitan dengan
perulangan. Untuk bahasa Pascal dan bahasa C tersaji berikut ini :
Algoritmik Pascal C
for i awal to akhir do
aksi
end for
for i := awal to akhir do
aksi;
for (i = awal; i <=akhir; i+
+)
aksi;
for i awal downto akhir do
aksi
end for
for i := awal downto akhir do
aksi;
for (i = awal; i <=akhir; i
--)
aksi;
while (kondisi) do
aksi
end while
while (kondisi) do
aksi;
while (kondisi)
aksi;
repeat
aksi
until (kondisi)
repeat
aksi;
until (kondisi);
do {
aksi;
} while (kondisi)
Dengan aksi dapat berupa pernyataan tunggal mauoun majemuk. Pernyataan
majemuk dalam bahasa pascal diawali dengan begin dan diakhiri dengan end, sementara
untuk bahasa c diawali dengan { dan diakhiri dengan }.
Contoh 4.1
Cetaklah bilangan 1 sampai 4 menggunakan perulangan.
Algoritma 4.1
Algoritma Cetak_Angka
{Mencetak angka 1, …,4 ke piranti keluaran}
Deklarasi
i : integer
for loop while loop repeat until loop
Deskripsi
for i 1 to 4 do
Deskripsi
i 1
Deskripsi
i 1
3. write (i)
endfor
while (i <=4) do
write (i)
i i + 1
endwhile
repeat
write (i)
i i + 1
until (i>4)
Flow Chart 4.1
Struktur for Struktur while – do Struktur repeat – until
Translasi 4.1.a. Bahasa Pascal
for loop while loop repeat until loop
Mulai
Selesai
for i = 1 to 4 do
Mulai
Selesai
Mulai
i
i = 1
i
<=
4
i
i = i + 1
i = 1
i
i = i + 1
i >
4
Selesai
4. program cetak_angka_for;
var i : integer;
begin
for i := 1 to 4 do
write (i, ’ ‘);
end.
program cetak_angka_while;
var i : integer;
begin
i := 1; {inisialisasi}
while (i <= 4) do begin
write (i, ’ ‘); i := i + 1 ;
end;
end.
program cetak_angka_repeat;
var i : integer;
begin
i := 1; {inisialisasi}
repeat
write (i, ’ ‘); i := i + 1 ;
until (i > 4);
end.
Translasi 4.1.b. Bahasa C
for loop while loop do while loop
#include <stdio.h>
main() {
int i;
for (i=1 ; i <=4;i++)
printf(“%d “,i);
return 0;
}
#include <stdio.h>
main() {
int i= 1;
while (i <=4) {
printf(“%d “,i); i ++;
}
return 0;
}
#include <stdio.h>
main() {
int i= 1;
do { printf(“%d “,i); i +
+;
} while (i <=4);
return 0;
}
Contoh 4.2.
Cetaklah Bilangan ganjil dari 0 sampai 10 menggunakan perulangan (for, while –
do, repeat – until).
Ide :
Bilangan ganjil dari 0 sampai 10 diawali dengan 1, kemudian bertambah dengan 2
atau bilangan ganjil adalah bilangan yang bila dibagi 2 bersisa 1.
Algoritma 4.2.
Algoritma Cetak Ganjil
{mencetak bilangan ganjil dari 0 sampai 10 ke piranti keluaran}
Deklarasi
i = integer
Deskripsi
for i 0 to 10 do
if (i mod 2 = 1) then
write (i)
endif
endfor
Deskripsi
i 1
while (i < = 10) do
write (i)
i i + 2
endwhile
Deskripsi
i 1
repeat
write (i)
i i + 2
until (i > 10)
Flow Chart 4.2.
5. t
t
y y
t
Struktur for Struktur while – do Struktur repeat – until
for loop while loop repeat until loop
program Cetak_Ganjil1;
uses wincrt;
var i : integer;
begin
for i := 0 to 10 do
if (i mod 2 = 1) then
write (i, ‘ ‘);
end.
program Cetak_Ganjil2;
uses wincrt;
var i : integer;
begin
i := 1;
while (i <= 10) do
begin
write (i,’ ‘);
i := i + 2;
end;
end.
program Cetak_Ganjil3;
uses wincrt;
var i : integer;
begin
i := 1;
repeat
write (i,’ ‘);
i := i + 2;
until (i > 10);
end.
Contoh 4.3.
Carilah rata – rata dari n bilangan bulat positif.
Analisis :
Rumus rata – rata adalah :
yaitu jumlah data dibagi dengan banyaknya data, dengan xi adalah data ke-i.
Algoritma 4.3.
Algoritma mencari rata – rata dari n bilangan
{diberikan n data kemudian dicari rata–ratanya}
Deklarasi
i, n, jumlah, x : integer
rata : real
Deskripsi
read(n)
Mulai
for i = 0 to 10 do
i mod 2 = 1
?
i
Selesai
Mulai
i = 1
i
<=10
i
i = i + 2
Selesai
Mulai
i = 1
i
i = i + 2
i > 10
Selesai
6. jumlah 0
for i 1 to 10 do
read(x)
jumlah jumlah + x
endfor
rata jumlah/n
write(rata-rata)
Flowchart 4.3.
Translasi 4.3.
Bahasa Pascal Bahasa C
program rata_rata;
uses wincrt;
var
i, n, jumlah, x : integer;
rata : real;
begin
write(‘Banyak Data : ’);
readln(n);
jumlah :=0;
for i :=1 to n do begin
write(‘Data ke -‘,i,’ : ‘);
readln(x);
jumlah := jumlah + x;
end;
rata := jumlah/n;
#include <stdio.h>
main() {
int i, n, jumlah, x;
float rata;
printf(“banyak data : “);
scanf(“%d”,&n);
jumlah = 0;
for (i = 1;i <=n; i++){
printf(“data ke-%d : “,i);
scanf(“%d”,&x);
jumlah = jumlah + x;
}
rata = (float)jumlah/n;
printf(“rata-rata = %6.3f”,rata);
Mulai
n
Jumlah=0
for i=1 to n do
x
jumlah=jumlah/n
rat
a
Selesai
7. write(‘rata-rata = ‘,rata:6:3);
end.
return 0;
}
D. Sentinel
Kadang banyaknya masukan tidak diketahui, tetapi sifat datanya diketahui. Seperti
kasus 4.3. Di mana semua data adalah bilangan bulat positif, maka untuk menghentikan
masukan, kita dapat menggunakan harga lain (bisa negative atau 0). Setiap masukan akan
dicek dengan harga lain tersebut (yang dinamakan sentinel/pengawal).
Contoh 4.4.
Hitunglah rata-rata dari bilangan bulat positif, di mana banyak data ditentukan dari
data yang dimasukkan.
Algoritma 4.4.
Algoritma mencari rata-rata
{Diberikan data bilangan bulat positif kemudian dicari rata--ratanya}
Deklarasi
n, jumlah, x : integer
rata : real
Deskripsi
jumlah 0
read(x)
n 1
while (x>0) do
jumlah jumlah + x
read(x)
n n+1
endfor
rata jumlah/(n-1)
write(rata)
Penjelasan :
Terlihat rumus yang digunakan agak berbeda, yaitu pembaginya (n-1). Hal
disebabkan pada saat nilai terakhir dimasukkan, nilai ini masih digunakan untuk validasi
masukan (apakah masih ada masukan berikutnya atau tidak) sehingga benyaknya data
selalu “kelebihan” 1. Untuk itu, pembagi dalam rumus rata-rata “haruslah” dikurangi
dengan 1.
Flowchart 4.4.
Mulai
Jumlah=0
8. f
t
Translasi 4.4.
Bahasa Pascal Bahasa C
program rata_rata2;
uses wincrt;
var
i, n, jumlah, x : integer;
rata : real;
begin
jumlah := 0;
write(‘data ke-1 : ‘); readln(x);
n := 1 ;
#include <stdio.h>
main () {
int n, jumlah, x;
float rata;
jumlah = 0;
printf(“Data ke-1 : “): scanf(“%d”,&x);
n = 1;
while (x > 0) do begin
jumlah := jumlah + x;
write(‘data ke-‘,n+1,’ : ‘);
readln(x);
n := n+1;
end;
while (x>0) {
jumlah – jumlah + x;
printf(“Data ke-%d : “,n+1);
scanf(“%d”,&x);
n++;
}
x
n = 1
x >
0
jumlah=jumlah+x
x
n = n+1
rata=jumlah/(n-1)
rat
a
Selesai
9. rata :=jumlah/(n-1);
write(‘Rata-rata = ‘,rata:6:3);
end.
rata = (float)jumlah/(n-1);
printf(“Rata-rata = %6.3f”,rata);
return 0;
}
Contoh 4.5.
Tentukan nilai dari :
sampai selisih 2 suku tidak lebih dari 0.001. Tentukan pula nilai n terakhir.
Algoritma 4.5.
Algoritma mencari jumlah deret
Deklarasi
n, jumlah, x : integer
rata : real
Deskripsi
jumlah 0
i 1
repeat
jumlah jumlah + (1/i)
i i+1
selisih (1/i)-(1/(i-1))
until abs(selisih) < 0.001
write(jumlah, i)
Flowchart 4.5.
T
Jumlah=0
i = 1
jumlah=jumlah+(1/i)
i =i+ 1
Mulai
10. F
Translasi 4.5.
Bahasa Pascal
program jumlah_deret;
var selisih, jumlah : real; i : integer;
begin
jumlah :=0; i := 1; {inisialisasi}
repeat
jumlah :=jumlah +(1/i);
i := i+1; {counter}
selisih :=(1/i)-(1/i-1));
until abs(selisih) <0.001;
write(‘jumlah suku=’,jumlah:6:3,’harga n terakhir : ‘,i);
end.
Contoh 4.6.
Carilah nilai dari n! (n factorial).
Analisis :
Nilai n faktorial secara matematis didefinisikan sebagai berikut :
dengan 0! = 1 atau 1! = 1.
Algoritma 4.6.
Algoritma mencari n factorial
selisih=(1/i)-(1/i-1))
│selisi
h│
<0.001
jumlah, i
Selesai
11. {Dicari n factorial dengan masukan n}
Deklarasi
i, n : integer
Factorial : longint
Deskripsi
Read (n)
faktorial 1
for i 1 to n do
faktorial factorial *i
endfor
write(faktorial)
Flowchart 4.6.
Translasi 4.6.
Bahasa Pascal Bahasa C
Program Menghitung_Faktorial;
uses wincrt;
var
faktorial : longint;
n, i : integer;
begin
writeln (‘Menghitung nilai n! (n factorial),’);
write (‘Ketikkan sebuah bilangan :’);
readln (N);
faktorial := 1;
for i := 1 to N do
faktorial := faktorial * i ;
writeln (N,’! =’, faktorial);
#include <stdio.h>
main () {
long faktorial;
int N, i;
printf(“Menghitung nilai n! (n
factorial)n”);
printf(“Ketikkan sebuah bilangan :”);
scanf(“%d”,&N);
factorial = 1;
for (i=1; i<N; i++)
faktorial = faktorial * i;
printf(“%d!=%|d”, N, faktorial);
Mulai
n
faktorial=1
for i=1 to n do
faktorial=
faktorial*i
faktoria
l
Selesai
12. end. return 0;
}
Contoh 4.7.
Hitunglah nilai dari xy
dengan x bilangan real dan y bilangan bulat.
Analisis :
Algoritma 4.7.
Algoritma Pangkat
{Diberikan masukan x dan y, dihitung nilai dari x pangkat y}
Deklarasi
x, y, i : integer {input}
pangkat : integer {output}
Deskripsi
read ((x, y)
pangkat 1
for i 1 to y do
pangkat pangkat * x
enfor
write(pangkat)
Flowchart 4.7.
Mulai
x,
y
pangkat=1
for i=1 to y
do
pangkat=
pangkat *x
pangka
tSelesai
13. Translasi 4.7.
Bahasa Pascal Bahasa C
Program Menghitung_pangkat;
uses wincrt;
var
x, y, i : integer;
pangkat : integer;
begin
writeln (‘Menghitung hasil perpangkatan ‘);
write (‘Tulis sebuah bilangan : ‘); readln (x);
write (‘Pangkat berapa : ‘); readln (y);
pangkat := 1 ;
for i := 1 to y do
pangkat := pangkat * x;
writeln (x,’ pangkat’,y,’ = ‘,pangkat);
end.
#include <stdio.h>
main () {
int x, y, i;
int pangkat;
printf(“Menghitung hasil
perpangkatann”);
printf(“Tulis sebuah bilangan :”);
scanf(“%d”,&x);
printf(“Mau dipangkat berapa :”);
scanf(“%d”,&y);
pangkat = 1;
for (i= 1; i<=y; i++)
pangkat = pangkat * x;
printf(“%d pangkat %d = %d”,x
,y,pangkat);
return 0;
}