Alg1 02 17A
Alg1 02 17A
BAB II
PEMROGRAMAN TERSTRUKTUR
2.1. Pendahuluan
1. Instruksi ke 1
2. Instruksi ke 2
3. Instruksi ke 3
………
n. Halt.
Jika ada beberapa operator relasional dalam suatu ekspresi, maka ekspresi
dikerjakan mulai dari kiri ke kanan. Ekspresi logika yang menggunakan
operator relasional disebut ekspresi logika sederhana.
2. Operator logika: macam-macam simbol operator logika, arti serta urutan
pengerjaannya dapat dilihat pada tabel 2.2 di bawah ini. Bentuk umum
ekspresi logika yang menggunakan operator logika:
Ekspresi_1 dan ekspresi_2 adalah konstanta atau variabel yang bertipe logika,
atau ekspresi logika lainnya. Hasil dari ekspresi logika dapat dilihat pada tabel
2.3. Tabel ini biasanya disebut sebagai truth table.
Sebagai contoh diketahui P dan Q adalah variabel yang bertipe logika yang
berisi masing-masing konstanta logika TRUE dan FALSE.
Jika ada beberapa jenis ekspresi dalam suatu ekspresi, maka ekspresi aritmetika
dikerjakan lebih dulu, lalu ekspresi logika sederhana, dan terakhir ekspresi logika
majemuk. Sebagai contoh diketahui ekspresi logika sebagai berikut:
(A + C) != (A * C) OR Q AND A > (B – C) = ..............
Hasilnya: (3 + 5) != ( 3 * 5) OR FALSE AND 3 > (4 – 5) =
8 != 15 OR FALSE AND 3 > (-1) =
TRUE OR FALSE AND TRUE =
TRUE OR FALSE =
TRUE
IF ( kondisi )
{ alternatif jika kondisi TRUE }
If nilai < 0
{nilai = -nilai }
Masuk
True False
Evaluasi
Kondisi
Alternatif
True
Keluar
(proses berikutnya)
If RATA >= 60
{ Write (“ Nama siswa = “, NAMA)
Write (“ Nilai = “, RATA)
Write (“ Anda lulus”)
}
Algoritma Lulus
Algoritma untuk mencetak siswa yang lulus. N1, N2, N3, dan N4
adalah variabel integer yang menyimpan data nilai. NR adalah
variabel integer yang menyimpan nilai rata-rata
1. [membaca 4 buah nilai dari alat input]
Read (N1, N2, N3, N4)
2. [menghitung rata-rata dari ke 4 nilai tadi]
NR = (N1 + N2 + N3 + N4)/4
3. [Jika rata-rata > 60 maka lulus, cetak nama dan nilai siswa]
If RATA >= 60
{ Write (“ Nama siswa = “, NAMA)
Write (“ Nilai = “, RATA)
Write (“ Anda lulus ”)
}
4. Halt
IF ( kondisi )
{ alternatif jika kondisi TRUE }
ELSE
{ alternatif jika kondisi FALSE }
Masuk
True False
Evaluasi
Kondisi
Alternatif Alternatif
True False
Keluar
(proses berikutnya)
Sebagai ilustrasi masalah, misalnya ada dua buah angka yang disimpan
dalam variabel A dan B. Ingin diketahui mana dari angka tersebut yang lebih
besar. Jika A lebih besar dari B maka A yang dicetak, tetapi jika B yang lebih
besar maka B yang dicetak. Disini ada 2 buah alternatif pekerjaan yaitu (1)
mencetak A atau (2) mencetak B. Pekerjaan yang dipilih tergantung dari hasil
perbandingan apakah A lebih besar atau tidak lebih besar dari B. Untuk
membandingkan A dan B digunakan ekspresi logika: A > B, lalu digabungkan
dengan instruksi IF – ELSE untuk memilih alternatif pekerjaan yang akan
dilakukan sehingga potongan algoritma adalah:
IF ( A > B)
{ Write (“Bilangan yang terbesar : “, A) }
ELSE
{ Write (“Bilangan yang terbesar : “, B) }
Algoritma lengkap untuk masalah di atas dapat dilihat pada Algoritma BESAR
berikut ini dan ilustrasi flowchart-nya dapat dilihat pada gambar 2.3.
Algoritma BESAR
Menentukan bilangan yang lebih besar di antara 2 buah bilangan. A
dan B adalah variabel integer.
1. [memasukkan dua bilangan]
Read (A,B)
Algoritma MAX_3
Algoritma untuk menentukan bilangan terbesar dari 3 bilangan.
Variabel A, B, C berisi bilangan yang dibaca. Variabel MAX berisi
bilangan yang terbesar. Semua variabel bertipe integer.
1. [memasukkan 3 bilangan]
Read (A,B,C)
2. [menentukan bilangan yang terbesar dengan membandingkan-
nya secara berpasangan]
If ( A>B )
{ if ( A>C )
{ MAX = A } [ A > B, A > C ]
else
{ MAX = C } [C>A>B]
}
else
{ if ( B>C )
{ MAX = B } [ B > A, B > C ]
else
{ MAX = C } [C>B>A]
}
3. [mencetak bilangan yang terbesar]
Write(“Bilangan terbesar adalah “, MAX)
4. [selesai]
Halt
Untuk itu dibuat algoritma untuk membaca data pegawai, lalu ditentukan
banyaknya bonus yang diterima si pegawai. Ketika menentukan bonus ini,
dibutuhkan struktur IF-bertingkat karena ada 5 kriteria yang perlu dievaluasi.
Yang perlu diperhatikan adalah bahwa setiap pegawai hanya menerima satu
katagori bonus. Algoritmanya dapat dilihat pada Algoritma BONUS berikut.
Algoritma BONUS
Algoritma untuk membaca nama pegawai (NAMA), lama kerja
lembur (LEMBUR), dan lama absen (ABSEN), lalu menentukan
banyaknya bonus (BAYAR) yang diterima si pegawai. Variabel
NAMA bertipe karakter. Variabel LEMBUR, ABSEN dan BAYAR
bertipe integer.
1. [memasukkan data pegawai]
Read (NAMA, LEMBUR, ABSEN)
2. [menghitung bonus]
If ( LEMBUR – (2*ABSEN/3) 0.0 )
{ BAYAR = 0 }
Else
{ If ( LEMBUR – (2*ABSEN/3) 10.0 )
{ BAYAR = 100000 }
Else
{ If ( LEMBUR – (2*ABSEN/3) 20.0 )
{ BAYAR = 200000 }
Else
{ If ( LEMBUR – (2*ABSEN/3) 30.0 )
{ BAYAR = 300000 }
Else
{ If ( LEMBUR – (2*ABSEN/3) 40.0 )
{ BAYAR = 400000 }
Else
{ BAYAR = 500000 }
}
}
}
}
3. [mencetak hasil]
Write (“Bonus tahunan untuk : “, NAMA, “ adalah Rp. “,BAYAR)
4. [selesai]
Halt
Misalnya seorang pegawai lain mempunyai lama kerja lembur 30 jam dan
lama absen 12 jam. Dengan mengurangi jam lembur dengan 2/3 jam absen akan
menghasilkan 22 jam sehingga berdasarkan Tabel 3.4 si pegawai berhak
mendapatkan bonus Rp. 300.000,-. Untuk pegawai ini, hasil pengujian IF pertama
(LEMBUR – 2*ABSEN/3 0) di langkah ke dua adalah FALSE sehingga dipilih
instruksi ELSE. Dalam instruksi ELSE ini diuji kondisi IF yang ke dua yaitu
(LEMBUR – 2*ABSEN/3 10), dan hasilnya adalah FALSE sehingga dipilih
instruksi ELSE lagi. Dalam instruksi Else ini diuji kondisi yang ke tiga
(LEMBUR – 2*ABSEN/3 20), dan hasilnya adalah FALSE sehingga dipilih
instruksi ELSE lagi. Dalam instruksi ELSE ini diuji kondisi yang ke empat
Algoritma BONUS_revisi_1
Algoritma untuk membaca nama pegawai (NAMA), jumlah jam
kerja lembur (LEMBUR), dan jumlah jam kerja absen (ABSEN), lalu
menentukan berapa bonus (BAYAR) yang diterima si pegawai
berdasarkan KRITERIA. Variabel NAMA bertipe karakter, variabel
LEMBUR, ABSEN dan BAYAR bertipe integer. Variabel KRITERIA
bertipe real
1. [memasukkan data pegawai]
Read (NAMA, LEMBUR, ABSEN)
2. [menghitung kriteria]
KRITERIA = LEMBUR – (2*ABSEN/3)
3. [menentukan bonus]
If ( KRITERIA 0 )
{ BAYAR = 0 }
Else
{ If ( KRITERIA 10.0 )
{ BAYAR = 100000 }
Else
{ If ( KRITERIA 20.0 )
{ BAYAR = 200000 }
Else
{ If ( KRITERIA 30.0 )
{ BAYAR = 300000 }
Else
{ If ( KRITERIA 40.0 )
{ BAYAR = 400000 }
Else
{ BAYAR = 500000 }
}
}
}
}
4. [mencetak hasil]
Write (“Bonus tahunan untuk : “, NAMA, “ adalah Rp. “,BAYAR)
5. [selesai]
Halt
Untuk lebih jelasnya, alur kontrol program dapat dilihat pada gambar
flowchart dari algoritma BONUS_revisi_1 ini (gambar 2.5) di bawah ini.
e. Jika LamaStudi <= 4 maka tulis keterangan “Tepat Waktu”, selain itu tulis
keterangan “Tidak Tepat Waktu”
3. Nilai akhir mahasiswa menentukan apakah si mahasiswa lulus atau tidak lulus
suatu mata kuliah. Komposisi nilai akhir adalah 30% nilai UTS, 20% nilai
praktikum dan 50% nilai UAS. Seorang mahasiswa dinyatakan lulus jika nilai
akhirnya >= 60.0. Buatlah algoritma untuk membaca nama mahasiswa, nilai
UTS, nilai praktikum dan nilai UAS, menghitung nilai akhir dan menentukan
apakah mahasiswa lulus atau tidak. Buatlah laporan yang berisi nama
mahasiswa, nilai akhir dan keterangan “Anda lulus” atau “Anda tidak lulus”.
7. Sebuah kota mengelompokkan nilai indeks polusi yang lebih kecil dari 35
sebagai “Nyaman”, antara 35 sampai 60 sebagai “Tidak Nyaman”, dan di atas
60 sebagai “Berbahaya”. Buatlah algoritma untuk membaca nilai indeks polusi
lalu menampilkan kelompok yang sesuai.
Pembacaan angka meteran air dilakukan tiap bulan. Buatlah algoritma untuk
membaca nama pelanggan, angka meter bulan lalu dan angka meter bulan ini,
lalu menghitung jumlah pemakaian air dan jumlah tagihan. Buatlah slip
tagihan yang berisi nama pelanggan, jumlah pemakaian air dan jumlah tagihan
yang harus dibayar.
12. Jika diketahui angka meteran air berupa counter yang terdiri dari 4 digit,
perbaiki algoritma di atas sehingga dapat mengatasi kemungkinan angka
meter bulan ini lebih kecil dari angka meter bulan lalu.
14. Wisma TENANG mempunyai 5 macam kamar yang dapat disewa yaitu single,
double, keluarga, VIP, dan bungalow dengan harga sewa per malam berturut-
turut Rp. 200.000,-, Rp. 350.000,-, Rp. 500.000,-, Rp. 450.000,- dan
Rp.750.000,-. Buatlah program untuk menanyakan nama tamu, kamar yang
dipilih, lama menginap lalu menghitung biaya menginap. Sebagai output
cetaklah bukti pembayaran yang berisi besarnya biaya yang harus dibayar oleh
tamu beserta pajak pembangunan 15%.
15. Tulis kembali potongan algoritma berikut sehingga lebih mudah dibaca:
If (X < Y) { if (V < W)
{J=X}
Else { if (X > Y) { If (Y < W ) { J = Y }
Else { J = V } }
Else { if (X < W) { J = W }
}
}
} Else { J = X + W }
AND atau &&, dapat dibandingkan A dengan B dan langsung dilanjutkan dengan
membandingkan A dengan C dalam satu kondisi dari instruksi IF. Jika semua
perbandingan menghasilkan nilai TRUE maka A adalah bilangan yang terbesar.
Demikian pula dengan bilangan lainnya, lihat algoritma MAX_3 (revisi 1).
Algoritma MAX_3_revisi_ 1
Menentukan bilangan terbesar dari 3 bilangan. Variabel A, B, C
berisi bilangan yang dibaca. MAX berisi bilangan yang terbesar.
Semua variabel bertipe integer.
1. [memasukkan 3 bilangan]
Read(A,B,C)
2. [menentukan bilangan yang terbesar]
If ( A>B && A>C )
{ MAX = A
}
3. If ( B>A && B>C )
{ MAX = B
}
4. If ( C>A && C>B )
{ MAX = C
}
5. [mencetak bilangan yang terbesar]
Write(“Bilangan terbesar adalah “, MAX)
6. [selesai]
Halt
Algoritma Kredit
Menentukan apakah pemohon dapat diberikan kredit atau tidak
berdasarkan lama kerja dan lulus sarjana. Variabel NAMA berisi
nama pemohon, variabel SAR adalah variabel char berisi ‘Y’ jika
pemohon adalah sarjana, variabel LAMA berisi lama kerja.
1. [memasukkan nama pemohon]
Read(NAMA)
2. [memasukkan kesarjanaan pemohon]
Write (“Apakah anda seorang sarjana? (Y atau T) “)
Read (SAR)
3. [Memasukkan lama kerja]
Write (“Berapa lama anda sudah bekerja? (tahun) ”)
Read (LAMA)
4. [memproses permohonan]
If ( SAR == ‘Y’ && LAMA >= 2)
{ Write (”Selamat “, NAMA)
Write (“ Permohonan kredit disetujui” )
}
Else If (( SAR != ‘Y’ && LAMA >= 4)
{ Write (”Selamat “, NAMA)
Write (“ Permohonan kredit disetujui” )
}
Else
{ Write (“Maaf “, NAMA)
Write (“ Permohonan kredit tidak disetujui” )
}
5. [selesai]
Halt
b. Gunakan ekspresi kondisi majemuk untuk mengeksekusi S1, S2, S3, dan S4
dari instruksi if bertingkat berikut ini:
If ( A > B )
{ If ( B C )
{ If ( C != D )
{ S1 }
Else
{ S2 }
}
Else
{ S3 }
}
Else
{ S4 }
2. Terangkan apakah pasangan dari potongan algoritma berikut ini sama atau
berbeda.
a. If ( X < Y ) If ( X < Y AND X = = 10 )
{ If ( X = = 10 ) { write (X) }
{ write (X) } else
else { write (Y) }
{ write (Y) }
}
b. If ( X < Y ) If ( X < Y OR X > 10 )
{ write (X) } { write (X) }
else else
SWITCH (ekspresi )
{
CASE nilai_1 : instruksi-1
CASE nilai_2 : instruksi-2
……………
CASE nilai_n : instruksi-n
DEFAULT : instruksi-k
}
Artinya:
Jika ekspresi == nilai_1 maka kerjakan instruksi-1
Untuk masalah ini, dibuat algoritma untuk membaca kode lalu melakukan
transaksi yang sesuai. Dengan menggunakan instruksi IF bertingkat, algoritmanya
adalah sebagai berikut.
Algoritma Transaksi
Algoritma untuk menentukan transaksi nasabah di teller otomatis.
Variabel NOREK bertipe integer, untuk menyimpan nomor rekening
nasabah. Variabel kode bertipe character, untuk menyimpan kode
transaksi. Variabel JUMLAH bertipe real, untuk menyimpan jumlah
uang yang ditransaksikan, variabel SALDO bertipe real, untuk
menyimpan jumlah uang yang disimpan dalam bank. Diasumsikan
SALDO dimasukkan bersama dengan nomor rekening nasabah.
1. [membaca nomor rekening dan saldo]
Read (NOREK, SALDO)
2. [membaca kode transaksi]
Read (KODE)
3. [melakukan transaksi sesuai KODE]
If ( KODE == ‘A’ )
{ Read(JUMLAH)
SALDO = SALDO – JUMLAH
Write(“Ambilah Uang Anda’)
Write(“Saldo Anda sekarang : “, SALDO)
}
Else
{ If ( KODE == ‘S’ )
{ Read(JUMLAH)
SALDO = SALDO+ JUMLAH
Write(“Saldo Anda sekarang : “, SALDO)
}
Else
{ If ( KODE == ‘P’ )
{ Write(“Saldo Tabungan Anda : “, SALDO) }
Else
{ If ( KODE == ‘T’ )
{ Write(“Saldo penutupan tabungan
anda :”, SALDO)
SALDO = 0 }
Else
{ Write (‘Anda salah menekan tombol’) }
}
}
}
4. [selesai]
Halt.
jelasnya dapat dilihat pada ilustrasi flowchart untuk algoritma Transaksi_2 pada
gambar 2.6 berikut.
2007. Algoritma yang anda buat harus membaca 3 angka integer lalu
mencetak tanggal dalam bentuk yang baru
6. Biaya asuransi ladang pertanian yang standar adalah 3.5 persen dari nilai
tanggungan dikalikan luas tanah. Tetapi untuk ladang kacang kedelai, kentang,
bawang merah dan cabai, biaya asuransinya adalah 2 kali biaya standar. Dan
untuk ladang padi dan jagung biaya asuransinya adalah 1.5 kali biaya standar.
Buatlah algoritma untuk membaca jenis ladang, nilai tanggungan dan luas
tanah lalu menghitung biaya asuransi dan menampilkan hasilnya. Gunakanlah
tipe data enumerasi untuk jenis ladang.
b. Jika tagihan lebih Rp 500.000 dan menggunakan kartu kredit ABC maka
mendapatkan diskon 25%. Jika tidak menggunakan kartu kredit ABC maka
hanya mendapatkan diskon 10%.
Buatlah algoritma untuk menerima input berupa tagihan dan cara pembayaran
lalu menghitung diskon jika ada dan mencetak slip tagihan. Sesuai dengan
aturan pemerintah, tagihan akan dikenakan pajak Restoran sebesar 11% dan
biaya layanan sebesar 5%. Tampilkan total tagihannya.
9. Sebuah toko ritel memberikan promosi seperti tabel di bawah ini. Buatlah
algoritma untuk mencetak slip pembayaran yang berisi nama barang, harga
satuan, banyaknya barang, total harga barang, menghitung besarnya diskon
jika ada, lalu menampilkan harga barang yang harus dibayar.
banyaknya barang yang dibeli diskon
>= 10 5%.
>= 25 10%
>= 50 15%
>=100 20%