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;
}
#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;
}