PBO : TM 8 Class Strings

TM 08 : Class Strings

a. Desain class String. Klas ini mempunyai dua data anggota dengan level akses private, yaitu string aktual s yang disajikan dalam bentuk pointer char * s dan len untuk menyajikan panjang string s. Fungsi anggotanya, level akses public, adalah default constructor String(), constructor String (char*, unsigned), constructor String (const char*), copy constructor String (const String &) dan destructor ~String(). Dalam desain ini semua fungsi anggota harus berbentuk prototipe.

#include<iostream>

using namespace std;

class String{
private:
	char *s;
	unsigned int len;
public:
	String(){}
	String(char *, unsigned);
	String(const char*);
	String(const String&);
	~String(){}
};

b. Selanjutnya implementasikan definisi semua fungsi anggota di luar class String. Ingat jangan lupa gunakan scope resolution operator :: .

String :: String(){
	s="";
	len=0;
}

String :: String(char * s, unsigned int len){
	for(int i=0; is[i]=s[i];
		this->s[i]='';
	}
}

String :: String(const char* s){
	for(int i=0; is[i]=s[i];
		this->s[i]='';
	}
}

String :: String(const String& ss){
	for(int i=0; is[i]=ss.s[i];
		this->s[i]='';
	}
}

String :: ~String(){}

c. Terakhir, tulislah fungsi main() sebagai driver untuk menguji desain kamu.

int main(){
const char *ss = "Halo";
char *s = "Hai";
String w;
String x(s, strlen(s));
String *y;
String(z);
cin.get();
return 0;
}

I AM PROUD AS BINUSIAN

PBO : TM 7

Nama : Riyn Winesdyo W.
Kelas : 02PPT
NIM : 1701292866

Kuis dan TM 7
Soal Pilihan
01. Inheritance kerap kali dihubungkan dengan polymorphism. Istilah yang paling
tepat untuk menyatakan inheritance sebagai polymorphism adalah
a.trivial polymorphism b. universal polymorphism
c. pure polymorphism d. subtype polymorphism

02. Meskipun mendukung penggunaan multiple inheritance tetapi penggunaan fitur
ini tidak dianjurkan di C++. Opsi berikut yang dianjurkan sebagai penggantinya
adalah
a. composition b. template
c. polymorphism d. overloading function

03. Salah satu kerugian penggunaan inheritance di OOP adalah
a. independensi di antara class dalam hirarki
b. independensi di antara object dalam hirarki
c. dependensi di antara class dalam hirarki
d. dependensi di antara object dalam hirarki

04. Tipe inheritance yang dianjurkan untuk melakukan derivation adalah
a. private b. protected
c. public d. private, protected dan public

05. ADT dan inheritance mempunyai komponen yang sama tetapi hanya beda strukturnya.
Paralel di ADT, hirarki di inheritance. Karena itu sejumlah inheritance mempunyai
kelebihan dibandingkan dengan ADT. Kelebihan-kelebihan itu diantaranya adalah
adalah adanya fitur-fitur bedrikut ini
a. reuse-ability dan extend ability
b. extend ability dan overriding function
c. overriding function dan reuse-ability
d. reuseability, extend ability dan overriding function

Soal Uraian

1. Apa yang salah dalam penggalan definisi class berikut:
class Time {
public: // prototype fungsi
private: int h = 0;
int m = 0;
int s = 0;
}

• Data member tidak boleh diinisialisasi secara langsung, tetapi boleh di dalam member function atau di dalam default constructor.
• Tidak ada tanda ‘;’ (titik-koma) untuk menutup class.

2. Jika Rasional adalah class bilangan rasional (pecahan seperti 22/7), apa beda ketiga pernyataan berikut:
Rasional y(x);
Rasional y = x;
Rasional y; y = x;

• Rasional y(x) dan Rasional y=x memanggil copy constructor karena belum diinisialisasi
• Rasional y; y=x memanggil assignment operator karena y telah diinisialisasi sebelumnya

3. Uraikan mengapa constructor dan destructor tidak diwariskan di C++ meskipun mereka kita deklarasikan dengan level akses public atau protected. Uraikan juga mengapa fungsi friend tidak diwariskan di klas turunan. Selanjutnya, sebutkan pula sejumlah fitur lain di klas induk yang tidak diwariskan di klas turunan.
• Destructor tidak diwariskan di C++ karena hal tersebut bukan bagian interface dari suatu class. Yang bisa diwariskan hanya interface dari class.
• Constructor tidak diwariskan karena setiap class hanya boleh punya 1 constructor.
• Friend function tidak diwariskan karena fungsi ini merupakan fungsi bebas yang artinya jika base class diwariskan pada inherited class tidak berarti friend function diwariskan pula. Selain itu friend function juga tidak boleh diwariskan karena melanggar konsep ’Information Hiding’

4. Konsep inheritance memunculkan fitur baru dalam C++ yaitu reuseability, dominating dan overriding. Jelaskan melalui penggalan kode, apa yang kamu ketahui tentang ketiga fitur tersebut.
• Reusability memungkinkan penggunaan kembali member dari base class di inherited class tanpa perlu membuat code dari awal.

class A{
protected:
	int x;
public:
	A(){x=0;}
	~A(){}
};

class B : public A{
protected:
	int y;
public:
	B(){y=1;}
	~B(){}
	void print(){cout<<x<<endl<<y;}
};

