Monday, December 26, 2016

Bab 6. Soal & Penyelesaian C++


STRUKTUR DAN KELAS





Soal & Penyelesaian
1.       Demonstrasikanlah pengaksesan anggota publik dari sebuah kelas sederhana.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//AksesAnggotaPublik.cpp
#include <iostream>
#include <conio.h>

class Kucing // mendeklarasikan kelas Kucing
{
public:
    int umurNya; // variabel anggota
    int beratNya; // variabel anggota
}; // perhatikan titik-koma

int main()
{
    Kucing Meonk;
    Meonk.umurNya = 5; // menugaskan kepada variabel anggota
    std::cout << "Meonk adalah kucing yang berumur " ;
    std::cout << Meonk.umurNya << " tahun.\n";

    getch();
    return 0;
}

Meonk adalah kucing yang berumur 5 tahun.

2.       Demonstrasikanlah pengaksesan anggota data private menggunakan metode aksesor.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//MetodeAksesor.cpp
class Kucing
{
public:
    // aksesor publik
    unsigned int GetUmur();
    void SetUmur(unsigned int umur);

    unsigned int GetBerat();
    void SetBerat(unsigned int berat);

    // fungsi anggota publik
    void Meonk();

// anggota data private
private:
    unsigned int umurNya;
    unsigned int beratNya;
};

3.       Demonstrasikanlah bagaimana mengimplementasikan metode pada sebuah kelas sederhana.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//ImplementasiMetode.cpp
#include <iostream> // untuk cout
#include <conio.h>

class Kucing // awal deklarasi kelas
{
public: // awal bagian publik
    int GetUmur(); // fungsi aksesor
    void SetUmur (int umur); // fungsi aksesor
    void Meonk(); // fungsi umum

private: // awal bagian private
    int umurNya; // variabel anggota
};

 // GetUmur, fungsi aksesor publik
 // menghasilkan nilai dari anggota umurNya
int Kucing::GetUmur()
{
    return umurNya;
}

// definisi dari SetUmur, fungsi
// aksesor publik
// menetapkan nilai anggota umurNya
void Kucing::SetUmur(int umur)
{
    umurNya = umur;
}

void Kucing::Meonk()
{
    std::cout << "Meonk.\n";
}

// menciptakan sebuah kucing, menetapkan umurnya
// menyuarakan meonk, dan memberitahu Anda umurnya,
// dan kemudian menyuarakan meonk lagi.
int main()
{
    Kucing Friska;
    Friska.SetUmur(5);
    Friska.Meonk();
    std::cout << "Friska adalah seekor kucing dengan umur " ;
    std::cout << Friska.GetUmur() << " tahun.\n";
    Friska.Meonk();

    getch();
    return 0;
}

Meonk.
Friska adalah seekor kucing dengan umur 5 tahun.
Meonk.

4.       Demonstrasikanlah penggunaan konstruktor dan destruktor dalam sebuah kelas.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//KonstruktorDestruktor.cpp
#include <iostream> // untuk cout
#include <conio.h>

class Kucing
{
public:
    Kucing(int umurAwal); // konstruktor
    ~Kucing(); // destruktor
    int GetUmur(); // fungsi aksesor
    void SetUmur(int umur); // fungsi aksesor
    void Meonk();

private:
    int umurNya;
};

// konstruktor Kucing
Kucing::Kucing(int umurAwal)
{
    umurNya = umurAwal;
}

Kucing::~Kucing() // destruktor
{
}

// GetUmur, fungsi aksesor publik
// menghasilkan nilai dari anggota umurNya
int Kucing::GetUmur()
{
    return umurNya;
}

// Definisi dari SetUmur, fungsi
// aksesor publik
void Kucing::SetUmur(int umur)
{
    // menetapkan variabel anggota umurNya menjadi
    // nilai yang dilewatkan pada parameter umur
    umurNya = umur;
}

// Definisi dari metode Meonk
// menghasilkan: void
// parameter: tidak ada
// aksi: Menampilkan "Meonk"
void Kucing::Meonk()
{
    std::cout << "Meonk.\n";
}

