Monday, December 26, 2016

Bab 5. Soal & Penyelesaian C++


POINTER DAN REFERENSI





Soal & Penyelesaian
1.       Tulislah sebuah program C++ yang mendemonstrasikan penggunaan operator alamat &.
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
//OperatorAlamat.cpp
#include <iostream>
#include <conio.h>

int main()
{
    using namespace std;
    unsigned short shortVar=5;
    unsigned long longVar=65535;
    long sVar = -65535;

    cout << "shortVar:\t" << shortVar;
    cout << "\tAlamat dari shortVar:\t";
    cout << &shortVar << endl;

    cout << "longVar:\t" << longVar;
    cout << "\tAlamat dari longVar:\t" ;
    cout << &longVar << endl;

    cout << "sVar:\t\t" << sVar;
    cout << "\tAlamat dari sVar:\t" ;
    cout << &sVar << endl;

    getch();
    return 0;
}

shortVar:       5       Alamat dari shortVar:   0032F91C
longVar:        65535   Alamat dari longVar:    0032F910
sVar:           -65535  Alamat dari sVar:       0032F904

2.       Tulislah sebuah program C++ untuk mendemonstrasikan pointer dan variabel dinamis.
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
//pointerDanVariabelDinamis.cpp
#include <iostream>
#include <conio.h>
using namespace std;

int main( )
{
    int *p1, *p2;

    p1 = new int;
    *p1 = 42;
    p2 = p1;

    cout << "*p1 == " << *p1 << endl;
    cout << "*p2 == " << *p2 << endl;

    *p2 = 53;

    cout << "*p1 == " << *p1 << endl;
    cout << "*p2 == " << *p2 << endl;

    p1 = new int;
    *p1 = 88;

    cout << "*p1 == " << *p1 << endl;
    cout << "*p2 == " << *p2 << endl;

    cout << "Semoga Anda mengerti contoh ini!\n";

    getch();
    return 0;
}

*p1 == 42
*p2 == 42
*p1 == 53
*p2 == 53
*p1 == 88
*p2 == 53

Semoga Anda mengerti contoh ini!

Penjelasan dari contoh ini diberikan secara visual sebagai berikut:



3.       Tulislah sebuah program C++ untuk mendemonstrasikan pemakaian pointer dalam memanipulasi data.
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
//pointerManipulasiData.cpp
#include <iostream>
#include <conio.h>

typedef unsigned short int USHORT;

int main()
{
    using namespace std;

    USHORT umurKu; // sebuah variable
    USHORT * pUmur = 0; // sebuah pointer

    umurKu = 5;

    cout << "umurKu: " << umurKu << endl;
    pUmur = &umurKu; // menugaskan alamat dari umurKu kepada pUmur
    cout << "*pUmur: " << *pUmur << endl << endl;

    cout << "Menetapkan *pUmur = 7... " << endl;
    *pUmur = 7; // menetapkan umurKu menjadi 7

    cout << "*pUmur: " << *pUmur << endl;
    cout << "umurKu: " << umurKu << endl << endl;

    cout << "Menetapkan umurKu = 9... " << endl;
    umurKu = 9;

    cout << "umurKu: " << umurKu << endl;
    cout << "*pUmur: " << *pUmur << endl;

    getch();
    return 0;
}

umurKu: 5
*pUmur: 5

Menetapkan *pUmur = 7...
*pUmur: 7
umurKu: 7

Menetapkan umurKu = 9...
umurKu: 9
*pUmur: 9

4.       Tulislah sebuah program C++ untuk mengetahui apa yang tersimpan dalam sebuah pointer.
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
//isiPointer.cpp
#include <iostream>
#include <conio.h>

