Monday, December 26, 2016

Bab 12. Soal & Penyelesaian C++


PENANGANAN EKSEPSI





Soal & Penyelesaian
1.       Tulislah sebuah program C++ untuk mendemonstrasikan suatu kasus pemrograman tanpa penanganan eksepsi.
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
//tanpaPenangananEksepsi.cpp
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
    int donut, susu;
    double dpg;

    cout << "Masukkan jumlah donut:\n";
    cin >> donut;
    cout << "Masukkan jumlah gelas susu:\n";
    cin >> susu;

    if (susu <= 0)
    {
        cout << donut << " donut, dan tidak ada susu!\n"
             << "Pergi beli susu!.\n";
    }

    else
    {
        dpg = donut/static_cast<double>(susu);
        cout << donut << " donut.\n"
             << susu << " gelas susu.\n"
             << "Anda memiliki sejumlah " << dpg
             << " donut untuk tiap gelas susu.\n";
    }
    cout << "Akhir program.\n";

    getch();
    return 0;
}

Masukkan jumlah donut:
5
Masukkan jumlah gelas susu:
4
5 donut.
4 gelas susu.
Anda memiliki sejumlah 1.25 donut untuk tiap gelas susu.
Akhir program.
2.       Tulislah sebuah program C++ untuk mendemonstrasikan suatu kasus pemrograman dengan penanganan eksepsi.
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
//denganPenangananEksepsi.cpp
//tanpaPenangananEksepsi.cpp
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
    int donut, susu;
    double dpg;

    try
    {
        cout << "Masukkan jumlah donut:\n";
        cin >> donut;
        cout << "Masukkan jumlah gelas susu:\n";
        cin >> susu;

        if (susu <= 0)
            throw donut;

        dpg = donut/static_cast<double>(susu);
        cout << donut << " donut.\n"
             << susu << " gelas susu.\n"
             << "Anda memiliki sejumlah " << dpg
             << " donut untuk tiap gelas susu.\n";
    }

    catch(int e)
    {
        cout << e << " donut, dan tidak ada susu!\n"
             << "Pergi beli susu!.\n";
    }

    cout << "Akhir program.\n";
    getch();
    return 0;
}

Masukkan jumlah donut:
5
Masukkan jumlah gelas susu:
4
5 donut.
4 gelas susu.
Anda memiliki sejumlah 1.25 donut untuk tiap gelas susu.
Akhir program.

Masukkan jumlah donut:
12
Masukkan jumlah gelas susu:
0
12 donut, dan tidak ada susu!
Pergi beli susu!.
Akhir program.

3.       Tulislah sebuah program C++ untuk mendefinisikan kelas eksepsi Anda sendiri.
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
//kelasEksepsiSendiri.cpp
#include <iostream>
#include <conio.h>
using namespace std;

class TdkAdaSusu
{
    public:
        TdkAdaSusu();
        TdkAdaSusu(int brp_banyak);
        int baca_donut();

    private:
        int hitung;
};

int main()
{
    int donut, susu;
    double dpg;

    try
    {
        cout << "Masukkan jumlah donut:\n";
        cin >> donut;
        cout << "Masukkan jumlah gelas susu:\n";
        cin >> susu;

        if (susu <= 0)
            throw TdkAdaSusu(donut);

        dpg = donut/static_cast<double>(susu);
        cout << donut << " donut.\n"
             << susu << " gelas susu.\n"
             << "Anda memiliki sejumlah " << dpg
             << " donut untuk tiap gelas susu.\n";
    }

       catch(TdkAdaSusu e)
    {
        cout << e.baca_donut() << " donut, dan tidak ada susu!\n"
             << "Pergi beli susu!.\n";
    }

    cout << "Akhir program.";
    getch();
    return 0;
}

TdkAdaSusu::TdkAdaSusu()
{}

TdkAdaSusu::TdkAdaSusu(int brp_banyak) : hitung(brp_banyak)
{}

