برنامه تبدیل عبارات میانوندی Infix به پسوندی Postfix در سی پلاس

در سی پلاس

قیمت :   ۵۵۰۰  تومان ( پنج هزار و پانصد تومان)

رشته :

کامپیوتر

نوع فایل:

CPP , EXE

توضیحات:


توضیحات : 

سورس کد پیاده سازی برنامه تبدیل عبارات infix به postfix 

این برنامه یک عبارت infix را از ورودی گرفته و postfix آن را در خروجی چاپ می کند.

این برنامه قابلیت های زیر را دارا است:

۱- اگر تعداد پرانتز های باز و بسته متوازن نباشد خطا می دهد.

۲- قبل از تبدیل عبارت ها آنها را ارزیابی می کند ، چنانچه infix نباشد خطا می دهد:
مثلا: x,,y خطا می دهد.

۳- در خروجی پرانتز ها حذف می شوند.


همراه با فایلهای
EXE , CPP

مشاهده تصاویری از محیط این برنامه :

=================================

==========================

مشاهده بخشهایی از سورس کد این پروژه :

struct list
{ char data[1];
struct list *link; };

struct list *temp2, *temp1=0, *temp;
struct list *Operand=0,*Operator;
int Opd=0,Opt=0,StackPointer=0;
int size=0,xFlag=0,zCnt=0;

char Num[1],PopData[1],TheArray[8][100];
char TheOperator[4]=”*/+-“;
char TheOperand[12]=”1234567890()”;

//======================

void Push(char TNum[1],int xtack)
{TNum[1]=’\0′;
StackPointer=0;
temp1=0;

if(xtack==1)
{temp1=Operand;
StackPointer=Opd;
temp1->link=Operand->link; }

else
{temp1=Operator;
StackPointer=Opt;
temp1->link=Operator->link;}

//——————————
if(StackPointer > size)
{ StackPointer–;
printf(“\nStack Overflow”);}
else
{
temp = (list *) malloc(sizeof(struct list));
temp->data[0]=TNum[0];
temp->link = 0;

if(temp1 == 0) {temp1 = temp;}
else
{ temp2 = temp1;
while(temp2->link!=0)
{temp2= temp2->link;}
temp2->link = temp;
} }

//——————————

if(xtack==1)
{Operand=temp1;
Opd=StackPointer;}

else
{Operator=temp1;
Opt=StackPointer;}
}

//==========================

void Display_Stack(int xtack)
{ if(xtack==1)
{temp1=Operand;}

else
{temp1=Operator;}

if(temp1 == 0)
printf(“_”);
else
{ temp2=temp1;

while(temp2->link!=0)
{ cout << (temp2->data[0]);
temp2 = temp2->link; }
cout << (temp2->data[0]);
} }

//======================

char Pop(int xtack)
{ int cntx = 1;

if(xtack==1)
{temp1=Operand;
StackPointer=Opd;}

else
{temp1=Operator;
StackPointer=Opt;}

//———————-
if(temp1 == 0){PopData[0]=’ ‘;}
else
{ temp2 = temp1;
while(temp2->link!=0)
temp2 = temp2->link;
PopData[0]=temp2->data[0];

if(StackPointer == 1)
{ temp2 = temp1 = 0;
StackPointer = 0; }
else
{ temp2 = temp1;
while(cntx < StackPointer-1)
{ temp2 = temp2->link;
cntx++;
}
temp2->link = 0;
StackPointer–;
}
}

//——————–

if(xtack==1)
{Operand=temp1;
Opd=StackPointer;}

else
{Operator=temp1;
Opt=StackPointer;}

return PopData[0];

}

//====================

int IsPriority(char Symbol[1])
{int Prior=0;
Symbol[1]=’\0′;
if ((strcmp(Symbol,”*”)==0) || (strcmp(Symbol,”/”)==0))
{Prior=1;}
else
{Prior=0;}
return Prior;
}

//====================

void Push_Operator(char TNum[1])
{ char vTemp[1];
TNum[1]=’\0′;
if (IsPriority(TNum)==1) {xFlag=1;}
else {xFlag=0;}
Push(TNum,0);
}

//==================