int main()
{
    using namespace std;

    unsigned short int umurKu = 5, umurMu = 10;

    // sebuah pointer
    unsigned short int * pUmur = &umurKu;

    cout << "umurKu:\t" << umurKu
         << "\t\tumurMu:\t" << umurMu << endl;

    cout << "&umurKu:\t" << &umurKu
         << "\t&umurMu:\t" << &umurMu << endl;

    cout << "pUmur:\t" << pUmur << endl;
    cout << "*pUmur:\t" << *pUmur << endl;

    cout << "\nMenugaskan-ulang: pUmur = &umurMu..." << endl << endl;
    pUmur = &umurMu; // menugaskan-ulang pointer

    cout << "umurKu:\t" << umurKu <<
            "\t\tumurMu:\t" << umurMu << endl;

    cout << "&umurKu:\t" << &umurKu
         << "\t&umurMu:\t" << &umurMu << endl;

    cout << "pUmur:\t" << pUmur << endl;
    cout << "*pUmur:\t" << *pUmur << endl;

    cout << "\n&pUmur:\t" << &pUmur << endl;

    getch();
    return 0;
}

umurKu: 5               umurMu: 10
&umurKu:004DFB18        &umurMu:004DFB0C
pUmur:  004DFB18
*pUmur: 5

Menugaskan-ulang: pUmur = &umurMu...

umurKu: 5               umurMu: 10
&umurKu:004DFB18        &umurMu:004DFB0C
pUmur:  004DFB0C
*pUmur: 10

&pUmur: 004DFB00

5.       Demonstrasikanlah pengalokasian, penggunaan, dan penghapusan sebuah pointer.
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
//alokasiPointer.cpp
//mengalokasikan dan menghapus sebuah pointer
#include <iostream>
#include <conio.h>

int main()
{
    using namespace std;
    int variabelLokal = 5;
    int * pLokal= &variabelLokal;
    int * pHeap = new int;
    *pHeap = 7;

    cout << "variabelLokal: " << variabelLokal << endl;
    cout << "*pLokal: " << *pLokal << endl;
    cout << "*pHeap: " << *pHeap << endl;

    delete pHeap;

    pHeap = new int;
    *pHeap = 9;
    cout << "*pHeap: " << *pHeap << endl;
    delete pHeap;

    getch();
    return 0;
}

variabelLokal: 5
*pLokal: 5
*pHeap: 7
*pHeap: 9

6.       Demonstrasikanlah penciptaan dan penghapus objek menggunakan new dan delete.
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
//newDanDelete.cpp
#include <iostream>
#include <conio.h>

using namespace std;

class KucingSederhana
{
public:
    KucingSederhana();
    ~KucingSederhana();

private:
    int umurNya;
};

KucingSederhana::KucingSederhana()
{
    cout << "Konstruktor dipanggil. " << endl;
    umurNya = 1;
}

KucingSederhana::~KucingSederhana()
{
    cout << "Destruktor dipanggil. " << endl;
}

int main()
{
    cout << "KucingSederhana Meonk... " << endl;
    KucingSederhana Meonk;

    cout << "KucingSederhana *pKucing = new KucingSederhana..." << endl;
    KucingSederhana *pKucing = new KucingSederhana;

    cout << "delete pKucing... " << endl;
    delete pKucing;

    cout << "Keluar dan biarkan Meonk pergi... " << endl;

    getch();
    return 0;
}

KucingSederhana Meonk...
Konstruktor dipanggil.
KucingSederhana *pKucing = new KucingSederhana...
Konstruktor dipanggil.
delete pKucing...
Destruktor dipanggil.
Keluar dan biarkan Meonk pergi...

7.       Demonstrasikanlah operator -> untuk mengakses data anggota dari sebuah objek.
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
//operatorAksesAnggota.cpp
#include <iostream>
#include <conio.h>

class KucingSederhana
{
public:
    KucingSederhana() {umurNya = 2; }
    ~KucingSederhana() {}
    int GetUmur() const { return umurNya; }
    void SetUmur(int umur) { umurNya = umur; }

private:
    int umurNya;
};

int main()
{
    using namespace std;
    KucingSederhana * Meonk = new KucingSederhana;
    cout << "Meonk berumur " << Meonk->GetUmur() << " tahun " << endl;

    Meonk->SetUmur(5);
    cout << "Meonk berumur " << Meonk->GetUmur() << " tahun " << endl;
    delete Meonk;

    getch();
    return 0;
}

Meonk berumur 2 tahun
Meonk berumur 5 tahun