int TdkAdaSusu::baca_donut()
{
    return hitung;
}

Masukkan jumlah donut:
5
Masukkan jumlah gelas susu:
4
5 donut.
4 gelas susu.
Anda memiliki sejumlah 1.25 donut untuk tiap gelas susu.
Akhir program.

Masukkan jumlah donut:
12
Masukkan jumlah gelas susu:
0
12 donut, dan tidak ada susu!
Pergi beli susu!.
Akhir program.

4.       Tulislah sebuah program C++ untuk mendemonstrasikan penangkapan beberapa eksepsi.
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
//penangkapanBeberapaEksepsi.cpp
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

class AngkaNegatif
{
    public:
        AngkaNegatif();
        AngkaNegatif(string antar_daku_ke_blok_catch);
        string baca_pesan();

    private:
        string pesan;
};

class PembagianNol
{};

int main()
{
    int bus, penumpang;
    double busPerPenumpang;

    try
    {
        cout << "Masukkan jumlah bus:\n";
        cin >> bus;

        if (bus < 0)
            throw AngkaNegatif("Bus, tidak riil.");

        cout << "Masukkan jumlah penumpang: \n";
        cin >> penumpang;

        if (penumpang < 0)
            throw AngkaNegatif("Penumpang, tidak riil.");

        if (penumpang != 0)
            busPerPenumpang = bus/static_cast<double>(penumpang);

        else
            throw PembagianNol();

        cout << "Setiap bus memuat sejumlah "
             << busPerPenumpang << " penumpang.\n";
    }

    catch(AngkaNegatif e)
    {
        cout << "Tidak bisa memiliki nilai negatif pada "
        << e.baca_pesan() << endl;
    }

    catch(PembagianNol)
    {
        cout << "Kirim pertolongan.\n";
    }

    cout << "Akhir program.\n";

    getch();
    return 0;
 }

AngkaNegatif::AngkaNegatif()
{}

AngkaNegatif::AngkaNegatif(string antar_daku_ke_blok_catch)
: pesan(antar_daku_ke_blok_catch)
{}

string AngkaNegatif::baca_pesan()
{
    return pesan;
}

Masukkan jumlah bus:
12
Masukkan jumlah penumpang:
120
Setiap bus memuat sejumlah 10 penumpang.
Akhir program.

Masukkan jumlah bus:
-1
Tidak bisa memiliki nilai negatif pada Bus, tidak riil.
Akhir program.

Masukkan jumlah bus:
12
Masukkan jumlah penumpang:
-5
Tidak bisa memiliki nilai negatif pada Penumpang, tidak riil.
Akhir program.

5.       Tulislah sebuah program C++ untuk mendemonstrasikan sebuah eksepsi di dalam suatu fungsi.
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
//eksepsiDalamFungsi.cpp
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;

class PembagianNol
{};

double pembagian_aman(int atas, int bawah) throw (PembagianNol);

int main()
{
    int pembilang;
    int penyebut;
    double hasilBagi;

    cout << "Masukkan pembilang:\n";
    cin >> pembilang;
    cout << "Masukkan penyebut:\n";
    cin >> penyebut;

    try
    {
        hasilBagi = pembagian_aman(pembilang, penyebut);
    }

    catch(PembagianNol)
    {
        cout << "Error: Pembagian nol!\n"
             << "Program dibatalkan.\n";
        exit(0);
    }

    cout << pembilang << "/" << penyebut
         << " = " << hasilBagi << endl;

    cout << "Akhir program.\n";
    getch();
    return 0;
 }

double pembagian_aman(int atas, int bawah) throw (PembagianNol)
{
    if (bawah == 0)
        throw PembagianNol();

    return atas/static_cast<double>(bawah);
}


Masukkan pembilang:
5
Masukkan penyebut:
20
5/20 = 0.25
Akhir program.

Masukkan pembilang:
12
Masukkan penyebut:
0
Error: Pembagian nol!
Program dibatalkan.


No comments:

Post a Comment