Workshop Bab 2
Soal 1
Buatlah program yang meminta user memasukkan jam, menit dan detik kemudian menampilkannya dengan format jam:menit:detik. Deklarasikan jam dan menit berupa integer, sedangkan menit berupa floating point. Buat masukan dan keluaran menggunakan operator overloading << dan >> sesuai yang dikehendaki.
#include<iostream>
using namespace std;
class waktu{
friend ostream& operator<<(ostream&, const waktu&);
friend istream& operator>>(istream&, waktu&);
public:
void proses(){
if(detik>59){
menit = menit + (detik/60);
detik = detik % 60;
}
if(menit>59){
jam = jam + (menit/60);
menit = menit % 60;
}
}
private:
int jam;
int menit;
int detik;
};
istream& operator>>(istream& input, waktu& objek){
cout<<"Masukkan jam: ";
input>>objek.jam;
cout<<"Masukkan menit: ";
input>>objek.menit;
cout<<"Masukkan detik: ";
input>>objek.detik;
objek.proses();
}
ostream& operator<<(ostream& print, const waktu& objek){
print<<endl<<objek.jam<<":"<<objek.menit<<":"<<objek.detik;
}
int main(){
waktu jamSekarang;
cin>>jamSekarang;
cout<<jamSekarang;
}
Soal 2
Buatlah program yang meminta user memasukkan bagian penyebut dan pembilang dari sebuah bilangan rasional berbentuk p/q. Setiap memasukkan bilangan rasional outputnya berbentuk p/q. Misalnya, masukan 1 dan 2 maka tampilan outputnya ½.
#include<iostream>
using namespace std;
class rasional{
friend ostream& operator<<(ostream&, const rasional&);
friend istream& operator>>(istream&, rasional&);
private:
int p;
int q;
};
istream& operator>>(istream& input, rasional& objek){
cout<<"Masukkan pembilang: ";
input>>objek.p;
cout<<"Masukkan penyebut: ";
input>>objek.q;
}
ostream& operator<<(ostream& print, const rasional& objek){
print<<endl<<objek.p<<"/"<<objek.q;
}
int main(){
rasional bilanganRasional;
cin>>bilanganRasional;
cout<<bilanganRasional;
}
Soal 3
Buatlah program yang meminta user memasukkan bagian ribuan, ratusan, puluhan dan satuan. Misalnya : 1000, 200, 30, 4. Tampilan yang dikehendaki adalah 1234.
#include<iostream>
using namespace std;
class gabungan{
friend ostream& operator<<(ostream&, const gabungan&);
friend istream& operator>>(istream&, gabungan&);
private:
int ribuan;
int ratusan;
int puluhan;
int satuan;
void proses(){
ribuan = ribuan / 1000;
ratusan = ratusan / 100;
puluhan = puluhan / 10;
}
};
istream& operator>>(istream& input, gabungan& objek){
cout<<"Masukkan angka ribuan: ";
input>>objek.ribuan;
cout<<"Masukkan angka ratusan: ";
input>>objek.ratusan;
cout<<"Masukkan angka puluhan: ";
input>>objek.puluhan;
cout<<"Masukkan angka satuan: ";
input>>objek.satuan;
objek.proses();
}
ostream& operator<<(ostream& print, const gabungan& objek){
print<<endl<<objek.ribuan<<objek.ratusan<<objek.puluhan<<objek.satuan;
}
int main(){
gabungan angka;
cin>>angka;
cout<<angka;
}
Soal 4
Buatlah program untuk merepresentasikan operasi-operasi aritmatika : penjumlahan, pengurangan, perkalian dan pembagian. User diminta memasukkan 2 buah bilangan bulat, kemudian menampilkan sajian lengkapnya dari semua operasi. Sebagai contoh, user memasukkan 1 dan 2 maka tampilan outputnya :
1 + 2 = 2
1 – 2 = -1
1 * 2 = 2
1 : 2 = ½
#include<iostream>
using namespace std;
class operasi{
friend ostream& operator<<(ostream&, const operasi&);
friend istream& operator>>(istream&, operasi&);
private:
int a;
int b;
int kali;
int tambah;
int kurang;
public:
void proses();
};
istream& operator>>(istream& input, operasi& objek){
cout<<"Masukkan bilangan pertama: ";
input>>objek.a;
cout<<"Masukkan bilangan kedua: ";
input>>objek.b;
objek.proses();
}
void operasi::proses(){
kali = a * b;
tambah = a + b;
kurang = a - b;
}
ostream& operator<<(ostream& print, const operasi& objek){
print<<endl<<objek.a<<" + "<<objek.b<<" = "<<objek.tambah;
print<<endl<<objek.a<<" - "<<objek.b<<" = "<<objek.kurang;
print<<endl<<objek.a<<" * "<<objek.b<<" = "<<objek.kali;
print<<endl<<objek.a<<" : "<<objek.b<<" = "<<objek.a<<"/"<<objek.b;
}
int main(){
operasi gabungan;
cin>>gabungan;
cout<<gabungan;
}
Soal 5
Buatlah program untuk merepresentasikan bilangan bulat menjadi bilangan scientific number berbentuk 1.23E1 untuk menyatakan bilangan 12.3. Masukan bilangan bulat 4 digit, keluaran berbentuk aEb, dengan a adalah bilangan antara 0 dan 10, sedangkan b dari 0 sampai 4.
#include<iostream>
using namespace std;
class convert{
friend ostream& operator<<(ostream&, const convert&);
friend istream& operator>>(istream&, convert&);
private:
int b1=2, b2=3, b3=4;
float bil, a1, a2, a3;
public:
void proses();
};
istream& operator>>(istream& input, convert& objek){
cout<<"Masukkan 4 digit bilangan bulat: ";
input>>objek.bil;
objek.proses();
}
void convert::proses(){
if(bil < 10000 && bil >= 1000){
if(bil / 100 <= 10){
a1 = bil / 100;
a2 = bil / 1000;
a3 = bil / 10000;
} else{
a1 = bil / 1000;
a2 = bil / 10000;
}
}
}
ostream& operator<<(ostream& print, const convert& objek){
if(objek.bil < 10000 && objek.bil >= 1000){
if(objek.bil / 100 <= 10){
print<<endl<<objek.a1<<"E"<<objek.b1;
print<<endl<<objek.a2<<"E"<<objek.b2;
print<<endl<<objek.a3<<"E"<<objek.b3;
} else{
print<<endl<<objek.a1<<"E"<<objek.b2;
print<<endl<<objek.a2<<"E"<<objek.b3;
}
} else{
print<<endl<<"Jangan lebih/kurang dari 4 digit -_-";
}
}
int main(){
convert scientificNumber;
cin>>scientificNumber;
cout<<scientificNumber;
}
Workshop Bab 2
Soal 1
Buatlah analisis dan algoritma untuk mencari titik tengah sebuah garis yang ujung
titiknya adalah A(x1,y1) dan B(x2,y2).
#include<iostream>
using namespace std;
class hitung {
friend ostream& operator<<(ostream&, const hitung&);
friend istream& operator>>(istream&, hitung&);
public:
int x1, x2, y1, y2;
float x3, y3;
void titikTengah(){
x3 = (x1+x2)/2.0;
y3 = (y1+y2)/2.0;
}
};
istream& operator>>(istream& input, hitung& objek) {
cout<<"Masukkan x1: ";
input>>objek.x1;
cout<<"Masukkan y1: ";
input>>objek.y1;
cout<<"Masukkan x2: ";
input>>objek.x2;
cout<<"Masukkan y2: ";
input>>objek.y2;
objek.titikTengah();
}
ostream& operator<<(ostream& print, const hitung& objek){
cout<<endl;
print<<"A"<<"( "<<objek.x1<<" , "<<objek.y1<<" )"<<endl;
print<<"B"<<"( "<<objek.x2<<" , "<<objek.y2<<" )"<<endl;
print<<"C"<<"( "<<objek.x3<<" , "<<objek.y3<<" )"<<endl;
}
int main()
{
hitung garis1;
cin>>garis1;
cout<<garis1;
}
Soal 2
Buatlah algoritma untuk mencari isi bola bila diketahui jari-jari bola.
#include<iostream>
using namespace std;
class hitung {
friend ostream& operator<<(ostream&, const hitung&);
friend istream& operator>>(istream&, hitung&);
public:
float v, r;
void volumeBola(){
v = 4*((22*r*r*r)/7)/3;
}
};
istream& operator>>(istream& input, hitung& objek) {
cout<<"Masukkan jari-jari bola: ";
input>>objek.r;
objek.volumeBola();
}
ostream& operator<<(ostream& print, const hitung& objek){
cout<<endl;
print<<"Volume bola = "<<objek.v;
}
int main()
{
hitung bola1;
cin>>bola1;
cout<<bola1;
}
Soal 3
Buatlah analisis dan algoritma untuk mencari hipotenusa dari segitiga Pythagoras bila diketahui sisi siku-sikunya. (Petunjuk : gunakan fungsi sqrt yang menyatakan akar dari).
#include<iostream>
#include<cmath>
using namespace std;
class hitung {
friend ostream& operator<<(ostream&, const hitung&);
friend istream& operator>>(istream&, hitung&);
public:
float a, t, h;
void hipotenusa(){
h = sqrt(a*a + t*t);
}
};
istream& operator>>(istream& input, hitung& objek) {
cout<<"Masukkan alas segitiga siku-siku: ";
input>>objek.a;
cout<<"Masukkan tinggi segitiga siku-siku: ";
input>>objek.t;
objek.hipotenusa();
}
ostream& operator<<(ostream& print, const hitung& objek){
cout<<endl;
print<<"Hipotenusa segitiga = "<<objek.h;
}
int main()
{
hitung segitiga1;
cin>>segitiga1;
cout<<segitiga1;
}
Soal 4
Buatlah analisis dan algoritma untuk menghitung konversi detik menjadi format
jam:menit:detik
Buat contoh kasus, misalnya konversikan 1230 detik menjadi … jam … menit … detik.
#include<iostream>
using namespace std;
class hitung {
friend ostream& operator<<(ostream&, const hitung&);
friend istream& operator>>(istream&, hitung&);
public:
int detik, menit, jam;
void konversiDetik(){
jam = detik/3600;
menit = (detik%3600)/60;
detik = detik%60;
}
};
istream& operator>>(istream& input, hitung& objek) {
cout<<"Masukkan detik: ";
input>>objek.detik;
objek.konversiDetik();
}
ostream& operator<<(ostream& print, const hitung& objek){
cout<<endl;
print<<objek.jam<<" jam "<<objek.menit<<" menit "<<objek.detik<<" detik";
}
int main()
{
hitung detik;
cin>>detik;
cout<<detik;
}
Soal 5
Buatlah analisis dan algoritma untuk menghitung konversi dari jam:menit:detik ke detik Buat contoh kasus, misalnya konversikan 2 jam 13 menit 43 detik menjadi … detik.
#include<iostream>
using namespace std;
class hitung {
friend ostream& operator<<(ostream&, hitung&);
friend istream& operator>>(istream&, hitung&);
public:
int detik, menit, jam;
void ubahKeDetik(){
detik = detik + (menit*60) + (jam*3600);
}
};
istream& operator>>(istream& input, hitung& objek) {
cout<<"Masukkan jam: ";
input>>objek.jam;
cout<<"Masukkan menit: ";
input>>objek.menit;
cout<<"Masukkan detik: ";
input>>objek.detik;
}
ostream& operator<<(ostream& print, hitung& objek){
cout<<endl;
print<<objek.jam<<" jam "<<objek.menit<<" menit "<<objek.detik<<" detik";
objek.ubahKeDetik();
print<<" = "<<objek.detik<<" detik";
}
int main()
{
hitung waktu;
cin>>waktu;
cout<<waktu;
}
Soal 6
Buatlah analisis dan algoritma untuk menghitung selisih 2 waktu. Output ditampilkan dalam bentuk jam:menit:detik. Asumsikan menggunakan sistem jam 24-an. Buat contoh kasus, misalnya berapa selisih waktu antara jam 3.45 sore dengan jam 10.23 malam. Selesaikan secara manual lebih dulu.
#include<iostream>
using namespace std;
class hitung {
friend ostream& operator<<(ostream&, const hitung&);
friend istream& operator>>(istream&, hitung&);
public:
float awal, akhir, selisih;
int detik, menit, jam, penampung1, penampung2, selisihJam;
void selisihWaktu(){
penampung1 = awal;
penampung2 = akhir;
selisihJam = penampung2-penampung1;
detik = ((selisihJam*3600)-((awal-penampung1)*100*60))+((akhir-penampung2)*100*60);
}
void konversiDetik(int detik){
jam = detik/3600;
menit = (detik%3600)/60;
this->detik = detik%60;
}
};
istream& operator>>(istream& input, hitung& objek) {
cout<<"Masukkan waktu awal: ";
input>>objek.awal;
cout<<"Masukkan waktu akhir: ";
input>>objek.akhir;
objek.selisihWaktu();
objek.konversiDetik(objek.detik);
}
ostream& operator<<(ostream& print, const hitung& objek){
cout<<endl;
print<<objek.jam<<" jam "<<objek.menit<<" menit "<<objek.detik<<" detik";
}
int main()
{
hitung selisih1;
cin>>selisih1;
cout<<selisih1;
}


















Komentar
Posting Komentar