8.       Demonstrasikanlah operator -> untuk menciptakan data anggota dari sebuah objek.
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
//operatorCiptaAnggota.cpp
#include <iostream>
#include <conio.h>

class KucingSederhana
{
public:
    KucingSederhana();
    ~KucingSederhana();
    int GetUmur() const { return *umurNya; }
    void SetUmur(int umur) { *umurNya = umur; }
    int GetBerat() const { return *beratNya; }
    void setBerat (int berat) { *beratNya = berat; }

private:
    int * umurNya;
    int * beratNya;
};

KucingSederhana::KucingSederhana()
{
    umurNya = new int(2);
    beratNya = new int(5);
}

KucingSederhana::~KucingSederhana()
{
    delete umurNya;
    delete beratNya;
}

int main()
{
    using namespace std;
    KucingSederhana * Meonk = new KucingSederhana;
    cout << "Meonk berumur " << Meonk->GetUmur() << " tahun " << endl;

    Meonk->SetUmur(5);
    cout << "Meonk berumur " << Meonk->GetUmur() << " tahun " << endl;
    delete Meonk;

    getch();
    return 0;
}

Meonk berumur 2 tahun
Meonk berumur 5 tahun

9.       Demonstrasikanlah penggunaan pointer this dalam sebuah program C++.
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
//pointerThis.cpp
#include <iostream>
#include <conio.h>

class PersegiPanjang
{
public:
    PersegiPanjang();
    ~PersegiPanjang();

    void SetPanjang(int panjang)
    { this->panjangNya = panjang; }

    int GetPanjang() const
    { return this->panjangNya; }

    void SetLebar(int lebar)
    { lebarNya = lebar; }

    int GetLebar() const
    { return lebarNya; }

private:
    int panjangNya;
    int lebarNya;
};

PersegiPanjang::PersegiPanjang()
{
    lebarNya = 5;
    panjangNya = 10;
}

PersegiPanjang::~PersegiPanjang()
{}

int main()
{
    using namespace std;
    PersegiPanjang persegiPanjang;

    cout << "persegiPanjang berukuran " << persegiPanjang.GetPanjang()
         << " meter panjang." << endl;

    cout << "persegiPanjang berukuran " << persegiPanjang.GetLebar()
         << " meter lebar." << endl;

    persegiPanjang.SetPanjang(20);
    persegiPanjang.SetLebar(10);

    cout << "persegiPanjang berukuran " << persegiPanjang.GetPanjang()
         << " meter panjang." << endl;
    cout << "persegiPanjang berukuran " << persegiPanjang.GetLebar()
         << " meter lebar. " << endl;

    getch();
    return 0;
}

persegiPanjang berukuran 10 meter panjang.
persegiPanjang berukuran 5 meter lebar.
persegiPanjang berukuran 20 meter panjang.
persegiPanjang berukuran 10 meter lebar.

10.    Demonstrasikanlah penggunaan pointer const pada objek const dalam sebuah program C++.
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
//pointerConst.cpp
#include <iostream>
#include <conio.h>
using namespace std;

class PersegiPanjang
{
public:
    PersegiPanjang();
    ~PersegiPanjang();

    void SetPanjang(int panjang)
    { this->panjangNya = panjang; }

    int GetPanjang() const
    { return this->panjangNya; }

    void SetLebar(int lebar)
    { lebarNya = lebar; }

    int GetLebar() const
    { return lebarNya; }

private:
    int panjangNya;
    int lebarNya;
};

PersegiPanjang::PersegiPanjang()
{
    lebarNya = 5;
    panjangNya = 10;
}

PersegiPanjang::~PersegiPanjang()
{}

int main()
{
   
    PersegiPanjang* pPersegiPanjang = new PersegiPanjang;
    const PersegiPanjang * pPersegiConst = new PersegiPanjang;
    PersegiPanjang * const pPtrConst = new PersegiPanjang;

    cout << "Lebar pPersegiPanjang: " << pPersegiPanjang->GetLebar()
         << " meter" << endl;
    cout << "Lebar pPersegiConst: " << pPersegiConst->GetLebar()
         << " meter" << endl;
    cout << "Lebar pPtrConst: " << pPtrConst->GetLebar()
         << " meter" << endl;

    pPersegiPanjang->SetLebar(10);
    // pPersegiConst->SetWidth(10);
    pPtrConst->SetLebar(10);

    cout << "Lebar pPersegiPanjang: " << pPersegiPanjang->GetLebar()
         << " meter\n";
    cout << "Lebar pPersegiConst: " << pPersegiConst->GetLebar()
         << " meter\n";
    cout << "Lebar pPtrConst: " << pPtrConst->GetLebar()
         << " meter\n";
   
    getch();
    return 0;
}

