Selasa, 15 Maret 2011

MENGUBAH NOTASI INFIX MENJADI POSTFIX

NAMA : AGUSTINE HANA .M
KELAS : 2 KA 17
NPM : 12109549


Buatlah program untuk menterjemahkan notasi Infix dengan output postfix !!!


saya mencoba membuat coding untuk 2 bahasa pemrograman PASCAL dan C ++


PASCAL :


program infix_postfix;
uses crt;


const
n = 255;


type S255 = string[n];
Tumpukan = record
Rinci : S255;
Atas : 0..n
end;


var
Infix : S255; {* notasi infix *}
Lagi : char;


{* Fungsi untuk menentukan valensi operator*}
function VALENSI (operator : char) : integer;


begin
case operator of
'^' : VALENSI := 3; {* pangkat *}
'*', '/' : VALENSI := 2; {* kali atau bagi *}
'+', '-' : VALENSI := 1; {* plus atau minus *}
'(' : VALENSI := 0 {* kurung buka *}
end
end; {* fungsi VALENSI *}


{* Prosedur memasukkan elemen ke dalam tumpukan *}
procedure PUSH (var T : Tumpukan; Elemen : char);


begin
T.Atas := T.Atas + 1;
T.Rinci[T.Atas] := Elemen
end;


{* Fungsi untuk mengambil elemen dari tumpukan * }
function POP (var T : Tumpukan) : char;


begin
POP := T.Rinci[T.Atas];
T.Atas := T.Atas - 1
end;


{*Prosedur untuk melalukan konversi dan mencetak hasil*}
procedure CETAK (Infix : S255);


var
a : integer;
Operator : set of char;
Temp, Kar : char;
T : Tumpukan;
Test : boolean;


begin
{* Himpunan operator yang diijinkan *}
Operator := ['^']+['*']+['/']+['+']+['-'];


{* Melakukan konversi *}
for a := 1 to length(Infix) do
begin
Kar := Infix[a];


{* Kurung buka. Push ke dalam tumpukan *}
if Kar = '(' then PUSH(T, Kar)


{* Kurung tutup. Pop semua elemen tumpukan
dicetak, sampai elemen atas tumpukan
adalah kurung buka. Pop juga elemen ini
tetapi tidak perlu ditulis *}


else if Kar = ')' then


begin
while T.Rinci[T.Atas] <> '(' do
write(POP(T):2);
Temp := POP(T)
end


{* Operator. Test valensinya terhadap valensi elemen atas tumpukan.
Jika valensinya lebih kecil, pop elemen atas tumpukan sampai
valensi elemen atas tumpukan lebih kecil. *}


else if Kar in Operator then
begin
while (T.Atas <> 0) and (VALENSI(Kar) <= VALENSI(T.Rinci[T.Atas])) do
write(POP(T):2);
PUSH(T, Kar)
end


{* Operand. Langsung dicetak. *}
else if Kar <> ' ' then
write(Kar:2)
end;


if T.Atas <> 0 then
{* Tumpukan masih isi. Pop semua elemen *
* yang masih ada dalam tumpukan *}
repeat
write(POP(T):2)
until T.Atas = 0;
end;


{*coding Program utama *}
begin
clrscr;
gotoxy (18,1);
writeln('-----------------------------------------');
gotoxy (18,2);
writeln('* MENGUBAH NOTASI INFIX MENJADI POSTFIX *');
gotoxy (18,3);
writeln('********DENGAN MEMANFAATKAN STACK********');
gotoxy (18,4);
writeln('*****************************************');
writeln;
repeat


{* Notasi infix yang akan dikonversikan *}
gotoxy (18,7);
write('Masukkan notasi infix = ');
readln(Infix);
gotoxy (18,9) ;
write('Maka notasi  postfix nya  = ');


{* Melakukan konversi dan mencetak hasil *}
CETAK (Infix);


writeln; writeln;
write('Anda ingin mencoba lagi? Y/T: ');
readln(Lagi);
writeln
until not (Lagi in ['Y', 'y'])
end.




OUTPUT PROGRAM :






 C ++ :



//program untuk merubah notasi infix ke notasi postfix

#include<stdio.h>

#include<conio.h>

#include<string.h>

#define MAX 20
 //pendeklarasian tipe data
char stack[MAX];  

int top=-1;

char pop();

void push(char item);

int prcd(char symbol)

{

switch(symbol)

{

case '+':

case '-':return 2;

break;

case '*':

case '/':return 4;

break;

case '^':

case '$':return 6;

break;

case '(':

case ')':

case '#':return 1;

break;

}

}

int isoperator(char symbol)

{

switch(symbol)

{

case '+':

case '-':

case '*':

case '/':

case '^':

case '$':

case '(':

case ')':return 1;

break;

default:return 0;

}

}

void convertip(char infix[],char postfix[])

{

int i,symbol,j=0;

stack[++top]='#';

for(i=0;i<strlen(infix);i++)

{

symbol=infix[i];

if(isoperator(symbol)==0)

{

postfix[j]=symbol;

j++;

}

else{

if(symbol=='(')push(symbol);

else if(symbol==')')

{

while(stack[top]!='(')

{

postfix[j]=pop();

j++;

}

pop();//pop out (.

}

else{

if(prcd(symbol)>prcd(stack[top]))

push(symbol);

else{

while(prcd(symbol)<=prcd(stack[top]))

{

postfix[j]=pop();

j++;

}

push(symbol);

}//end of else.

}//end of else.

}//end of else.

}//end of for.

while(stack[top]!='#')

{

postfix[j]=pop();

j++;

}

postfix[j]='\0';

}

void main()

{

char infix[20],postfix[20];

clrscr();

printf("Masukkan notasi Infix :\n"); 

gets(infix); //menginput notasi infix

convertip(infix,postfix);

printf("Notasi Postfix nya adalah :\n");

puts(postfix);

getch();

}

void push(char item)

{

top++;

stack[top]=item;

}

char pop()

{

char a;

a=stack[top];

top--;

return a;
 }




OUTPUT PROGRAM :





3 komentar: