Pila implementada con apuntadores
Publicado por Delma (1 intervención) el 18/06/2006 18:18:52
Hola! Estoy resolviendo el siguiente ejercicio y me tope con un problema q no consigo resolver :(
Sera q alguien me puede ayudar?
Gracias desde ya :)
Delmita
OBS: al algoritmo me funciona con cualquier operacion matematica, menos para las del tipo: A + B )
O sea, mi algoritmo no se percata q se cerro un parentisis q nunk se abrio :S
pero para los otros ejemplo del enunciado del ejercicio, si funciona :S
/*TEMA 1:
Considere una operacion matem tica que contenga varios conjuntos de
par‚ntesis, llaves y corchetes anidados, por ejemplo.
7 - [(x*{(x+y)/(j-e)})+y]/(4-2.5)
Quiere asegurarse de que los parentesis, llaves y corchetes est‚m anidados
en forma correcta; es decir quiere comprobarse:
I) Que hay el mismo numero de parentesis, llaves y corchetes izquierdos
y derechos
II) Que todo par‚ntesis, llaves y corchetes derecho este precedido por su
pareja izquierdo.
Expresiones del tipo...
({A+B)) o A+B(
Violan la condicion I y las de tipo
] A+B-C] o (A+B)-(C+D
Violan la condici¢n II
TDA a utilizar "PILA implementada con apuntadores"
La expresi¢n debe ser introducida por teclado.
Caracteres a considerar
-()
-[]
-{}
*/
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define max 100
struct pila
{
char posicion[max];
int tope;
};
typedef struct pila t_pila;
t_pila p;
void cargar(char);
void sacar(void);
void main()
{
clrscr();
char vector[max],res;
int cont;
do{
p.tope=0;
clrscr();
textcolor(3);
cprintf("\nIngrese la expresion: ");
gets(vector);
cont=strlen(vector);
for(int i=0;i<cont;i++)
{
if(vector[i]=='('||vector[i]=='['||vector[i]=='{')
cargar(vector[i]);
else
{
if((vector[i]==')'&& p.posicion[p.tope]=='('))
sacar();
if((vector[i]==']'&& p.posicion[p.tope]=='['))
sacar();
if((vector[i]=='}'&& p.posicion[p.tope]=='{'))
sacar();
}
}
if(p.tope==0)
{
printf("\n\n");
printf("La ecuacion es CORRECTA!!!! =)");
}
else
{
printf("\n\n");
textcolor(4);
cprintf("La ecuacion NO ES CORRECTA... =,(");
}
getch();
clrscr();
textcolor(6);
cprintf("\n\n\nDesea seguir cargando S/N...?");
res=tolower(getch());
}while(res!='n');
}
void cargar(char simbolo)
{
p.tope++;
p.posicion[p.tope]=simbolo;
}
void sacar()
{
p.tope--;
}
Sera q alguien me puede ayudar?
Gracias desde ya :)
Delmita
OBS: al algoritmo me funciona con cualquier operacion matematica, menos para las del tipo: A + B )
O sea, mi algoritmo no se percata q se cerro un parentisis q nunk se abrio :S
pero para los otros ejemplo del enunciado del ejercicio, si funciona :S
/*TEMA 1:
Considere una operacion matem tica que contenga varios conjuntos de
par‚ntesis, llaves y corchetes anidados, por ejemplo.
7 - [(x*{(x+y)/(j-e)})+y]/(4-2.5)
Quiere asegurarse de que los parentesis, llaves y corchetes est‚m anidados
en forma correcta; es decir quiere comprobarse:
I) Que hay el mismo numero de parentesis, llaves y corchetes izquierdos
y derechos
II) Que todo par‚ntesis, llaves y corchetes derecho este precedido por su
pareja izquierdo.
Expresiones del tipo...
({A+B)) o A+B(
Violan la condicion I y las de tipo
] A+B-C] o (A+B)-(C+D
Violan la condici¢n II
TDA a utilizar "PILA implementada con apuntadores"
La expresi¢n debe ser introducida por teclado.
Caracteres a considerar
-()
-[]
-{}
*/
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define max 100
struct pila
{
char posicion[max];
int tope;
};
typedef struct pila t_pila;
t_pila p;
void cargar(char);
void sacar(void);
void main()
{
clrscr();
char vector[max],res;
int cont;
do{
p.tope=0;
clrscr();
textcolor(3);
cprintf("\nIngrese la expresion: ");
gets(vector);
cont=strlen(vector);
for(int i=0;i<cont;i++)
{
if(vector[i]=='('||vector[i]=='['||vector[i]=='{')
cargar(vector[i]);
else
{
if((vector[i]==')'&& p.posicion[p.tope]=='('))
sacar();
if((vector[i]==']'&& p.posicion[p.tope]=='['))
sacar();
if((vector[i]=='}'&& p.posicion[p.tope]=='{'))
sacar();
}
}
if(p.tope==0)
{
printf("\n\n");
printf("La ecuacion es CORRECTA!!!! =)");
}
else
{
printf("\n\n");
textcolor(4);
cprintf("La ecuacion NO ES CORRECTA... =,(");
}
getch();
clrscr();
textcolor(6);
cprintf("\n\n\nDesea seguir cargando S/N...?");
res=tolower(getch());
}while(res!='n');
}
void cargar(char simbolo)
{
p.tope++;
p.posicion[p.tope]=simbolo;
}
void sacar()
{
p.tope--;
}
Valora esta pregunta


0