Lebar pPersegiPanjang: 5 meter
Lebar pPersegiConst: 5 meter
Lebar pPtrConst: 5 meter
Lebar pPersegiPanjang: 10 meter
Lebar pPersegiConst: 5 meter
Lebar pPtrConst: 10 meter

11.    Demonstrasikanlah penciptaan dan penggunaan referensi dalam sebuah program C++.
Penyelesaian:

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

int main()
{
    using namespace std;
    int intSatu;
    int &rSuatuRef = intSatu;

    intSatu = 5;
    cout << "intSatu: " << intSatu << endl;
    cout << "rSuatuRef: " << rSuatuRef << endl;

    rSuatuRef = 7;
    cout << "intSatu: " << intSatu << endl;
    cout << "rSuatuRef: " << rSuatuRef << endl;

    getch();
    return 0;
}

intSatu: 5
rSuatuRef: 5
intSatu: 7
rSuatuRef: 7

12.    Demonstrasikanlah penggunaan operator alamat & pada referensi.
Penyelesaian:

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

int main()
{
    using namespace std;
    int intSatu;
    int &rSuatuRef = intSatu;

    intSatu = 5;
    cout << "intSatu: " << intSatu << endl;
    cout << "rSuatuRef: " << rSuatuRef << endl;

    cout << "&intSatu: " << &intSatu << endl;
    cout << "&rSuatuRef: " << &rSuatuRef << endl;

    getch();
    return 0;
}

intSatu: 5
rSuatuRef: 5
&intSatu: 003AF8D8
&rSuatuRef: 003AF8D8

13.    Variabel referensi tidak dapat ditugaskan-ulang. Variabel referensi merupakan nama alias bagi variabel targetnya. Demonstrasikan hal ini dalam sebuah program C++.
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
//PenugasanUlangRef.cpp
#include <iostream>
#include <conio.h>

int main()
{
    using namespace std;
    int intSatu;
    int &rSuatuRef = intSatu;

    intSatu = 5;
    cout << "intSatu: " << intSatu << endl;
    cout << "rSuatuRef: " << rSuatuRef << endl;
    cout << "&intSatu: " << &intSatu << endl;
    cout << "&rSuatuRef: " << &rSuatuRef << endl;

    int intDua = 8;
    rSuatuRef = intDua;
    cout << "\nintSatu: " << intSatu << endl;
    cout << "intDua: " << intDua << endl;
    cout << "rSuatuRef: " << rSuatuRef << endl;
    cout << "&intSatu: " << &intSatu << endl;
    cout << "&intDua: " << &intDua << endl;
    cout << "&rSuatuRef: " << &rSuatuRef << endl;

    getch();
    return 0;
}

intSatu: 5
rSuatuRef: 5
&intSatu: 0019FC94
&rSuatuRef: 0019FC94

intSatu: 8
intDua: 8
rSuatuRef: 8
&intSatu: 0019FC94
&intDua: 0019FC7C
&rSuatuRef: 0019FC94

14.    Demonstrasikanlah bagaimana mereferensi sebuah objek dalam program C++.
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
//ReferensiObjek.cpp
#include <iostream>
#include <conio.h>

class KucingSederhana
{
public:
    KucingSederhana(int umur, int berat);
    ~KucingSederhana(){}
    int GetUmur() const { return umurNya; }
    int GetBerat() const { return beratNya; }

private:
    int umurNya;
    int beratNya;
};

KucingSederhana::KucingSederhana(int umur, int berat)
{
    umurNya = umur;
    beratNya = berat;
}