// menciptakan sebuah kucing, menetapkan umurnya
// menyuarakan meonk, dan memberitahu Anda umurnya,
// dan kemudian menyuarakan meonk lagi.
int main()
{
    Kucing Friska(5);
    Friska.Meonk();
    std::cout << "Friska adalah seekor kucing dengan umur " ;
    std::cout << Friska.GetUmur() << " tahun.\n";
    Friska.Meonk();
    Friska.SetUmur(7);
    std::cout << "Sekarang Friska memiliki umur " ;
    std::cout << Friska.GetUmur() << " tahun.\n";

    getch();
    return 0;
}

Meonk.
Friska adalah seekor kucing dengan umur 5 tahun.
Meonk.
Sekarang Friska memiliki umur 7 tahun.

5.       Demonstrasikanlah sebuah kelas yang memiliki kelas lain sebagai anggota datanya.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//KelasDenganAnggotaDataKelas.cpp
#include <iostream>
#include <conio.h>

class Titik // menampung koordinat x dan y
{
public:
    void SetX(int x) { Xnya = x; }
    void SetY(int y) { Ynya = y; }
    int GetX()const { return Xnya;}
    int GetY()const { return Ynya;}

private:
    int Xnya;
    int Ynya;
};

class PersegiPanjang
{
public:
    PersegiPanjang (int atas, int kiri, int bawah, int kanan);
    ~PersegiPanjang () {}

    int GetAtas() const { return atasNya; }
    int GetKiri() const { return kiriNya; }
    int GetBawah() const { return bawahNya; }
    int GetKanan() const { return kananNya; }

    Titik GetKiriAtas() const { return pojokKiriAtasNya; }
    Titik GetKiriBawah() const { return pojokKiriBawahNya; }
    Titik GetKananAtas() const { return pojokKananAtasNya; }
    Titik GetKananBawah() const { return pojokKananBawahNya; }

    void SetKiriAtas(Titik Lokasi) {pojokKiriAtasNya = Lokasi;}
    void SetKiriBawah(Titik Lokasi) {pojokKiriBawahNya = Lokasi;}
    void SetKananAtas(Titik Lokasi) {pojokKananAtasNya = Lokasi;}
    void SetKananBawah(Titik Lokasi) {pojokKananBawahNya = Lokasi;}

    void SetAtas(int atas) { atasNya = atas; }
    void SetKiri (int kiri) { kiriNya = kiri; }
    void SetBawah (int bawah) { bawahNya = bawah; }
    void SetKanan (int kanan) { kananNya = kanan; }

    int GetLuas() const;

private:
    Titik pojokKiriAtasNya;
    Titik pojokKananAtasNya;
    Titik pojokKiriBawahNya;
    Titik pojokKananBawahNya;
    int atasNya;
    int kiriNya;
    int bawahNya;
    int kananNya;
};

PersegiPanjang::PersegiPanjang(int atas, int kiri, int bawah, int kanan)
{
    atasNya = atas;
    kiriNya = kiri;
    bawahNya = bawah;
    kananNya = kanan;
    pojokKiriAtasNya.SetX(kiri);
    pojokKiriAtasNya.SetY(atas);

    pojokKananAtasNya.SetX(kanan);
    pojokKananAtasNya.SetY(atas);

    pojokKiriBawahNya.SetX(kiri);
    pojokKiriBawahNya.SetY(bawah);

    pojokKananBawahNya.SetX(kanan);
    pojokKananBawahNya.SetY(bawah);
}

int PersegiPanjang::GetLuas() const
{
    int Lebar = kananNya-kiriNya;
    int Tinggi = atasNya - bawahNya;
    return (Lebar * Tinggi);
}

int main()
{
    //inisialisasi variabel PersegiPanjang lokal
    PersegiPanjang PersegiPanjangKu (100, 20, 50, 80 );

    int Area = PersegiPanjangKu.GetLuas();

    std::cout << "Luas: " << Area << "\n";
    std::cout << "Koordinat X Pojok Kiri Atas: ";
    std::cout << PersegiPanjangKu.GetKiriAtas().GetX();

    getch();
    return 0;
}

Luas: 3000
Koordinat X Pojok Kiri Atas: 20


6.       Tulislah sebuah program C++ untuk mendemonstrasikan penggunaan struktur
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//penggunaanStruktur.cpp
//Mendemonstrasikan tipe struktur Akun.
#include <iostream>
#include <conio.h>
using namespace std;

//Struktur untuk sebuah akun bank:
struct Akun
{
    double saldo;
    double suku_bunga;
    int jangka_waktu;
};


void baca_data(Akun& akunA);

int main( )
{
    Akun akun;
    baca_data(akun);

    double pecahan_bunga, bunga;
    pecahan_bunga = akun.suku_bunga/100.0;
    bunga = akun.saldo*pecahan_bunga*(akun.jangka_waktu/12.0);
    akun.saldo = akun.saldo + bunga;

    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout << "Pada saat jangka waktu "
         << akun.jangka_waktu << " bulan,\n"
         << "Saldo Anda akan menjadi Rp. "
         << akun.saldo << endl;

    getch();
    return 0;
}

void baca_data(Akun& akunA)
{
    cout << "Masukkan saldo akun: Rp.";
    cin >> akunA.saldo;
    cout << "Masukkan suku bunga akun: ";
    cin >> akunA.suku_bunga;
    cout << "Masukkan jangka waktu dalam bulan\n"
         << "(harus berupa angka 12 atau lebih kecil): ";
    cin >> akunA.jangka_waktu;
}

Masukkan saldo akun: Rp.2000000
Masukkan suku bunga akun: 10
Masukkan jangka waktu dalam bulan
(harus berupa angka 12 atau lebih kecil): 12

Pada saat jangka waktu 12 bulan,
Saldo Anda akan menjadi Rp. 2200000.00

7.       Tulislah sebuah program C++ dimana di dalamnya terdapat suatu kelas yang memiliki satu fungsi anggota.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//kelasDenganSatuFungsiAnggota.cpp
//Mendemonstrasikan sebuah kelas sederhana.
#include <iostream>
#include <conio.h>
using namespace std;

class HariTahun
{
    public:
        void keluaran( );
        int bulan;
        int hari;
};

int main( )
{
    HariTahun hariIni, ultah;

    cout << "Masukkan tanggal hari ini:\n";
    cout << "Masukkan bulan sebagai angka: ";
    cin >> hariIni.bulan;
   
    cout << "Masukkan hari dalam bulan: ";
    cin >> hariIni.hari;

    cout << "Masukkan hari ultah Anda:\n";
    cout << "Masukkan bulan sebagai angka: ";
    cin >> ultah.bulan;

    cout << "Masukkan hari dalam bulan: ";
    cin >> ultah.hari;

    cout << "Tanggal hari ini adalah ";
    hariIni.keluaran( );

    cout << "Ultah Anda adalah ";
    ultah.keluaran( );

    if (hariIni.bulan == ultah.bulan
    && hariIni.hari == ultah.hari)
        cout << "Selamat Ulang Tahun!\n";
    else
        cout << "Hari yang Indah!\n";

    getch();
    return 0;
}

void HariTahun::keluaran( )
{
    cout << "bulan = " << bulan
         << ", hari = " << hari << endl;
}

Masukkan tanggal hari ini:
Masukkan bulan sebagai angka: 3
Masukkan hari dalam bulan: 25

Masukkan hari ultah Anda:
Masukkan bulan sebagai angka: 4
Masukkan hari dalam bulan: 25

Tanggal hari ini adalah bulan = 3, hari = 25
Ultah Anda adalah bulan = 4, hari = 25
Hari yang Indah!

8.       Tulislah sebuah program C++ dimana di dalamnya terdapat suatu kelas yang memiliki satu fungsi anggota private.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//kelasDenganSatuFungsiAnggotaPrivate.cpp
#include <iostream>
#include <conio.h>
using namespace std;

class HariTahun
{
    public:
        void masukan( );
        void keluaran( );
        void tetapkan_bulan(int bulan_baru, int hari_baru);

        int baca_bulan( );
        //Menghasilkan bulan, 1 untuk januari, 2 untuk feb, dst.

