por favor ayuda con este problema

yamyam
11 de Agosto del 2004
NECESITO AMIGOS DAR CON ESTE PROBLEMA DE PROGRAMA...
REALIZAR UN PEQUEÑO CODIGO EN C++ QUE DADA UNA EXPRESION MATEMATICA QUE INCLUYA PARENTESIS,ELABORE
UN ALGORITMO QUE VERIFIQUE LA CORRECTITUD DEL ANIDAMIENTO....
EJEMPLO: (((2+3)+(2*4))-(8/2)), ESA ES LA FORMA CORRECTA....SI SE
ESCRIBIERA (((2+3)+(2*4)-(8/2)), DIERA UN ERROR POR FALTAR UN ")"
GRACIAS PANAS ...YO SE QUE MUCHOS PUEDEN HACERLO Y EL PROFE ESTA LOCO...Y NO HE DADO CON
EL DESARROLLO DE ESTE PROGRAMA...AH: SE HACE CON LISTAS.....

Drizzt
11 de Agosto del 2004
Supongo que guardando la operacion en una variable y luego comprobando carácter a carácter los que coinciden con ( o ) podrias tener la solucion, el numero de ( ha de ser igual al de ).

Lo guardas en la vble' Operacion'

Debes averiguar la longitud de la operacion para introducir dicho valor en la 'n' del 'for'. Si no puedes poner un valor elevado como 100 o 1000 para no tener problemas.

int n=1000;
while (true)
{

// Pedir la operacion y guardarla en vble

for(i=0;i<n;i++)
{
if(Operacion.i == '(') abre++;
if(Operacion.i == ')') cierra++;
}

if (abre == cierra) Correcto=1;
else Correcto=0;

if ( Correcto ) printf("La operacion es correcta");
else printf("La operacion no es correcta");

Correcto = 0;
abre = cierra = 0;
}

noel solw
11 de Agosto del 2004
Hay una forma facil de verificar si los parentesis estan balanceados.
Toma una variable, por ejemplo int check = 0 y vas reviazamdo los caracteres de la cadena que contiene la expresion.
Cuando encuentres un parentesis abriendo "(" agregas 1 a check y cuando encuentras un que cierra disminuyes check en 1.

[a] : si al final del proceso check es igual a cero, esto significa que los parentesis estan balanceados.
[b] : si en algun momento check se hace negativo, hay que suspender el proceso, los parentesis no estan balanceados.

exito ! ! !