Monday, December 26, 2016

Bab 4. Soal & Penyelesaian C++


STRING & VEKTOR





Soal & Penyelesaian
1.       Konversilah string dalam bahasa C menjadi integer.
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
//stringCKeInteger.cpp
#include <iostream>
#include <cstdlib>
#include <cctype>
#include <conio.h>

void baca_dan_bersih(int& n);
//Membaca sebaris masukan. Membuang semua simbol kecuali dijit.
//Mengkonversi string C menjadi integer dan
//menetapkan n sama dengan nilai dari integer tersebut.

void baris_baru( );
//Membuang semua masukan yang tersisi pada baris masukan.
//Juga membuang '\n' di akhir baris.

int main( )
{
    using namespace std;
    int n;
    char jwb;

    do
    {
        cout << "Masukkan sebuah integer dan tekan ENTER: ";
        baca_dan_bersih(n);

        cout << "String tersebut dikonversi menjadi integer " << n << endl;
        cout << "Lagi? (y/t): ";
        cin >> jwb;
        baris_baru( );
    } while ( (jwb != 't') && (jwb != 'T') );
   
       getch();
       return 0;
}

void baca_dan_bersih(int& n)
{
    using namespace std;
    const int UKURAN_ARRAY = 6;
    char string_dijit[UKURAN_ARRAY];

    char brktnya;
    cin.get(brktnya);
    int indeks = 0;

       while (brktnya != '\n')
    {
        if ( (isdigit(brktnya)) && (indeks < UKURAN_ARRAY - 1) )
        {
            string_dijit[indeks] = brktnya;
            indeks++;
        }
        cin.get(brktnya);
    }
    string_dijit[indeks] = '\0';
    n = atoi(string_dijit);
}

void baris_baru( )
{
    using namespace std;
    char simbol;
  
    do
    {
        cin.get(simbol);
    } while (simbol != '\n');
}

Masukkan sebuah integer dan tekan ENTER: Saya suka 100
String tersebut dikonversi menjadi integer 100

Lagi? (y/t): y
Masukkan sebuah integer dan tekan ENTER: Lima kali enam sama dengan 30
String tersebut dikonversi menjadi integer 30

Lagi? (y/t): t

2.       Tulislah sebuah program C++ untuk merealisasikan fungsi pembaca masukan yang handal.
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
//FungsiPembacaMasukanHandal.cpp
#include <iostream>
#include <cstdlib>
#include <cctype>
#include <conio.h>

void baca_dan_bersih(int& n);
//Membaca sebaris masukan. Membuang semua simbol kecuali dijit.
//Mengkonversi string C menjadi integer dan
//menetapkan n sama dengan nilai dari integer tersebut.

void baris_baru( );
//Membuang semua masukan yang tersisi pada baris masukan.
//Juga membuang '\n' di akhir baris.

void baca_int(int& angka_masukan);
//Memberikan angka_masukan sebuah nilai yang disetujui pengguna.

int main( )
{
    using namespace std;
    int angka_masukan;
    baca_int(angka_masukan);
    cout << "Nilai akhir yang dibaca = " << angka_masukan << endl;
   
    getch();
    return 0;
}

void baca_int(int& angka_masukan)
{
    using namespace std;
    char jwb;

    do
    {
        cout << "Masukkan angka masukan: ";
        baca_dan_bersih(angka_masukan);

        cout << "Anda memasukkan " << angka_masukan
             << " Apakah itu tepat? (y/t): ";

        cin >> jwb;
        baris_baru( );
    } while ((jwb != 'y') && (jwb != 'Y'));
}

void baca_dan_bersih(int& n)
{
    using namespace std;
    const int UKURAN_ARRAY = 6;
    char string_dijit[UKURAN_ARRAY];

    char brktnya;
    cin.get(brktnya);
    int indeks = 0;

    while (brktnya != '\n')
    {
        if ( (isdigit(brktnya)) && (indeks < UKURAN_ARRAY - 1) )
        {
            string_dijit[indeks] = brktnya;
            indeks++;
        }
        cin.get(brktnya);
    }
    string_dijit[indeks] = '\0';
    n = atoi(string_dijit);
}

void baris_baru( )
{
    using namespace std;
    char simbol;
  
    do
    {
        cin.get(simbol);
    } while (simbol != '\n');
}