        int baca_hari( );
        //Menghasilkan hari dalam bulan.

    private:
        void periksa_tanggal( );
        int bulan;
        int hari;
};

int main( )
{
    HariTahun hariIni, ultahMu;

    cout << "Masukkan tanggal hari ini:\n";
    hariIni.masukan( );

    cout << "Tanggal hari ini adalah ";
    hariIni.keluaran( );

    ultahMu.tetapkan_bulan(3, 21);

    cout << "Hari ulang tahun Anda adalah: ";
    ultahMu.keluaran( );

    if ( hariIni.baca_bulan( ) == ultahMu.baca_bulan( ) &&
        hariIni.baca_hari( ) == ultahMu.baca_hari( ) )
        cout << "Selamat Ulang Tahun Bagi Anda!\n";
    else
        cout << "Hari yang Indah, Semangat!\n";

    getch();
    return 0;
}

void HariTahun::masukan( )
{
    cout << "Masukkan bulan sebagai angka: ";
    cin >> bulan;

    cout << "Masukkan hari sebagai angka: ";
    cin >> hari;

    periksa_tanggal( );
}

void HariTahun::keluaran( )
{
    cout << "bulan = " << bulan
         << ", hari = " << hari << endl;
}

void HariTahun::tetapkan_bulan(int bulan_baru, int hari_baru)
{
    bulan = bulan_baru;
    hari = hari_baru;
    periksa_tanggal();
}

void HariTahun::periksa_tanggal( )
{
    if ((bulan < 1) || (bulan > 12) || (hari < 1) || (hari > 31))
    {
        cout << "Tanggal tak valid. Program dihentikan.\n";
        exit(1);
    }
}

int HariTahun::baca_bulan( )
{
    return bulan;
}

int HariTahun::baca_hari( )
{
    return hari;
}

Masukkan tanggal hari ini:
Masukkan bulan sebagai angka: 3
Masukkan hari sebagai angka: 21
Tanggal hari ini adalah bulan = 3, hari = 21
Hari ulang tahun Anda adalah: bulan = 3, hari = 21
Selamat Ulang Tahun Bagi Anda!


9.       Tulislah sebuah program C++ untuk mendemonstrasikan kelas AkunBank.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//kelasAkunBank.cpp
//Program untuk mendemonstrasikan kelas AkunBank.
#include <iostream>
#include <conio.h>
using namespace std;

class AkunBank
{
    public:
        void set(int rupiah, int bonus, double sukuBunga);
        void set(int rupiah, double sukuBunga);
        void perbarui( );
        double get_saldo( );
        double get_bunga( );
        void keluaran(ostream& kel);
 
    private:
        double saldo;
        double suku_bunga;

        double pecahan(double persen);
 };

int main( )
{
    AkunBank akun1, akun2;

    cout << "Mulai menguji:\n";
    akun1.set(1000000, 10000, 3.0);

    cout << "akun1 awalnya berisi:\n";
    akun1.keluaran(cout);
    akun1.set(2000000, 5.0);

    cout << "akun1 menjadi rapi:\n";
    akun1.keluaran(cout);
    akun1.perbarui();

    cout << "akun1 setelah diperbarui:\n";
    akun1.keluaran(cout);
    akun2 = akun1;

    cout << "akun2:\n";
    akun2.keluaran(cout);

    getch();
    return 0;
}

void AkunBank::set(int rupiah, int bonus, double sukuBunga)
{
    if ((rupiah < 0) || (bonus < 0) || (sukuBunga < 0))
    {
        cout << "Nilai ilegal untuk rupiah atau sukuBunga.\n";
        exit(1);
    }
    saldo = rupiah + 5*bonus;
    suku_bunga = sukuBunga;
}

void AkunBank::set(int rupiah, double sukuBunga)
{
    if ((rupiah < 0) || (sukuBunga < 0))
    {
        cout << "Nilai ilegal untuk rupiah atau sukuBunga.\n";
        exit(1);
    }
    saldo = rupiah;
    suku_bunga = sukuBunga;
}

void AkunBank::perbarui( )
{
    saldo = saldo + pecahan(suku_bunga)*saldo;
}