int main()
{
    KucingSederhana Meonk(5,8);
    KucingSederhana & rKucing = Meonk;

    std::cout << "Meonk berusia: ";
    std::cout << Meonk.GetUmur() << " tahun." << std::endl;

    std::cout << "Dan Meonk memiliki berat: ";
    std::cout << rKucing.GetBerat() << " kg." << std::endl;

    getch();
    return 0;
}

Meonk berusia: 5 tahun.
Dan Meonk memiliki berat: 8 kg.

15.    Demonstrasikanlah pelewatan dengan nilai dalam program C++.
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
//pelewatanDenganNilai.cpp
#include <iostream>
#include <conio.h>

using namespace std;
void tukar(int x, int y);

int main()
{
    int x = 5, y = 10;

    cout << "Main. Sebelum tukar, x: " << x << " y: " << y << endl;
   
    tukar(x,y);
    cout << "Main. Sesudah tukar, x: " << x << " y: " << y << endl;

    getch();
    return 0;
}

void tukar (int x, int y)
{
    int temp;

    cout << "Tukar. Sebelum tukar, x: " << x << " y: " << y << endl;

    temp = x;
    x = y;
    y = temp;

    cout << "Tukar. Sesudah tukar, x: " << x << " y: " << y << endl;
}

Main. Sebelum tukar, x: 5 y: 10
Tukar. Sebelum tukar, x: 5 y: 10
Tukar. Sesudah tukar, x: 10 y: 5
Main. Sesudah tukar, x: 5 y: 10

16.    Demonstrasikanlah pelewatan dengan referensi menggunakan pointer dalam program C++.
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
//pelewatanDenganReferensi.cpp
#include <iostream>
#include <conio.h>

using namespace std;
void tukar(int *x, int *y);

int main()
{
    int x = 5, y = 10;

    cout << "Main. Sebelum tukar, x: " << x << " y: " << y << endl;
   
    tukar(&x, &y);
    cout << "Main. Sesudah tukar, x: " << x << " y: " << y << endl;

    getch();
    return 0;
}

void tukar (int *px, int *py)
{
    int temp;

    cout << "Tukar. sebelum tukar, *px: " << *px <<
            " *py: " << *py << endl;

    temp = *px;
    *px = *py;
    *py = temp;

    cout << "Tukar. Sesudah tukar, *px: " << *px <<
            " *py: " << *py << endl;
}

Main. Sebelum tukar, x: 5 y: 10
Tukar. sebelum tukar, *px: 5 *py: 10
Tukar. Sesudah tukar, *px: 10 *py: 5
Main. Sesudah tukar, x: 10 y: 5

17.    Tulis-ulanglah program pada soal nomor 16 menggunakan referensi.
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
//pelewatanDenganReferensiSaja.cpp
#include <iostream>
#include <conio.h>

using namespace std;
void tukar(int &x, int &y);

int main()
{
    int x = 5, y = 10;

    cout << "Main. Sebelum tukar, x: " << x << " y: " << y << endl;
   
    tukar(x, y);
    cout << "Main. Sesudah tukar, x: " << x << " y: " << y << endl;

    getch();
    return 0;
}

void tukar (int &rx, int &ry)
{
    int temp;

    cout << "Tukar. sebelum tukar, rx: " << rx <<
            " ry: " << ry << endl;

    temp = rx;
    rx = ry;
    ry = temp;

    cout << "Tukar. Sesudah tukar, rx: " << rx <<
            " ry: " << ry << endl;
}

Main. Sebelum tukar, x: 5 y: 10
Tukar. sebelum tukar, rx: 5 ry: 10
Tukar. Sesudah tukar, rx: 10 ry: 5
Main. Sesudah tukar, x: 10 y: 5

18.    Demonstrasikanlah bagaimana menghasilkan nilai balik menggunakan pointer.
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
//NilaiBalikPointer.cpp
#include <iostream>
#include <conio.h>

using namespace std;
short Faktor(int n, int* pKuadrat, int* pKubik);

