Rabu, 15 Maret 2017

   A.      Dengan mengembangkan code berikut, buatlah program STACK (nomor 1) dan QUEUE                      (nomor 2) dengan ketentuan:
            a. Memiliki fungsi PUSH/ENQUEUE (input data)
            b. Memiliki fungsi POP/DEQUEUE (ambil satu data)
            c. Memiliki fungsi CLEAR (delete all data)
           d. Memiliki fungsi PRINT (cetak data pada layar)
           e. (opsional) jika user ingin menampilkan data yang diinputkan, maka data tersebut telah                          terurut secara ascending (menggunakan metode sorting yang sudah dipelajari di kelas) .

                  JAWAB;
A   1. Menggunakan struck_stack.
               
#include<iostream>
#include<conio.h>
using namespace std;

struct STACK
{
    int data[5];
    int atas;
};

STACK tumpuk;

int main ()
{
    int pilihan,baru,i;
    tumpuk.atas=-1;
    do
    {
        cout<<"1.Push Data\n";
        cout<<"2.Pop Data\n";
        cout<<"3.Print Data\n";
        cout<<"4.End Data\n";
        cout<<"\nPilihan = ";cin>>pilihan;
        switch(pilihan)
        {
            case 1:
                    {
                        if(tumpuk.atas==5-1)
                        {
                            cout<<"Tumpukan Penuh";
                            cout<<endl;
                            getch();
                        }
                        else
                        {
                            cout<<"Data yang akan di-push = ";cin>>baru;
                            tumpuk.atas++;
                            tumpuk.data[tumpuk.atas]=baru;
                        }
                        cout<<"-------------------------------------\n";
                        break;
                    }
            case 2:
                    {
                        if(tumpuk.atas==-1)
                        {
                            cout<<"Tumpukan Kosong";
                            cout<<endl;
                            getch();
                        }
                        else
                        {
                            cout<<"Data yang akan di-pop = "<<tumpuk.data[tumpuk.atas];
                            tumpuk.atas--;
                            cout<<endl;
                            getch();
                        }
                        cout<<"-------------------------------------\n";
                        break;
                    }
            case 3:
                    {
                        if(tumpuk.atas==-1)
                        {
                            cout<<"Tumpukan Kosong";
                            cout<<endl;
                            getch();
                        }
                        else
                        {
                            cout<<"\nData pada stack saat ini adalah : \n";
                            for(int i=0; i<=tumpuk.atas; i++)
                            {
                                cout<<"Nilai ruang ke "<<i<<" : "<<tumpuk.data[i]<<endl;
                            }
                            cout<<endl;
                            getch();
                        }
                        cout<<"-------------------------------------\n";
                        break;
                    }
                    default:
                    cout<<"\nTidak ada dalam pilihan";
                    cout<<endl;
                    cout<<"-------------------------------------\n";
        }
    }
    while(pilihan!=4);
    getch();
}
         
                                  Hasailnya;;;
 




       
   2. metode struck_queue

#include<stdio.h>
#include<iostream>
#include<conio.h>
#define MAX 8

using namespace std;

typedef struct{
               int data[MAX];
               int head;
               int tail;
   }Queue;
   Queue antrian;

void Create(){
   antrian.head=antrian.tail=-1;
   }
int IsEmpty(){
   if(antrian.tail==-1)
   return 1;
   else
   return 0;
   }
int IsFull(){
if(antrian.tail==MAX-1)
return 1;
else
return 0;
}

