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

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