double AkunBank::pecahan(double nilai_persen)
{
    return (nilai_persen /100.0);
}

double AkunBank::get_saldo( )
{
    return saldo;
}

double AkunBank::get_bunga( )
{
    return suku_bunga;
}

void AkunBank::keluaran(ostream& kel)
{
    kel.setf(ios::fixed);
    kel.setf(ios::showpoint);
    kel.precision(2);
    kel << "Saldo Akun Rp. " << saldo << endl;
    kel << "Suku Bunga: " << suku_bunga << "%" << endl;
}

Mulai menguji:
akun1 awalnya berisi:
Saldo Akun Rp. 1050000.00
Suku Bunga: 3.00%

akun1 menjadi rapi:
Saldo Akun Rp. 2000000.00
Suku Bunga: 5.00%

akun1 setelah diperbarui:
Saldo Akun Rp. 2100000.00
Suku Bunga: 5.00%

akun2:
Saldo Akun Rp. 2100000.00
Suku Bunga: 5.00%


10.    Tulislah sebuah program C++ untuk mendemonstrasikan kelas AkunBank dengan beberapa konstruktor.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//kelasAkunBankDenganKonstruktor.cpp
//kelasAkunBank.cpp
//Program untuk mendemonstrasikan kelas AkunBank.
#include <iostream>
#include <conio.h>
using namespace std;

class AkunBank
{
    public:
        //Tiga buah konstruktor
        AkunBank(int rupiah, int bonus, double sukuBunga);
        AkunBank(int rupiah, double sukuBunga);
        AkunBank();

        void perbarui( );
        double get_saldo( );
        double get_bunga( );
        void keluaran(ostream& kel);
 
    private:
        double saldo;
        double suku_bunga;

        double pecahan(double persen);
 };

int main( )
{
    AkunBank akun1(1000000, 2.3), akun2;

    cout << "akun1 diinisialisasi sebagai berikut:\n";
    akun1.keluaran(cout);

    cout << "akun2 diinisialisasi sebagai berikut:\n";
    akun2.keluaran(cout);

    akun1 = AkunBank(999999, 999, 5.5);
    cout << "akun1 direset menjadi:\n";
    akun1.keluaran(cout);

    getch();
    return 0;
}

AkunBank::AkunBank(int rupiah, int bonus, double sukuBunga)
{
    if ((rupiah < 0) || (bonus < 0) || (sukuBunga < 0))
    {
        cout << "Nilai ilegal untuk rupiah atau sukuBunga.\n";
        exit(1);
    }
    saldo = rupiah + 5*bonus;
    suku_bunga = sukuBunga;
}

AkunBank::AkunBank(int rupiah, double sukuBunga)
{
    if ((rupiah < 0) || (sukuBunga < 0))
    {
        cout << "Nilai ilegal untuk rupiah atau sukuBunga.\n";
        exit(1);
    }
    saldo = rupiah;
    suku_bunga = sukuBunga;
}

AkunBank::AkunBank( ) : saldo(0), suku_bunga(0.0)
{}

void AkunBank::perbarui( )
{
    saldo = saldo + pecahan(suku_bunga)*saldo;
}


double AkunBank::pecahan(double nilai_persen)
{
    return (nilai_persen  /100.0);
}

double AkunBank::get_saldo( )
{
    return saldo;
}

double AkunBank::get_bunga( )
{
    return suku_bunga;
}

void AkunBank::keluaran(ostream& kel)
{
    kel.setf(ios::fixed);
    kel.setf(ios::showpoint);
    kel.precision(2);
    kel << "Saldo Akun Rp. " << saldo << endl;
    kel << "Suku Bunga: " << suku_bunga << "%" << endl;
}


akun1 diinisialisasi sebagai berikut:
Saldo Akun Rp. 1000000.00
Suku Bunga: 2.30%

akun2 diinisialisasi sebagai berikut:
Saldo Akun Rp. 0.00
Suku Bunga: 0.00%

akun1 direset menjadi:
Saldo Akun Rp. 1004994.00
Suku Bunga: 5.50%




No comments:

Post a Comment