void Enqueue(int data){
if(IsEmpty()==1){
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
cout<<" sudah dimasukan "<<antrian.data[antrian.tail];
} else
if(IsFull()==0){
antrian.tail++;
antrian.data[antrian.tail]=data;
antrian.data[antrian.tail];
}
}
int Dequeue(){
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head; i<=antrian.tail-1;i++){
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear(){
antrian.head=antrian.tail=-1;
cout<<"CLEAR";
}
void Tampil(){
if(IsEmpty()==0){
for(int i=antrian.head;i<=antrian.tail;i++){
cout<<antrian.data[i];
}
}else cout<<"data kosong!\n";
}
main(){
int pil;
int data;
Create();
do{
//clrscr();

cout<<"=============================="<<endl;
cout<<"\t\t\tPROGRAM QUEUE"<<endl;
cout<<"==============================\n\n"<<endl;
cout<<"1. ENQUEUE\n "<<endl;
cout<<"2. DEQUEUE\n "<<endl;
cout<<"3. TAMPIL\n "<<endl;
cout<<"4. CLEAR\n "<<endl;
cout<<"5. EXIT\n "<<endl;
cout<<" Masukan Pilihan : ";cin>>pil;
switch(pil){

case 1: //clrscr();
cout<<"Masukan Data : ";cin>>data;
Enqueue(data);
break;

case 2: //clrscr();
Dequeue();
break;

case 3: //clrscr();
Tampil();
break;

case 4: //clrscr();
Clear();
break;
case 5:
cout<<endl<<"\nTHANKS";
break;



}

getch();
}while(pil!=5);
return 0;
}

              Hasilnya;;;;;




;

B.  Buatlah program untuk mengkonversi inputan infix menjadi postfix, program tersebut akan                menghasilkan output berupa hasil konversi ke postfix dan hasil perhitungannya. (inputan berupa           angka). 

                         jawab;;;
 #include <iostream>

#include <string.h>

#include <ctype.h>

using namespace std;
const int MAX = 50 ;

class infix

{

private :

char target[MAX], stack[MAX] ;

char *s, *t ;

int top, l ;

public :

infix( ) ;

void setexpr ( char *str ) ;

void push ( char c ) ;

char pop( ) ;

void convert( ) ;

int priority ( char c ) ;

void show( ) ;

} ;

infix :: infix( )

{

top = -1 ;

strcpy ( target, "" ) ;

strcpy ( stack, "" ) ;

l = 0 ;

}

void infix :: setexpr ( char *str )

{

s = str ;

strrev ( s ) ;

l = strlen ( s ) ;

* ( target + l ) = '\0' ;

t = target + ( l - 1 ) ;

}

void infix :: push ( char c )

{

if ( top == MAX - 1 )

cout << "\nStack is full\n" ;

else

{

top++ ;

stack[top] = c ;

}

}

char infix :: pop( )

{

if ( top == -1 )

{

cout << "Stack is empty\n" ;

return -1 ;

}

else

{

char item = stack[top] ;

top-- ;

return item ;

}

}

void infix :: convert( )

{

char opr ;



while ( *s )

{

if ( *s == ' ' || *s == '\t' )

{

s++ ;

continue ;

}



if ( isdigit ( *s ) || isalpha ( *s ) )

{

while ( isdigit ( *s ) || isalpha ( *s ) )

{

*t = *s ;

s++ ;

t-- ;

}

}



if ( *s == ')' )

{

push ( *s ) ;

s++ ;

}



if ( *s == '*' || *s == '+' || *s == '/' ||

*s == '%' || *s == '-' || *s == '$' )

{

if ( top != -1 )

{

opr = pop( ) ;



while ( priority ( opr ) > priority ( *s ) )

{

*t = opr ;

t-- ;

opr = pop( ) ;

}

push ( opr ) ;

push ( *s ) ;

}

else

push ( *s ) ;

s++ ;

}



if ( *s == '(' )

{

opr = pop( ) ;

while ( ( opr ) != ')' )

{

*t = opr ;

t-- ;

opr = pop ( ) ;

}

s++ ;

}

}



while ( top != -1 )

{

opr = pop( ) ;

*t = opr ;

t-- ;

}

t++ ;

}

int infix :: priority ( char c )

{

if ( c == '$' )

return 3 ;

if ( c == '*' || c == '/' || c == '%' )

return 2 ;

else

{

if ( c == '+' || c == '-' )

return 1 ;

else

return 0 ;

}

}

void infix :: show( )

{

while ( *t )

{

cout << " " << *t ;

t++ ;

}

}



int main( )

{

char expr[MAX] ;

infix q ;



cout << "\nMasukan Sebuah Ekspresi infix : " ;

cin.getline ( expr, MAX ) ;



q.setexpr( expr ) ;

q.convert( ) ;



cout << "Hasil konversi kedalam notasi prefix adalah: " ;

q.show( ) ;

}

  








Tidak ada komentar:

Posting Komentar