Kumpulan Soal Dan Jawaban Algoritma Dan Pemrograman [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

Kumpulan Soal Dasar-Dasar Algoritma Dan Pemrograman Last update: 04 November 2010 51 soal http://awanrimbawan.wordpress.com



DISCLAIMER http://awanrimbawan.wordpress.com Page 1



04Nov2010



- For educational purpose only -



Compiler menggunakan Dev C++ 4.9.9.2



-



Mari berbagi,jika menemukan kesalahan tentang algoritma atau source code, silahkan hubungi [email protected].



-



Semoga bisa membantu kita untuk belajar algoritma dan pemrograman 



1.



Soal: Lama Bekerja



http://awanrimbawan.wordpress.com Page 2



04Nov2010



Tulis program untuk menentukan lama bekerja seorang pegawai, jika jam masuk dan jam pulang diinput. Catatan: jam berupa angka 1-12, dan seorang pegawai bekerja kurang dari 12 jam. Contoh Masukan dan keluaran: Jam mas uk



Jam keluar



Keluaran/tampila n



10



11



Lama bekerja 1 jam



10



2



Lama bekerja 4 jam



10



7



Lama bekerja 9 jam



Algoritma: Algoritma Lama_Bekerja {jam berupa angka 1-12, dan seorang pegawai bekerja kurang dari 12 jam} KAMUS DATA iMasuk, iKeluar, iLama: Integer BEGIN Input(iMasuk) Input(iKeluar) If (iKeluar >= iMasuk) Then iLama  iKeluar - iMasuk Else iLama  (12-iMasuk) + iKeluar end if Output(iLama) END



http://awanrimbawan.wordpress.com Page 3



04Nov2010



Program: #include #include /*Tulis procgram untuk menentukan lama bekerja seorang pegawai, jika jam masuk dan jam pulang diinput. Catatan: jam berupa angka 1-12, dan seorang pegawai bekerja kurang dari 12 jam. asumsi jam yang dimasukkan adalah tepat (tidak memasukkan menit) */ int main() { int iMasuk, iKeluar, iLama; printf("Menentukan lama bekerja\n\n"); printf(" Jam Masuk : "); scanf("%d",&iMasuk); printf(" \nJam Keluar : "); scanf("%d",&iKeluar); if (iKeluar >= iMasuk) iLama = iKeluar - iMasuk; else iLama = (12-iMasuk) + iKeluar; printf("\n\n Lama bekerja adalah : %d Jam\n", iLama); system("PAUSE"); return 0; }



2.



Soal: Biaya Parkir Tulis program untuk menentukan biaya parkir yang dihitung berdasarkan lama parkir. Lama parkir dihitung dari selisih jam masuk dan jam keluar diinput. Biaya parkir 2 jam pertama 2000, perjam berikutnya 500. Contoh Masukan dan keluaran: Jam masuk



Jam keluar



Lama



keluaran/tamp ilan



10



11



1



Biaya = 2000



10



2



4



Biaya = 3000



http://awanrimbawan.wordpress.com Page 4



04Nov2010



Algoritma: Algoritma Biaya_Parkir {menghitung biaya parkir} KAMUS DATA iMasuk, iKeluar, iLama, iBiaya: Integer BEGIN Input(iMasuk) Input(iKeluar) If (iKeluar >= iMasuk) Then iLama  iKeluar - iMasuk Else iLama  (12-iMasuk) + iKeluar End If If (iLama > 2) Then iBiaya  2000 + ((iLama - 2)*500) else iBiaya  2000 Output(iBiaya) END



#include #include int main() { int iMasuk, iKeluar, iLama; long int iBiaya; printf("Menghitung Biaya Parkir\n\n"); printf(" Jam Masuk : "); scanf("%d",&iMasuk); printf(" \nJam Keluar : "); scanf("%d",&iKeluar); if (iKeluar >= iMasuk) iLama = iKeluar - iMasuk; else iLama = (12-iMasuk) + iKeluar; if (iLama > 2) iBiaya = 2000 + ((iLama - 2)*500); else iBiaya = 2000; printf("\n\n Biaya parkir adalah : Rp %d \n", iBiaya);



Program:



system("PAUSE"); return 0; http://awanrimbawan.wordpress.com P a g e 5}



04Nov2010



3.



Soal: Penggabungan Resistor Tulis program untuk menghitung resistor pengganti dari 3 buah resistor Algoritma Menghitung_Resistor yang disusun secara seri atau paralel. Rumus untuk resistor pengganti sbb: KAMUS DATA iPilihan: Integer Seri: Rgab = R1 + R2 + R3 fR1, fR2, fR3, fResPengganti: Float Paralel: 1/Rgab = 1/R1 + 1/R2 + 1/R3 BEGIN Besar R1, R2 dan R3 serta jenis penyusunan (seri/paralel) diinput oleh user.Input(fR1,fR2,fR3) Input(iPilihan) Case iPilihan 1: fResPengganti  fR1+ fR2+ fR3 2: fResPengganti  (1.0/fR1)+ (1.0/fR2)+ (1.0/fR3) fResPengganti  1.0/fResPengganti Otherwise: output(“pilihan salah”) Algoritma: End Case



http://awanrimbawan.wordpress.com Output(fResPengganti) Page 6 END



04Nov2010



#include #include /*Resistor Pengganti. Modul Praktikum Poltek. hal 27*/ int main() { int iPilihan; float fR1, fR2, fR3; float fResPengganti; printf("Menghitung Resistor Pengganti"); printf("\n\nMasukkan Nilai R1: "); scanf("%f",&fR1); printf("\nMasukkan Nilai R2: "); scanf("%f",&fR2); printf("\nMasukkan Nilai R3: "); scanf("%f",&fR3); printf(" \n\nPenyusunan Resistor: "); printf("\n 1.Seri"); printf("\n 2.Paralel"); printf("\nMasukkan pilihan penyusunan (1 atau 2): "); scanf("%d",&iPilihan); switch (iPilihan) { case 1: fResPengganti = fR1+ fR2+ fR3; break; case 2: fResPengganti = (1.0/fR1)+ (1.0/fR2)+ (1.0/fR3); fResPengganti = 1.0/fResPengganti; break; default: printf("inputan salah"); } printf("\n\nBesar resistor pengganti adalah : %.2f \n", Program: fResPengganti);



system("PAUSE"); return 0; http://awanrimbawan.wordpress.com } Page 7



04Nov2010



4.



Soal: Harga barang Buatlah program untuk menyelesaikan masalah berikut : Program akan menerima masukan berupa kode, jenis dan harga, dengan jenis adalah "A", "B", dan "C". Untuk setiap jenis, masing-masing akan diberikan diskon sebesar 10% untuk A, 15% untuk B, dan 20% untuk C.



http://awanrimbawan.wordpress.com Page 8



04Nov2010



Program akan menghitung berapa harga setelah didiskon. Contoh masukan : Jenis = B kode = 10 harga = 10000 Contoh keluaran : Jenis barang B mendapat diskon = 15%, Harga setelah didiskon = 8500



Algoritma: Algoritma Menghitung_Barang #include KAMUS DATA #include iKode,iHarga:integer #include cJenis: character int main() BEGIN { int iKode,iDiskon; Input(cJenis) char cJenis; Input(iKode) long int iHarga, iHDiskon; Input(iHarga) printf(" Jenis : "); Case(cJenis) scanf("%c",&cJenis); 'A': iHDiskon  0,9 * iHarga 'B': Kode iHDiskon printf(" : ");  0,85 * iHarga 'C': iHDiskon  0,8 * iHarga scanf("%d",&iKode); End Case printf(" Harga : "); output(iHDiskon) scanf("%d",&iHarga); END switch (cJenis) { case 'A': iDiskon=10; iHDiskon = 0.9 * iHarga; break; case 'B': iDiskon=15; iHDiskon = 0.85 * iHarga; break; case 'C': iDiskon=20; iHDiskon = 0.8 * iHarga; break; default: printf("inputan salah"); }



Program: printf("\n\n Jenis barang %c mendapat diskon %d %%, Harga setelah didiskon : Rp %d \n", cJenis, iDiskon, iHDiskon); system("PAUSE"); return 0; } http://awanrimbawan.wordpress.com Page 9



