TUGAS TM08- PEMROGRAMAN BERORIENTASI OBYEK

TM 08 : Class Strings
Albert Hendry Harsono/1701296914/02PPT

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.

class String
{
private:
	string ss;
	char *s;
	int len;

public:
	String();
	String(char* s);
	String(const String &r);
	~String();
	int length();
	void setSs(string ss);
	string getSs();
};

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

void String::setS(string ss)
{
	this->ss=ss;
}

string String::getS()
{
	return ss;
}

String::String()
{
	cout<<"object constructed"<<endl; } String::String(char*s) { 	strcpy(this->s,s);
}

String::String(const String &r)
{
	cout<<"copy constructor called"<<endl;
}

String::~String()
{
	cout<<"object destructed"<<endl;
}

int String::length()
{
	len=strlen(s);
}

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

int main()
{
	String kata;
	kata.setSs("Test");
	kata.length();
	String kata2(kata);

	cin.get();
return 0;
}

I AM PROUD AS BINUSIAN

Posted in PBO, Uncategorized | Leave a comment

TUGAS TM07- PEMROGRAMAN BERORIENTASI OBYEK

Kuis dan TM 7
(Albert Hendry Harsono/1701296914/02PPT)

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. reusability, 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;
}
Deklarasi atribut dalam suatu kelas tidak diperbolehkan.
Seharusnya ditulis:

class Time {
public:
   // prototype fungsi
private:
   int h;
   int m;
   int s;
};

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); // copy constructor called
Rasional y = x; // copy constructor called
Rasional y; y = x; // Default Constructor

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.
Pengecualian pada Inheritance: Constructor, destructor, operator=() member, friends. Pengecualian pada beberapa method di atas dikarenakan method-method tersebut merupakan class-specific.

4. Konsep inheritance memunculkan fitur baru dalam C++ yaitu reusability, dominating dan overriding. Jelaskan melalui penggalan kode, apa yang kamu ketahui tentang ketiga fitur tersebut.

REUSABILITY

class Persegi
{
private:
int sisi;
public:
void luas()
{
return sisi*sisi;
}
};

class Kubus : public Persegi //reusability, pemakaian kelas persegi untuk membuat kelas kubus
{

};

OVERRIDING

class Man
{
private:
string nama;
int umur;
public:
void makan()
{
cout<<”Man makan”<<endl;
}
};

class Mhs : public Man
{
public:
void makan()
{
cout<<”Mhs makan”<<endl; //overriding fungsi makan
}
};

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.

ADT merupakan suatu cara untuk merepresentasikan benda/objek nyata ke dalam suau level presisi yang dapat diterima suatu sistem komputer. ADT sendiri menonjolkan encapsulation sebagai suatu ciri khas. Encapsulation adalah suatu metode pembungkusan data. Di lain pihak, Inheritance merupakan suatu prinsip pewarisan sifat, biasa digunakan untuk membuat ulang suatu kelas baru dari kelas yang sudah ada.

Komponen-komponen dari ADT:
– Operation/Method
– Data/Attribute

Komponen-komponen dari Inheritance:
– New Operation/Method
– New Data/Attribute
– Overriding existing Data or Method

Keuntungan ADT:
– Membentuk jenis data baru yang belum ada
– Memberi otorisasi pada data/metode tertentu

Keuntungan Inheritance:
– Sifat reusability
– Membuat ADT yang lebih khusus dari Class/Struct yang lebih umum
– Overriding function
– Extendable

Kerugian ADT:
Tidak ada kerugian berarti dari pemakaian Abstract data Type.

Kerugian Inheritance:
– Waktu load yang lebih lma buat sistem untuk mengakses/berpindah level diantara class
– Base & Inherited class tidak bisa digunakan secara independen terhadap satu sama lain
– Jika kita menghapus salah satu fungsi pada superclass yang dioverride fungsi pada derived class, akan terjadi kompleksitas di mana fungsi anak akan menjadi independen.

I AM PROUD AS BINUSIAN

Posted in PBO, Uncategorized | Leave a comment

TUGAS TM05- PEMROGRAMAN BERORIENTASI OBYEK

Kuis dan TM 05
(Albert Hendry Harsono/1701296914/02PPT)

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 diekseksi
Antarobject d0001 dan d0002
Constructor dosen diekseksi
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 diekseksi
Destructor dosen diekseksi

14. Untuk objek 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)

01. 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.

Static Function adalah fungsi yang bisa dipanggil tanpa deklarasi objek dari kelas tersebut. Static Function hanya bisa mengakses static variable.

