modul algoritma Bab 4
-
Upload
eko-widyanto-napitupulu -
Category
Art & Photos
-
view
32 -
download
1
Transcript of 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 :
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
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
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.
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
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
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
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
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
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
{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
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
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;
}