Latihan Bab 4
Soal 1
Buatlah flowchart dan translasi program dari algoritma 3.2.b. di atas.
#include<iostream>
using namespace std;
class Seleksi {
friend ostream& operator<<(ostream&, const Seleksi&);
friend istream& operator>>(istream&, Seleksi&);
public:
int x, y, z, maks;
void terbesar();
};
void Seleksi::terbesar(){
maks = x;
if(y > maks){
maks = y;
}
if(z > maks){
maks = z;
}
}
istream& operator>>(istream& input, Seleksi& objek){
cout<<"Masukkan bilangan 1: "; input>>objek.x;
cout<<"Masukkan bilangan 2: "; input>>objek.y;
cout<<"Masukkan bilangan 3: "; input>>objek.z;
objek.terbesar();
}
ostream& operator<<(ostream& print, const Seleksi& objek){
print<<"Bilangan terbesar: "<<objek.maks;
}
int main(){
Seleksi bilangan1;
cin>>bilangan1;
cout<<bilangan1;
}
Soal 2
Sempurnakan algoritma 3.3. dengan akar imajiner berbentuk :
a + bi
dengan a dan b bilangan real dan bila harga b^2-4ac < 0.
Perhatikan bahwa nilai a dan b dihitung terpisah.
#include<iostream>
#include<cmath>
using namespace std;
class Hitung {
friend ostream& operator<<(ostream&, const Hitung&);
friend istream& operator>>(istream&, Hitung&);
public:
int A, B, C;
long disk;
float x1, x2;
void proses(){
disk = B*B - 4*A*C;
if(disk > 0){
x1 = (-B + sqrt(disk))/(2*A);
x2 = (-B - sqrt(disk))/(2*A);
}
if(disk == 0){
x1 = -B/(2*A);
x2 = x1;
}
}
};
ostream& operator<<(ostream& print, const Hitung& objek){
if(objek.A==0){
print<<"Bukan persamaan kuadrat";
}else if(objek.disk > 0){
print<<"x1 = "<<objek.x1<<endl;
print<<"x2 = "<<objek.x2;
}else if(objek.disk == 0){
print<<"x1 = "<<objek.x1<<endl;
print<<"x2 = "<<objek.x2;
} else{
print<<"Akar-akarnya = "<<objek.A<<"+"<<objek.B<<"i";
}
}
istream& operator>>(istream& input, Hitung& objek){
cout<<"Masukkan A: ";
input>>objek.A;
cout<<"Masukkan B: ";
input>>objek.B;
cout<<"Masukkan C: ";
input>>objek.C;
objek.proses();
}
int main(){
Hitung persamaan1;
cin>>persamaan1;
cout<<persamaan1;
}
Soal 3
Buatlah program dari algoritma 3.4. menggunakan case … of .
#include<iostream>
using namespace std;
class Konversi {
friend ostream& operator<<(ostream&, const Konversi&);
friend istream& operator>>(istream&, Konversi&);
public:
int nilai;
char huruf;
void konversiNilai(){
switch(nilai/10){
case 10:
case 9:
huruf = 'A';
break;
case 8:
huruf = 'A';
break;
case 7:
huruf = 'B';
break;
case 6:
huruf = 'B';
break;
case 5:
huruf = 'C';
break;
case 4:
huruf = 'C';
break;
case 3:
huruf = 'D';
break;
case 2:
huruf = 'D';
break;
default:
huruf = 'E';
}
}
};
istream& operator>>(istream& input, Konversi& objek){
cout<<"Masukkan nilai mahasiswa: ";
input>>objek.nilai;
objek.konversiNilai();
}
ostream& operator<<(ostream&, const Konversi& objek){
cout<<"Nilai huruf: "<<objek.huruf;
}
int main(){
Konversi nilai1;
cin>>nilai1;
cout<<nilai1;
}
Soal 4
Buatlah algoritma, flowchart dan program untuk mengecek apakah pemakai memasukkan bilangan bulat atau bilangan real. Lebih dulu, carilah perbedaan dari 1.0 dan 1 kemudian 1 dan 1.23.
#include<iostream>
using namespace std;
class Cek {
friend ostream& operator<<(ostream&, const Cek&);
friend istream& operator>>(istream&, Cek&);
public:
float a, hasil;
int b;
string tipe;
void realAtauBulat(){
b = a;
hasil = a - b;
if(hasil>0){
tipe = " adalah bilangan real";
} else{
tipe = " adalah bilangan bulat";
}
}
};
istream& operator>>(istream& input, Cek& objek){
cout<<"Masukkan bilangan: ";
cin>>objek.a;
objek.realAtauBulat();
}
ostream& operator<<(ostream& print, const Cek& objek){
print<<objek.a<<objek.tipe;
}
int main(){
Cek bilangan1;
cin>>bilangan1;
cout<<bilangan1;
}
Soal 5
Buatlah algoritma, flowchart dan program untuk menentukan banyaknya hari dalam suatu bulan dan tahun yang diberikan. Pertimbangkan pula adanya tahun kabisat di mana bulan Februari mempunyai jumlah 29 hari. Gunakan case .. of dan if .. then .. else .. yang tepat untuk setiap kasus.
#include<iostream>
using namespace std;
class Hitung {
friend ostream& operator<<(ostream&, const Hitung&);
friend istream& operator>>(istream&, Hitung&);
public:
int sebulan, setahun, februari, pilihBulan, tahun;
string bulan;
void apakahKabisat(){
if(tahun%400 == 0){
februari = 29;
} else if(tahun%400 != 0 && tahun%100 == 0){
februari = 28;
} else if(tahun%400 != 0 && tahun%100 != 0 && tahun%4 == 0){
februari = 29;
} else{
februari = 28;
}
}
void hariSebulan(){
switch(pilihBulan){
case 1:
sebulan = 31;
bulan = "Januari";
break;
case 2:
sebulan = februari;
bulan = "Februari";
break;
case 3:
sebulan = 31;
bulan = "Maret";
break;
case 4:
sebulan = 30;
bulan = "April";
break;
case 5:
sebulan = 31;
bulan = "Mei";
break;
case 6:
sebulan = 30;
bulan = "Juni";
break;
case 7:
sebulan = 31;
bulan = "Juli";
break;
case 8:
sebulan = 31;
bulan = "Agustus";
break;
case 9:
sebulan = 30;
bulan = "September";
break;
case 10:
sebulan = 31;
bulan = "Oktober";
break;
case 11:
sebulan = 30;
bulan = "November";
break;
case 12:
sebulan = 31;
bulan = "Desember";
break;
}
}
void hariSetahun(){
setahun = (30*4)+(31*7)+februari;
}
};
istream& operator>>(istream& input, Hitung& objek){
string bln[12] = {"Januari", "Februari", "Maret", "April", "Mei", "Juni",
"Juli", "Agustus", "September", "Oktober", "November", "Desember"};
for(int i=0; i<12; i++){cout<<i+1<<". "<<bln[i]<<endl;}
cout<<"Pilih bulan: ";
input>>objek.pilihBulan;
cout<<"Masukkan tahun: ";
input>>objek.tahun;
objek.apakahKabisat();
objek.hariSebulan();
objek.hariSetahun();
}
ostream& operator<<(ostream& print, const Hitung& objek){
print<<"Bulan "<<objek.bulan<<" ada "<<objek.sebulan<<" hari"<<endl;
print<<"Tahun "<<objek.tahun<<" ada "<<objek.setahun<<" hari"<<endl;
}
int main(){
Hitung hari;
cin>>hari;
cout<<hari;
}
Soal 6
Buatlah algoritma, flowchart dan program untuk mengecek apakah karakter yang dimasukkan itu merupakan huruf besar, huruf kecil atau digit (bilangan). Gunakan fungsi ORD(char) untuk menyatakan nomor urut dalam tabel ASCII.
#include<iostream>
using namespace std;
class Cek {
friend ostream& operator<<(ostream&, const Cek&);
friend istream& operator>>(istream&, Cek&);
public:
char karakter;
string tipe;
void cekTipe(){
if(karakter>='A' && karakter<='Z'){
tipe = " merupakan huruf besar";
}else if(karakter>='a' && karakter<='z'){
tipe = " merupakan huruf kecil";
} else{
tipe = " merupakan digit";
}
}
};
istream& operator>>(istream& input, Cek& objek){
cout<<"Masukkan sebuah karakter: ";
input>>objek.karakter;
objek.cekTipe();
}
ostream& operator<<(ostream&, const Cek& objek){
cout<<objek.karakter<<objek.tipe;
}
int main(){
Cek karakter1;
cin>>karakter1;
cout<<karakter1;
}
Soal 7
Seorang dosen ingin mengkonversikan nilai angka hasil ujian mahasiswa menjadi nilai huruf dengan ketentuan :
0-60 = F, 61-70 = D, 71-80 = C, 81-90 = B, 91-100 = A.
#include<iostream>
using namespace std;
class Konversi {
friend ostream& operator<<(ostream&, const Konversi&);
friend istream& operator>>(istream&, Konversi&);
public:
float nilai;
char huruf;
void konversiNilai(){
if(nilai>=0 && nilai<=60){
huruf = 'F';
}else if(nilai>=61 && nilai<=70){
huruf = 'E';
} else if(nilai>=71 && nilai<=80){
huruf = 'C';
} else if(nilai>=81 && nilai<=90){
huruf = 'B';
} else{
huruf = 'A';
}
}
};
istream& operator>>(istream& input, Konversi& objek){
cout<<"Masukkan nilai mahasiswa: ";
input>>objek.nilai;
objek.konversiNilai();
}
ostream& operator<<(ostream&, const Konversi& objek){
cout<<"Nilai huruf: "<<objek.huruf;
}
int main(){
Konversi nilai1;
cin>>nilai1;
cout<<nilai1;
}
Soal 8
Diberikan ketentuan pecahan uang di Indonesia. User memasukkan sebuah bilangan, program harus dapat memecahnya menjadi pecahan sesuai dengan mata uang di Indonesia. Misalkan dimasukkan nilai uang 127.675 rupiah. Cobalah memecah secara manual nilai uang di atas.
#include<iostream>
using namespace std;
class Hitung {
friend ostream& operator<<(ostream&, const Hitung&);
friend istream& operator>>(istream&, Hitung&);
public:
int puluhanRibu, ribuan, ratusan;
int sisaPR, sisaRB, sisaR;
int uang, cepe, duaRatus, gope, serebu, duaRebu, goceng, ceban, duaPuluhRebu, gocap, seratusRebu;
void hitungPecahanUang(){
puluhanRibu = ((uang/10000)%10)*10000;
ribuan = ((uang/1000)%10)*1000;
ratusan = ((uang/100)%10)*100;
seratusRebu = uang/100000;
gocap = puluhanRibu/50000;
sisaPR = puluhanRibu%50000;
duaPuluhRebu = sisaPR/20000;
sisaPR = sisaPR%20000;
ceban = sisaPR/10000;
goceng = ribuan/5000;
sisaRB = ribuan%5000;
duaRebu = sisaRB/2000;
sisaRB = sisaRB%2000;
serebu = sisaRB/1000;
gope = ratusan/500;
sisaR = ratusan%500;
duaRatus = sisaR/200;
sisaR = sisaR%200;
cepe = sisaR/100;
}
};
ostream& operator<<(ostream& print, const Hitung& objek){
print<<endl<<"Pecahan uang:"<<endl;
print<<objek.seratusRebu<<" Rp100.000"<<endl;
print<<objek.gocap<<" Rp50.000"<<endl;
print<<objek.duaPuluhRebu<<" Rp20.000"<<endl;
print<<objek.ceban<<" Rp10.000"<<endl;
print<<objek.goceng<<" Rp5.000"<<endl;
print<<objek.duaRebu<<" Rp2.000"<<endl;
print<<objek.serebu<<" Rp1.000"<<endl;
print<<objek.gope<<" Rp500"<<endl;
print<<objek.duaRatus<<" Rp200"<<endl;
print<<objek.cepe<<" Rp100"<<endl;
}
istream& operator>>(istream& input, Hitung& objek){
cout<<"Masukkan uang: ";
input>>objek.uang;
objek.hitungPecahanUang();
}
int main(){
Hitung uang1;
cin>>uang1;
cout<<uang1;
}
Soal 9
Seorang pegawai bekerja selama 5 hari kerja, yaitu Senin sampai Jum’at. Setiap hari dia masuk jam 08.00 dan pulang jam 16.00. Kecuali Jum’at dia pulang jam 11.00. Apabila dia bekerja lebih dari 30 jam per bulan maka setiap 5 jam akan memperoleh uang lembur sebesar Rp 30.000,- bila kurang dari 5 jam maka akan dihitung Rp 4.000,-/jam. Buat program dengan masukan bulan yang diinginkan, dan outputnya berupa besarnya uang lembur pegawai tersebut.
#include<iostream>
using namespace std;
class Hitung {
friend ostream& operator<<(ostream&, const Hitung&);
friend istream& operator>>(istream&, Hitung&);
public:
int jumat, selainJumat, uangLemburPerBulan, uangLembur, banyakBulan;
void hitungUangLembur(){
jumat = 3*4;
selainJumat = 8*4*4;
uangLemburPerBulan = (selainJumat*30000/5) + jumat*4000;
uangLembur = uangLemburPerBulan * banyakBulan;
}
};
ostream& operator<<(ostream& print, const Hitung& objek){
print<<"Total uang lembur yang didapat: Rp"<<objek.uangLembur;
}
istream& operator>>(istream& input, Hitung& objek){
cout<<"Masukkan banyak bulan: ";
input>>objek.banyakBulan;
objek.hitungUangLembur();
}
int main(){
Hitung UL;
cin>>UL;
cout<<UL;
}


























Komentar
Posting Komentar