Contoh:

for (int i=0; i<5; i++)
{
   static int n=0;
}

Inline Function adalah fungsi singkat yang biasanya digunakan untuk mempersingkat waktu eksekusi suatu program namun menyebabkan ukuran program bertambah dari ukuran semula.

Contoh:

inline int cube(int n)
{
   return n*n*n;
}

Constant Function adalah fungsi yang data member-nya tidak bisa diubah (bersifat konstan)

Contoh:

void print()const
{
   cout << ” ”;
   return;
}

02. 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.

Contoh Implisit:

class Mahasiswa
{
private:
   int IPK;

public:
   Mahasiswa(int IP)
   {
      SetIPK(IP);
   }

void SetIPK(int IP) { IPK = IP; }
int GetIPK() { return IPK; }
};

int main()
{
   Mahasiswa Mhs(1);
   Mhs.SetIPK(2); // pointer this secara implisit
   cout << Mhs.GetID() << endl;
}

Contoh Eksplisit:

class Mahasiswa
{
   char nama[25];

public:
   void setNama(char *nama)
   {
      strcpy(this->nama,nama);
   }
};

03. 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.

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

   shuffle(a,n);

   cout << "Output: ";

   for(int x=0;x<8;x++)
   {
      cout << a[x] << " ";
   }

   cin.get();
}

04. 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.

Variable Reference adalah sinonim atau alias dari suatu variable.

// variable r adalah reference dari variable n
int &r = n;

// head to head antara pass by value dan pass by reference
Passing by Value:
– Sintaks: int x;
– Formal parameter x adalah Local variable
– x adalah ‘duplikat’ dari Actual parameter
– x tidak dapat mengubah Actual parameter
– Actual parameter bisa berbentuk const, variable, atau expression
– Actual parameter bersifat read-only
– Berguna untuk objek yang simpel dan mencegah perubahan nilai

Passing by Reference:
– Sintaks: int &r;
– Formal parameter r adalah Local reference
– p adalah sinonim/alias dari Actual parameter
– p dapat mengubah Actual parameter
– Actual parameter harus berbentuk variable
– Actual parameter bersifat read-write
– Berguna untuk seluruh objek yang mungkin dimodifikasi nilainya oleh fungsi

05. 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));
}

Copy constructor dipanggil 6 kali.
-d1030-

Posted in PBO, Uncategorized | Leave a comment

TUGAS TM04- PEMROGRAMAN BERORIENTASI OBYEK

TM 04 : Class Time (PBO)
(Albert Hendry Harsono/1701296914/02PPT)

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.

class time{
private :
	int hour;
	int minute;
	int second;
public:
	//Konstruktor
	time(){
		hour=0;
		minute=0;
		second=0;
	}
        //Destruktor
	~time(){
		cout<<"Data Deleted";
		cin.get();
	}
        //Setter-Getter
	void setData(int h,int m,int s);
	int getData()const;
	void printData()const;
};

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.

void time::setData(int h,int m,int s){
	hour=h;
	minute=m;
	second=s;
}

int time::getData()const{
	return hour;
	return minute;
	return second;
}

void time::printData()const{
	getData();
	cout<<"Time <"<<hour<<":"<<minute<<":"<<second<<">"<<endl;
	cin.get();
}

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

getData(); harus konstan untuk menghindari pengubahan data yang terjadi secara tidak disengaja, sedangkan untuk fungsi printData(); dibuat konstan agar dapat memanggil fungsi getData yang juga bersifat konstan.

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

int main(){
	time t; int j=-1,m=-1,s=-1;
	while(j<0||j>24){
		cout<<"Masukan Jam[0...24]: "; 		cin>>j;
cin.sync();
cin.clear();
	}
	while(m<0||m>59){
		cout<<"Masukan Menit[0...59] : "; 		cin>>m;cin.sync();cin.clear();
	}
	while(s<0||s>59){
		cout<<"Masukan Detik[0...59] : "; 		cin>>s;cin.sync();cin.clear();
	}
	t.setData(j,m,s);
	t.printData();

}

I AM PROUD AS A BINUSIAN

Posted in PBO, Uncategorized | Leave a comment

TUGAS TM03- PEMROGRAMAN BERORIENTASI OBYEK

TM 03 : ADT and Array (PBO)
(Albert Hendry Harsono/1701296914/02PPT)

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.

