Algortima Pemrograman I PERCABANGAN Struktur Algoritma Percabangan • Sebuah program tidak selamanya akan berjalan dengan mengikuti struktur berurutan, kadang perlu merubah urutan pelaksanaan program dan menghendaki agar pelaksanaan program meloncat ke baris tertentu. • Peristiwa ini kadang disebut sebagai percabangan/pemilihan atau keputusan. Pernyataan If .... Else • Digunakan untuk menguji sebuah kondisi. • Bentuk umum: If kondisi then Begin {pernyataan yang dijalankan jika kondisi terpenuhi} End Else Begin {pernyataan yang dijalankan jika kondisi tidak terpenuhi} End; • Contoh: If (x > 0) then Writeln(‘x bilangan positif’); else Writeln(‘x bilangan negatif’); • Program diatas tidak perlu menambahkan kata kunci begin dan end karena pernyataan yang dituliskan hanya satu baris saja. • Jika tidak ingin mengerjakan sesuatu jika kondisi yang ditentukan tidak terpenuhi, dapat menyatakan if tanpa else. If (x<0) then x := -x; Pernyataan If .... Else if • Meletakkan pernyataan if lain setelah else. If (x > 0) then Writeln (‘x bilangan positif’); Else if (x < 0) then Writeln (‘x bilangan negatif’); Else Writeln (‘x adalah nol’); Pernyataan case • Digunakan untuk menyederhanakan konstruksi If ... Else if If (x = 0) then Writeln (‘x bernilai 0’); Else if (x = 1) then Writeln (‘x bernilai 1’); Else if (x = 2) then Writeln (‘x bernilai 2’); else Writeln (‘x tidak bernilai 0, 1 dan 2’); • Dapat diganti menjadi lebih ringkas Case x of 0:=Writeln (‘x bernilai 0’); 1:=Writeln (‘x bernilai 1’); 2:=Writeln (‘x bernilai 2’); else Writeln (‘x tidak bernilai 0, 1 dan 2’); End; Contoh soal No.1 Tulislah algoritma dan program serta flowchart yang menampilkan ‘Genap’ jika suatu bilangan adalah bilangan genap atau ‘Ganjil’ jika bilangan adalah bilangan ganjil. Masukan: bilangan bulat yaitu x dimana 0 ≤ 𝑥 ≤ 65535 Keluaran: bilangan genap dan bilangan ganjil No.2 Tulislah algoritma dan program serta flowchart jika sebuah aturan untuk menonton sebuah film tertentu adalah sebagai berikut, jika usia penonton lebih dari 17 tahun maka penonton diperbolehkan dan apabila kurang dari 17 tahun maka penonton tidak diperbolehkan nonton. jawaban algoritma: menonton_film Nama algoritma Menonton_film Deklarasi Usia : real; Psn : String; Deskripsi Read (Usia) if Usia > 17 Psn “anda boleh menonton” else Psn “anda tidak boleh menonton” Write(‘Pesan’, Psn) jawaban flowchart: menonton_film No.3 Tulislah algoritma dan program serta flowchart jika dalam suatu perhitungan nilai P = X + Y. Jika P positif, maka Q = X * Y, sedangkan jika negative maka nilai Q = X/Y. Buatlah flowchart untuk mencari nilai P dan Q jawaban algoritma: hitung_bilangan Nama algoritma Hitung_bilangan Deklarasi X, Y : real; P, Q : real; Deskripsi Read (X,Y) PX+Y if P > 0 QX*Y else QX/Y Write(‘Nilai P’,P) Write(‘Nilai Q’, Q) jawaban flowchart: hitung_bilangan No.4 Tulislah algoritma dan program serta flowchart jika diketahui pegawai dengan masa kerja lebih dari 3 tahun mendapat tunjangan sebesar 20% gaji pokok sedang yang kurang dari itu mendapat tunjangan 10%. Input program adalah masa kerja dan gaji pokok. Jawaban algoritma: gaji Nama Algoritma Gaji_pegawai Deklarasi Tjg, mk, gapok, gatot : double Deskripsi Read (mk, gapok ) If(mk>3) then tjg 0.2 * gapok Else tjf 0.1 * gapok Gatot gapok + tjg Write(‘gaji total’,gatot ) Jawaban flowchart: gaji No.5 Tulislah algoritma dan program serta flowchart yang meminta masukan dari pengguna. Jika memasukkan 0 program menampilkan Minggu, jika memasukkan 1 program menampilkan Senin, dan seterusnya sampai sabtu. Jika memasukkan nila diluar 0 sampai 6, program menuliskan hari tidak valid. Masukan: bilangan bulat yaitu x dimana 0 ≤ 𝑥 ≤255 Keluaran: Minggu, Senin ... Sabtu dan hari tidak valid. No.6 persamaan Kuadrat Tulislah algoritma dan program serta menghitung akar persamaan kuadrat: 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0 Masukan: bilangan real yaitu a, b dan c Keluaran: akar-akar persamaan kuadrat. Rumus pencarian akar kuadrat: 𝑥1,2 −𝑏 ± 𝑏 2 − 4𝑎𝑐 = 2𝑎 Nilai 𝑏 2 − 4𝑎𝑐 disebut diskriminan (=D) flowchart untuk No.7 Tahun Kabisat Tulislah algoritma dan program serta flowchart untuk mengecek suatu tahun merupakan tahun kabisat atau bukan. Masukan: bilangan bulat dimana 0 ≤ 𝑡𝑎ℎ𝑢𝑛 ≤255 Keluaran: Tahun Kabisat dan Tahun bukan kabisat. No.8 Buatlah algoritma dan program serta flowchart untuk menghitung umur anda dengan memasukkan tahun sekarang. Hasil penghitungan adalah apakah tahun lahir tahun kabisat atau tidak Umur anda dalam hitungan jam Jawaban soal: tahun kabisat Nama Algoritma Tahun_kabisat Deklarasi Tahun_sekarang : int; Tahun_lahir : int; Hitung_umur_tahun : int Hitung_umur_jam : int Kata : String Deskripsi Read (tahun_sekarang,tahun_lahir) Hitung_umur_tahun tahun_sekarang – tahun_lahir Hitung_umur_jam hitung_umur_tahun * 8760 If((tahun_sekarang % 400 ==0) ||((tahun_sekarang % 4 == 0) && (tahun_sekarang %100 != 0)) ) kata tahun kabisat Else kata tidak tahun kabisat Write (hitung_umur_jam, kata) a01TahunKabisatSimple.java Jawaban flowchart: tahun kabisat No.9 FORM BELI BARANG Kode Barang Jumlah Beli Harga Barang Jumlah Harga Total Bayar • Buatlah algoritma dan program serta flowchart jika beli produk >=3, maka diskon 5% Jawaban algoritma: form Nama program Deklarasi Deskripsi Pembelian_barang Kodebarang, jml_beli : int; Hargasatuan,jml_harga,pot,bayar : double; read (kodebarang,hargasatuan,jml_beli) Jml_harga = hargasatuan * jml_beli; If jml_beli >=3 Pot = 0.5; Else Pot = 0; Bayar = (Jml_harga) – (Jml_harga* pot); Write(‘Jumlah Harga’, Jml_harga ) Write(‘Potongan’,pot) Write (‘bayar’, bayar); Pseudo code Jml_harga = harga * jml_beli; If jml_beli >=3 then Program Pembelian_barang; Var begin diskon = 0.5; Kode, jml_beli : int; end Harga,jml_harga: double; Else diskon : double; begin Begin diskon = 0; write ( ‘ Kode Barang : ‘); End; readln(Kode); Bayar = (Jml_harga) – (Jml_harga* write (‘ Jumlah beli : ‘); diskon); readln (jml_beli); Writeln(‘Jumlah Harga’, Jml_harga ); write (‘Harga satuan: ‘); Writeln (‘Total bayar’, bayar); readln(harga); Readln; End. Percabangan bersarang Contoh 10: • Sebuah usaha fotokopi mempunyai aturan sebagai berikut : jika yang fotokopi statusnya adalah langganan, maka berapa lembar pun dia fotokopi, harga perlembarnya Rp. 75,jika yang fotokopi bukan langganan, maka jika dia fotokopi kurang dari 100 lembar harga perlembarnya Rp. 100,-. Sedangkan jika lebih atau sama dengan 100 lembar maka harga perlembarnya Rp. 85,-. Algoritma 1. Masukkan Status customer dan jumlah lembar 2. Jika status=’pelanggan’ harga perlembarnya Rp. 75,3. Jika status=’bukan pelanggan’ , jika dia fotokopi < 100 harga perlembarnya Rp. 100,-. Sedangkan jika >= 100 maka harga=Rp. 85,-. 4. Total bayar jumlah lembar * harga 5. Tulis Total Bayar Pseudo code Program Biaya Cetak; Var Status: string; Harga, Total: double; Jumlah: integer; Begin Write(‘Masukkan Status Customer=’); Readln(status); Write(‘Masukkan jumlah lembar=’); Readln(jumlah); If (status=’pelanggan’) then begin Harga:=75; end Else begin If (jumlah < 100) then begin Harga:= 100; end Else Begin Harga :=85; end End; Total :=Jumlah * Harga; Writeln(‘ Total Bayar adalah= ‘, Total); Readln; End. jawaban algoritma: percabangan bersarang Nama algoritma Biaya_fotokopi Deklarasi Status : String; JLF : int; HPP, TH : real; Deskripsi Read (Status,JLF) if Status==“langganan” HPP 75 else if JLF < 100 HPP 100 else HPP 85 TH JLF * HPP Write (‘Total Harga’, TH) jawaban flowchart: percabangan Contoh 11: • Aturan kelulusan siswa pada mata pelajaran Pemrograman Web diterapkan sebagai berikut : Jika nilai ujian tengah semester (UTS) lebih besar dari 70 maka siswa dinyatakan lulus dan Nilai Akhir sama dengan nilai UTS. Jika nilai UTS kurang atau sama dengan 70 maka siswa dinyatakan lulus jika Nilai Akhir lebih besar atau sama dengan 60 dimana Nilai Akhir = (nilai UTS x 40%) + (nilai UAS x 60%). Jawaban algoritma: lulus Nama algoritma Kelulusan_siswa Deklarasi nim,nama,status : String; NUTS,NUAS,NA : real; Deskripsi Read (nim,nama,status,NUTS,NUAS) if NUTS > 70 NA NUTS; status “lulus” else NA (NUTS * 0.4) + (NUAS * 0.6) if NA >= 60 status “lulus” else status “tidak lulus” Write (‘Nim, Nama, NA, Status’, nim,nama,NA,status) Jawaban flowchart: lulus