Masukkan angka masukan: Rp. 57
Anda memasukkan 57 Apakah itu tepat? (y/t): t

Masukkan angka masukan: Rp. 75#%#^#&#
Anda memasukkan 75 Apakah itu tepat? (y/t): t

Masukkan angka masukan: &^77*(
Anda memasukkan 77 Apakah itu tepat? (y/t): t

Masukkan angka masukan: gsasak^&&76(*(*
Anda memasukkan 76 Apakah itu tepat? (y/t): y

Nilai akhir yang dibaca = 76

3.       Tulislah sebuah program C++ untuk mendemonstrasikan penggunaan kelas string.
Penyelesaian:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//DemonstrasiKelas_string.cpp
//Mendemonstrasik kelas string standar.
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

int main( )
{
    string frase;
    string sifat("goreng"), benda("bebek");
    string selamat = "Selamat makan!";

    frase = "Saya suka " + benda + " " + sifat + "!";

    cout << frase << endl
         << selamat << endl;

    getch();
    return 0;
}

Saya suka bebek goreng!
Selamat makan!

4.       Tulislah sebuah program C++ untuk memperjelas penggunaan kelas string.
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
//Demo_Kelas_string.cpp
//Mendemonstrasikan getline dan cin.get.
#include <iostream>
#include <string>
#include <conio.h>

void baris_baru( );

int main( )
{
    using namespace std;

    string nama_depan, nama_belakang, nama_rekaman;
    string motto = "Rekaman Anda adalah rekaman saya.";
    
    cout << "Masukkan nama depan dan nama belakang Anda:\n";
    cin >> nama_depan >> nama_belakang;

    baris_baru( );
    nama_rekaman = nama_belakang + ", " + nama_depan;

    cout << "Nama Anda dalam rekaman kami adalah: ";
    cout << nama_rekaman << endl;
    cout << "Motto kami adalah\n"
         << motto << endl;

    cout << "Silahkan usulkan motto yang lebih baik:\n";
    getline(cin, motto);

    cout << "Motto kami yang baru adalah:\n";
    cout << motto << endl;

    getch();
    return 0;
}

void baris_baru( )
{
    using namespace std;

    char char_brktnya;
    do
    {
        cin.get(char_brktnya);
    } while (char_brktnya != '\n');
}

Masukkan nama depan dan nama belakang Anda:
Rismon Sianipar

Nama Anda dalam rekaman kami adalah: Sianipar, Rismon
Motto kami adalah
Rekaman Anda adalah rekaman saya.

Silahkan usulkan motto yang lebih baik:
Rekaman Anda adalah rekaman semua orang.

Motto kami yang baru adalah:
Rekaman Anda adalah rekaman semua orang.

5.       Tulislah sebuah program C++ untuk mendemonstrasikan bahwa objek dari kelas string dapat berperilaku seperti array.
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
//objekString_Seperti_Array.cpp
//Mendemonstrasikan penggunaan objek string seperti array.
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

int main( )
{
    string nama_depan, nama_belakang;
    cout << "Masuk nama depan dan nama belakang Anda:\n";
    cin >> nama_depan >> nama_belakang;
    cout << "Nama belakang Anda dieja dengan:\n";

    int i;
    for (i = 0; i < nama_belakang.length( ); i++)
    {
        cout << nama_belakang[i] << " ";
        nama_belakang[i] = '-';
    }
    cout << endl;

    for (i = 0; i < nama_belakang.length( ); i++)
        cout << nama_belakang[i] << " "; 
      
    cout << endl;
    cout << "Selamat siang " << nama_depan << endl;

    getch();
    return 0;
}

Masuk nama depan dan nama belakang Anda:
Vivian Jozen

Nama belakang Anda dieja dengan:
J o z e n
- - - - -
Selamat siang Vivian

6.       Tulislah sebuah program C++ untuk menguji apakah sebuah string palindrome atau tidak menggunakan kelas string.
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
100
101
102
103
//program_uji_palindrome.cpp
//Menguji sifat palindrome dari sebuah string.
#include <iostream>
#include <string>
#include <cctype>
#include <conio.h>

using namespace std;

void tukar(char& v1, char& v2);
//Saling-menukar nilai dai v1 dan v2.

string balik(const string& s);
//Menghasilkan suatu salinan dari s dengan urutan karakter terbalik.

string hapus_tanda_baca(const string& s, const string& tanda_baca);
//Menghasilkan suatu salinan dari s dengan tanda baca dihapus.

string buat_huruf_kecil(const string& s);
//Menghasilkan sebuah salinan dari s dimana semua huruf besar
//diubah menjadi huruf kecil.

bool apa_palindrome(const string& s);
//Menghasilkan true jika s adalah sebuah palindrome, false jika tidak.

int main( )
{
    string str;
    cout << "Masukkan sebuah kandidat palindrome\n"
        << "diikuti dengan penekanan ENTER.\n";

       getline(cin, str);
    if (apa_palindrome(str))
        cout << "\"" << str + "\" adalah sebuah palindrome.";
    else
        cout << "\"" << str + "\" bukan sebuah palindrome.";

    cout << endl;

    getch();
    return 0;
}

void tukar(char& v1, char& v2)
{
    char temp = v1;
    v1 = v2;
    v2 = temp;
}

string balik(const string& s)
{
    int awal = 0;
    int akhir = s.length( );
    string temp(s);

    while (awal < akhir)
    {
        akhir--;
        tukar(temp[awal], temp[akhir]);
        awal++;
    }
    return temp;
}

string buat_huruf_kecil(const string& s)
{
    string temp(s);
    for (int i = 0; i < s.length(); i++)
        temp[i] = tolower(s[i]);
   
       return temp;
}

string hapus_tanda_baca(const string& s, const string& tanda_baca)
{
    string no_tanda_baca; //diinisialisasi dengan string kosong
    int s_length = s.length( );
    int tanda_baca_length = tanda_baca.length( );

    for (int i = 0; i < s_length; i++)
    {
        string a_char = s.substr(i,1); //string satu-karakter
        int lokasi = tanda_baca.find(a_char, 0);

        //Mencari lokasi dari karakter yang berurutan
        //dalam tanda_baca.
        if (lokasi < 0 || lokasi >= tanda_baca_length)
            no_tanda_baca = no_tanda_baca + a_char;
    }

       return no_tanda_baca;
}

bool apa_palindrome(const string& s)
{
    string tanda_baca(",;:.?!'\" "); //termasuk spasi
    string str(s);
    str = buat_huruf_kecil(str);
    string str_huruf_kecil = hapus_tanda_baca(str, tanda_baca);

    return (str_huruf_kecil == balik(str_huruf_kecil));
}

Masukkan sebuah kandidat palindrome
diikuti dengan penekanan ENTER.
Radar
"Radar" adalah sebuah palindrome.

Masukkan sebuah kandidat palindrome
diikuti dengan penekanan ENTER.
Saya
"Saya" bukan sebuah palindrome.

7.       Demonstrasikanlah penggunaan sebuah vector 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
//Menggunakan_Vector.cpp
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;

int main( )
{
    vector<int> v;
    cout << "Masukkan sebuah daftar integer positif.\n"
         << "Tempatkan sebuah integer negatif untuk mengakhiri.\n";

    int berikutnya;
    cin >> berikutnya;
    while (berikutnya > 0)
    {
        v.push_back(berikutnya);
        cout << berikutnya << " ditambahkan. ";
        cout << "v.size( ) = " << v.size( ) << endl;
        cin >> berikutnya;
    }

    cout << "Anda memasukkan:\n";
    for (unsigned int i = 0; i < v.size( ); i++)
        cout << v[i] << " ";
    cout << endl;

    getch();
    return 0;
}

Masukkan sebuah daftar integer positif.
Tempatkan sebuah integer negatif untuk mengakhiri.
35 327 43 32 54 65 76 86 63 4 2 75 4 -2
35 ditambahkan. v.size( ) = 1
327 ditambahkan. v.size( ) = 2
43 ditambahkan. v.size( ) = 3
32 ditambahkan. v.size( ) = 4
54 ditambahkan. v.size( ) = 5
65 ditambahkan. v.size( ) = 6
76 ditambahkan. v.size( ) = 7
86 ditambahkan. v.size( ) = 8
63 ditambahkan. v.size( ) = 9
4 ditambahkan. v.size( ) = 10
2 ditambahkan. v.size( ) = 11
75 ditambahkan. v.size( ) = 12
4 ditambahkan. v.size( ) = 13
Anda memasukkan:
35 327 43 32 54 65 76 86 63 4 2 75 4





No comments:

Post a Comment