Anda di halaman 1dari 58

TI-2241

ITERASI

Lab Sistem Informasi & Keputusan


Departemen Teknik Industri
LOOP
 Loop : Struktur kendali perulangan
 Struktur loop mengandung sekumpulan
pernyataan yang dieksekusi berulang-ulang
sampai suatu kondisi tercapai. Proses
pengulangan eksekusi  iterasi
 Jenis loop:
 while
 pengindeks otomatis
 until
Studi Kasus 4.1
Penjumlahan beberapa bilangan Integer

 Uraian Permasalahan
Diberikan sekelompok bilangan integer
sebagai input, hitung dan cetak
jumlahnya.

 Spesifikasi Input
Daftar bilangan integer
Penyelesaian loop while
contoh untuk 4 bilangan

input bil1,bil2,bil3,bil4 1000 bilangan???


Jumlah  bil1+bil2+bil3+bil4
output jumlah

jumlah  0
loop while {selama masih ada bilangan}
input bilangan
jumlah  jumlah + bilangan
endloop
Bentuk umum loop while

loop while kondisi


pernyataan
… selama Hati-hati
kondisi dengan kondisi
pernyataan benar selalu benar

endloop while
Infinite loop
Penyelesaian kasus 4.1

 Kondisi:
 Bilangan integer pertama dianggap sebagai
jumlah bilangan (Penyelesaian 1)
 Bilangan terakhir dinyatakan dengan
bilangan yang unik (Penyelesaian 2)
 Proses memeriksa alat input apakah masih
tersedia bilangan yang akan diinput
(Penyelesaian 3)
(1) Nilai header
jumlah integer: prosedur inisial
spesifikasi storage
variabel
n, jumlah : integer
end of spesifikasi storage
begin
input n
if n<0
then output ‘data salah n<0, ’,n Prosedur menginput
else total(n,jumlah) dan menjumlahkan
output ‘jumlah input = ‘,jumlah n bil
end if
end
(1) Nilai header
jumlah  0
i1
loop while in
input bilangan
jumlah  jumlah + bilangan
ii+1
endloop while
(1) Nilai header
total: prosedur begin
spesifikasi storage jumlah  0
parameter i1
n : integer in only loop while in
jumlah : integer out only input bilangan
variabel jumlah  jumlah + bilangan
bilangan, i : integer ii+1
end of spesifikasi storage endloop while
end
Variabel index loop
(2) Nilai trailer
jumlah  0
Belum terdefinisi
loop while bilangan0
input bilangan
jumlah  jumlah + bilangan
endloop while
(2) Nilai trailer
jumlah  0
input bilangan
loop while bilangan0
jumlah  jumlah + bilangan
input bilangan
endloop while
(2) Nilai trailer
total: prosedur jumlahinteger: prosedur inisial
spesifikasi storage
spesifikasi storage
parameter
jumlah : integer out only variabel
variabel jumlah : integer
bilangan : integer end of spesifikasi storage
end of spesifikasi storage
begin begin
jumlah  0 total(jumlah)
Input bilangan output ‘jml input = ‘,jumlah
loop while bilangan0 end
jumlah  jumlah + bilangan
input bilangan
endloop while
end
TUGAS
 Rancanglah penyelesaian dengan nilai
trailer tetapi menggunakan parameter
in out.
(3) Kondisi moredata
jumlah  0
loop while moredata
input bilangan
jumlah  jumlah + bilangan
endloop while
(3) Kondisi moredata
total: prosedur jumlahinteger: prosedur inisial
spesifikasi storage
parameter spesifikasi storage
jumlah : integer out only variabel
variabel jumlah : integer
bilangan : integer end of spesifikasi storage
end of spesifikasi storage
begin begin
jumlah  0 total(jumlah)
loop while moredata output ‘jml input = ‘,jumlah
input bilangan
end
jumlah  jumlah + bilangan
endloop while
end
Efisiensi
Efisiensi ~ jumlah pernyataan yang dieksekusi

jumlah  0 1

i1 1

loop while in 1, saat i>n


input bilangan
jumlah  jumlah + bilangan 5xn
ii+1 Total = 2+5n+1
endloop while = 5n+3

Kompleksitas waktu : linear


Kompleksitas waktu linear O(n)

 Bila input ditingkatkan m kali, maka waktu


eksekusinya menjadi m kali lebih lama
 Dengan komputer yang bekerja m kali lebih
cepat, maka m kali input dapat dieksekusi
dalam waktu yang sama
 Untuk n yang besar, jumlah pernyataan