class Array{
int arr[10]; //default=private

public :
	array(){
		for(int e=0,i=0;i<10;i++)
			arr[i]=e;
		cout<<"Array Succesfully Constructed\n";
	}; 
	~array(){
		cout<<"Array Succesfully Destructed\n";
		getchar();
	}; 
	void setArr (int e,int i)
	int getArr(int e);
};

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.

class dtMhs{

//default=private
struct data{
int nim;
string nama;
float IPK;
}s;

public:
	dtMhs(){
		s.nim=0;
		s.nama=" ";
		s.IPK=0;
		cout<<"Data Berhasil dibuat"<<endl;
	}//constructor
	~dtMhs(){
		cout<<"Data Sudah Dihapus";
		cin.get();
	}
	void store(float IPK,string nama,int nim);
	void retrieve();
};

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

void dtMhs::store(float IPK,string nama,int nim){
	s.IPK=IPK;
	s.nama=nama;
	s.nim=nim;
}

void dtMhs::retrieve(){
	cout<<"Nama : "<<s.nama<<endl<<"NIM : "<<s.nim<<endl<<"IPK : "<<setprecision(3)<<s.IPK;
}

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

int main(){
	dtMhs s;
	string nama;
	int nim;
	float ipk;
	cout<<"Masukan Nama : ";
	getline(cin,nama);cin.sync();cin.clear();
	cout<<"Masukan NIM : "; 	cin>>nim ;cin.sync();cin.clear();
	cout<<"Masukan IPK : "; 	cin>>ipk ;cin.sync();cin.clear();
	s.store(ipk,nama,nim);
	s.retrieve();
	cin.get();
}
Posted in PBO, Uncategorized | Leave a comment

Binary Tree – Insertion Using C

//Binary Tree - Insertion Using C – 32 PPT – Albert Hendry Harsono (1701296914)

#include <stdio.h>
#include <stdlib.h>
struct tnode{
	int value;
	struct tnode *left;
	struct tnode *right;
}*leaf;
void insert(int key, struct tnode **leaf){
    if( *leaf == 0 )
    {
        *leaf = (struct tnode*) malloc( sizeof( struct tnode ) );
        (*leaf)->value = key;

        (*leaf)->left = 0;    
        (*leaf)->right = 0;  
    }
    else if(key < (*leaf)->value)
    {
        insert( key, &(*leaf)->left );
    }
    else if(key > (*leaf)->value)
    {
        insert( key, &(*leaf)->right );
    }
}
void main(){
	int z=0;
	int key=0;

	struct tnode *root = 0;
	do{
		system("cls");
		printf("Masukan banyak data yang akan diinput[1..10]: ");
		scanf("%d",&z);fflush stdin;
	}while(z<1||z>10);
	for(int p=0; p<z; p++){ 		do{ 			system("cls"); 			printf("Masukan data ke-%d: ",p+1); 			scanf("%d",&key); fflush stdin; 		}while(key>50||key<1);
	insert(key,&leaf);
	}
}
Posted in Struktur Data, Uncategorized | Leave a comment

Infix to Postfix using C

Infix to Postfix using C – 32 PPT – Albert Hendry Harsono (1701296914)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char op[50];
struct node
{
    char data;
    struct node *next;
}*head=0;
void push(char x)
{
    if(head==NULL)
    {
        head=(struct node *)malloc(sizeof(struct node));
        head->data=x;
        head->next=NULL;
    }
    else
    {
        struct node *p;
        p=(struct node *)malloc(sizeof(struct node));
        p->data=x;
        p->next=head;
        head=p;
    }
}
char pop()
{
    char c;
    struct node *p;

	if (head==NULL)
    {
        printf("the stack is empty\n");
    }

	else
    {
        c=head->data;
        p=head->next;
        free (head);
        head=p;
    }
    return c;
}
void display(struct node *start)
{
    {
        struct node *p;
        p=start;
        if(p==NULL)
            printf("Empty list");
        else
        {
            while(p!=NULL)
            {
                printf("%c->",p->data);
                p=p->next;
            }
            printf("NULL\n");
        }
    }
}
int priority(char s, char c)
{
    if ( (c=='^' && s=='+') || s=='-' ||s=='/' || s=='*')
        return 1;
    else if( c=='*' || c=='/')
    {
        if(s=='+' || s=='-' )
            return 1;
        else
            return 0;
    }
    else if( c=='+' || c=='-' )
        return 0;
  return -1;
}
void convert(char s[], int n)
{
    int i,j;//,x;
    for(i=0,j=0;i<n;i++)     {         if ((s[i]>='0'&&s[i]<='9') || (s[i]>='a' && s[i]<='z')|| (s[i]>='A' && s[i]<='Z'))         {             op[j]=s[i];             j++;         }         else if(s[i]=='(')         {             push(s[i]);         }         else if (s[i]=='+' || s[i]=='/' || s[i]=='-' || s[i]=='*' || s[i]=='^')         {             if( head==NULL)                 push(s[i]);             else if(head->data=='(')
                push(s[i]);
            else if(priority(head->data, s[i] )!=1)
                push(s[i]);
            else
            { op[j]=pop();
                j++;
                push(s[i]);
            }
        }
        else if(s[i]==')')
        {
            while(head!=NULL && head->data!='(')
            {
                op[j]=pop();
                j++;
            }
            pop();
        }
    }
    while(head!=NULL)
    {
        op[j]=pop();
        j++;
    }
}
int main()
{
    int i,n;
    char c[50];
    n=strlen(c);

	do
	{
		printf("Masukkan Infix [max 50 karakter]: ");
		scanf("%s",c);
	}while(n>50 || n<1);
	n=strlen(c);
    convert(c,n);
    printf("Notasi postfix-nya adalah: ");
    for(i=0;i<n;i++)
    {
		printf("%c",op[i]);
    }
	getchar();
	getchar();
    return 0;
}
Posted in Struktur Data, Uncategorized | Leave a comment

