1. Deskripsi Infix
Notasi aritmatik biasa ditulis dalam notasi infix, misal A+B-C yang mudah dimengerti oleh manusia , hanya saja dalam notasi infix perl diperhatikan prioritas pengerjaan karena berhubungan dengan hirarki operator pada komputer. perioritas pengerjaannya adalah:
a. Tanda kurung ( )
b. Eksponensial atau pangkat ^
c. Perkalian, Pembagian *,/
d. Penjumlahan, Pengurangan +,-
contoh : (A+B)-(C*D)
Prioritas pengerjaan soal di atas adalah sebagai berikut :
a. Dalam kurung yang paling kiri (A+B)
b. Dalam kurung yang kedua (C*D)
c. Perkalian hasil pengurangan dengan hasil penhumlahan
Notasi infix biasa diubah ke notasi prefix dan juga postfix
2. Deskripsi Prefix dan Cara Pengerjaannya
Prefix adalah keadaan di mana simbol operator diletakkan sebelum dua operand. berikut contoh perubahan notasi infix ke prefix:
(A+B)-(C*D)
untuk pengerjaan infix , perlu diperhatikan urutan sebagai berikut:
a. pengerjaan dalam kurung ke-1 : (A+B), prefixnya +AB
b. pengerjaan dalam kurung ke-2 : (C*D), prefixnya *CD
c. terakhir adalah operator -, +AB-*CD, prefixnya -+AB*CD
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 20
char stack[MAX];
int top = -1;
char pop();
void push(char item);
int prcd(char symbol)
{
switch(symbol)
{
case '+':
case '-':
return 2;
case '*':
case '/':
return 4;
case '^':
case '$':
return 6;
case '(':
case ')':
case '#':
return 1;
}
}
int isoperator(char symbol)
{
switch(symbol)
{
case '+':
case '-':
case '*':
case '/':
case '^':
case '$':
case '(':
case ')':
return 1;
default:
return 0;
}
}
void convertip(char infix[],char prefix[])
{
int i,symbol,j=0;
char test[MAX];
infix=strrev(infix);
stack[++top]='#';
for(i=0;i<strlen(infix);i++)
{
symbol=infix[i];
if(isoperator(symbol)==0)
{
prefix[j]=symbol;
j++;
}
else
{
if(symbol==')')
{
push(symbol);
}
else if(symbol=='(')
{
while(stack[top]!=')')
{
prefix[j]=pop();
j++;
}
pop();//pop out (.
}
else
{
if(prcd(symbol)>prcd(stack[top]))
{
push(symbol);
}
else
{
while(prcd(symbol)<=prcd(stack[top]))
{
prefix[j]=pop();
j++;
}
push(symbol);
}
}
}
}
while(stack[top]!='#')
{
prefix[j]=pop();
j++;
}
prefix[j]='\0';//null terminate string.
prefix=strrev(prefix);
}
int main()
{
char infix[20],prefix[20];
{
puts("==============================");
puts(" PROGRAM INFIX TO PREFIX ");
puts("==============================\n");
puts("NPM : 18.420.071");
puts("Nama : WIWIN TRI ASTUTI");
puts("Semester : 3c(TI)\n");
}
printf("Masukkan notasi Infix?\n");
gets(infix);
convertip(infix,prefix);
printf("Notasi prefixnya adalah:\n");
puts(prefix);
getch();
return 0;
}
void push(char item)
{
top++;
stack[top]=item;
}
char pop()
{
char a;
a=stack[top];
top--;
return a;
}
Outputnya :
Selamat Mencoba dan Semoga Bermanfaat☺
Tidak ada komentar:
Posting Komentar