Selasa, 15 Maret 2011

konversi_infix_ke_postfix

program konversi_infix_ke_postfix;
uses crt;

const max_elemen = 255;

type s255 = string [max_elemen];
tumpukan = record
rinci : s255;
atas : 0..max_elemen
end;

var infix : s255;
lagi : char;

function valensi (tanda_op : char) : integer;
begin
case tanda_op of
'^' : valensi := 3;
'*', '/' : valensi := 2;
'+', '-' : valensi := 1;
'(' : valensi := 0
end
end;

procedure push (var t : tumpukan; elemen : char);
begin
t.atas := t.atas +1;
t.rinci[t.atas] := elemen
end;

function pop (var t : tumpukan) : char;
begin
pop := t.rinci[t.atas];
t.atas := t.atas - 1
end;

procedure konversi_cetak (infix : s255);
var i : integer;
operator : set of char;
temp, kar : char;
t : tumpukan;
test : boolean;
begin
operator := ['^']+['*']+['/']+['+']+['-'];
for i := 1 to length (infix) do
begin
kar := infix[i];
if kar = '(' then push (t, kar)
else if kar = ')' then
begin
while t.rinci[t.atas] <> '(' do
write (pop(t) : 2);
temp := pop(t)
end
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 else if kar <> ' ' then
write (kar : 2)
end;

if t.atas <> 0 then
repeat
write (pop(t):2)
until t.atas = 0
end;

begin
clrscr;
writeln ('Mengubah Notasi Infix Menjadi Postfix');
writeln ('Dengan Memanfaatkan Struktur Tumpukan');
writeln ('-------------------------------------');
writeln ;
repeat
write ('Masukkan Ungkapan Infix : ');
readln (infix); writeln;
write ('Ungkapan Postfix : ');
konversi_cetak (infix);
writeln; writeln;
write ('Akan Mencoba Lagi ? y(a) / t(idak) : ');
readln (lagi);
writeln
until not (lagi in ['Y', 'y'])
end.

program tersebut menggunakan pemerograman bahasa pascal.


#include
#define MAX 25
int stack[MAX],TOS=-1;
int precedence(char symbol)
{
int result;
switch(symbol)
{
case ‘(‘:result=0;break;
case ‘+’:
case ‘-’:result=1;break;
case ‘*’:
case ‘/’:result=2;break;
case ‘^’:result=3;break;
}
return(result);
}
int isoperand(char symbol)
{
return((symbol >= ‘a’ && symbol <= ‘z’) ||
(symbol >= ‘A’ && symbol <= ‘Z’) ||
(symbol >= ‘0’ && symbol <=’9'));
}
int isoperator(char symbol)
{
int result=0;
switch(symbol)
{
case ‘+’:
case ‘-’:
case ‘*’:
case ‘/’:
case ‘^’:result=1;break;
}
return(result);
}
main()
{
char infix[MAX],postfix[MAX];
int inputpointer,outputpointer;
inputpointer = outputpointer = -1;
stack[++TOS]=’(‘;
printf(“\nEnter the infix expression : “);
scanf(“%s”,infix);
while(infix[++inputpointer]!=’\0')
{
if(isoperand(infix[inputpointer]))
postfix[++outputpointer]=infix[inputpointer];
else if(isoperator(infix[inputpointer]))
{
while(precedence(infix[inputpointer]) <=
precedence(stack[TOS]))
postfix[++outputpointer]=stack[TOS—];
stack[++TOS]=infix[inputpointer];
}
else if(infix[inputpointer]==’(‘)
stack[++TOS]=’(‘;
else if(infix[inputpointer]==’)’)
{
while(stack[TOS]!=’(‘)
postfix[++outputpointer]=stack[TOS—];
TOS—;
}
else
{
printf(“invalid symbol “);
exit(1);
}
}
while(stack[TOS]!=’(‘)
postfix[++outputpointer]=stack[TOS—];
postfix[++outputpointer]=’\0';
printf(“\nThe postfix expression is %s”,postfix);
}

program tersebut menggunakan bahasa pemerograman C++

Tidak ada komentar:

Posting Komentar

 
Copyright 2009 Science Park