Tugas Struktur Data (32PPT) – Doubly Linked List

Download: http://pastebin.com/SpCBXAhU

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

struct node
{
int data;
struct node *prev;
struct node *next;
}*head, *last;

void display()
{
struct node *temp;
temp=head;

while(temp!=NULL)
{
printf(” %d “,temp->data);
temp=temp->next;
}
}

void insertAwal()
{
struct node *var,*temp;
var=(struct node *)malloc(sizeof(struct node));
var->data=0;
temp=var;
temp->prev=NULL;
temp->next=head;
head->prev=temp;
head=temp;
}

void insertTengah()
{
struct node *temp,*var,*temp1;
var=(struct node *)malloc(sizeof(struct node));
var->data=2;
temp=head;

while(temp!=NULL && temp->data!=1)
{
temp=temp->next;
}

temp1=temp->next;
temp->next=var;
var->prev=temp;
var->next=temp1;
temp1->prev=var;

last=head;
}

void insertAkhir()
{
struct node *var,*temp;
var=(struct node *)malloc(sizeof(struct node));
var->data=5;

last=head;
while(last!=NULL)
{
temp=last;
last=last->next;
}
last=var;
temp->next=last;
last->prev=temp;
last->next=NULL;
}

int main()
{
int pilih=0;
head=NULL;

struct node *temp;
struct node *var = (struct node *)malloc(sizeof(struct node));
var->data=1;
head=var;
head->prev=NULL;
head->next=NULL;
last=head;

var=(struct node *)malloc(sizeof(struct node));
var->data=3;
last=head;

temp=last;
last=var;
temp->next=last;
last->prev=temp;
last->next=NULL;

do{
printf(“Albert Hendry Harsono/1701296914/StrukDat-32PPT\n\n”);
printf(“Data yang ada di linked list: “);
display();
printf(“\n\n”);

printf(“Menu: \n”);
printf(“1. Tampilkan memasukkan 0 di awal list\n”);
printf(“2. Tampilkan memasukkan 2 di antara 1 dan 3\n”);
printf(“3. Tampilkan memasukkan 5 di akhir list\n”);
printf(“4. Exit\n”);

do{
printf(“Pilihan: “);
scanf(“%d”,&pilih);fflush(stdin);
}while(pilih>4 || pilih<1);

if(pilih==1)
{
insertAwal();
printf(“\n\n”);
}

else if(pilih==2)
{
insertTengah();
printf(“\n\n”);
}

else if(pilih==3)
{
insertAkhir();
printf(“\n\n”);
}
system(“cls”);
}while(pilih!=4);

getchar();
}

Posted in Struktur Data, Uncategorized | Leave a comment

TUGAS TM02- PEMROGRAMAN BERORIENTASI OBYEK

TM 02

(Albert Hendry Harsono/1701296914/02PPT)

1.   Copy constructor suatu class dieksekusi jika obyek klas di-copy dengan mekanisme di bawah ini kecuali:

a. direct assignment

b. initialization

c. passing by value

d. 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 class 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”;

}

}

Output:

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: method yang pertama kali dijalankan pada saat pembuatan suatu obyek. Constructor mempunyai nama yang sama dengan nama class dan tidak mempunyai return type.

– User-defined Constructor: Constructor yang dibuat/didefinisikan sendiri oleh user sesuai kebutuhan.

– Default Constructor: sebuah fungsi anggota yang namanya sama dengan nama kelas.

Parameterized Constructor: Constructor yang mempunyai satu atau lebih parameter.

– Constructor Initialization List: fasilitas yang disediakan oleh C++ untuk menyederhanakan struktur suatu constructor.

– Copy Constructor: Constructor dengan satu parameter dengan tipe yang sama yang ditetapkan untuk setiap anggota variabel class nonstatik objek yang datanya disalin dari objek sebelumnya.

– Destructor: sebuah method yang berguna untuk “menghancurkan” sebuah obyek (kelas) dari memori. Nama dari fungsi destructor sama dengan nama class dengan ditambahkan tanda tilde (~) di depan nama class.

 

8.   Uraikan apa yang kamu ketahui tentang default arguments di C++. Sebutkan apa saja  yang dapat digunakan sebagai default value. Mengapa nilai constant tidak dapat digunakan sebagai default value untuk reference variable?

– Default Argument:  Suatu nilai yang akan dipakai sebagai argumen bila fungsi tidak dipanggil dengan argumen lengkap. Sebagai contoh, constructor dengan default argument memiliki satu atau lebih parameter yang fungsi constructnya sudah disediakan nilai awal sebagai nilai otomatis yang akan diberikan ketika programmer tidak mencantumkannya.

– Default value yang yang diperbolehkan adalah semua tipe data kecuali tipe constant, bisa berupa variabel global, atau pemanggilan suatu fungsi.

– Constant value tidak dapat digunakan karena nilainya bersifat konstan (tidak dapat diubah), bertolak belakang dengan default value yang akan digunakan programmer untuk  memberi nilai yang bersifat modifiable (biasanya dari input user).

 

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 merupakan suatu fitur dalam C++ yang dapat digunakan seorang programmer di mana programmer diperbolehkan menggunakan fungsi dengan nama yang sama dengan suatu syarat tertentu.

Berikut syarat dari Function Overloading (minimal 1 harus terpenuhi):

– Jumlah parameter yang berbeda

– Tipe data dalam parameter list yang berbeda

– Urutan parameter berbeda jika jumlah dan tipe parameter sama

 

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 saat memenuhi kondisi berikut:

–        Suatu object di-copy sesuai meaning dari suatu inisialisasi deklarasi

–        Suatu object dipindahkan(dioper) ke suatu fungsi sesuai value-nya

–        Suatu object memiliki nilai return dari suatu fungsi

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);

            }

b. Untuk penggalan kode di atas berapa kali copy constructor dieksekusi?

1 kali.

I AM PROUD AS A BINUSIAN

Posted in PBO, Uncategorized | Tagged | Leave a comment

Tugas Struktur Data (32PPT) – Linked List Insertion

Tugas Tutorial Class 32PPT
Input angka (maks. 10) & Output angka dengan Linked list

Albert Hendry Harsono (1701296914)

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

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

int main()
{
int banyak=0;
int j=0;
struct node *root;
struct node *conductor;

do{
printf(“Masukkan banyaknya angka yang ingin diinput [1..10]: “);
scanf(“%d”,&banyak);fflush(stdin);
}while(banyak>10 || banyak<1);

//awal
root=(struct node*)malloc(sizeof(struct node));
root->next=0;
printf(“Input ke-1: “);
scanf(“%d”,&root->x);fflush(stdin);

conductor=root;
conductor->next=(struct node*)malloc(sizeof(struct node));
conductor=conductor->next;

if(conductor==0)
{

}

if(banyak==1){
printf(“Output: %d “,root->x);
}

if(banyak==2){
//akhir
conductor->next=0;
printf(“Input ke-2: “);
scanf(“%d”,&conductor->x);fflush(stdin);

conductor=root;

printf(“Output: “);

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

if(banyak>2){
//tengah
for(int i=2;i<banyak;i++){
conductor->next=0;
printf(“Input ke-%d: “,i);
scanf(“%d”,&conductor->x);fflush(stdin);

conductor->next=(struct node*)malloc(sizeof(struct node));
conductor=conductor->next;

if(conductor==0)
{
return 0;
}

j=i;
}

//akhir
conductor->next=0;
printf(“Input ke-%d: “,j+1);
scanf(“%d”,&conductor->x);fflush(stdin);

conductor=root;

printf(“Output: “);

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

printf(“\n”);
getchar();
}

Posted in Struktur Data, Uncategorized | Tagged | Leave a comment