yang dieksekusi satu kali dapat diabaikan.
Studi Kasus 4.2
Penjumlahan n bilangan genap pertama

 Uraian Permasalahan
Hitung jumlah n bilangan positif integer
genap pertama dan cetak hasilnya

 Spesifikasi Input
satu bilangan integer, n0
Penyelesaian 1
jumbilgenap: prosedur inisial
spesifikasi storage
variabel
n,jumlah : integer
end of spesifikasi storage
begin
input n
if n<0
then output ‘salah data, n = ’,n
else jumlahgenap(n,jumlah)
output ‘jumlah’,n,’ bil genap pertama = ‘,jumlah
endif
end
Penyelesaian 1 : rancangan loop
jumlah  0
i1
loop while in
jumlah  jumlah + 2 * i
ii+1
endloop while
Untuk mendapatkan bilangan genap

Sebagai counter
Penyelesaian 1
jumlahgenap: prosedur
spesifikasi storage
parameter
n : integer in only
jumlah : integer out only
variabel
i : integer
end of spesifikasi storage
begin
jumlah  0
i1
loop while i  n
jumlah  jumlah + 2*i
output ‘jumlah dari ‘,i, ‘bilangan genap pertama = ‘,jumlah
ii+1
endloop while
Penyelesaian 2 - Latihan

 Variabel index loop menggunakan nilai


2,4,6,…,2*n
Format loop index pada while

index  nilai awal


loop while index  nilai akhir
pernyataan

pernyataan
index  index + penaik
endloop
Penyelesaian 3 - loop index otomatis

 Bentuk umum autoindex


loop start index with nilai awal step penaik to nilai akhir
pernyataan

pernyataan
endloop
Penyelesaian 3 : rancangan loop
jumlah  0
loop start i with 1 step 1 to n
jumlah  jumlah + 2 * i
output ‘jumlah dari ‘,i, ‘bilangan genap pertama = ‘,jumlah
endloop autoindex
Penyelesaian 3
jumlahgenap: prosedur
spesifikasi storage
parameter
n : integer in only
jumlah : integer out only
variabel
i : integer
end of spesifikasi storage
begin
jumlah  0
loop start i with 1 step 1 to n
jumlah  jumlah + 2*i
output ‘jumlah dari ‘,i, ‘bilangan genap pertama = ‘,jumlah
endloop autoindex
end
Efisiensi (loop index otomatis)

jumlah  0 1
loop start i with 1 step 1 to n
jumlah  jumlah + 2 * i
output ‘jumlah dari ‘,i, ‘bilangan genap pertama = ‘,jumlah 4*n
endloop autoindex

Total = 1+4*n+1
= 4*n+2

Kompleksitas waktu : linear


Perbandingan efisiensi
?
5*n + 3 lebih lambat 4*n + 2
 Kedua proses loop melakukan operasi yang
sama  waktu relatif sama
 Jumlah pernyataan merepresentasikan
kompleksitas waktu umum (Keduanya linear)
 Peningkatan efisiensi dapat diperoleh dengan
mengurangi pernyataan dalam loop (misalnya
dari 5*n menjadi 4*n)
Perbandingan efisiensi
 Peningkatan efisiensi yang signifikan
diperoleh jika kompleksitas waktunya
menurun.
 Contoh: (prosedur jumlahgenap)
begin
Eksekusi tidak proporsional
jumlah  n*(n+1) terhadap n (tidak bergantung
end terhadap n)

Kompleksitas waktu : konstan


O(1)
Note:jumlah setiap saat tidak perlu dicetak
Studi Kasus 4.3
Menghitung nilai rata-rata
 Uraian Permasalahan
Hitung nilai rata-rata setiap murid dalam kelas,
dimana setiap murid mempunyai jumlah nilai yang
sama, n. Nilai rata-rata kelas juga perlu dihitung.

 Spesifikasi Input
Baris input pertama mengandung nilai n. Satu baris
input untuk masing2 murid yang mengandung
nomor id murid yang diikuti oleh n nilai.
Contoh input
4
134001 75 83 77 91
134004 80 90 95 93

134095 60 85 0 25
Penyelesaian
nilai: prosedur inisial
spesifikasi storage
variabel
n : integer
end of spesifikasi storage
begin
input n
if n  0
then output ‘salah data, n = ’,n
else ratakelas(n)
endif
end
Penyelesaian – while moredata
Rata-rata siswa
loopwhile moredata
input nomorid
{input n nilai & hitung nilai rata2 untuk Prosedur
siswa berikut ini} total

{cetak nomorid & nilai rata2 siswa ini}


endloop
Penyelesaian – while moredata

Rata-rata siswa
loopwhile moredata
input nomorid
total(n,jumlah)
rata  jumlah/n
output ‘nilai rata2 siswa ‘,nomorid,’ =
‘,rata
endloop
Penyelesaian – while moredata
ratakelas: prosedur begin
spesifikasi storage totalrata  0
parameter i0
n : integer in only loopwhile moredata
variabel input nomorid
totalrata,rata : real total(n,jumlah)
i,nomorid,jumlah : integer rata  jumlah/n
end of spesifikasi storage totalrata  totalrata + rata
Rata-rata siswa output ‘nilai rata2 siswa’
,nomorid, ‘ = ‘,rata
ii+1
Rata-rata kelas endloop
output ‘nilai rata2 kelas’,totalrata/i
end
Efisiensi
begin
totalrata  0 8*m + 4
i0 m : jumlah murid
loopwhile moredata
input nomorid
total(n,jumlah)
5*n + 3
rata  jumlah/n
totalrata  totalrata + rata
output ‘nilai rata2 siswa’
,nomorid, ‘ = ‘,rata
ii+1 (8 + (5*n+3))*m + 4
endloop
= 5*m*n + 11*m + 4
output ‘nilai rata2 kelas’,totalrata/i
end O(m*n)
Studi Kasus 4.4
Akumulasi bunga
 Uraian Permasalahan
Diketahui besar investasi dan tingkat suku bunga
tahunan, cari jumlah tahun yg dibutuhkan dimana
nilai awal investasi mencapai nilai tertentu. Hitung
berdasarkan bunga sederhana maupun berganda.
Untuk setiap tahunnya, cetak nilai investasi dan
bunganya.

 Spesifikasi Input
Tiga nilai real: nilai investasi awal, tingkat suku
bunga tahunan dan nilai target akhir, semua>0.
Penyelesaian – while
lama: prosedur inisial
spesifikasi storage
variabel
awal,suku,akhir : real
tahun : integer
end of spesifikasi storage
begin
input awal,suku,akhir
if (awal0) or (suku0) or (akhir0)
then output ‘salah data, input negatif’
else if akhirawal
then ‘salah data, akhir lebih kecil’
else jumlah(awal,suku,akhir,tahun)
output ‘waktu investasi = ‘,tahun,’tahun’
endif
endif
end
Penyelesaian – while
jalan : investasi berjalan

jalan  awal
awal*suku/100
tahun  0
loopwhile jalan<akhir
jalan  jalan + {hasil bunga tahun ini}
tahun  tahun + 1
endloop jalan*suku/100
Prosedur bunga sederhana

jumlah: prosedur begin


output ‘nilai invest awal : ‘,awal
spesifikasi storage jalan  awal
parameter tahun  0
awal,suku,akhir : real in only loopwhile jalan<akhir
tahun : integer out only jalan  jalan + awal*suku/100
variabel tahun  tahun + 1
jalan : real output ‘setelah’,tahun,’tahun nilai
end of spesifikasi storage investasi = ‘,jalan
endloop
end
Prosedur bunga berganda
jumlah: prosedur
spesifikasi storage begin
parameter output ‘nilai invest awal : ‘,awal
awal,suku,akhir : real in only jalan  awal
tahun : integer out only tahun  0
variabel loopwhile jalan<akhir
jalan : real jalan  jalan + jalan*suku/100
end of spesifikasi storage tahun  tahun + 1
output ‘setelah’,tahun,’tahun nilai
investasi = ‘,jalan
parameter tahun endloop
- indikator jumlah iterasi end
- belum diketahui
 loopwhile tidak dapat diganti dengan loop index otomatis
Penyelesaian – until
loop
kumpulan pernyataan
endloop until kondisi

- saat loop dihadapi, pernyataan


langsung dieksekusi
- pada akhir loop, kondisi loop diperiksa
- loop dihentikan saat kondisi benar
until - bunga sederhana

jumlah: prosedur begin


output ‘nilai invest awal : ‘,awal
spesifikasi storage jalan  awal
parameter tahun  0
awal,suku,akhir : real in only loop
tahun : integer out only jalan  jalan + awal*suku/100
variabel tahun  tahun + 1
jalan : real output ‘setelah’,tahun,’tahun nilai
end of sspesifikasi storage investasi = ‘,jalan
endloop until jalanakhir
end
Efisiensi
 loop tidak dieksekusi dalam jumlah
tertentu
 proses iterasi bergantung pada nilai
delta = awal*suku/100
 Jumlah iterasi senilai
(akhir-awal)/delta
 Kompleksitas waktunya O(n), dengan n=
(akhir-awal)/delta
Prosedur bunga sederhana
(perbaikan)

jumlah: prosedur begin


output ‘nilai invest awal : ‘,awal
spesifikasi storage jalan  awal
parameter tahun  0
awal,suku,akhir : real in only delta  awal*suku/100
tahun : integer out only loopwhile jalan<akhir
variabel jalan  jalan + delta
jalan,delta : real tahun  tahun + 1
end of spesifikasi storage output ‘setelah’,tahun,’tahun nilai
investasi = ‘,jalan
endloop
end
Ringkasan
 Jenis loop
 loopwhile
 loop index otomatis
 loop until
 Operasi umum dalam loop
 Input data (header, trailer, dan moredata)
 Menjumlahkan dalam loop (summing)
 Menghitung dalam loop (counting)
Ringkasan
 Efisiensi
 Jumlah pernyataan yang dieksekusi
 Gambaran detail dari waktu eksekusi
 Pengurangan jumlah pernyataan memberikan
perbaikan yang signifikan
 Kompleksitas waktu
 Gambaran umum dari waktu yang dibutuhkan
 Perubahan kompleksitas waktu menjadi lebih
rendah memberikan perbaikan yang
mendasar.
Ringkasan
 Kompleksitas waktu
 O(1) Paling efisien
 O(log2n)
 O(n)
 O(n*log2n)
 O(n2)
 O(n3)
 O(2n) Kurang efisien
Ringkasan
Tiga kesalahan umum loop
 Kesalahan menginisialisasi variabel

saat memasuki loop


 Menggunakan kondisi terminasi
yang menyebabkan terlalu sedikit
atau terlalu banyak iterasi
 Infinite loop
Kasus 4.5
Perbaikan Bilangan Faktorial
 Uraian Permasalahan
Diberikan bilangan integer n, yang lebih
besar atau sama dengan 0, carilah
faktorialnya.

 Spesifikasi Input
Satu baris input mengandung satu
bilangan integer n yang bernilai lebih
besar atau sama dengan 0.
Penyelesaian
in
loopwhile i1
Kali diset 1
kali  kali*i sebagai nilai awal
ii–1
endloop
Penyelesaian faktorial:fungsi integer
spesifikasi storage
parameter
faktorialbil: prosedur inisial
n : integer in only
spesifikasi storage variabel
variabel kali,I : integer
n,nfaktorial : integer end of spesifikasi storage
end of spesifikasi storage
begin
begin kali1
input n
if n<0
in
then output ‘input bilangan negatif : ’,n loopwhile i1
else nfaktorial  faktorial(n) kalikali*i
output n,’ faktorial = ‘,nfaktorial ii-1
end if
end
endloop
faktorialkali
end
Efisiensi
 Keduanya memiliki kompleksitas waktu
O(n)
 Rekursif memerlukan space yang lebih
banyak O(n), sedangkan loop memerlukan
O(1)
Kasus 4.6
Perbaikan Bilangan Fibonacci
 Uraian Permasalahan
Diberikan bilangan integer n, yang lebih besar
dari 0, hitung dan cetak bilangan fibonacci n.

 Spesifikasi Input
Satu baris input mengandung satu bilangan
integer n yang bernilai lebih dari 0.
Penyelesaian
loopwhile {selama belum selesai}
nilaibaru  jumlah 2 nilai fib
sebelumnya
endloop
2 fibonacci pertama:
duasebelum  1 {fib 1}
satusebelum  1 {fib 2}
Penyelesaian – struktur loop
duasebelum  1
satusebelum  1 JANGAN TERBALIK!!!

nilaibaru1
duasebelum  satusebelum
i3 satusebelum  nilaibaru
loopwhile in
nilaibaru satusebelum + duasebelum
{update satusebelum dan duasebelum}
ii+1
endloop
Penyelesaian
fib: prosedur inisial

spesifikasi storage
variabel
n : integer
end of spesifikasi storage
begin
input n
if n<1
then output ‘input <1, datanya salah ’,n
else output fibo(n)
end if
end
Penyelesaian

fibo: fungsi integer begin


duasebelum1
spesifikasi storage satusebelum1
parameter nilaibaru1
n : integer in only i3
variabel loopwhile in
satusebelum,nilaibaru : integer nilaibaru  satusebelum +
duasebelum,I : integer duasebelum
end of spesifikasi storage duasebelum  satusebelum
Efisiensi: satusebeleumnilaibaru
6 + 6*(n-2) = 6*n -6 ii+1
O(n) endloop
fibonilaibaru
end