Langsung ke konten utama

Minggu 2: Sekuen

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