int main()
{
    int angka, kuadrat, kubik;
    short error;

    cout << "Masukkan sebuah angka (0 - 20): ";
    cin >> angka;

    error = Faktor(angka, &kuadrat, &kubik);

    if (!error)
    {
        cout << "angka: " << angka << endl;
        cout << "kuadrat: " << kuadrat << endl;
        cout << "kubik: " << kubik << endl;
    }
    else
        cout << "Error ditemukan!!" << endl;

    getch(); 
    return 0;
 }

short Faktor(int n, int *pKuadrat, int *pKubik)
{
    short Nilai = 0;
    if (n > 20)
        Nilai = 1;
    else
    {
        *pKuadrat = n*n;
        *pKubik = n*n*n;
        Nilai = 0;
    }

    return Nilai;
}

Masukkan sebuah angka (0 - 20): 17
angka: 17
kuadrat: 289
kubik: 4913

19.    Demonstrasikanlah bagaimana menghasilkan nilai balik menggunakan referensi.
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
//NilaiBalikReferensi.cpp
#include <iostream>
#include <conio.h>

using namespace std;

enum KODE_ERROR { SUKSES, ERROR };

KODE_ERROR Faktor(int, int&, int&);

int main()
{
    int angka, kuadrat, kubik;
    KODE_ERROR hasil;

    cout << "Masukkan sebuah angka (0 - 20): ";
    cin >> angka;

    hasil = Faktor(angka, kuadrat, kubik);

    if (hasil == SUKSES)
    {
        cout << "angka: " << angka << endl;
        cout << "kuadrat: " << kuadrat << endl;
        cout << "kubik: " << kubik << endl;
    }
    else
        cout << "Error ditemukan!!" << endl;

    getch();
    return 0;
 }

KODE_ERROR Faktor(int n, int &rKuadrat, int &rKubik)
{
    if (n > 20)
        return ERROR;
    else
    {
        rKuadrat = n*n;
        rKubik = n*n*n;
        return SUKSES;
    }
}

Masukkan sebuah angka (0 - 20): 16
angka: 16
kuadrat: 256
kubik: 4096

20.    Demonstrasikanlah pelewatan objek dengan referensi.
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
//PelewatanObjekDenganReferensi.cpp
#include <iostream>
#include <conio.h>

using namespace std;

class KucingSederhana
{
public:
    KucingSederhana (); // konstruktor
    KucingSederhana(KucingSederhana&); // konstruktor penyalin
    ~KucingSederhana(); // destruktor
};

KucingSederhana::KucingSederhana()
{
    cout << "Konstruktor KucingSederhana..." << endl;
}

KucingSederhana::KucingSederhana(KucingSederhana&)
{
    cout << "Konstruktor penyalin KucingSederhana..." << endl;
}

KucingSederhana::~KucingSederhana()
{
    cout << "Destruktor KucingSederhana..." << endl;
}

KucingSederhana FungsiSatu (KucingSederhana aKucing);
KucingSederhana* FungsiDua (KucingSederhana *aKucing);

int main()
{
    cout << "Menciptakan sebuah kucing..." << endl;
    KucingSederhana Meonk;

    cout << "Memanggil FungsiSatu..." << endl;
    FungsiSatu(Meonk);

    cout << "Memanggil FungsiDua..." << endl;
    FungsiDua(&Meonk);

    getch();
    return 0;
}

// FungsiSatu,pelewatan dengan nilai
KucingSederhana FungsiSatu(KucingSederhana aKucing)
{
    cout << "FungsiSatu. Memberikan nilai balik... " << endl;
    return aKucing;
}

// FungsiDua, pelewatan dengan referensi
KucingSederhana* FungsiDua (KucingSederhana *aKucing)
{
    cout << "FungsiDua. Memberikan nilai balik... " << endl;
    return aKucing;
}

Menciptakan sebuah kucing...
Konstruktor KucingSederhana...
Memanggil FungsiSatu...
Konstruktor penyalin KucingSederhana...
FungsiSatu. Memberikan nilai balik...
Konstruktor penyalin KucingSederhana...
Destruktor KucingSederhana...
Destruktor KucingSederhana...
Memanggil FungsiDua...
FungsiDua. Memberikan nilai balik...

21.    Demonstrasikanlah bagaimana melakukan pelewatan sebuah pointer kepada suatu objek konstan.
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
//PelewatanPointerKpdObjekKonstan.cpp
#include <iostream>
#include <conio.h>

