If (Kondisi) Then
Aksi
Endif
Jika kondisi benar, maka aksi dilakukan. Jika kondisi tidak benar, maka tidak
terjadi apa-apa (efek neto “kosong”).
Kasus 1. Dibaca sebuah bilangan bulat dari keyboard. Tuliskan algoritma untuk
mencetak pesan “bilangan genap” jika bilangan tersebut adalah genap. Bilangan
genap adalah bilangan yang habis dibagi 2 (sisa = 0).
Algoritma BilanganGenap
{Mencetak pesan “bilangan genap” jika sebuah bilangan yang
dibaca dari keyboard adalah bilangan genap}
Deklarasi :
Bilangan : Integer
39
Deskripsi :
Read (Bilangan)
If Bilangan mod 2=0 then
Write (‘Bilangan Genap’)
EndIf
If Kondisi then
Aksi 1
Else {not Kondisi}
Aksi 2
EndIf
Else artinya kalau tidak. Jika kondisi bernilai benar, maka aksi 1 akan dikerjakan,
tetapi kalau tidak, aksi 2 yang akan dilaksanakan. Hati-hati dalam memakai “else”
yang berarti kondisi implisit yang merupakan negasi dari kondisi. Penulisan kondisi
“else” secara eksplisit sangat disarankan
Kasus 2. Dibaca dua buah bilangan bulat dari peranti masukan. Tentukan dari kedua
bilangan itu bilangan yang terbesar. Mislkan kedua bilangan tersebut adalah A dan B
Jika A > B, bilangan terbesar adalah A
Jika B ≥ A, bilangan terbesar adalah B
Algoritma Maks1
{Menentukan bilangan terbesar dari dua buah bilangan bulat}
Deklarasi :
A, B : Integer
Deskripsi :
Read (A,B)
If A > B then
Write (‘Bilangan terbesar : ‘,A)
40
Else
Write (‘Bilangan terbesar : ‘,B)
EndIf
import java.util.Scanner;
public class Maks1{
public static void main (String[] args) {
System.out.print ("masukkan Nilai A : "); //Input Nilai A
double a = new Scanner(System.in).nextDouble();
System.out.print ("masukkan Nilai B : "); //Input Nilai B
double b = new Scanner(System.in).nextDouble();
if (a > b) {
System.out.println( "Bilangan terbesar = " + a);
}
else {
System.out.println( "Bilangan terbesar = " + b);
}
}
}
If Kondisi_percabangan_1 then
{ proses jika kondisi percabangan 1 terpenuhi }
{end if}
Else if kondisi_percabangan_2 then
{proses jika kondisi percabangan 1 tidak terpenuhi dan kondisi Percabangan
2 terpenuhi }
{end if}
Else if kondisi_percabangan_3 then
{proses jika kondisi percabangan 1 dan 2 tidak terpenuhi dan Kondisi
percabangan 3 terpenuhi }
{end if}
Else
{ proses jika kondisi percabangan 1, 2, 3 Tidak terpenuhi }
{end else}
Jika kita ingin melakukan pemeriksaan secara terurut untuk banyak syarat
dimana semua syarat harus dilalui oleh semua yang memenuhi syarat atau tidak maka
kita dapat membuat percabangan sebagai berikut:
If Kondisi_percabangan_1 then
{proses jika kondisi percabangan 1 terpenuhi }
{end if}
Else if kondisi_percabangan_2 then
{proses jika kondisi percabangan 1 terpenuhi atau tidak terpenuhi
dan kondisi percabangan 2 terpenuhi }
{end if}
Else if kondisi_percabangan_3 then
{proses jika kondisi percabangan 1 dan 2 terpenuhi atau tidak
Terpenuhi dan kondisi percabangan 3 terpenuhi
{end if}
42
D Rp. 7000
Jumlah jam kerja yang normal selama seminggu adalah 48 jam. Kelebihan jam kerja
dianggap lembuar dengan upah lembur adalah Rp. 3000/jam untuk semua gologan
karyawan. Buat algoritma untuk masalah diatas !!
Algoritma UpahKaryawan
{Menghitung upah mingguan karyawan. Masukan yang dibaca dari
keyboard adalah nama karyawan, golongan, dan jumlah jam kerja.
Nama karyawan dan upahnya dicetak ke peranti keluaran}
Deklarasi :
Const UL = 3000 {Upah Lembur per jam}
Nama : String
gol : Char {‘A’,’B’,’c’,’D’,’E’}
UJ, Upah : Real {UJ adalah Upah per jam}
Deskripsi :
Read (Nama, gol, JJK)
If gol ← “A” then
UJ ← 4000
Else
If gol ← “B” then
UJ ← 5000
Else
If gol ← “C” then
UJ ← 6000
Else
If gol ← “D” then
UJ ← 7000
Else
Write (“Golongan salah !”)
EndIf
EndIf
EndIF
EndIf
If JJK ≤ 48 then
Upah ← JJK * UJ
Else
Upah ← (48 * UJ) + (JJK-48) * UL
EndIf
Write (Nama, Upah)
import java.util.Scanner;
import java.io.*;
public class upah{
public static void main (String[] args) throws IOException{
double Upah1;
double UJ = 0;
double UL = 3000;
43
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
System.out.print("Masukan Nama Karyawan = "); //Input Nama
Karyawan
String NamaKaryawan = input.readLine();
System.out.print("Masukan Golongan = "); //Input golongan
String Gol = input.readLine();
System.out.print ("Masukkan Jam Kerja : "); //Input
Gaji
double JJK = new Scanner(System.in).nextDouble();
if (Gol.equals("A")){//Perbandingan String pada java
menggunakan "equals"
UJ = 4000;
}
else {
if (Gol.equals("B")) {
UJ = 5000;
}
else {
if (Gol.equals("C")){
UJ = 6000;
}
else {
if (Gol.equals("D")){
UJ = 7000;
}
else {
System.out.println("Golongan Salah");}
}
}
}
if (JJK <= 48) {
Upah1 = JJK * UJ;
}
else {
Upah1 = (48*UJ) + (JJK - 48)*UL;
}
System.out.println("Nama karyawan : " + NamaKaryawan);
System.out.println("Upah Rp : " + Upah1);
}
}
depend on (nama-nama)
<kondisi-1> : <aksi-1>
<kondisi-2 > :<aksi-2>
<kondisi-3> : <aksi-3>
kondisi-N : aksi-N
44
{end depend on}
Tiap kondisi akan diperiksa nilai kebenarannya mulai dari kondisi yang pertama
sampai ditemukan kondisi yang bernilai benar. Jika kondisi k benar, maka aksi k
dilaksanakan sedangkan aksi yang lainnya akan diabaikan, dengan syarat :
1. Kondisi-1,kondisi-2,kondisi-3 ... .,kondisi-N domain harganya [true,false]
2. Kondisi-1,kondisi-2,kondisi-3 ... .,kondisi-N adalah ekspresi lojik/boolean yang
mengandung nama-nama sebagai operan.
Struktur depend on berfungsi untuk menyederhanakan bentuk if then else yang
bertingkat-tingkat. Stuktur depend on diatas ekivalen dengan struktur if then else
berikut ini :
If <Kondisi1> then
Aksi1
Else
If <kondisi2> then
Aksi2
Else
If <kondisi3> then
Aksi3
Else
If <kondisiN> then
AksiN
Else
AksiX
EndIf
EndIf
EndIf
EndIf
Kasus 5. pada kasus 4 diatas dapat diubah dalam struktur case berikut :
Algoritma UpahKaryawan
{Menghitung upah mingguan karyawan. Masukan yang dibaca dari
keyboard adalah nama karyawan, golongan, dan jumlah jam kerja.
Nama karyawan dan upahnya dicetak ke peranti keluaran}
Deklarasi :
Const UL = 3000 {Upah Lembur per jam}
Nama : String
gol : Char {‘A’,’B’,’c’,’D’,’E’}
UJ, Upah : Real {UJ adalah Upah per jam}
Deskripsi :
Read (Nama, gol, JJK)
Depend on (gol)
gol = “A” UJ ← 4000
gol = “B” UJ ← 5000
gol = “C” UJ ← 6000
gol = “D” UJ ← 7000
Else
Write (“Golongan salah !”)
{End Depend on}
If JJK ≤ 48 then
45
Upah ← JJK * UJ
Else
Upah ← (48 * UJ) + (JJK-48) * UL
EndIf
Write (Nama, Upah)
Kasus 6. Misalkan kita akan menghitung luas, keliling dan diagonal dari empat
persegi panjang. Pada setiap pilihan menu, dibaca panjang dan lebar empat persegi
panjang, dengan menu pilihan sebagai berikut :
Menu
1. Hitung luas
2. Hitung keliling
3. Hitung diagonal
4. Keluar dari program
Algoritma PersegiPanjang
{Menampilkan menu perhitungan empat persegi panjang, memilih
menu dan melakukan proses perhitungan}
Deklarasi :
panjang, lebar : real
luas, keliling, diagonal : real
NomorMenu : integer
Deskripsi :
Write (‘ Menu’)
Write (‘1. Hitung luas’)
Write (‘2. Hitung keliling’)
Write (‘3. Hitung diagonal’)
Write (‘4. Keluar dari program’)
Write (‘Masukkan pilihan anda :’ )
Read (NomorMenu)
Depend on (NomorMenu)
NomorMenu = 1 : Read(panjang, lebar)
luas ← panjang * lebar
Write (luas)
NomorMenu = 2 : Read(panjang, lebar)
keliling ← 2 * (panjang+lebar)
Write (keliling)
NomorMenu = 3 : Read(panjang, lebar)
diagonal ← (2*panjang) + (2*lebar)
Write (diagonal)
NomorMenu = 4 : Exit
Write (‘Keluar dari program’)
{End Depend on}
46
Translasi ke Bahasa Java
Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa
pemrograman Java
import java.util.Scanner;
public class hitungmenu{
public static void main (String[] args) {
int luas, keliling, diagonal;
System.out.println (" Menu ");
System.out.println (" 1. Hitung Luas ");
System.out.println (" 2. Hitung Keliling ");
System.out.println (" 3. Hitung Diagonal ");
System.out.println (" 4. Keluar program ");
System.out.print (" Masukan Pilihan Anda : ");
int nomor = new Scanner(System.in).nextInt();
switch(nomor){
case 1 :
System.out.print("Panjang : ");
int panjang = new Scanner(System.in).nextInt();
System.out.print("Lebar : ");
int lebar = new Scanner(System.in).nextInt();
luas = panjang * lebar;
System.out.println("Luas : " + luas);
break;
case 2 :
System.out.print("Panjang : ");
int panjang1 = new Scanner(System.in).nextInt();
System.out.print("Lebar : ");
int lebar1 = new Scanner(System.in).nextInt();
keliling = 2*(panjang1 * lebar1);
System.out.println("Keliling : " + keliling);
break;
case 3 :
System.out.print("Panjang : ");
int panjang2 = new Scanner(System.in).nextInt();
System.out.print("Lebar : ");
int lebar2 = new Scanner(System.in).nextInt();
diagonal = (2*panjang2)+ (2*lebar2);
System.out.println("Diagonal : " + diagonal);
break;
case 4 :
System.out.println("Keluar program");
break;
default :
System.out.print("Pilihan Salah");
break;
}
}
}
Kasus 7. Pegawai pada suatu universitas swasta terdiri dari karyawan administrasi
dan dosen. Dosen terdiri dari dosen tetap dan dosen tidak tetap. Masing-masing
memiliki aturan penggajian yang berbeda.
47
1. Komponen dan aturan penggajian karyawan administrasi
a. Gaji Pokok
Golongan GajiPokok
IIA 600.000
IIB 650.000
IIC 700.000
IID 750.000
IIIA 800.000
IIIB 850.000
IIIC 900.000
IIID 1.000.000
b. Tunjangan Jabatan
Jabatan Tunj_Jabatan
Ka.Biro 800.000
Ka. Keuangan 600.000
Kabag. Personalia 500.000
Kabag. KRS 400.000
Kabag. KHS 300.000
Staff 200.000
48
S3 35.000
S2 20.000
S1 10.000
Untuk dosen tetap jumlah jam mengajar dikurang 16 sks. Sedangkan dosen tidak tetap
hanya mendapat gaji honor mengajar sesuai dengan pendidikan dan jumlah jam
mengajar.
Pajak diperoleh dari rumus : pajak = 5% * gaji
Algoritma Gaji
{Menentukan gaji karyawan administrasi, dosen tetap dan dosen
tidak tetap}
DEKLARASI :
NmPengawai, status : string
Gol, jabatan, jenjang, pendidikan : string
GajiPokok, Tunj_Jabatan, Tunj_fungsi, Honorperjam : real
Honor, Pajak, GajiBersih, GajiKotor : real
DESKRIPSI :
Read (NmPegawai)
Read (status)
If status = ‘karyawan’ then
Read(gol,jabatan)
if gol =’IIA’ then
GajiPokok ← 600.000
Endif
if gol =’IIB’ then
GajiPokok ← 650.000
Endif
if gol =’IIC’ then
GajiPokok ← 700.000
Endif
if gol =’IIDA’ then
GajiPokok ← 750.000
Endif
if gol =’IIIA’ then
GajiPokok ← 800.000
Endif
if gol =’IIIB’ then
GajiPokok ← 850.000
Endif
if gol =’IIIC’ then
GajiPokok ← 900.000
Endif
if gol =’IIID’ then
GajiPokok ← 1.000.000
Endif
Read(Jabatan)
if jabatan =’Dekan’ then
Tunj_Jabatan←1.000.000
Endif
if jabatan =’Kaporgdi’ then
Tunj_Jabatan←800.000
Endif
if jabatan =’Koordinator Lab’ then
Tunj_Jabatan←800.000
Endif
if jabatan =’Kepala Lab’ then
Tunj_Jabatan←500.000
Endif
Read(jenjang)
if jenjang←’profesor’ then
50
Tunj_fungsi←2.000.000
Endif
if jenjang←’Lektor Kepala’ then
Tunj_fungsi←1.300.000
Endif
if jenjang←’Lektor’ then
Tunj_fungsi←500.000
Endif
if jenjang←’profesor’ then
Tunj_fungsi←270.000
Endif
Read(Pendidikan)
if Pendidikan←’S3’ then
Honorperjam←35.000
Endif
if Pendidikan←’S2’ then
Honorperjam←20.000
Endif
if Pendidikan←’S1’ then
Honorperjam←10.000
Endif
Read(JamMengajar)
Honor←(JamMengajar-16)*Honorperjam
GajiKotor← GajiPokok + Tunj_Jabatan + Tunj_fungsi + Honor
Else
If status = ‘DosenTdkTetap’ then
Read(Pendidikan,JamMengajar)
if Pendidikan←’S3’ then
Honorperjam←35.000
Endif
if Pendidikan←’S2’ then
Honorperjam←20.000
Endif
if Pendidikan←’S1’ then
Honorperjam←10.000
Endif
Honor←JamMengajar*Honorperjam
GajiKotor←Honor
EndIf
EndIf
EndIf
Pajak ← 0.05 * GajiKotor
GajiBersih ← GajiKotor - Pajak
Write(NmPegawai,GajiBersih)
51
Latihan
1. Buat algoritma yang menerima tiga buah angka masukan dan menampilkan nilai
yang paling besar dari ketiga masukan!
2. Buatlah algoritma yang menerima masukan berupa tiga buah sisi segitiga, periksa
apakah segitiga masukan merupakan segitiga siku-siku atau bukan!
3. Buat algoritma yang menerima masukan empat buah sisi, dimana jika semua sisi
sama maka tampilkan “Termasuk Kubus”, jika ada sisi yang tidak sama maka
tampilkan “Bukan Kubus”!
4. Buatlah algoritma yang menerima menu yang dapat berisi 1, 2, dan 3 dan dua
buah masukan bilangan, jika menu sama dengan 1 maka akan menampilkan hasil
dari bilangan 1 ditambah dengan bilangan 2, jika menu sama dengan 2 maka akan
menampilkan hasil dari bilangan 1 dikali dengan bilangan 2, jika menu sama
dengan 3 maka akan menampilkan hasil dari bilangan 1 dikurangi dengan
bilangan 2!
5. Buatlah algoritma yang menerima sebuah masukan berupa jam lembur, jika jam
lembur kurang dari 12 jam maka akan menampilkan gaji lembur sebesar Rp.
100.000, dari jam kerja normal, jika jam lembur sama dengan 12 jam maka akan
menampilkan gaji lembur sebesar Rp. 200.000 dari jam kerja normal, jika jam
lembur lebih dari 12 jam maka akan menampilkan gaji lebur sebesar Rp. 300.000
dari jam kerja normal. Jumlah jam kerja normal = 8 jam /hari sebesar Rp.
80.000,-
6. Tuliskanlah algoritma untuk menentukan bonus pegawai, berdasarkan ketentuan
yang diberikan oleh bagian personalia dan keuangan sebagai berikut : Pegawai
perusahaan digolongkan menjadi dua golongan, yaitu staf dan bukan staf. Staf
akan mendapatkan bonus sebesar 1 juta rupiah dengan syarat bahwa ia telah
bekerja paling tidak 5 tahun dan umurnya sudah mencapai 50 tahun; staf yang
bekerja kurang dari 5 tahun berapapun umurnya, hanya mendapat bonus sebesar
Rp. 500.000,-. Pegawai non-staf yang telah bekerja lebih dari 5 tahun akan
mendapat bonus sebesar Rp. 400.000,- jika berumur lebih dari 50 tahun
sedangkan pegawai non staf yang berumur kurang dari 50 tahun hanya akan
mendapat bonus Rp. 250.000,-. Pegawai staf yang umurnya kurang dari 50 tahun
akan mendapat bonus Rp. 300.000,-
7. Total nilai mahasiswa ditentukan berdasarkan nilai tugas, quis, mid dan uas.
Rumusnya adalah
TotalNilai = (15% * Tugas) + (15% * Quis) + (15% * MID) + (40% * UAS)
Sedangkan indeks nilai mahasiswa ditentukan berdasarkan ketentuan
berikut :
TotalNilai Indeks
≥ 80 A
70 – 79.99 B
55 – 69.99 C
40 – 54.99 D
< 40 E
52
Buat algoritma yang keluarannya adalah NmMhs dan Indeks !
8. Pada toko buku ‘abc’ diskon penjualan buku mengikuti tabel berikut :
TotalPenjualan Diskon
< 100.000 2%
100.000-500.000 5%
> 500.000 7%
Buat algoritma untuk masalah diatas !
53