Infijo A Postfijo
jahenu26 de Noviembre de 2012
314 Palabras (2 Páginas)471 Visitas
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAXIMO 100
struct LIFO {
int t;
char a[100];
};
int main (){
char posfijo [100],infijo[100];
int i;
void in_a_pos (char *infijo,char *posfijo);
printf ("De expresion escrita correctamente en infijo.\n");
printf ("Este programa no trabaja expresiones con Parentesis \n");
gets (infijo);
i = strlen (infijo);
infijo [i] = '#';
infijo [i+1] = '\0';
in_a_pos (infijo,posfijo);
printf ("%s %s ",infijo,posfijo);
}
void in_a_pos (char *infijo,char *posfijo) {
struct LIFO pila;
int operando (char c);
int prioridad (char op1,char op2);
char tope (struct LIFO p);
void init_pila (struct LIFO *p);
int pila_vacia (struct LIFO *p);
void ins_pila (struct LIFO *p,char s);
void retira_pila (struct LIFO *p,char *s);
int i,j;
char elemento;
i=0;
j=-1;
init_pila (&pila);
while (infijo [i] != '#') {
if (operando (infijo [i]) )
posfijo [++j] = infijo [i++];
else {
while (!pila_vacia (&pila) &&
prioridad (tope (pila),infijo [i] ) ) {
retira_pila (&pila,&elemento);
posfijo [++j] = elemento;
}
ins_pila (&pila,infijo [i++]);
}
}
while (!pila_vacia (&pila) ) {
retira_pila (&pila,&elemento);
posfijo [++j] = elemento;
}
posfijo [++j] = '\0';
}
int operando (char c) {
return ( c != '+' &&
c != '-' &&
c != '*' &&
c != '/' &&
c != '^' );
}
static int m[5][5] = {
{ 1,1,0,0,0 },
{ 1,1,0,0,0 },
{ 1,1,1,1,0 },
{ 1,1,1,1,0 },
{ 1,1,1,1,1 }
};
int prioridad (char op1,char op2) {
int i,j;
switch (op1) {
case '+' : i = 0; break;
case '-' : i = 1; break;
case '*' : i = 2; break;
case '/' : i = 3; break;
case '^' : i = 4; break;
}
switch (op2) {
case '+' : j = 0; break;
case '-' : j = 1; break;
case '*' : j = 2; break;
case '/' : j = 3; break;
case '^' : j = 4; break;
}
return (m [i][j]);
}
char tope (struct LIFO p){
return ( p.a [p.t -1] );
}
void init_pila
...