Notasi Algoritmik Algoritma dan Struktur Data Apakah ini kode program? /*Kamus*/ x,y,z : integer terbesar: integer /*Algoritma*/ input(x,y,z) terbesar x If (y > terbesar) terbesar If (z > terbesar) terbesar output(terbesar) then y then z Algoritma vs Kode Program Algoritma tidak sama dengan kode program. Algoritma: langkah-langkah sistematis untuk penyelesaian suatu masalah yang dapat diimplementasikan ke dalam bahasa pemrograman. Notasi algoritmik merupakan notasi yang digunakan untuk menuliskan suatu algoritma. Kode program merupakan implementasi dari notasi algoritmik ke dalam bahasa pemrograman tertentu. /*Algoritma untuk menukar nilai dari dua buah variabel*/ ----------------------/*Kamus*/ a,b,temp : integer /*Implementasi algoritma ke dalam Bahasa C*/ ----------------------/*Deklarasi variabel*/ int a,b,temp; /*Algoritma*/ input(a,b) temp a a b b temp output(a,b) /*Program utama*/ scanf(“%d”,&a); scanf(“%d”,&b); temp = a; a = b b = temp printf(“a: %d \n”,a); printf(“b: %d \n”,b); Pengondisian Untuk memilih suatu tindakan berdasarkan kondisi tertentu Ada dua macam notasi algoritmik: 1. 2. If-then Depend on Notasi “if-then” If <kondisi> then <aksi> If <kondisi> then <aksi 1> <aksi 2> <aksi n> If <kondisi> then <aksi> Else if <kondisi> then <aksi> /*Algoritma untuk melakukan pengecekan bilangan genap atau ganjil*/ ----------------------------------------------/*Kamus*/ bil : integer cek : string /*Algoritma*/ Input(bil) if (bil mod 2 = 0) then cek = ‘genap’ else cek = ‘ganjil’ output(cek) /*Algoritma untuk menentukan yudisium mahasiswa*/ ----------------------------------------------------/*Kamus*/ ipk: integer yudisium : string /*Algoritma*/ input(ipk) if (ipk >= 3.5) then yudisium = ‘cumlaude’ Else if (ipk >= 3.0) then yudisium = ‘sangat memuaskan’ Else if (ipk >= 2.75) then yudisium = ‘memuaskan’ Else if (ipk >= 2.25) then yudisium = ‘cukup’ else yudisium ‘TIDAK LULUS’ output(yudisium) Notasi “depend on” Depend on <variabel> <kondisi 1> : <aksi 1> <kondisi 2> : <aksi 2> <kondisi n> : <aksi n> Depend on <variabel 1> <kondisi 1> : depend on <variabel 2> <kondisi 2.1> : <aksi 2.1> <kondisi 2.2> : <aksi 2.2> <kondisi 2> : <aksi 2> /*Algoritma untuk menampilkan nama hari berdasarkan nomor urut hari*/ --------------------------------------------------------------------/*Kamus*/ idxHari: integer [1..7] hari: string /*Algoritma*/ input(idxHari) Depend on (idxHari) 1 : hari ‘Senin’ 2 : hari ‘Selasa’ 3 : hari ‘Rabu’ 4 : hari ‘Kamis’ 5 : hari ‘Jumat’ 6 : hari ‘Sabtu’ 7 : hari ‘Minggu’ output(hari) If (hari = ‘Sabtu’) or (hari = ‘Minggu’) then output(‘HOREEE…!!!’) else output(‘hmmmm…’) Latihan Buatlah algoritma untuk menentukan kondisi tubuh seseorang, apakah kurus, ideal, atau kegemukan. Diketahui bahwa rumus untuk menghitung berat badan ideal adalah: BBI = (Tinggi Badan - 100) * 90% Ketentuan kategori berat badan: - jika berat badan seseorang 20% lebih besar dari nilai BBI-nya, maka kategorinya = kegemukan. - jika berat badan seseorang 10% lebih kecil dari nilai BBI-nya, maka kategorinya = kurus. - jika berat badan seseorang sama dengan nilai BBInya, maka kategorinya = ideal. Contoh Contoh (2) Silakan mengerjakan Waktunya 10-15 menit /*Algoritma untuk menentukan kategori berat badan*/ ---------------------------------------------------------/*Kamus*/ berat,tinggi: integer bbi,persentase,selisih: real kategori: string /*Algoritma*/ input(berat,tinggi) bbi (tinggi-100) * 0.9 selisih tinggi - bbi If (selisih < 0) then selisih -1 * selisih persentase (bbi / tinggi) * 1 /*untuk mempositifkan nilai selisih jika selisihnya bernilai negatif*/ /*Lanjutan dari algoritma sebelumnya*/ If (persentase > 0.2) then kategori ‘KEGEMUKAN’ Else if (persentase < 0.1) then kategori ‘KURUS’ Else kategori ‘IDEAL’ output(kategori) Pengulangan Untuk melakukan suatu proses secara berulang-ulang, sebanyak frekuensi yang ditentukan. Ada empat macam notasi algoritmik 1. 2. 3. 4. Traversal While-do Repeat-until Iterate-stop Notasi “traversal” Identik dengan notasi “for” pada Bahasa C. <pencacah> traversal [nilai ke-1.. Nilai ke-n] <aksi 1> <aksi n> Contoh /*Algoritma menampilkan deret bilangan genap*/ ----------------------------------------------------/*Kamus*/ idx,awal,akhir: integer /*Algoritma*/ Input(awal,akhir) idx traversal[awal..akhir] If (idx mod 2 = 0) then output(idx) Notasi “while-do” While <kondisi> do <aksi 1> <aksi 2> Contoh /*Algoritma menampilkan deret bilangan genap*/ ----------------------------------------------------/*Kamus*/ idx,awal,akhir: integer /*Algoritma*/ Input(awal,akhir) idx awal While(idx <= akhir) do If (idx mod 2 = 0) then output(idx end if idx idx + 1 Latihan Buatlah algoritma untuk menampilkan gambar berikut: * ** *** **** Input berupa satu bilangan yang akan menyatakan berapa jumlah baris dari gambar tersebut /*Algoritma menampilkan pola segitiga*/ ----------------------------------------------------/*Kamus*/ Idx1, idx2,n : integer /*Algoritma*/ Input(n) idx1 traversal[1..n] idx2 traversal[1..idx1] output(‘*’)