13
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 :

modul algoritma Bab 4

Embed Size (px)

Citation preview

Page 1: modul algoritma Bab 4

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 :

Page 2: modul algoritma Bab 4

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 Cfor i awal to akhir do

aksiend for

for i := awal to akhir doaksi;

for (i = awal; i <=akhir; i++)

aksi;

for i awal downto akhir doaksi

end for

for i := awal downto akhir doaksi;

for (i = awal; i <=akhir; i --)

aksi;while (kondisi) doaksiend while

while (kondisi) doaksi;

while (kondisi) aksi;

repeataksi

until (kondisi)

repeataksi;

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 : integerfor loop while loop repeat until loop

Deskripsifor i 1 to 4 do

Deskripsii 1

Deskripsii 1

Page 3: modul algoritma Bab 4

write (i)endfor

while (i <=4) dowrite (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 P ascal

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

Page 4: modul algoritma Bab 4

program cetak_angka_for;var i : integer;beginfor i := 1 to 4 dowrite (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 = integerDeskripsi

for i 0 to 10 doif (i mod 2 = 1) then

write (i)endif

endfor

Deskripsi i 1while (i < = 10) do

write (i)i i + 2

endwhile

Deskripsii 1repeat

write (i)i i + 2

until (i > 10)

Flow Chart 4.2.

Page 5: modul algoritma Bab 4

t

t

y y

t

Struktur for Struktur while – do Struktur repeat – until

for loop while loop repeat until loopprogram Cetak_Ganjil1;uses wincrt;var i : integer;begin

for i := 0 to 10 doif (i mod 2 = 1) then

write (i, ‘ ‘);end.

program Cetak_Ganjil2;uses wincrt;var i : integer;begin

i := 1;while (i <= 10) dobegin

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 : integerrata : real

Deskripsiread(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

Page 6: modul algoritma Bab 4

jumlah 0for i 1 to 10 do

read(x)jumlah jumlah + x

endforrata jumlah/nwrite(rata-rata)

Flowchart 4.3.

Translasi 4.3.

Bahasa Pascal Bahasa Cprogram rata_rata;uses wincrt;var

i, n, jumlah, x : integer;rata : real;

beginwrite(‘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

rata

Selesai

Page 7: modul algoritma Bab 4

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 : integerrata : real

Deskripsijumlah 0read(x)n 1while (x>0) do

jumlah jumlah + xread(x)n n+1

endforrata 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

Page 8: modul algoritma Bab 4

f

t

Translasi 4.4.

Bahasa Pascal Bahasa Cprogram rata_rata2;uses wincrt;var

i, n, jumlah, x : integer;rata : real;

beginjumlah := 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 beginjumlah := 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)

rata

Selesai

Page 9: modul algoritma Bab 4

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

Deklarasin, jumlah, x : integerrata : real

Deskripsijumlah 0i 1repeat

jumlah jumlah + (1/i)i i+1selisih (1/i)-(1/(i-1))

until abs(selisih) < 0.001write(jumlah, i)

Flowchart 4.5.

T

Jumlah=0

i = 1

jumlah=jumlah+(1/i)

i =i+ 1

Mulai

Page 10: modul algoritma Bab 4

F

Translasi 4.5.

Bahasa Pascalprogram 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))

│selisih│

<0.001

jumlah, i

Selesai

Page 11: modul algoritma Bab 4

{Dicari n factorial dengan masukan n}Deklarasi

i, n : integerFactorial : longint

DeskripsiRead (n)faktorial 1for i 1 to n do

faktorial factorial *iendforwrite(faktorial)

Flowchart 4.6.

Translasi 4.6.

Bahasa Pascal Bahasa CProgram Menghitung_Faktorial;uses wincrt;var

faktorial : longint;n, i : integer;

beginwriteln (‘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

faktorial

Selesai

Page 12: modul algoritma Bab 4

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}

Deskripsiread ((x, y)pangkat 1for i 1 to y do

pangkat pangkat * xenforwrite(pangkat)

Flowchart 4.7.

Mulai

x, y

pangkat=1

for i=1 to y do

pangkat=pangkat *x

pangkatSelesai

Page 13: modul algoritma Bab 4

Translasi 4.7.

Bahasa Pascal Bahasa CProgram Menghitung_pangkat;uses wincrt;var

x, y, i : integer;pangkat : integer;

beginwriteln (‘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 perpangkatan\n”);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;

}