• Dominating berarti beberapa function member yang menggunakan nama sama akan didominasi oleh salah satu member function dan member function lainnya tertutup.

class A{
protected:
	int x;
	double z;
public:
	A(){x=0; z=2.00;}
	~A(){}
	void print(int ){cout<<x<<endl;}
	void print(int, double){
		cout<<x<<endl<<z<<endl;
	}
};

class B : public A{
protected:
	int y;
public:
	B(){y=1;}
	~B(){}
	void print(){cout<<x<<endl<<y;}
};

• Overriding berarti function member di inherited class menggunakan nama yang sama dengan member function di base classnya

class A{
protected:
	int x;
public:
	A(){x=0;}
	~A(){}
	void print(){cout<<x<<endl;}
};

class B : public A{
protected:
	int y;
public:
	B(){y=1;}
	~B(){}
	void print(){cout<<x<<endl<<y;}
};

5. Ilmu pengetahuan itu sifatnya kumulatif sehingga meskipun kita sudah mempunyai utilitas ADT yang tidak lain adalah enkapsulasi kita masih memerlukan inheritance. WHY? Untuk bisa menjawab kasus ini kamu harus membandingkan inheritance dengan ADT. Pertanyaan buat kamu adalah coba bandingkan inheritance dengan ADT dari berbagai sisi diantaranya dari sisi komponen, struktur komponen, advantage dan disadvantage.

Inheritance ADT
Komponen Data member, member function, constructor, copy constructor, destructor, access modifier Data member, member function, access modifier
Struktur komponen Turunan Paralel
Advantage Reusability, extendability, information hiding, overriding Modularity(independent), reuseability
Disadvantage Dependent Indepent

I AM PROUD AS BINUSIAN

PBO : TM 5

NAMA : Riyn Winesdyo W.
NIM : 1701292866
KELAS : 02PPT

Kuis dan TM 05

1. Opsi-opsi berikut adalah benar kecuali
a. const Time noon(12, 0, 0); b. int setData() const;
c. int getData() const; d. void print() const;

2. Dynamic array dideklarasikan mengggunakan metode berikut ini
a. int *x = new x[10]; b. int *x = new int[10];
c. int new *x = int[10]; d. int *x new = int[10];

3. Bilangan rasional adalah bilangan yang dapat ditulis dalam bentuk r = n/d di mana n dan d masing-masing adalah tipe data integer. Kita menyebutnya sebagai bilangan pecahan, n = pembilang dan d = penyebut. Untuk class Rasional, constructor initialization list dari konstruktor Rasional(int n, int m) {num = n; den = d; } adalah
a. Rasional (int n, int d) num (n), den (d) { }
b. Rasional (int n, int d) num (n); den (d) { }
c. Rasional (int n, int d) : num (n), den (d) { }
d. Rasional (int n, int d) : num (n); den (d) { }

4. Opsi-opsi berikut adalah salah kecuali
a. int& r = n; b. int& r = 44; c. int& r = n++; d. int&r = sqrt(n);

5. Model dynamic dalam OOP terjadi karena adanya interaksi antara
a. class dengan class b. class dengan object
c. object dengan class d. object dengan object

6. Banyak fungsi anggota class yang otomatis di-create oleh kompilator jika mereka tidak ditulis secara eksplisit oleh pemrogram adalah:
a. satu yaitu default konstruktor
b. dua yaitu default kosntruktor dan destructor
c. tiga yaitu default kosntruktor, copy konstruktor dan destructor
d. empat yaitu default kosntruktor, copy konstruktor, destructor dan overloaded assignment operator.

7. Fungsi-fungsi yang dapat diakses oleh object constant adalah :
a. constructor dan destructor
b. constructor dan fungsi anggota constant
c. destructor dan fungsi anggota constant
d. constructor, destructor dan fungsi anggota constant

8. Fungsi anggota yang didesain khusus untuk membantu tugas fungsi anggota lain suatu class disebut
a. friend function b. inline function
c. utility/helper function d. static function

9. Tipe data yang harus diinisialisasi adalah
a. const dan reference b. const dan pointer
c. reference dan pointer d. const, reference dan pointer

10. Arti dari function overloading di C++ adalah
a. fungsi dengan nama yang sama, isi fungsi sama, parameter sama
b. fungsi dengan nama yang sama, isi fungsi sama, parameter beda
c. fungsi dengan nama yang sama, isi fungsi beda, parameter sama
d. fungsi dengan nama yang sama, isi fungsi beda, parameter beda

11. Pernyataan const int * const x = &y; dibaca sebagai
a. x adalah konstanta pointer ke integer
b. x adalah pointer ke konstanta integer
c. x adalah pointer ke integer
d. x adalah konstanta pointer ke konstanta integer

12. Deklarasi yang menyatakan bahwa r adalah reference untuk n adalah
a. int& r = n; b. int r& = &n; c. int r& = n; d. int& r = &n;

13. Output dari penggalan program berikut

class Dosen {
public:
Dosen() {cout << “Constructor dosen diekseksi\n”}
~Dosen() {cout << “Destructor dosen diekseksi\n”}
};

void main() {
Dosen d0001;
cout << “Antarobject d0001 dan d0002\n”;
Dosen d0002;
}