04Nov2010



5.



Soal: Gaji karyawan mingguan Sebuah perusahaan swasta menggaji karyawannya secara mingguan dengan hitungan sebagai berikut : golongan 1 dengan upah per jam 3.000 rupiah golongan 2 dengan upah per jam 3.500 rupiah



http://awanrimbawan.wordpress.com P a g e 10



04Nov2010



golongan 3 dengan upah per jam 4.000 rupiah golongan 4 dengan upah per jam 5.000 rupiah Bila seorang karyawan bekerja kurang atau sama dengan 40 jam per minggu, akan dihitung dengan upah per jam seperti di atas, tetapi apabila bekerja lebih dari 40 jam, maka lebihnya akan dihitung sebagai lembur dengan upah per jam 1½ kali upah biasa. Tulis algoritma untuk menghitung gaji mingguan karyawan, bila golongan dan jam kerja diinput dari keyboard.



Algoritma: Algoritma Menghitung_Gaji #include #include



KAMUS DATA #include



iGol, iJam, iUpah, iGaji : Integer int main() BEGIN { int iGol,iJam, iUpah; int iGaji; Input(iGol) Input(iJam) iUpah=0; iUpah  0 printf(" Jumlah Jam Kerja : "); scanf("%d",&iJam); Case(iGol) 1: iUpah  3000 printf(" Golongan(1,2,3,4) : "); 2: iUpah  3500 scanf("%d",&iGol); 3: iUpah  4000 4: iUpah switch (iGol)  5000 End case { case 1: iUpah=3000; If (iJam > 40) Then break; iGaji case 2: 40 * iUpah + ((iJam - 40) * 1.5 * iUpah) Else iUpah=3500; iGaji  iJam * iUpah break; End if 3: case iUpah=4000; Output(iGaji) break; case 4: END iUpah=5000; break; default: printf("inputan golongan salah"); } if (iJam > 40) iGaji = 40 * iUpah + ((iJam - 40) * 1.5 * iUpah); Program: else iGaji = iJam * iUpah; printf("\n\n Gaji : Rp %d \n", iGaji); system("PAUSE"); return 0; http://awanrimbawan.wordpress.com } P a g e 11



04Nov2010



6.



Soal: Menghitung selisih waktu dalam jam dan menit Buat program menghitung selisih waktu (dalam jam dan menit) berdasarkan jam mulai (jam,menit) dengan jam selesai (jam,menit). Data yang diinput adalah jam dan menit mulai, jam dan menit selesai. Contoh Masukan dan Keluaran:



http://awanrimbawan.wordpress.com P a g e 12



04Nov2010



Mulai (jam,menit)



Selesai (jam,menit)



Lama (menit)



Lama (jam,menit )



10:30



12:10



100



1 jam 40 menit



10:30



1:40



130



3 jam 10 menit



Algoritma: ALGORITMA MENGHITUNG_JAM_MENIT KAMUS DATA iJamStart,iMenitStart,iMenitStop,iJamStop: integer iTotMenit1,iTotMenit2,iSelangMenit,iJamDurasi,iMenitDurasi: integer BEGIN Input(iJamStart) Input(iMenitStart) #include Input(iJamStop) #include Input(iMenitStop) #include  iJamStart * 60 + iMenitStart intiTotMenit1 main() iTotMenit2  iJamStop * 60 + iMenitStop { int iJamStart,iMenitStart,iJamStop,iMenitStop,iSelangMenit, iJamDurasi, iMenitDurasi ; If (iTotMenit2 >= iTotMenit1) Then  iTotMenit2 longiSelangMenit int iTotMenit1, iTotMenit2;- iTotMenit1 Else iSelangMenit ((12*60)-iTotMenit1) + iTotMenit2 printf(" MasukkanWaktu Mulai (contoh 10:05) : "); End if scanf("%d:%d",&iJamStart,&iMenitStart); printf(" Masukkan iJamDurasi  iSelangMenit Waktu Berhenti div 60 (contoh 11:04) : "); scanf("%d:%d",&iJamStop,&iMenitStop); iMenitDurasi  iSelangMenit mod 60; iTotMenit1 = iJamStart * 60 + iMenitStart; Output(iJamDurasi) iTotMenit2 = iJamStop * 60 + iMenitStop; Output(iMenitDurasi) if (iTotMenit2 >= iTotMenit1) END iSelangMenit = iTotMenit2 - iTotMenit1; Program: else iSelangMenit = ((12*60)-iTotMenit1)+iTotMenit2; iJamDurasi = iSelangMenit / 60; iMenitDurasi = iSelangMenit % 60; printf("\n\n Durasi adalah %d Jam %d Menit\n", iJamDurasi, iMenitDurasi); system("PAUSE"); http://awanrimbawan.wordpress.com return 0; P a g e 13 }



04Nov2010



7. Soal: Kuadran dari koordinat titik Buat program dengan masukan koordinat sebuah titik (x,y) dalam sebuah system koordinat kartesian, kemudian ditentukan di kuadran mana titik tersebut. Contoh Masukan : Koordinat titik (x,y) : 10 -20 Contoh keluaran: Titik 10,-20 berada pada kuadran 4 ALGORITMA Menghitung_Kuadran KAMUS DATA ix, iy: Integer



Algoritma: BEGIN Input(ix,iy) If (ix >= 0) If (iy >=0) Output(“Kuadran I”) else Output(“Kuadran IV”) else if (iy >=0) Output(“Kuadran II”) http://awanrimbawan.wordpress.com else P a g e 14 Output(“Kuadran III”) END



04Nov2010



Program: #include #include int main() { int ix, iy; printf(" Masukkan koordinat x,y : "); scanf("%d,%d",&ix,&iy); if (ix >= 0) if (iy >=0) printf("\nKuadran else printf("\nKuadran else if (iy >=0) printf("\nKuadran else printf("\nKuadran



I\n"); IV\n"); II\n"); III\n");



