• Tidak ada hasil yang ditemukan

LAPORAN ALGORITMA DAN STRUKTUR DATA II

N/A
N/A
Protected

Academic year: 2018

Membagikan "LAPORAN ALGORITMA DAN STRUKTUR DATA II"

Copied!
8
0
0

Teks penuh

(1)

LAPORAN PRAKTIKUM

ALGORITMA STRUKTUR DATA II

STACK

Disusun oleh :

Syukur Jaya Mendrofa 201501072

PROGRAM STUDI SISTEM INFORMASI

SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO

PURWOKERTO

(2)

LISTING PROGRAM PRAKTIKUM DAN OUTPUT

Listing program :

#include<iostream> #include<stack> #include<string>

using namespace std;

string InfixToPostfix(string expression);

int HasHigherPrecedence(char operator1, char operator2); bool IsOperator(char C);

bool IsOperand(char C);

int main() {

string expression;

cout<<"Masukkan Infix Expression \n"; getline(cin,expression);

string postfix = InfixToPostfix(expression); cout<<"Output = "<<postfix<<"\n";

}

string InfixToPostfix(string expression) {

stack<char> S; string postfix = "";

for(int i = 0;i<expression.length();i++) {

if(expression[i] == ' ' || expression[i] == ',') continue; else if(IsOperator(expression[i]))

{

while(!S.empty() && S.top() != '(' && HasHigherPrecedence(S.top(), expression[i])) { postfix+= S.top(); S.pop(); } S.push(expression[i]); } else if(IsOperand(expression[i])) {

postfix += expression[i]; }

else if(expression[i] == '(') {

S.push(expression[i]); }

else if(expression[i] == ')') {

while(!S.empty() && S.top() != '('){ postfix += S.top();

S.pop(); } S.pop(); } } while(!S.empty()) {

(3)

S.pop(); }

return postfix; }

bool IsOperand(char C) {

if(C >= '0' && C<= '9') return true; if(C >= 'a' && C<= 'z') return true; if(C >= 'A' && C<= 'Z') return true; return false;

}

bool IsOperator(char C) {

if(C == '+' || C == '-' || C == '*' || C == '/' || C == '$') return true;

return false; }

int IsRightAssociative(char op) {

if(op == '$') return true; return false;

}

int GetOperatorWeight(char op) {

int weight = -1; switch(op) {

case '+': case '-': weight =1; case '*': case '/': weight = 2; case '$': weight = 3; }

return weight; }

int HasHigherPrecedence(char op1, char op2) {

int op1Weight = GetOperatorWeight(op1); int op2Weight = GetOperatorWeight(op2);

if(op1Weight == op2Weight) {

if(IsRightAssociative(op1)) return false; else return true;

}

(4)

Output

Tugas Praktikum

1. Buat Program Konversi Postfix ke Infix

2. Buat Program Konversi Postfix ke Prefix

Listing Program :

#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> # define MAX 20

char str[MAX],stack[MAX]; int top=-1;

void push(char c) {

stack[++top]=c; }

char pop() {

return stack[top--]; }

void postfix_infix() {

int u,n; char b,op;

printf("\n########### POSTFIX ke INFIX ###############\n\n"); printf("Postfix Ekspresi \n");

gets(str); gets(str); n=strlen(str); for(u=0;u<MAX;u++) stack[u]=NULL;

printf("Infix Ekspresi :\t\n"); printf("%c",str[0]);

for(u=1;u<n;u++) {

if(str[u]=='+'||str[u]=='-'||str[u]=='*'||str[u]=='/') {

b=pop(); op=str[u];

printf("%c%c",op,b); }

else {

push(str[u]); }

}

(5)

void postfix_prefix() {

int n,m;

printf("\n########### POSTFIX ke PREFIX ###############\n\n"); printf("Postfix Ekspresi\n");

gets(str); gets(str); m=strlen(str);

printf("Prefix Ekspresi :\n"); for(n=m-1;n>=0;n--)

printf("%c",str[n]); }

int main() {

int pil; while(1) {

printf("\n******************** STACK **************************\n"); printf("\n\n Pilihan Konversi : \n");

printf("1.Postfix ke Infix\n2.Postfix ke Prefix\n3.Keluar\n\n"); scanf("%d",&pil);

switch(pil) {

case 1:postfix_infix();break; case 2:postfix_prefix();break; case 3:exit(0);

default:printf("Pilihan Anda tidak tersedia");break; }

}

}

(6)

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

# define MAX 20

char str[MAX], stack[MAX];

int top = -1;

void push(char c)

{

stack[++top] = c;

}

char pop()

{

return stack[top--];

}

void postfix_infix()

{

int u, n;

char b, op;

printf("\n########### POSTFIX ke INFIX ###############\n\n");

printf("Postfix Ekspresi \n");

gets(str);

gets(str);

n = strlen(str);

for (u = 0; u<MAX; u++)

stack[u] = NULL;

(7)

for (u = 1; u<n; u++)

{

if (str[u] == '+' || str[u] == '-' || str[u] == '*' || str[u] ==

'/')

{

b = pop();

op = str[u];

printf("%c%c", op, b);

}

else

{

push(str[u]);

}

}

printf("%c", str[top--]);

}

void postfix_prefix()

{

int n,m;

printf("\n########### POSTFIX ke PREFIX ###############\n\n");

printf("Postfix Ekspresi\n");

gets(str);

gets(str);

m=strlen(str);

printf("Prefix Ekspresi :\n");

for(n=m-1;n>=0;n--)

printf("%c",str[n]);

}

(8)

{

int pil;

while(1)

{

printf("\n******************** STACK **************************\n");

printf("\n\n Pilihan Konversi : \n");

printf("1.Postfix ke Infix\n2.Postfix ke Prefix\n3.Keluar\n\n");

scanf("%d",&pil);

switch(pil)

{

case 1:postfix_infix();break;

case 2:postfix_prefix();break;

case 3:exit(0);

default:printf("Pilihan Anda tidak tersedia");break;

}

}

Referensi

Dokumen terkait

Kegiatan audit tahun 2012 pada dasarnya dapat berjalan sesuai dengan yang digariskan dalam rencana kerja dengan beberapa penyesuaian waktu sesuai dengan perkembangan kondisi di

Sementara itu, berdasarkan hasil interpretasi lineasi citra dengan metode FFD , diketahui daerah kecamatan Kendari, kecamatan Kendari Barat, kecamatan Abeli dan kecamatan

[r]

100% of gonadectomized and T-treated control mice exhibited aggressive behavior since the first day in contrast to the low per- centage (30%) obtained for gonadally intact males.

Pada tabel 3.1 menjelaskan hubungan antara jumlah bahan peledak yang dipakai dengan ukuran heading setelah peledakan, Ukuran plan heading adalah 7 x 6,3 m dengan

[r]

Male and female pigeons implanted with deslorelin had significantly lower mean LH concentrations at 7, 28, and 56 ( P , .05) days after implantation compared with the respective

27 Benar bahwa pengkajian secara komprehensif terhadap sumber ajaran Islam, baik al-Quran maupun hadis, akan menjurus kepada sebuah kesimpulan bahwa Islam telah