adalah:
a. Constructor dosen dieksekusi
Constructor dosen dieksekusi
Antarobject d0001 dan d0002
Destructor dosen dieksekusi
Destructor dosen dieksekusi

b. Constructor dosen diekseksi
Destructor dosen dieksekusi
Antarobject d0001 dan d0002
Constructor dosen dieksekusi
Destructor dosen dieksekusi

c. Constructor dosen dieksekusi
Destructor dosen dieksekusi
Antarobject d0001 dan d0002
Destructor dosen dieksekusi
Constructor dosen dieksekusi

d. Constructor dosen diekseksi
Antarobject d001 dan d002
Constructor dosen dieksekusi
Destructor dosen dieksekusi
Destructor dosen dieksekusi

14. Untuk object global
a. konstruktor dipanggil sebelum eksekusi main() dan destruktor dipanggil sebelum eksekusi main()
b. konstruktor dipanggil sesudah eksekusi main() dan destruktor dipanggil sebelum eksekusi main()
c. konstruktor dipanggil sebelum eksekusi main() dan destruktor dipanggil sesudah eksekusi main()
d. konstruktor dipanggil sesudah eksekusi main() dan destruktor dipanggil sesudah eksekusi main()

II. Soal Uraian. (60 poin)

1. Seperti halnya tipe data yang dapat diberi modifier, maka fungsi juga dapat diberi modifier. Modifier yang berlaku pada fungsi adalah static, inline, const, friend dan virtual. Fungsi virtual akan kita pelajari secara ekstensif di polymorphism sehingga ia tidak kita bahas di soal ini. Jelaskan apa yang dimaksud dengan fungsi static, fungsi inline dan fungsi konstan . Jika perlu melalui contoh.

  • Fungsi static merupakan modifier yangg digunakan untuk mengakses class tanpa perlu membuat objek terlebih dahulu karena fungsi static tidak menempel pada objek tertentu tapi pada class. Fungsi static method tidak dapat mengakses suatu fungsi non-static.
    #include
    using namespace std;
    
    class Data{
    private:
    	static int angka;
    public:
    	void setAngka(int a){
    		angka=a;
    	}
    	static int getAngka(){
    		return angka;
    	}
    };
    
    int Data::angka=1;
    
    void main(){
    	cout<<"Angka : "<<Data::getAngka();
    	cin.get();
    }
  • Fungsi inline adalah fungsi yang digunakan untuk mempercepat eksekusi, tetapi memperbesar memori. Cara kerjanya adalah ketika ada pemanggilan suatu fungsi pada class dengan modifier inline, fungsi inline lah yang akan mencari pemanggilnya. Sedangkan fungsi biasa compiler akan membaca semua code secara terstruktur, ketika ada pemanggilan fungsi compiler akan kembali ke atas dan mencari fungsi yang sesuai. Fungsi ini disarankan hanya dipakai jika fungsi sering dipanggil, misalnya pada perulangan (while, for), dan ukurannya kecil.
    #include
    using namespace std;
    
    inline int multiply(int a, int b, int c){
    	return a=b*c;
    }
    
    int main(){
    	int a = 0;
    	int b = 1;
    	int c = 8;
    	for(b=1;b<=c;b++){
    		cout<<"a = "<< multiply(a, b, c)<<endl;;
    	}
    	cin.get();
    	return 0;
    }
  • Fungsi konstan adalah fungsi yang tidak dapat merubah data member objek.
    #include
    using namespace std;
    
    class Data{
    private:
    	int angka;
    public:
    	void setAngka(int a){
    		angka=a;
    	}
    	int getAngka(){
    		return angka;
    	}
    	void print()const{
    		cout<<"angka = "<<angka<<endl;
    	}
    
    };
    
    void main(){
    	Data obj;
    	obj.setAngka(12);
    	obj.print();
    	cin.get();
    }

2. Setiap fungsi anggota class mempunyai parameter tersembunyi yang disebut pointer this. Tipe pointer ini dapat diimplementasikan secara implisit dan eksplisit. Berikan dua contoh bagaimana kita mengimplementasikan pointer this secara implisit dan eksplisit.

#include
using namespace std;

class Data{
private:
	int angka;
public:
	Data(int = 0);

	void print()const{
		//secara implisit
		cout<<"angka         = "<<angka<<endl;

		//secara eksplisit menggunakan operator panah
		cout<angka   = "<angka<<endl;

		//secara eksplisit menggunakan dereferenced this pointer dan operator dot
		cout<<"(*this).angka = " <<(*this).angka<<endl;
	}
};

Data::Data(int value): angka(value){}

void main(){
	Data obj(12);
	obj.print();
	cin.get();
}

3. Diketahui penggalan kode berikut:
//The perfect shuffle for an even number of element:
void shuffle(int a[], int n) {
int temp[n];
for(int i= 0; i < n/2; i++) {
temp[2*i] = a[i];
temp[2*i+1] = a[n/2+i];
}
for(i=0; i<n; i++) a[i] = temp[i];}

Jika data masukan adalah (11, 22, 33, 44, 55, 66, 77, 88) apa keluaran dari kode tersebut. Menggunakan data terakhir ini, tulis fungsi main() sebagai driver untuk mengetes kode di atas.

hasil: (11, 55, 22, 66, 33, 77, 44, 88)

#include 
using namespace std;