int IsOperator(char Ope[1])
{ int X,Flag=0;
Ope[1]=’\0′;
for (X=0;X<=3;X++)
{if (Ope[0]==TheOperator[X])
{Flag=1;}
}
return Flag; }

//====================

int IsOperand(char Ope[1])
{ int X,Flag=0;

for (X=0;X<=11;X++)
{if (Ope[0]==TheOperand[X])
{Flag=1;}
}
return Flag; }

//===================

void Copy_Stack_to_TheArray()
{ char tempo[1];

temp1=Operand;

if(temp1 == 0)
printf(“_”);
else
{ temp2=temp1;

while(temp2->link!=0)
{ tempo[0]=temp2->data[0]; tempo[1]=’\0′;
strcpy(TheArray[zCnt],tempo); zCnt++;
temp2 = temp2->link; }

tempo[0]=temp2->data[0]; tempo[1]=’\0′;
strcpy(TheArray[zCnt],tempo);
} }

//==================

int Computes(int A,int B,char Symbol[1],int Locate)
{ int Ans,X;
Symbol[1]=’\0′;

switch(Symbol[0])
{ case ‘*’: Ans= A*B; break;
case ‘/’: Ans= A/B; break;
case ‘+’: Ans= A+B; break;
case ‘-‘: Ans= A-B; break;
}
for(X=1;X<=Locate;X++){cout<<” “;}
cout<<‘\b'<<A<< Symbol[0] << B << “=” <<Ans <<“\n”;
return Ans;
}

//===================

void Display_Array()
{ int X;
cout<<“=>³”;
for(X=0;X<=zCnt;X++)
{if (strcmp(TheArray[X],”_”)!=0)
{cout <<TheArray[X]<<“³”;}
else
{cout <<” ³”;}
}
cout<<“\n”;
}

//================

void Adjust_TheArray()
{ int Y,X,A,B;
char vTemp[8]=””;

for(Y=0;Y<=zCnt;Y++)
{for(X=zCnt;X>=0;X–)
{if (strcmp(TheArray[X],”_”)==0 || strcmp(TheArray[X],””)==0)
{ A=X;
for(B=A-1;B>=0; B–)
{if(strcmp(TheArray[B],”_”)!=0 || strcmp(TheArray[B],””)!=0)
{ strcpy(vTemp,TheArray[A]);
strcpy(TheArray[A],TheArray[B]);
strcpy(TheArray[B],vTemp);
break; }}
}}}
}

//================

int StrCmpOperator(char Ope[8])
{ int Flag=0;
switch(Ope[0])
{ case ‘*’: Flag=1; break;
case ‘/’: Flag=1; break;
case ‘+’: Flag=1; break;
case ‘-‘: Flag=1; break;
}

return Flag; }

//================

void main()
{
char Tempx[1],Infix[100],sTemp[10];

int X,XX,Cnt,Ans,A,B;
temp2 = temp1 = 0;
clrscr();

cout <<“Input Infix:”; gets(Infix);
Cnt=strlen(Infix);
size=Cnt;

//—————-
for(XX=0;XX<=Cnt-1;XX++)
{ Num[1]=’\0′;
Num[0]=Infix[XX];

if(IsOperand(Num)==1)
{if (Num[0]==’)’)
{Tempx[0] =’X’;
while (Tempx[0]!=’ ‘)
{Tempx[0]=Pop(0);
if (Tempx[0]!=’ ‘)
{Push(Tempx,1);
Opd++;}}
}

else if(Num[0]=='(‘)
{xFlag=0;}

else
{Push(Num,1); Opd++;
if(xFlag==1)
{Tempx[0]=Pop(0);
Push(Tempx,1);
Opd++;
xFlag=0;}
}
}

else
{if (IsOperator(Num)==1)
{Push_Operator(Num);
Opt++;}}
}

 

دانلود کامل پروژه همراه با فایل سورس کد و فایل اجرایی آن
در تمامی ساعات شبانه روز >> پرداخت آنلاین و دانلود آنلاین پروژه


پذیرش و انجام سفارشات پروژه های شما
شماره تماس پشتیبانی سایت : ۰۹۳۹۲۷۶۱۶۳۰



Related posts

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Translate »