using namespace std;

class KucingSederhana
{
public:
    KucingSederhana (); // konstruktor
    KucingSederhana(KucingSederhana&); // konstruktor penyalin
    ~KucingSederhana(); // destruktor

    int GetUmur() const { return umurNya; }
    void SetUmur(int umur) { umurNya = umur; }

private:
    int umurNya;
};

KucingSederhana::KucingSederhana()
{
    cout << "Konstruktor KucingSederhana..." << endl;
    umurNya = 1;
}

KucingSederhana::KucingSederhana(KucingSederhana&)
{
    cout << "Konstruktor penyalin KucingSederhana..." << endl;
}

KucingSederhana::~KucingSederhana()
{
    cout << "Destruktor KucingSederhana..." << endl;
}

const KucingSederhana * const FungsiDua
(const KucingSederhana * const aKucing);

int main()
{
    cout << "Membuat sebuah kucing..." << endl;
    KucingSederhana Meonk;
    cout << "Meonk berumur " ;
    cout << Meonk.GetUmur();
    cout << " tahun" << endl;

    int umur = 5;
    Meonk.SetUmur(umur);
    cout << "Meonk berumur " ;
    cout << Meonk.GetUmur();
    cout << " tahun" << endl;

    cout << "Memanggil FungsiDua..." << endl;
    FungsiDua(&Meonk);
    cout << "Meonk berumur " ;
    cout << Meonk.GetUmur();
    cout << " tahun" << endl;

    getch();
    return 0;
}

// FungsiDua, melewatkan sebuah pointer konstan
const KucingSederhana * const FungsiDua
(const KucingSederhana * const aKucing)
{
    cout << "FungsiDua. Menghasilkan nilai balik..." << endl;
    cout << "Meonk sekarang berumur " << aKucing->GetUmur();
    cout << " tahun " << endl;
   
    return aKucing;
}

Membuat sebuah kucing...
Konstruktor KucingSederhana...
Meonk berumur 1 tahun
Meonk berumur 5 tahun
Memanggil FungsiDua...
FungsiDua. Menghasilkan nilai balik...
Meonk sekarang berumur 5 tahun
Meonk berumur 5 tahun

22.    Demonstrasikanlah bagaimana melakukan pelewatan sebuah referensi kepada suatu objek konstan.
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
//PelewatanReferensiKpdObjek.cpp
#include <iostream>
#include <conio.h>

using namespace std;

class KucingSederhana
{
public:
    KucingSederhana (); // konstruktor
    KucingSederhana(KucingSederhana&); // konstruktor penyalin
    ~KucingSederhana(); // destruktor

    int GetUmur() const { return umurNya; }
    void SetUmur(int umur) { umurNya = umur; }

private:
    int umurNya;
};

KucingSederhana::KucingSederhana()
{
    cout << "Konstruktor KucingSederhana..." << endl;
    umurNya = 1;
}

KucingSederhana::KucingSederhana(KucingSederhana&)
{
    cout << "Konstruktor penyalin KucingSederhana..." << endl;
}

KucingSederhana::~KucingSederhana()
{
    cout << "Destruktor KucingSederhana..." << endl;
}

const KucingSederhana & FungsiDua (const KucingSederhana & aKucing);

int main()
{
    cout << "Membuat sebuah kucing..." << endl;
    KucingSederhana Meonk;
    cout << "Meonk berumur " ;
    cout << Meonk.GetUmur();
    cout << " tahun" << endl;

    int umur = 5;
    Meonk.SetUmur(umur);
    cout << "Meonk berumur " ;
    cout << Meonk.GetUmur();
    cout << " tahun" << endl;

    cout << "Memanggil FungsiDua..." << endl;
    FungsiDua(Meonk);
    cout << "Meonk berumur " ;
    cout << Meonk.GetUmur();
    cout << " tahun" << endl;

    getch();
    return 0;
}

// FungsiDua, melewatkan sebuah pointer konstan
const KucingSederhana & FungsiDua (const KucingSederhana & aKucing)
{
    cout << "FungsiDua. Menghasilkan nilai balik..." << endl;
    cout << "Meonk sekarang berumur " << aKucing.GetUmur();
    cout << " tahun " << endl;
   
    return aKucing;
}