void shuffle(int a[], int n){
int temp[8];
for(int i= 0; i < n/2; i++) {
	temp[2*i] = a[i];
	temp[2*i+1] = a[n/2+i];
}
for(int i=0; i<n; i++){
	a[i] = temp[i];
	cout<<a[i]<<endl;
	}
}

void main(){
	int a[]={11,22,33,44,55,66,77,88};
	int n=8;
	shuffle(a, n);
	cin.get();
}

4. Apa yang disebut variable reference? Bagaimana mendeklarasikan bahwa variable r adalah reference dari variable n. Selanjutnya, buatlah perbandingan head to head antara pass by value dan pass by reference. Perbandingan antara lain meliputi sintaks, parameter formal, parameter aktual, arah dan sifat passing dan sebagainya.

  • reference adalah nama sinonim atau alias dari variabel lain. Reference menyimpan adress dari suatu variabel. Reference di deklar menggunakan operator &.
    #include
    using namespace std;
    
    int main(){
    	int n = 1;
    	int &r = n;
    	cout<<"angka = "<<n<<endl;
    	cout<<"alias = "<<r<<endl;
    	n++;
    	cout<<"angka = "<<n<<endl;
    	cout<<"alias = "<<r<<endl;
    	r++;
    	cout<<"angka = "<<n<<endl;
    	cout<<"alias = "<<r<<endl;
    	cin.get();
    	return 0;
    }
  • Perbedaan pass by value dan pass by reference
    • Pass by value :
    – int x; Formal parameter x merupakan variabel lokal
    – Formal parameter merupakan duplikat dari actual parameter dan tidak dapat menggantikan actual parameter
    – Actual parameter bisa berupa constant, variable, maupun expression
    – Actual parameter hanya bisa membaca(read-only)
    – Pass by value lebih cocok untuk objek kecil yang tidak boleh diubah oleh function

    • Pass by Reference :
    – int *p; Formal parameter p merupakan pointer local
    – Formal parameter merupakan alamat dari actual parameter dan dapat mengubah actual parameter
    – Actual parameter harus berupa alamat dari suatu identifier
    – Actual parameter bersifat read-write
    – Pass by reference lebih cocok untuk objek yang boleh diubah oleh function

5. Berapa kali copy constructor dipanggil pada penggalan kode berikut. Uraikan jawaban Anda.
Widget f(Widget u) {
Widget v (u);
Widget w = v;
Return w;
}

main() {
Widget x;
Widget y = f(f(x));
}

jawab: sepuluh kali
1. Pertama didapat ketika widget x dijalankan
2. Kedua hingga keempat didapat ketika f(x) dijalankan
3. Kelima didapat ketika pemanggilan widget x di dalam f(x)
4. Keenam hingga kedelapan didapat ketika f(f(x)) dijalankan
5. Kesembilan didapat ketika pemanggilan widget x di dalam f(f(x))
6. Kesepuluh didapat ketika pemanggilan widget f(x) yg memiliki pengertian sama dengan widget x di dalam f(f(x))

-d1030-

Soal dan Jawaban PBO: ADT Array and Struct

NAMA: Riyn Winesdyo W.
NIM: 1701292866
KELAS: 02PPT

TM 03 : ADT Array dan Struct

Array adalah suatu ADT. Seperti halnya ADT lain, array mempunyai data anggota dan operasi, metode atau fungsi anggota. Elemen array diakses berdasarkan posisinya di dalam array relatif terhadap elemen pertama. Operasi utama array adalah store dan retrieve. Operassi store untuk menyimpan elemen e di indeks i array A[] adalah A[i] = e sedangkan operasi retrieve untuk mengambil suatu elemen dari array A[] di indeks i dan disimpan di elemen e adalah e = A[i].

a. Desain class Array berdasarkan uraian ADT Array di atas dengan ketentuan level akses data anggota adalah private dan level akses fungsi anggota adalah public. Selain itu jangan lupa untuk menambahkan constructor dan destructor pada class tersebut. Dalam desain ini, semua fungsi anggota kecuali constructor dan destructor, harus berbentuk prototype.

const int MAX =10;
class Array {
private :
int A[MAX];
int i, e;
public :
Array() { for ( i =0; i < MAX; i++) A[i] = 0; }
~Array();
void store( int, int );
int retrieve (int, int);
};

b. Selanjutnya definisikan semua fungsi anggota di luar class Array. Ingat jangan lupa untuk menggunakan scope resolution operator ::

void Array :: store (int i, int e) { A[i] = e; }
int Array :: retrieve (int i, int e) { e = A[i]; }

c. Terakhir, tulis fungsi main() sebagai driver untuk menguji desain kamu.

void main() {
int e;
Array a;
a.store(1,11);
a.store(2,22);
a.store(3,33);
cout << endl << a,retrieve (3,e);
cout << endi << a.retrieve(2,e);
cout << endl << a.retrieve(1,e);
}

Seperti halnya array, struct adalah suatu ADT yang mempunyai data anggota dan operasi, metode atau fungsi anggota. Elemen, member atau field struct diakses menggunakan operator dot atau pointer ->. Bentuk umumnya adalah sebagai berikut:

<structure_variabel>.<field_name>
<structure_pointer> -> <field_name>

Operasi utama di struct adalah store(e) dan retrieve(). Operassi store(e) untuk menyimpan elemen e di field i struct s adalah s.i = e sedangkan operasi retrieve() untuk mengambil suatu elemen dari struct s di field i dan disimpan di elemen e adalah e = s.i.

a. Diketahui struktur dtMhs dengan tiga data anggota : nim, nama dan IPK serta fungsi anggota store() dan retrieve(). Desain class dtMhs berdasarkan uraian di atas dengan ketentuan level akses data anggota adalah private dan level akses fungsi anggota adalah public. Selain itu jangan lupa untuk menambahkan constructor dan destructor pada class tersebut. Dalam desain ini, semua fungsi anggota kecuali constructor dan destructor, harus berbentuk prototype.

#include<iostream>
using namespace std;
struct data{
	int i;
};

class Struct{
private :
	data s;
	int e;
public :
	void store(int e);
	int retrieve();
	Struct(){
		s.i=0;
	}
	~Struct(){}
};

class dtMhs{
private :
	char nama[100];
	char nim[100];
	float IPK;
public :
	void storeNama(char e[100]);
	char* retrieveNama();
	void storeNim(char e[100]);
	char* retrieveNim();
	void storeIPK(float e);
	float retrieveIPK();
	
	dtMhs(){}
	~dtMhs(){}
};

b. Selanjutnya definisikan semua fungsi anggota di luar class Struct Ingat jangan lupa untuk menggunakan scope resolution operator ::

void Struct::store(int e){
	s.i = e;
}

int Struct::retrieve(){
	e = s.i;
	return e;
}
void dtMhs::storeNama(char e[100]){
	strcpy(nama,e);
}

char* dtMhs::retrieveNama(){
	return nama;
}

void dtMhs::storeNim(char e[100]){
	strcpy(nim, e);
}

char* dtMhs::retrieveNim(){
	return nim;
}

void dtMhs::storeIPK(float e){
	IPK=e;
}

float dtMhs::retrieveIPK(){
	return IPK;
}

c. Terakhir, tulis fungsi main() sebagai driver untuk menguji desain kamu

void main(){
	dtMhs obj;

	obj.storeNim("1701292866");
	obj.storeNama("Riyn");
	obj.storeIPK(35.80);

	cout<<"NIM  : "<<obj.retrieveNim();
	cout<<endl<<"Nama : "<<obj.retrieveNama();
	cout<<endl<<"IPK  : "<<obj.retrieveIPK();
cin.get();
}

Soal dan Jawaban : TM4 Data and Function Modifier

NAMA: Riyn Winesdyo W.
NIM: 1701292866
Kelas: 02PPT

TM 04 : Class Time

a. Desain klas dengan nama Time yang mempunyai tiga data anggota yaitu hour, minute dan second dengan level akses adalah private. Selain fungsi anggota baku constructor dan destructor, class Time juga mempunyai tiga fungsi anggota lain yang prototipenya adalah sebagai berikut: void setData() , fungsi konstant void geData() dan fungsi konstant void printData(). Tugas ketiga fungsi terakhir ini adalah sebagai berikut: fungsi setData() untuk memberi nilai hour, minute dan second , fungsi getData() untuk mengambil nilai data yang diisi oleh fungsi setData(), sedangkan fungsi printData() untukmencetak ketiga data anggota tersebut.

#include<iostream>
using namespace std;

class Time{
private:
	int hour;
	int minute;
	int second;
public:
	void setData(int hr, int min, int sec){
		hour=hr;
		minute=min;
		second=sec;
	}

		void getData(int hr, int min, int sec)const{
		hr=hour;
		min=minute;
		sec=second;
	}
	
	Time(){
		hour=1;
		minute=1;
		second=1;
	}

	Time(int hr, int min, int sec){
		hour=hr;
		minute=min;
		second=sec;
	}

	void printData()const{
		cout<<"Hour   : "<<hour<<endl;
		cout<<"Minute : "<<minute<<endl;
		cout<<"Second : "<<second<<endl;
	}

	~Time(){}

};

b. Definisikan atau implementasikan constructor dan destructor di dalam klas sedangkan fungsi setData() , getData() dan printData() di luar klas Time. Untuk definisi fungsi yang ada di luar class jangan lupa untuk menggunakan scope resolution operator.

	#include<iostream>
	using namespace std;

class Time{
private:
	int hour;
	int minute;
	int second;
public:
	void setData(int, int, int);
	void getData(int, int, int)const;

	Time(){
		hour=1;
		minute=1;
		second=1;
	}

	Time(int hr, int min, int sec){
		hour=hr;
		minute=min;
		second=sec;
	}

	void printData()const;

~Time(){}

};

void Time::setData(int hr, int min, int sec){
	hour=hr;
	minute=min;
	second=sec;
}

void Time::getData(int hr, int min, int sec)const{
		hr=hour;
		min=minute;
		sec=second;
}

void Time::printData()const{
	cout<<"Hour   : "<<hour<<endl;
	cout<<"Minute : "<<minute<<endl;
	cout<<"Second : "<<second<<endl;
}

c. Berikan alasan mengapa fungsi getData() dan printData() perlu dibuat konstant?

Konstan digunakan agar fungsi hanya bisa dibaca dan tidak bisa diubah. Member fungsi konstan tidak dapat mengubah non-static data member atau memanggil member fungsi yang tidak konstan.

d. Selanjutnya tulis fungsi main() untuk mengetes klas yang Anda desain.

void main(){
	Time obj(3,50,10);
	obj.printData();
	cin.get();
}

I AM PROUD AS A BINUSIAN

Struktur Data : Ubah Infix Menjadi Postfix

//NAMA : Riyn Winesdyo W
//NIM : 1701292866
//KELAS: 02PPT

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define MAX 100

typedef struct stack
{
 int data[MAX];
 int top;
}stack;

int priority(char);
void init(stack *);
int empty(stack *);
int full(stack *);
char pop(stack *);
void push(stack *,char);
char top(stack *);

void main()
{
stack s;
char x;
int token;
init(&s);
clrscr();
printf("nEnter infix expression:");
  while((token=getchar())!='n')
  {
    if(isalnum(token))
       printf("%c",token);
    else
       if(token == '(')
           push(&s,'(');
       else
       {
         if(token == ')')
             while((x=pop(&s))!='(')
             printf("%c",x);
         else
         {
         while(priority(token)top=-1;
}
//---------------------------------------------
int empty(stack *s)
{
    if(s->top==-1)
 return(1);
    else 
 return(0);
}
//---------------------------------------------
int full(stack *s)
{
    if(s->top==MAX-1)
 return(1);
    else 
 return(0);
}
//---------------------------------------------
void push(stack *s,char x)
{
  s->top=s->top+1;
  s->data[s->top]=x;
}
//---------------------------------------------
char pop(stack *s)
{
   int x;
   x=s->data[s->top];
   s->top=s->top-1;
   return(x);
}
//---------------------------------------------
char top(stack * s)
{
   return(s->data[s->top]);
}
//---------------------------------------------

Struktur Data : Doubly Linked List

NAMA : Riyn Winesdyo W.
NIM : 1701292866
KELAS : 32PPT

#include <stdio.h>
#include <stdlib.h>

struct tnode{
	int data;
	struct tnode *next;
	struct tnode *prev;
}*node;

void print(){
	if(node!=0){
		while(node->next!=0){
			printf("%d ",node->data);
			node=node->next;
			}printf("%d",node->data);
	}

	printf("\n");
}

int main(){
	struct tnode *head = 0;
	struct tnode *tail = 0;
	struct tnode *newNode=0;
	//1
	head=(struct tnode*)malloc(sizeof(struct tnode));
	head->data=1;
	head->next=NULL;
	head->prev=NULL;
	node=head;
	tail=head;
	//3
	node->next=(struct tnode*)malloc(sizeof(struct tnode));
	node=node->next;
	node->data=3;
	node->next=NULL;
	node->prev=head;
	tail=node;

	node=head;
	print();
	//add number 2 between 1 and 3
	newNode=(struct tnode*)malloc(sizeof(struct tnode));
	node=newNode;
	newNode->data=2;
	node->prev=head;
	node->next=tail;
	head->next=node;
	tail->prev=node;
	

	node=head;
	print();
	//add 0 before 1
	newNode=(struct tnode*)malloc(sizeof(struct tnode));
	node=head;
	head=newNode;
	head->data=0;
	head->prev=NULL;
	head->next=node;
	
	node=head;
	print();
	//add 5 after 3
	newNode=(struct tnode*)malloc(sizeof(struct tnode));
	node=tail;
	tail=newNode;
	tail->data=5;
	tail->prev=node;
	tail->next=NULL;
	node->next=tail;
	
	node=head;
	print();

	getchar();
	return 0;
}

Soal dan Jawaban Pemrograman Berorientasi Objek : TM2

NAMA : Riyn Winesdyo W.
NIM : 1701292866
KELAS: 02PPT

TM 02

1. Copy constructor suatu klas dieksekusi jika obyek klas di-copy dengan mekanisme di bawah ini kecuali
a. direct assignment
b. initialization
c. passing by value
c. return by value

2. Fungsi anggota yang otomatis di-create oleh kompilator meskipun ia tidak secara eksplisit ditulis oleh pemrogram dalam definisi klas adalah opsi-opsi di bawah ini kecuali
a. default constructor
b. copy constructor
c. destructor
d. overloaded constructor

3. Level akses utility function atau helper function suatu klas adalah
a. public
b. protected
c. private
d. inline

4. Untuk class X, sintaks copy constructor adalah
a. X(& X)
b. X(const X&)
c. X(const &X)
d. X(X &)

5. C++ class mempunyai
a. satu konstruktor dan satu destructor
b. lebih dari satu konstruktor dan satu destructor
c. satu konstruktor dan lebih dari satu destructor
d. lebih dari satu konstruktor dan lebih dari satu destructor

6. Apa keluaran dari penggalan program berikut ini:

class Rational {
public:
Rational() { cout << “OBYEK LAHIR.\n”; }
~Rational() { cout << “OBYEK MATI. \n”; }
private:
int num, den;
};

main() {
{ Rational x;
cout << “SEKARANG x HIDUP.\n”;
}
cout << “ANTAR BLOK.\n”;
{ Rational y;
cout << “SEKARANG y HIDUP.\n”;
}
}

hasil:
OBYEK LAHIR
SEKARANG x HIDUP
OBYEK MATI
ANTAR BLOK
OBYEK LAHIR
SEKARANG y HIDUP
OBYEK MATI

7. Uraikan apa yang kamu ketahui tentang constructor, user defined constructor, default constructor, parameterized constructor, constructor initialization list, copy constructor dan destructor.
• Constructor adalah method khusus yang mendeskripsikan bagaimana instance of class(object) dibuat. Constructor juga digunakan untuk menginisialisasi nilai dari object yang baru dibuat. (className();)
Constructor memiliki ciri-ciri menggunakan nama yang sama dengan nama class-nya serta tidak memiliki return type.

• User defined constructor dibagi menjadi 2 yaitu re-define default constructor, merupakan constructor yang secara eksplisit memiliki nama yang sama dengan class-nya tetapi memiliki isi yang didefinisikan sendiri oleh user. Constructor ini tidak punya parameter; Overloading constructor, merupakan constructor yang memiliki beberapa parameter. Perilakunya sama seperti function overload.

• Default constructor merupakan constructor yang secara otomatis dibuat oleh compiler saat compile time jika user tidak mendeklarasikan constructor dan tidak mempunyai parameter.

• Parameterized constructor adalah constructor yang dideklarasikan dengan parameter.

• Constructor initialization list digunakan untuk menginisialisasi beberapa member sekaligus. Nama anggota yang diinisialisasi dituliskan setelah parameter formal constructor dan setiap nama anggota diikuti oleh sejumlah argument yang sesua dengan user-defined constructor yang ada.

• Copy constructor merupakan constructor khusus yang digunakan untuk duplikasi isi dasi suatu object ke dalam object baru yang sedang diciptakan. Copy constructor secara otomatis dipanggil ketika deklarasi inisialisasi object diduplikasi, object passed by value ke function, dan object returned by value dari function. (className (const className&);)

• Destructor merupakan function yang terakhir kali dijalankan sebelum siklus hidup object berakhir. Tugasnya untuk deinisialisasi, clean up, dealokasi memory, dll. Nama destructor sama dengan nama class-nya dengan penambahan tanda ~ (tilde) di depan namanya. (~className();)

8. Uraikan apa yang kamu ketahui tentang default arguments di C++. Sebutkan apa saja yang dapat digunakan sebagai devalut value. Mengapa nilai constant tidak dapat digunakan sebagai default value untuk reference variable?
Suatu nilai tertentu yang akan dipakai sebagai argumen bila fungsi tidak dipanggil dengan argumen lengkap. Default values bisa berupa nilai konstan, variabel global, atau function calls.
Nilai constant tidak dapat digunakan sebagai default value untuk reference variable karena reference variable berupa pointer yang menunjuk alamat dari variabel tertentu.

9. Apa yang dimaksud dengan function overloading? Kriteria apa yang digunakan untuk menyatakan bahwa dua fungsi dengan nama yang sama adalah berbeda satu sama lain.
Function overloading berarti terdapat dua atau lebih fungsi dengan penggunaan nama yang sama.

Kriteria yang digunakan untuk menyatakan dua fungsi dengan nama yang sama adalah berbeda bisa dilihat dari return type-nya serta parameternya. Dua fungsi dengan nama sama akan dikatakan berbeda jika return type-nya berbeda. Sedangkan dua fungsi dengan nama sama tidak bisa dikatakan overloaded ketika jumlah parameter kedua fungsi tersebut berbeda, tipe data yang digunakan parameter kedua fungsi berbeda, serta perbedaan urutan parameter.

10. Banyak penulis buku menyatakan bahwa untuk class X paling sedikit mempunyai satu constructor yaitu default constructor dengan prototype X(). Tetapi John Hubbard dalam bukunya Programming with C++ menyatakan bahwa setiap class X paling sedikit mempunyai dua constructor yaitu default X() dan copy constructor yang prototipe sintaksnya adalah X (const X & ), fungsi anggota dengan satu parameter dan pass by constant reference.

Tugas Anda:
a. Kapan copy constructor dieksekusi?

Copy constructor dieksekusi ketika:
– An object is copied by means of a declaration initialization
– An object is passed by value to a function
– An object is returned by value from function

b. Untuk penggalan kode berikut berapa kali copy constructor dieksekusi?

class Rational {
public : Rational(int n, int d) : num(n), den (d) { }
Rational(const Rational & r) : num(r.num), den(r.den)
{ cout << “COPY CONSTRUCTOR CALLED\n”;}
private: int num, den;
};

Rational f(Rational r) {
Rational s = r;
return s;
}

main() {
Rational(22,7);
Rational y(x);
f(y);
}

Copy constructor dieksekusi sebanyak 3 kali di dalam main

I AM PROUD AS A BINUSIAN

Tugas Struktur Data : Single Linked list

NAMA: Riyn Winesdyo Winarko
NIM : 1701292866
Kelas: 02PPT

#include
#include

struct node{
int x;
struct node *next;
};

int main(){
struct node *root;
struct node *conductor;

int jum=0;

root=(struct node*)malloc(sizeof(struct node));
root->next=0;
do{
printf(“Masukkan Angka[1..100] : “);
scanf(“%d”, &root->x);
fflush(stdin);
}while(root->xx>100);

jum++;

while(jumx);

while(conductor->next!=0){
conductor=conductor->next;
printf(“-> %d”, conductor->x);
}

if(jum==10){break;}

conductor->next=(struct node*)malloc(sizeof(struct node));
conductor=conductor->next;
conductor->next=0;
printf(“\n”);

do{
printf(“Masukkan Angka[1..100] : “);
scanf(“%d”, &conductor->x);
fflush(stdin);
}while(conductor->xx>100);
jum++;

}

getchar();
return 0;
}

jawaban tugas 1

Soal dan Jawaban Pemrograman Berorientasi Objek : TM1

NAMA: Riyn Winesdyo W.
NIM: 1701292866
KELAS: 02PPT

TM 01
1. Ada tiga istilah yang saling berkaitan saat kita mulai mempelajari OOP yaitu ADT (Abstract Data Type), encapsulation dan class. Coba uraikan secara rinci apa yang dimaksud istilah-istilah tersebut. Selain itu berikan contoh-contohnya.
Abstract Data Type atau bisa disebut dengan singkatan ADT merupakan cara untuk enkapsulasi/pembungkusan data yang tipe datanya bisa berbeda menjadi suatu tipe data baru. Enkapsulasi merupakan proses pemaketan pada sebuah data yang bertujuan untuk menyembunyikan informasi dari user/information hiding.
ADT pada OOP disebut dengan class. Class terdiri dari 3 bagian yaitu, class name, attribute/data member, dan method/function. Class adalah sebuah konsep OOP yang digunakan untuk enkapsulasi attribute dan method yang memiliki kesamaan behavior.

#include
#include
#include
//——————–
// main program class
//——————–
class data
{
public:
int sks;
int nilaitotal;
void input()
{
cout<>sks;
cout<>nilaitotal;
};
void akhir()
{
total=nilaitotal/sks;
};
float hasil()
{
return total;
};
private:
float total;
};
void main()
{
data mahasiswa;
mahasiswa.input();
mahasiswa.akhir();
cout<<"Nilai IP-nya: "<<mahasiswa.hasil();
}

2. Ada tiga karakteristik yang membedakan OOP dengan procedural programming yaitu ADT, inheritance dan dynamic binding, Dua topik terakhir belum kita pelajari sehingga dalam soal ini kita hanya fokus pada ADT.
a. Apa yang dimaksud dengan ADT?

ADT(Abstract Data Type) merupakan penggabungan berbagai object dengan berbagai maca tipe data beserta dengan fungsinya untuk membentuk suatu tipe data baru. ADT dibuat untuk menghindari pemrograman yang kompleks dengan cara menyederhanakan proses pemrograman.

b. Apa yang dimaksud dengan properties suatu ADT?
Properties suatu ADT merupakan bagian-bagian yang dimiliki di dalam ADT.

• Class Name merupaka nama dari kelas itu sendiri
• Data member/attribute merupakan objek-objek dari kelas
• Method/function merupakan definisi dari objek tersebut(operasi yang ingin user lakukan pada objek)

c. Mengapa kita memerlukan ADT?
Kita memerlukan ADT karena ADT menyederhanakan proses pemrograman yang kompleks sehingga program yang kita buat terorganisir, dapat dimodifikasi, dan dapat dikompilasi secara terpisah. Selain itu, ADT yang mendukung information hiding dapa digunakan untuk menyembunyikan bagian-bagian penting yang tidak perlu diperlihatkan pada user.

d. Bagaimana suatu ADT berhubungan dengan ADT lain?
Suatu ADT berhubungan dengan ADT lain menggunakan access modifier yang merupakan kata kunci yang digunakan untuk menentukan spesifikasi tingkat akses suatu attribute atau method. Kata kunci tersebut adalah private, protected, dan public.

e. Apa yang dimaksud dengan ”…dalam ADT implementasi disembunyikan dari user…” Berikan contohnya.
Implementasi disembunyikan dari user berkaitan dengan information hiding. Information hiding dibagi menjadi 3 yaitu:
• Private(-), dimana attribute dan method hanya bisa diakses oleh class-nya sendiri.
• Protected(#), attribute dan method hanya bisa diakses oleh class itu sendiri dan turunannya.
• Public(+), attribute dan method bisa diakses oleh class-nya sendiri, class lain, atau pun dari lingkungan luar class.

3. Esensinya tidak ada perbedaan mendasar antara struct dan class tetapi kita lebih suka menggunakan class daripada struct. Uraikan mengapa kita lebih suka menggunakan class daripada struct?
Kita lebih suka menggunakan class daripada struct karena penggunaan enkapsulasi pada class. Kita dapat memasukkan attribute bersamaan dengan methodnya dalam satu kelas. Selain itu pada lass terdapat constructor dan destructor yang berguna untuk dealokasi memory. Constructor merupakan method khusus yang dijalankan secara otomatis tanpa harus dipanggil saat instance dibuat. Constructor digunakan untuk inisialisasi nilai terhadap data-data yang terdapat pada kelas yang bersangkutan. Sedangkan destructor secara otomatis akan dipanggil oleh compiler ketika objek meninggalkan blok main().

4. Esensinya class dan struct adalah sama dalam C++. Perbedaan yang signifikan di antara mereka adalah
a. default akses class adalah private sedangkan struct adalah private
b. default akses class adalah private sedangkan struct adalah public
c. default akses class adalah public sedangkan struct adalah private
d. default akses class adalah public sedangkan struct adalah public

5. Interface suatu class terdiri dari
a. data anggota
b. prototipe fungsi anggota
c. implementasi fungsi anggota
d. data anggota dan prototipe fungsi anggota

-d1030-