system("PAUSE"); return 0; }



8. Soal: Tunjangan Anak Pemerintah hanya memberikan tunjangan anak dari PNS maksimal sampai 3 anak saja. Setiap anak diberikan tunjangan sebesar 10% dari gaji pokok. Tulis program untuk menghitung total tunjangan anak, bila gaji pokok dan jumlah anak diinput oleh user. Contoh Masukan dan Keluaran: Jumla



Gaji Pokok



Tunjangan Anak



http://awanrimbawan.wordpress.com P a g e 15



04Nov2010



h anak 0



1.000.000



0



1



1.000.000



100.000



3



1.000.000



300.000



5



1.000.000



300.000



Algoritma: ALGORITMA Menghitung_Tunjangan KAMUS DATA iGajiPokok, iTunjangan, iJmlAnak: Integer BEGIN Input(iGajiPokok) Input(iJmlAnak) If (iJmlAnak 0) Then iTunjangan  iJmlAnak * 0.1 * iGajiPokok Else If (iJmlAnak > 3) iTunjangan  3 * 0.1 * iGajiPokok Else iTunjangan  0 End if Output ( iTunjangan) #include END #include



int main() { int iGajiPokok, iTunjangan, iJmlAnak; printf(" Masukkan Gaji Pokok : "); scanf("%d",&iGajiPokok);



Program:



printf(" Masukkan JmlAnak : "); scanf("%d",&iJmlAnak); if (iJmlAnak0) iTunjangan = iJmlAnak * 0.1 * iGajiPokok; else if (iJmlAnak>3) iTunjangan = 3 * 0.1 * iGajiPokok; else iTunjangan =0;



printf("\nTunjangan Anak adalah sebesar Rp.%d \n", iTunjangan); http://awanrimbawan.wordpress.com system("PAUSE"); P a g e 16 return 0; }



04Nov2010



9.



Soal: Minibus pariwisata Sebuah acara wisata digunakan minibus kapasitas 7 penumpang per mobil. Apabila terjadi kelebihan penumpang (walaupun cuma 1), maka minibus yang digunakan ditambah 1. Tulis program untuk menghitung jumlah minibus yang diperlukan, bila jumlah pesertanya diinput. Contoh Masukan dan Keluaran: Jumlah Peserta



Jumlah Minibus



5



1



7



1



8



2



ALGORITMA Menghitung_Tunjangan KAMUS DATA iPeserta,iMinibus : Integer



Algoritma: BEGIN Output(iPeserta) iMinibus0 If (iPeserta > 7) Then iMinibus  iPeserta / 7 If (iPeserta % 7 != 0) Then iMinibus  iMinibus + 1 End If Else if (iPeserta > 0) Then iMinibus  1 End if http://awanrimbawan.wordpress.com Output(iMinibus) P a g e 17 END



04Nov2010



Program: #include #include int main() { int iPeserta,iMinibus; printf(" Masukkan jml peserta : "); scanf("%d",&iPeserta); iMinibus=0; if (iPeserta > 7){ iMinibus = iPeserta / 7; if (iPeserta % 7 != 0) iMinibus++; }else if (iPeserta > 0) iMinibus=1; printf("Minibus yg diperlukan: %d\n",iMinibus); system("PAUSE"); return 0; 10. Soal: Menentukan }



N hari yang lalu tanpa menginputkan Hari Ini Diinput jumlah berapa hari yang lalu, kemudian ditentukan nama harinya. Tulis program untuk menentukan nama hari dari sekian hari yang lalu yang diinput. (Catatan, gunakan Hari ini = ‘Senin’) Contoh Masukan dan Keluaran: N hari yang lalu



Nama Hari



0



Senin



1



Minggu



http://awanrimbawan.wordpress.com P a g e 18



04Nov2010



10



Jumat



20



Selasa



Algoritma: ALGORITMA Menentukan_Nama_Hari_1 KAMUS DATA iNHari,iBelakang #include : Integer cNamaHari[15]: String #include #include BEGIN intInput(iNHari) main() { int iNHari,iBelakang; iBelakang  ( iNHari + 1) char cNamaHari[15]; Case (iBelakang) N Hari yg lalu : "); printf("Masukkan 1: cNamaHari "Senin" scanf("%d",&iNHari); 2: cNamaHari "Selasa" iBelakang = (iNHari+1) ; 3: cNamaHari "Rabu" 4: cNamaHari "Kamis" switch (iBelakang){ 5: cNamaHari "Jumat" case 1: 6: cNamaHari "Sabtu" strcpy(cNamaHari,"Senin"); 7: cNamaHari "Minggu" break; Otherwise: cNamaHari  "Inputan salah" case 2: End Case strcpy(cNamaHari,"minggu"); break; Output(cNamaHari) case 3: strcpy(cNamaHari,"sabtu"); END break; case 4: strcpy(cNamaHari,"jumat"); break; case 5: strcpy(cNamaHari,"kamis"); break; case 6: Program: strcpy(cNamaHari,"rabu"); break; case 7: strcpy(cNamaHari,"selasa"); break; default: strcpy(cNamaHari,"Inputan salah"); } printf("\n Sekarang Hari Senin. %d Hari yang lalu adalah hari %s \n",iNHari,cNamaHari); system("PAUSE"); return 0; } http://awanrimbawan.wordpress.com P a g e 19



04Nov2010



11.



Soal: Menentukan N hari yang lalu dengan menginputkan Hari Ini Diinput jumlah berapa hari yang lalu, kemudian ditentukan nama harinya. Tulis program untuk menentukan nama hari dari sekian hari yang lalu dan nomor hari ini yang diinput. Contoh Masukan dan Keluaran: N hari yang lalu



Hari ini



Nama Hari



0



1



Senin



3



3



Minggu



5



4



Sabtu



http://awanrimbawan.wordpress.com P a g e 20



04Nov2010



Algoritma: ALGORITMA Menghitung_Hari KAMUS DATA iNHari,iHariIni,iBelakang : Integer #include



cNamaHari[15] : String #include



cNamaHariLalu: Char #include BEGIN int main() { Input(iHariIni) int iNHari,iHariIni,iBelakang; char cNamaHari[15],cNamaHariLalu; Input(iNHari) printf("Masukkan If (iHariIni>iNHari)Kode ThenHari ini : "); scanf("%d",&iHariIni); iBelakang  iHariIni - iNHari Else printf("Masukkan Hari yg lalu : "); iBelakang  7 - N (iNHari - iHariIni) scanf("%d",&iNHari); End If if (iHariIni>iNHari) Case (iBelakang) iBelakang = iHariIni - iNHari; 1: cNamaHari "Senin" else 2: cNamaHari "Selasa" iBelakang= 7 - (iNHari - iHariIni); 3: cNamaHari "Rabu" 4: cNamaHari "Kamis" switch (iBelakang){ 5: cNamaHari "Jumat" case 1: strcpy(cNamaHari,"Senin"); 6: cNamaHari break; "Sabtu" 7: cNamaHari "Minggu" case 2:strcpy(cNamaHari,"Selasa"); End Case break; case 3:strcpy(cNamaHari,"Rabu"); Output(cNamaHari) break; END case 4: strcpy(cNamaHari,"Kamis"); break; case 5: strcpy(cNamaHari,"Jumat"); Program: break; case 6: strcpy(cNamaHari,"Sabtu"); break; case 7: strcpy(cNamaHari,"Minggu"); break; default: strcpy(cNamaHari,"Inputan salah"); } printf("\n %d Hari yang lalu adalah hari %s \n",iNHari,cNamaHari); system("PAUSE"); return 0; http://awanrimbawan.wordpress.com } P a g e 21



04Nov2010



12. Soal:



Penghitungan Pembayaran Listrik



PLN menerapkan pembayaran listrik perumahan dengan cara perhitungan sebagai berikut : - Untuk golongan 1 tarif : Rp 1000/kWh - Untuk golongan 2 tarif : Rp 2000/kWh Dengan syarat penghitungan: Minimum pembayaran adalah 100 kWh sedangkan untuk pemakaian 1000 kWh dan seterusnya tarifnya ditambah 10% dari total pembayaran. Golongan 1



Pemakai an 50



Bayar 100.000



http://awanrimbawan.wordpress.com P a g e 22



04Nov2010



2 1



150 1000



300.000 1.100.000



ALGORITMA Menghitung_Pembayaran_Listrik KAMUS DATA iGol,iPakai,iTarif,iBayar : Integer BEGIN Input(iGol) Input(iPakai) If ( iGol = 1) Then iTarif 1000 Else iTarif  2000 End If If (iPakai < 100) Then iBayar  100 * iTarif Else If ( iPakai >= 1000) iBayar  iPakai * iTarif * 1.1 Else iBayar  iPakai * iTarif End If Output(iBayar) END



SOURCE CODE: #include #include int main() { int iGol,iPakai,iTarif,iBayar; printf("masukkan golongan: ");scanf("%d",&iGol); printf("masukkan jam pemakaian: ");scanf("%d",&iPakai); if (iGol == 1 ) {iTarif=1000;} else http://awanrimbawan.wordpress.com P a g e 23



04Nov2010



{iTarif=2000;} if (iPakai < 100) {iBayar=100*iTarif;} else if (iPakai >= 1000) {iBayar=iPakai*iTarif*1.1;} else {iBayar=iPakai * iTarif;} printf("\n yg harus dibayarkan %d\n",iBayar); system("PAUSE"); return 0; }



13. Soal:



Penghitungan Bulan



Buatlah algoritma untuk menghitung bulan pernikahan dengan menginputkan bulan saat ini dan berapa bulan kedepan. Misal data: Bulan Saat Ini



N Bulan Kedepan



1 12 10



2 1 5



Bulan Pernikahan 3 1 3



ALGORITMA Menghitung_Bulan_Pernikahan KAMUS DATA iBlnSekarang, iNbulan, iBlnPernikahan : Integer BEGIN Input (iBlnSekarang) Input (iNBulan) If ( (iBlnSekarang + iNbulan)