Selasa, 04 Agustus 2015

UAS Algoritma dan Pemrograman

SOAL :

Nomor 1
Program RangkaianResistor
{ Dibaca besaran tiga resistor R1, R2, dan R3, kemudian dibaca juga pilihan jenis rangakaiannya (0 atau 1) jika 0 = seri, 1 = paralel. Program akan menampilkan rangkaian total RT sesuai jenis rangkaian yang dipilih. Perhatikan pula agar program ‘kuat’ bila mendapat inputan yang nilai resistornya 0 } 

Nomor 2
Program JumlahBil
{ Dibaca sembarang bilangan integer non negatif secara berulang sampai diakhiri dengan membaca bilangan -1. Tampilkan banyaknya dan hasil jumlah bilangan non negatif tersebut } 

Nomor 3
Implementasikan fungsi dan prosedur berikut, kemudian buat program utama yang memanggil fungsi dan prosedur yang sudah dibuat.
a. Function DeretHitung (N : integer) -> integer
{ mengirim nilai fungsi deret hitung dari 1 + 2 + 3 + ... + N }
b. Procedure Putar3Bil (input output a : integer, input output b : integer, input output c : integer)
{ menukar/memutar nilai bilangan integer
Kondisi awal : a, b, dan c nilai sudah terdefinisi
Kondisi akhir : a berisi b, b berisi c, c berisi a } 

Nomor 4
Diberikan suatu fungsi rekursif, dengan definisi sebagai berikut :

Gambar
Tuliskan algoritma dari fungsi rekursif tersebut.
Function F (..........) -> .......... 

Nomor 5
Program HitungGaji
{ Pada suatu perusahaan terdapat tiga (3) golongan karyawan. Gaji karyawan ditentukan berdasarkan gaji pokok dan juga lamanya bekerja. Gaji pokok dan lembur  per jam tersebut tergantung kepada golongan karyawan sesuai dengan tabel berikut :
Gambar
Tuliskan :
a. Deklarasinya (petunjuk gunakan struktur record dan array)
b. Procedure BacaPegawai (..........)
{ prosedur membaca nama pegawai, golongannya, dan jam lembur sebulannya }
c. Procedure HitungGajiPegawai (..........)
{ prosedur menghitung total gaji setiap pegawai dalam sebulan }
d. Procedure CariPegawai (..........)
{ prosedur mencari apakah nama pegawai = ‘X’ ada dalam tabel pegawai, jika ada hasil pencarian bernilai true, jika tidak bernilai false }


JAWABAN :

Nomor 1

Keterangan :
[baris 9] Pertama membaca semua yang dibutuhkan, yaitu resistor R1, R2, R3, dan juga membaca pilihan mau dihitung secara seri atau paralel.
[11 - 13] Nah, disini kita filter agar pilihan yang dibaca itu hanya bisa 0 dan 1 (seri atau paralel), dengan menggunakan perulangan while. Jika yang diinputkan user selain 0 dan 1, maka user akan terus diminta memasukkan pilihan tersebut hingga user memilih 0 atau 1 (dipaksa).
[15 - 17] Disini kita filter lagi, jika pilihannya itu menghitung secara paralel (pilih 1) dan R1 atau R2 atau R3 ada yang bernilai 0, maka user diminta memasukkan nilai resistor lagi. Hal ini dilakukan karena rumus paralel ada yang mengandung satu per (1/R), jika R=0 maka hasilnya tidak terdefinisi.
[19 - 20] Jika pilihannya tadi 0 (seri), maka RT diisi dengan rumus seri.
[21 - 22] Kemudian selain 0 (otomatis 1, karena diatas sudah difilter), rumus RT diisi oleh rumus paralel.
[25] Yang terakhir kita tinggal menampilkan hasil perhitungan (RT).

Nomor 2

Keterangan :
[8 - 9] Pertama kita isi banyak (banyaknya bilangan positif yang diinputkan oleh user) dan jumlah (jumlah total dari semua bilangan positif yang diinputkan user) dengan 0.
[11] Baca bilangannya dulu.
[13 - 20] Jika bilangan yang diinputkan user tidak -1, maka masuk perulangan dan [14 - 17] bilangan tersebut akan dicek lagi apakah lebihdari 0? Jika lebihdari 0 (berarti positif), maka banyaknya bilangan positif bertambah 1 dan jumlah ditambah dengan bilangan yang diinputkan tadi.
[19] Kemudian membaca bilangan lagi.
[22] Yang terakhir tinggal menampilkan hasil (banyak dan jumlah).

Nomor 3

Maaf, keterangan nomor 3 dan jawaban nomor 4 beserta keterangannya terhapus saat saya update.

Nomor 5