#include
#include
#include
#include
#define max 100
struct deret{
char angka[max];
int atas;
};
char akhir[max];
char awal[max];
struct deret tumpuk;
int data(char x)
{ if(isalpha(x)) return 1;
return 0;
}
int tanda(char x)
{ if(x=='^'||x=='*'||x=='/'||x=='+'||x=='-')
return 1;
else return 0;
}
int tingkatan(char x)
{ if(x=='^') return 3;
else if(x=='*'||x=='/') return 2;
else if(x=='+'||x=='-') return 1;
else return 0;
}
void entry(char x)
{ tumpuk.atas++;
tumpuk.angka[tumpuk.atas]=x;
}
char delet()
{ char x;
x=tumpuk.angka[tumpuk.atas];
tumpuk.atas--;
return x;
}
void main()
{ int i,j,k;
char x,jwb;
tumpuk.atas=-1;
k=-1;
clrscr();
gotoxy(13,2); printf("-------------------------------------------");
gotoxy(15,3); printf(" MENGUBAH NOTASI INFIX MENJADI POSTFIX");
gotoxy(15,4); printf(" DENGAN MEMANFAATKAN STRUKTUR TUMPUKAN");
gotoxy(13,5); printf("-------------------------------------------");
gotoxy(13,7); printf("Masukan ungkapan awal (infix) : ");scanf("%s",&awal);
gotoxy(13,8); printf("Ungkapan akhir (postfix) : ");
do
{ for(i=0;i<=strlen(awal);i++) { if(data(awal[i])) akhir[++k]=awal[i]; else if(awal[i]=='(') entry(awal[i]); else if(awal[i]==')') { while(tumpuk.angka[tumpuk.atas]!='(') akhir[++k]=delet(); delet(); } else if(tanda(awal[i])) { while (tumpuk.atas!=-1 && tingkatan(awal[i])<=tingkatan(tumpuk.angka[tumpuk.atas])) akhir[++k]=delet(); entry(awal[i]); } else if(tumpuk.atas!=-1) { for(j=tumpuk.atas;j>-1;j--)
akhir[++k]=delet();
}
}
for(k=0;k<=strlen(akhir);k++) { printf("%c",akhir[k]);} gotoxy(13,10); printf("-------------------------------------------"); gotoxy(13,12); printf("Anda akan mencoba lagi?(Y=ya/T=tidak)"); scanf("%c",&jwb); } while(jwb=='Y'||jwb=='y'); getch(); }
Tidak ada komentar:
Posting Komentar