PERULANGAN (LOOP) Minggu IV Wahyu Pujiyono yywahyup@yahoo.com Tehnik Informatika Universitas Ahmad Dahlan
Motivasi Sangat banyak kegiatan sehari-hari yang sering diulang. Contoh : Makan sepiring akan dilakukan sesendok demi sesendok (berulang). Untuk menghitung 2 x 3 dilakukan dengan menjumlah 2 sebanyak 3 kali (2 ditambah 2 ditambah 2)
Komputer mempunyai kemampuan untuk menghitung perulangan dengan sangat cepat dan tidak mengenal lelah. Kadang diperlukan suatu kondisi untuk menghitung dengan perulangan sampai presisi tertentu.
Konsep Counter Perhatikan penugasan berikut ini : i i + 1 C++ : i++; Atau ++i;
Konsep Total Misalnya kita diminta untuk menghitung jumlah deret : Harga awal : i dimulai dengan 0 (unsur identitas penjumlahan)
Konsep Total (lanjutan) Algoritmik : jumlah 0 for i 1 to n do jumlah jumlah + i C++ : jumlah = 0; for (i = 1; i<=n; i++) jumlah += i;
Konsep Total Perkalian Misalkan kita diminta menghitung : n! = 1 . 2 . 3 . … n = Harga awal : 1 (unsur identitas perkalian)
Algoritmik C++ faktorial 1 for i 1 to n do faktorial faktorial * i C++ faktorial = 1; for (i = 1; i<=n; i++) faktorial *= i;
Pemrograman
Kasus 4.1. Cetaklah bilangan 1 sampai 4
Perhatikan perbedaan ketiga flowchart berikut : Mulai for i = 1 to 4 do i Selesai i =1 i = i+1 i <= 4 F T i > 4 Struktur for Struktur while Struktur repeat - until
Kasus 4.2. Cetaklah bilangan ganjil dari 0 sampai 10 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.
Beberapa cara :
Aplikasi Perulangan kerap digunakan untuk menghitung jumlah deret. Contoh : Hitung jumlah dari : 1+2+3+… + n = Kuncinya : buat pola untuk rumus di sebelah kanan ! Untuk operasi perkalian menggunakan tanda
Bilangan Fibonacci Bilangan Fibonacci dapat disajikan sebagai berikut : 0, 1, 1, 2, 3, 5, 8, … Dimulai dari suku pertama = 0 dan kedua = 1, suku ketiga adalah jumlah 2 suku pertama. Dalam rumus : F(n) = F(n-1) + F(n-2)
Analisis : Ketika kita menghitung suku ke-3 (F(3)) maka suku ke-1 sebenarnya sudah tidak digunakan. Untuk itu kita bisa “menggeser tempat” : f1 f2 f2 f3 Lalu berulang kita hitung suku berikutnya : f3 f2 + f1
Kasus 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.
Sentinel Digunakan bila banyaknya masukan tidak diketahui, tetapi sifat datanya diketahui. Untuk menghentikan masukan, digunakan harga lain. Contoh : Bila masukan harga selalu positif (misalkan nilai mahasiswa), sentinel bisa nol atau harga negatif.
Kasus 4.4. Hitunglah rata-rata dari integer positif (banyak data ditentukan dari data yang dimasukkan)
Kasus 4.7. Hitunglah nilai dari dengan x bilangan real dan y bilangan bulat. Analisis : = x . x . x . … x (sebanyak y kali) = Input : x dan y Output : hasil x pangkat y
Hanya saja, algoritma ini khusus untuk y > 0. Bahan kuis : Sempurnakan algoritma tersebut agar dapat menghitung pangkat y negatif.
Kasus 4.8. Hitunglah axb dengan metode penjumlahan Analisis : axb = a + a + … + a (sebanyak b kali) = Ini berlaku untuk a positif maupun negatif Bagaimana bila b negatif ?
Karena loop “tidak pernah negatif” maka harus dimanipulasi perulangan yang “selalu” positif. Untuk itu nilai b menjadi abs(b) Kemudian khusus untuk b < 0, jumlah yang sudah diperoleh dinegatifkan Ingat : ax(-b) = ax(-1)xb = -axb
Loop Invariant Loop invariant digunakan untuk membuktikan bahwa loop for adalah benar Karakteristik : Benar pada suatu titik (pernyataan) pada setiap iterasi loop Benar bila loop berhenti membuktikan loop bekerja secara benar.
Contoh : program untuk mencari nilai minimum dari sederetan input
Kondisi : min <= n selalu benar sebab sebelum pernyataan if mengubah harga min jika harga input terakhir dari n kurang dari harga min sebelumnya. Kondisi : min satu dari n harga selalu benar sebab min diawali dengan harga pertama dan min berubah harganya hanya bila harga input n yang baru lebih kecil dari min. Akhirnya : kondisi benar ketika loop berakhir diperoleh nilai minimum dari semua input
Latihan Buatlah algoritma dan program untuk mencetak bilangan yang habis dibagi 3 dan 5 antara 1 sampai dengan 100. Hitunglah nilai dari : [Sentinel] Buatlah algoritma untuk menentukan nilai terkecil, terbesar, dan jumlah semua bilangan positif yang dimasukkan.
Tugas Kelompok Buat simulasi membeli bahan bakar dengan spesifikasi : Input berupa : uang/berapa liter yang akan dibeli Jenis bahan bakar yang akan dibeli Indikator akan berlangsung terus (kenaikkan 0.1liter) selama total harga/jumlah liter bahan bakar yang dibeli belum melebihi permintaan Output menyatakan : Jumlah liter yang dibeli (bila input berupa uang) Total uang yang harus dibayar (bila input berupa liter)