PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : درخواست توضیحاتی درباره دو برنامه



eli20
24th October 2010, 03:51 PM
سلام به همه خوبین؟بچه ها توضیحات کامل راجع به این 2تا برنامه واسه یه ناشی میخوام یه جوری که بفهمه قربون همتون من یکم درگیرم بدم بهش مرسی.یکی راجع به تبدیل infix به pstffix یکی هم تبدیل infix به prefix

#include<stdio.h>
char A[100];
int top=-1;
void push(char x){
if(top<99)
A[++top]=x;
}
char pop(){
if(top>-1)
return A[top--];
return 0;
}
char peak(){
if(top>-1)
return A[top];
return 0;
}
int priority(char x){
if(x=='#')
return 1;
if(x=='+' || x=='-')
return 2;
if(x=='*' || x=='/')
return 3;
return 0;
}
void infix2postfix(char*infixexp,char*postfixexp){
push('#');
for(int i=0,k=0;infixexp[i];i++){
if(infixexp[i]=='('){
push('(');
continue;
}
if(priority(infixexp[i])){
while(priority(peak())>=priority(infixexp[i]))
postfixexp[k++]=pop();
push(infixexp[i]);
continue;
}
if(infixexp[i]==')'){
while(peak()!='(')
postfixexp[k++]=pop();
pop();
continue;
}
if(!priority(infixexp[i])){
postfixexp[k++]=infixexp[i];
continue;
}
}
while(peak()!='#')
postfixexp[k++]=pop();
postfixexp[k]=0;
}
int main(){
char infix[100];
printf("Please Enter A infix Expression.\nOperands Are characters and ( ) + - * / are allowed for operators.\n");
scanf("%s",infix);
char postfix[100];
infix2postfix(infix,postfix);
printf("\nThe Postfix Form is : %s",postfix);
return 0;
}
و
#include<stdio.h>
#include<string.h>
char A[100];
int top=-1;
void push(char x){
if(top<99)
A[++top]=x;
}
char pop(){
if(top>-1)
return A[top--];
return 0;
}
char peak(){
if(top>-1)
return A[top];
return 0;
}
int priority(char x){
if(x=='#')
return 1;
if(x=='+' || x=='-')
return 2;
if(x=='*' || x=='/')
return 3;
return 0;
}
void infix2postfix(char*infixexp,char*postfixexp){
push('#');
for(int i=0,k=0;infixexp[i];i++){
if(infixexp[i]==')'){
push(')');
continue;
}
if(priority(infixexp[i])){
while(priority(peak())>=priority(infixexp[i]))
postfixexp[k++]=pop();
push(infixexp[i]);
continue;
}
if(infixexp[i]=='('){
while(peak()!=')')
postfixexp[k++]=pop();
pop();
continue;
}
if(!priority(infixexp[i])){
postfixexp[k++]=infixexp[i];
continue;
}
}
while(peak()!='#')
postfixexp[k++]=pop();
postfixexp[k]=0;
}
char*StrReverse(char*string){
int t=strlen(string);
char result[100];
for(int i=0;i<t;i++)
result[i]=string[t-i-1];
result[i]=0;
return result;
}
int main(){
char infix[100],postfix[100];
printf("Please Enter A infix Expression.\nOperands Are characters and ( ) + - * / are allowed for operators.\n");
scanf("%s",infix);
strcpy(infix,StrReverse(infix));
infix2postfix(infix,postfix);
strcpy(postfix,StrReverse(postfix));
printf("\nThe Postfix Form is : %s",postfix);
return 0;
}

eli20
25th October 2010, 01:15 PM
راستی تو بخش تبدیل infix به postfix هم اگه بخواد مقدار حساب کنه(جواب) اونوقت معنی این الگوریتم

int B[100];
int topi=-1;
void pushi(int x){
if(topi<99)
B[++topi]=x;
}
int popi(){
if(topi>-1)
return B[topi--];
return 0;
}
int calculate(char*exp){
for(int i=0;exp[i];i++)
if(!priority(exp[i]))
pushi(exp[i]-48);
else{
if(exp[i]=='+')
pushi(popi()+popi());
if(exp[i]=='-')
pushi(-popi()+popi());
if(exp[i]=='*')
pushi(popi()*popi());
if(exp[i]=='/'){
int a=popi();
int b=popi();
pushi(b/a);
}
}
return popi();
معذرت اگه وقت داشتم نوضیح میدادم بهش اما تا شب میخواد قربون همتون

eli20
27th October 2010, 09:30 AM
اینو کی عوض کرده؟این جمله بندیه آخه؟انگار من بیسوادم[taajob]

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد