TEL 2112 Dasar Komputer & Pemograman Contoh Pemecahan Masalah Dosen: Abdillah, S.Si, MIT Email: [email protected] Website: http://abdill01.wordpress.com Tujuan Mahasiswa mampu menyelesaikan masalah berdasar contoh-contoh algoritma penyelesaian masalah. 1. Menentukan Data Terkecil Tulislah algoritma untuk menentukan bilangan terkecil dari N buah data integer yang dibaca dari papan ketik. Nilai N dibaca terlebih dahulu (N > 0). Penyelesaian Baca data terlebih dahulu. Asumsikan data pertama ini sebagai data terkecil (min) sementara. Kemudian baca data berikutnya. Jika data tersebut lebih kecil daripada min, maka ia menjadi min yang baru. Ulangi untuk data masukan yang lain. Pada akhir pengulangan min menjadi nilai terkecil dari seluruh data. Penjelasan Karena banyaknya data diketahui, maka jumlah pengulangan dapat ditentukan. Pada masalah ini, struktur FOR dan WHILE dapat kita gunakan, yang dalam hal ini kita pilih struktur for. Tapi penggunaan REPEAT dapat menghasilkan algoritma yang salah. Algoritma PROGRAM Cari_Minimum {Menentukan bilangan terkecil dari N buah data integer} DEKLARASI N, x, min, i : integer ALGORITMA: read (N, x) min x for i 2 to N do read (x) if x < min then min x endif endfor write (min) Algoritma PROGRAM Cari_Minimum {Menentukan bilangan terkecil dari N buah data integer} DEKLARASI N, x, min, i : integer ALGORITMA: read (N, x) min x i2 repeat read (x) if x < min then min x endif ii+1 until i > N write (min) 2. Menentukan Perpangkatan Tulislah algoritma untuk membaca bilangan bulat a dan n lalu menghitung perpangkatan an. (n 0). Penyelesaian Misalkan nilai perkalian disimpan di dalam peubah bernama p. Peubah p ini diinisialisasi dengan 1, karena ia akan selalu dikalikan a. Kemudian lakukan perkalian p dengan a sebanyak n kali. Algoritma PROGRAM Perpangkatan {Menghitung perpangkatan an, a bilangan bulat dan n 0} DEKLARASI a, n, p, i : integer ALGORITMA: read (a, n) p1 for i 1 to n do pp*a endfor write (p) 3. Menentukan Perpangkatan Tulislah algoritma untuk membaca bilangan bulat a dan n sebarang lalu menghitung perpangkatan an. Penyelesaian Jika n < 0, maka n diubah terlebih dahulu ke positif dan disimpan ke dalam peubah m. Setelah perpangkatan dihitung, hasilnya dinyatakan dalam bentuk 1/hasil. Algoritma PROGRAM Perpangkatan {Menghitung an, a dan n bilangan bulat sembarang} DEKLARASI a, n, m, p, i : integer ALGORITMA: read (a, n) if n < 0 then m -n else m n endif p1 for i 1 to m do pp*a endfor if n < 0 then write (1/p) else write (p) endif 4. Menentukan Faktorial Tulislah algoritma untuk membaca bilangan bulat n lalu menghitung n faktorial. Penyelesaian Faktorial sebuah bilangan bulat positif n didefinisikan sebagai: n! = 1 * 2 * 3 * ... * n dan khusus untuk n =0, maka 0! = 1. Misalkan nilai faktorial disimpan dalam peubah fak. Inisialisasi fak dengan 1: fak 1 Kalikan fak dengan i, mulai dari 1 sampai n: fak fak * i Algoritma PROGRAM Faktorial {Menghitung n faktorial, n > 0} DEKLARASI n, fak, i : integer ALGORITMA: read (n) fak 1 for i 1 to n do fak fak * i endfor write (fak) 5. Konversi Desimal-Biner Tulislah algoritma yang mengkonversi bilangan bulat positif ke dalam bilangan biner. Penyelesaian Untuk mendapatkan bentuk biner dari sebuah bilangan desimal, bagi bilangan desimal tersebut dengan 2 terus menerus sampai hasil pembagian = 0. Deretan sisa hasil pembagian menyatakan bilangan biner dari bilangan desimal tersebut. Contoh: Konversi bilangan desimal 18 18/2 =9 sisa 0 9/2 =4 sisa 1 4/2 =2 sisa 0 2/2 =1 sisa 0 1/2 =0 sisa 1 Urutan bilangan biner sesuai arah panah: 10010. Penjelasan Misalkan bilangan yang akan dikonversikan ke biner adalah x. Algoritma pengkonversiannya adalah membagi x dengan 2 secara berulang-ulang sampai hasil pembagiannya = 0. Urutan pembagiannya adalah menghitung sisa pembagian terlebih dahulu: sisa x mod 2. Baru kemudian menghitung hasil pembagian: x x div 2. Bit biner yang merupakan sisa pembagian ditampung dalam sebuah peubah string yang bernama biner. Inisialisasi biner dengan karakter kosong ‘ ‘. Setiap kali diperoleh sisa pembagian, sambungkan dengan operator + sisa pembagian tersebut dengan biner: biner ‘0’ + biner. Jika sisa = 0 biner ‘1’ + biner. Jika sisa = 1 Algoritma PROGRAM Desimal_Biner {Mengkonversi bilangan bulat positif ke bilangan biner} DEKLARASI x, sisa : integer biner : string ALGORITMA: read (x) biner ‘ ‘ repeat sisa x mod 2 x x div 2 case sisa 0 : biner ‘0’ + biner 1 : biner ‘1’ + biner endcase until x = 0 write (biner) 6. Mencetak Segitiga Bintang Tulislah algoritma yang mencetak segitiga bintang berikut, jika diberikan tinggi segitiga adalah N (N > 0). Contohnya, jika N = 5, maka segitiga yang dihasilkan adalah: * ** *** **** ***** **** *** ** * Penyelesaian Perhatikan gambar segitiga uktuk N = 5. Baris ke-1 terdiri atas satu bintang, baris ke2 dua bintang, dan seterusnya baris ke-5 lima bintang. Secara umum baris ke i terdiri atas i bintang. Setelah baris ke-N, baris berikutnya merupakan pencerminan dari baris N – 1 sampai baris ke-1. Algoritma PROGRAM Cetak_Segitiga_Bintang {Mencetak segitiga bintang dengan tinggi N } DEKLARASI N, i, j : integer ALGORITMA: read (N) for i 1 to N for j 1 to write ( * ) endfor endfor for i N-1 to for j 1 to write ( * ) endfor endfor do i do 1 do i do