NAMA : AGUSTINE HANA .M
KELAS : 2 KA 17NPM : 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 :