Algoritma Pemrograman Pertemuan Ke-6 (Pengulangan atau Looping [1]) 1
Sub Pokok Bahasan Pendahuluan Struktur Pengulangan Pengulangan tanpa kondisi dan dengan kondisi Struktur FOR (menaik dan menurun) 2
Pendahuluan Pengulangan (looping) adalah pelaksanaan suatu instruksi berulangkali Di dalam algoritma, pengulangan dapat dilakukan sejumlah kali, atau sampai kondisi berhenti pengulangan tercapai 3
Struktur Pengulangan Bentuk Umum: <inisialisasi> awal pengulangan badan pengulangan akhir pengulangan <terminasi> <inisialisasi>: aksi yang dilakukan sebelum pengulangan dilakukan untuk pertama kalinya. badan pengulangan: bagian algoritma yang diulang <terminasi>: aksi yang dilakukan setelah pengulangan selesai dilaksanakan <inisialisasi> dan <terminasi> tidak selalu harus ada, namun pada berbagi kasus inisialisasi umumnya diperlukan awal dan akhir pengulangan dinyatakan sebagai kata kunci yang bergantung pada struktur pengulangan yang digunakan 4
Macam struktur pengulangan Struktur FOR Struktur WHILE Struktur REPEAT pengulangan tanpa kondisi (unconditional looping): jumlah pengulangan sudah diketahui sebelum eksekusi pengulangan dengan kondisi (conditional looping): jumlah pengulangan tidak diketahui sebelum eksekusi program. Yang dapat ditentukan hanya kondisi berhenti pengulangan (instruksi-instruksi di dalam badan pengulangan diulangi sampai kondisi berhenti terpenuhi) 5
Struktur FOR Jumlah pengulangan diketahui atau dapat ditentukan sebelum eksekusi. Untuk mencacah sudah jumlah pengulangan diperlukan sebuah peubah (variable) pencacah (counter). Peubah ini nilainya selalu bertambah satu setiap kali pengulangan dilakukan Jika cacah pengulangan sudah mencapai jumlah yang dispesifikasikan, maka proses pengulangan berhenti Bentuk umum struktur FOR: Menaik (ascending) Menurun (descending) 6
Struktur FOR: menaik for pencacah nilai_awal to nilai_akhir do aksi endfor pencacah menggunakan tipe data yang memiliki predecessor dan successor, yaitu integer atau karakter (tipe riil tidak dapat digunakan sebagai pencacah) aksi satu atau lebih instruksi yang diulang. nilai_awal harus lebih kecil atau sama dengan nilai_akhir (jika nilai_awal lebih besar dari nilai_akhir, maka badan pengulangan tidak dimasuki) pada awalnya pencacah diinisialisasikan dengan nilai_awal. Nilai pencacah secara otomatis bertambah satu setiap kali aksi pengulangan dimasuki, sampai akhirnya nilai pencacah sama dengan nilai_akhir jumlah pengulangan yang terjadi = nilai_akhir nilai_awal + 1 7
Contoh 1: Mencetak tulisan Informatika sebanyak 5 kali Algoritma CETAK_INFORMATIKA { Mencetak Informatika sebanyak 5 kali } Jumlah pengulangan sudah ditentukan sebelumnya (5 kali) DEKLARASI Badan pengulangan hanya berisi k : integer { pencacah pengulangan } satu instruksi, yaitu write( Informatika ) DESKRIPSI : for k 1 to 5 do {ulangi sebanyak 5 kali} k adalah peubah pencacah yang bertipe integer write( Informatika ) pada mulanya k bernilai 1, nilai k endfor selalu bertambah 1 setiap kali pengulangan dilakukan, sampai akhirnya k mencapai 5 Program CETAK_INFORMATIKA; { Mencetak Informatika sebanyak 5 kali } Jumlah pengulangan yang dilakukan: (* DEKLARASI *) 5 1 + 1 = 5 kali var Keluaran dari algoritma k : integer; CETAK_INFORMATIKA adalah string Informatika sebanyak 5 kali: (* DESKRIPSI *) Informatika begin Informatika for k := 1 to 5 do Informatika writeln( Informatika ); Informatika (*endfor*) Informatika end. 8
Contoh 2: Algoritma PENJUMLAHAN_DERET Menghitung jumlah angka- { Menjumlahkan deret 1 + 2 + 3 +... + N, angka dari 1 sampai N dengan N adalah bilangan bulat positif yang dibaca dari piranti masukan } jumlah = 1 + 2 + 3 +... + N Nilai N dibaca terlebih DEKLARASI dahulu dari piranti masukan. k : integer { pencacah pengulangan } Misalnya, jika N = 5, maka N, jumlah : integer jumlah angka dari 1 sampai 5 adalah deret: DESKRIPSI : read(n) { banyaknya suku deret } 1 + 2 + 3 + 4 + 5 = 15 jumlah 0 for k 1 to N do {ulangi sebanyak N kali} jumlah jumlah + k endfor write(jumlah) 9
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 suku deret : ); readln(n); jumlah := 0; for k := 1 to N do jumlah := jumlah + k; (*endfor*) writeln(jumlah); end. 10
Contoh 3: Algoritma HITUNG_RATA_RATA { Menghitung rata-rata N buah bilangan bulat yang dibaca dari piranti masukan. N > 0. } DEKLARASI Menghitung nilai rata-rata dari k : integer { pencacah pengulangan } N buah data bilangan bulat N : integer { jumlah data, > 0 } yang dibaca dari piranti masukan. Nilai rata-rata adalah jumlah : integer jumlah seluruh nilai dibagi rata : real dengan banyaknya nilai Misalkan, N = 5 dan data x : integer {bilangan bulat yang dibaca} DESKRIPSI : read(n) { banyaknya suku deret } bilangan yang dibaca berturutturut adalah 12, 10, 6, 2, jumlah 0 4, maka nilai rata-ratanya for k 1 to N do {ulangi sebanyak N kali} adalah: read(x) (12 +10 + 6 + 2 + 4)/5 jumlah jumlah + x = 34/5 endfor = 6.8 rata jumlah/n write(rata) 11
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; for k := 1 to N do begin write( Bilangan ke-,k, : );readln(x); jumlah := jumlah + x; end; rata := jumlah/n; writeln(rata); end. 12
Struktur FOR: menurun for pencacah nilai_akhir downto nilai_awal do aksi endfor pencacah menggunakan tipe data yang memilki predecessor dan successor, yaitu integer atau karakter (tipe riil tidak dapat digunakan sebagai pencacah. aksi adalah satu atau lebih instruksi yang diulang) nilai_akhir harus lebih besar atau sama dengan nilai_awal (Jika nilai_akhir lebih kecil dari nilai_awal, maka badan pengulangan tidak dimasuki) pada awalnya pencacah diinisialisasikan dengan nilai_akhir. Nilai pencacah secara otomatis berkurang satu setiap kali aksi diulangi, sampai akhirnya nilai pencacah sama dengan nilai_awal. jumlah pengulangan yang terjadi = nilai_akhir nilai_awal + 1 13
Contoh: Mencetak angka 5, 4,, 1 Algoritma CETAK_ANGKA_TURUN {Mencetak 5, 4,..., 1 ke piranti keluaran} DEKLARASI k : integer { pencacah pengulangan } DESKRIPSI : for k 5 downto 1 do write(k) endfor Pada algoritma CETAK_ANGKA_TURUN, angka-angka yang dicetak bersesuaian dengan nilai pencacah pengulangan. Program CETAK_ANGKA_TURUN; Keluaran dari algoritma {Mencetak 5, 4,..., 1 ke piranti keluaran} adalah angka 5 yang turun (* DEKLARASI *) sampai ke angka 1: var k : integer; 54321 (* DESKRIPSI *) begin for k := 5 downto 1 do write(k, ); (*endfor*) end. 14