Membuat sebuah kucing...
Konstruktor KucingSederhana...
Meonk berumur 1 tahun
Meonk berumur 5 tahun
Memanggil FungsiDua...
FungsiDua. Menghasilkan nilai balik...
Meonk sekarang berumur 5 tahun
Meonk berumur 5 tahun

23.    Tulislah sebuah program C++ yang mendemonstrasikan bahwa variabel array merupakan variabel pointer.
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
//arrayMerupakanPointer.cpp
#include <iostream>
#include <conio.h>
using namespace std;

typedef int* IntPtr;

int main( )
{
    IntPtr p;
    int a[10];
    int indeks;

    for (indeks = 0; indeks < 10; indeks++)
        a[indeks] = indeks;

    p = a;

    for (indeks = 0; indeks < 10; indeks++)
        cout << p[indeks] << " ";
    cout << endl;

    for (indeks = 0; indeks < 10; indeks++)
        p[indeks] = p[indeks] + 1;

    for (indeks = 0; indeks < 10; indeks++)
        cout << a[indeks] << " ";
    cout << endl;

    getch();
    return 0;
}

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10

24.    Tulislah sebuah program C++ untuk mendemonstrasikan array dinamis.
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
//arrayDinamis.cpp
#include <iostream>
#include <cstdlib>
#include <cstddef>
#include <conio.h>

typedef int* IntArrayPtr;

void isi_array(int a[], int ukuran);

int main( )
{
    using namespace std;
    cout << "Program ini mengisi array melalui keyboard.\n";

    int ukuran_array;
    cout << "Berapa besar ukuran array?: ";
    cin >> ukuran_array;

    IntArrayPtr a;
    a = new int[ukuran_array];

    isi_array(a, ukuran_array);

    cout << "Elemen-elemen array adalah: \n";
    for (int indeks = 0; indeks < ukuran_array; indeks++)
        cout << a[indeks] << " ";
    cout << endl;

    delete [] a;

    getch();
    return 0;
}

void isi_array(int a[], int ukuran)
{
    using namespace std;
    cout << "Masukkan sebanyak " << ukuran << " buah integer.\n";
    for (int indeks = 0; indeks < ukuran; indeks++)
        cin >> a[indeks];
}

Program ini mengisi array melalui keyboard.
Berapa besar ukuran array?: 5
Masukkan sebanyak 5 buah integer.
12 34 54 43 32
Elemen-elemen array adalah:
12 34 54 43 32

25.    Tulislah sebuah program C++ untuk mendemonstrasikan array dinamis dua-dimensi.
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
//arrayDinamisDuaDimensi.cpp
#include <iostream>
#include <conio.h>
using namespace std;

typedef int* IntArrayPtr;

int main( )
{
    int d1, d2;
    cout << "Masukkan dimensi baris dan kolom dari array:\n";
    cin >> d1 >> d2;

    IntArrayPtr *m = new IntArrayPtr[d1];

    int i, j;
    for (i = 0; i < d1; i++)
        m[i] = new int[d2];
    //m sekarang merupakan array berukuran d1 kali d2.

    cout << "Masukkan sejumlah " << d1 << " baris dengan  "
         << d2 << " buah integer pada tiap barisnya:\n";
    for (i = 0; i < d1; i++)
        for (j = 0; j < d2; j++)
            cin >> m[i][j];

    cout << "Array dua-dimensi:\n";
    for (i = 0; i < d1; i++)
    {
        for (j = 0; j < d2; j++)
            cout << m[i][j] << " ";
        cout << endl;
    }

    for (i = 0; i < d1; i++)
        delete[] m[i];
    delete[] m;

    getch();
    return 0;
}


Masukkan dimensi baris dan kolom dari array:
3 4
Masukkan sejumlah 3 baris dengan  4 buah integer pada tiap barisnya:
32 34 33 32
43 45 65 76
55 76 87 98

Array dua-dimensi:
32 34 33 32
43 45 65 76
55 76 87 98


No comments:

Post a Comment