Pembahasan Kuis KU1071/Pengantar Teknologi Informasi A Sem. 1 2010/2011
1. Program membaca sebuah variabel D yang bertipe Date, dan menghitung banyaknya hari dari tanggal 1 Januari pada tahun yang sama dengan masukan user, hingga tanggal D yang dimasukkan user. Dalam hal ini Date adalah tipe bentukan yang terdiri atas 3 elemen, yaitu YY (komponen tahun) yang bertipe integer [0..9999], BB (komponen bulan) yang bertipe integer [1..12], dan HH (komponen hari) yang bertipe integer [1..30]. Untuk program ini, asumsi yang digunakan adalah setiap bulan berjumlah 30 hari, dan masukan user selalu valid. •Judul Program dan spesifikasi •Kamus yang berisi: •Deklarasi tipe bentukan •Deklarasi variabel yang dibutuhkan
•Algoritma yang melakukan hal-hal sebagai berikut: •Membaca D bertipe Date dari masukan user melalui keyboard •Menghitung banyaknya hari dari tanggal 1 Januari hingga tanggal D pada tahun yang sama •Menampilkan hasil kalkulasi banyaknya hari ke layar
Program HitungHari {Spesifikasi: program menghitung banyaknya hari dari tgl 1 Januari hingga nilai tanggal yg dimasukkan pengguna Input: date Output: banyaknya hari} Kamus type date: < HH: integer[1..30], BB: integer [1..12], YY: integer [0..9999]> D: date {masukan pengguna} n: integer {untuk menghitung banyaknya hari} Algoritma input(D) n (D.BB-1)*30 + (D.HH-1) output(n)
2. program pembayaran uang sewa kamar hotel. Hotel memiliki 3 paket: paket ekonomi (Rp. 200.000/hari), paket bisnis (Rp. 300.000/hari) dan paket eksklusif (Rp. 500.000/hari). Untuk hari libur biasa (akhir minggu), tarif per paket dikenakan biaya tambahan yaitu 10% kenaikan dari tarif hari biasa, sedangkan hari libur nasional, biaya tambahannya adalah 25% dari tarif hari biasa. Jika pelanggan memiliki kartu anggota maka pelanggan akan mendapat diskon sebesar 10% dari tarif total. Dan jika pelanggan membayar menggunakan credit card maka pelanggan juga akan mendapat diskon tambahan sebesar 5% dari tarif total. Tampilan: Paket (ekonomi/bisnis/eksklusif): ekonomi Kartu anggota (ya/tidak): ya Jenis pembayaran (cash/credit card): credit Jumlah hari: 2 Jenis hari (biasa/akhir_minggu/libur_nasional): libur_nasional Jumlah yang harus dibayar: Rp 425.000,-
Program BayarKamarHotel {Spesifikasi: program menghitung biaya sewa kamar hotel Input: jenis paket, kartu anggota, cara bayar, jumlah hari, jenis hari Output: biaya sewa} Kamus jnsPaket, kartu, caraBayar, jnsHari: string {masukan} jmlHari: integer {masukan banyaknya hari} diskon, bPaket, biaya, tambahan: real
Algoritma output(“Paket (ekonomi/bisnis/eksklusif):”); input(jnsPaket) output(“Kartu anggota (ya/tidak): ”); input(kartu) output(“Jenis pembayaran (cash/credit card): ”); input(caraBayar) output(“Jumlah hari: ”); input(jmlHari) output(“Jenis hari (biasa/akhir_minggu/libur_nasional): ”); input(jnsHari) depend on (jnsPaket): jnsPaket = “ekonomi”: bPaket200000 jnsPaket = “bisnis”: bPaket 300000 jnsPaket = “eksklusif”: bPaket 500000 depend on (jnsHari): jnsHari = “biasa”: tambahan1 jnsHari = “akhir_minggu”: tambahan1.1 jnsHari = “libur_nasional”: tambahan1.25 biaya bPaket*tambahan*jmlHari if (kartu = “tidak”) then diskon0 else diskon0.1 if (caraBayar= “credit”) then diskondiskon + 0.05 biaya biaya*(1-diskon) output(“Jumlah yang harus dibayar:”, biaya)
Kesalahan Umum no. 2 • Salah notasi algoritmik untuk depend on • Penulisan input yang tidak sesuai urutan pada soal • Salah menghitung diskon – Diskon (kartu anggota dan cara bayar) masingmasing tidak dijumlahkan dulu – Diskon dikalikan pada harga paket yang belum dikenai tarif tambahan
3. Buatlah sebuah algoritma untuk membaca 3 buah bilangan integer positif sebagai data yang mewakili panjang segmen garis dalam centimeter. Pembacaan akan dihentikan jika ketiga segmen garis tersebut dapat membentuk sebuah segitiga.
Program BacaSegitiga { membaca 3 buah bilangan integer berulang-ulang hingga didapatkan 3 integer positif yang bisa membentuk segitiga } Kamus a,b,c: integer {masukan pengguna} valid: boolean Algoritma valid false repeat input(a,b,c) if (a>0) and (b>0) and (c>0) then if (a
4. Buatlah sebuah algoritma untuk menghitung rata-rata nilai praktikum mahasiswa. Nilai yang dibaca adalah bilangan integer 0 sampai 100. Nilai dibaca dari masukan pengguna. Jika nilai di bawah 50, mahasiswa tersebut masuk kategori tidak lulus praktikum. Jika nilainya 50 atau lebih, mahasiswa tersebut lulus. Pembacaan nilai dihentikan jika pengguna memasukkan nilai 999. Tampilkan: Jumlah peserta praktikum, jumlah peserta yang lulus, jumlah peserta yang tidak lulus, dan nilai rata-ratanya ke layar.
Solusi: Skema dengan MARK dengan penanganan kasus kosong; MARK: N = 999 Program NilaiPraktikum {Spesifikasi: program menghitung jumlah peserta yg lulus dan tidak lulus serta nilai rata-rata Input: nilai peserta; Output: jumlah peserta, jumlah yg lulus, jumlah yg tidak lulus, nilai rata-rata} Kamus N, nTotal : integer nLulus, nTidakLulus, nPeserta : integer rata2 : real Algoritma input(N) {first elemen} if (N=999) then {penanganan kasus kosong} output("Tidak ada nilai") else NPeserta 0 {inisialisasi} NLulus 0 NTidakLulus 0 NTotal 0 repeat nPeserta nPeserta + 1 {proses current element} NTotal NTotal + N if N < 50 then NTidakLulus NTidakLulus + 1 else NLulus NLulus + 1 input(N) {next element} until (N=999) rata2 nTotal/nPeserta {terminasi} output(NPeserta, NLulus, NTidakLulus,rata2)
Kesalahan Umum no. 4 • salah notasi algoritmik • skema yang dipilih tidak benar; umumnya first elemen dan next elemen jadi digabung ada di awal loop • kasus kosong tidak ditangani: kesalahan untuk menghitung rata-rata (pembagian dengan NOL)