Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Expresión algebraica, (), [] y {}

Estas en el tema de Expresión algebraica, (), [] y {} en el foro de C/C++ en Foros del Web. Por practicar me puse a buscar porgramas para ello, pero no se ni como empezar con este. Se ve algo sencillo, por ejemplo si tengo ...
  #1 (permalink)  
Antiguo 20/07/2008, 19:05
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 9 meses
Puntos: 0
Expresión algebraica, (), [] y {}

Por practicar me puse a buscar porgramas para ello, pero no se ni como empezar con este.
Se ve algo sencillo, por ejemplo si tengo algo como esto (a + b) - [ b - (a)] que esta correcto, me indique que lo eh entrado mal cuando pongo esto [a + ).

Alguna ideita en la cual me puenda ayudar?!
  #2 (permalink)  
Antiguo 20/07/2008, 19:33
Avatar de Kasper_901  
Fecha de Ingreso: diciembre-2007
Ubicación: Muy pegado al monitor de 19°
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Expresión algebraica, (), [] y {}

Cita:
Iniciado por d4rkzone Ver Mensaje
Por practicar me puse a buscar porgramas para ello, pero no se ni como empezar con este.
Se ve algo sencillo, por ejemplo si tengo algo como esto (a + b) - [ b - (a)] que esta correcto, me indique que lo eh entrado mal cuando pongo esto [a + ).

Alguna ideita en la cual me puenda ayudar?!
Creo que en ves de poner "[" deberias poner (, ejemplo: (a + b) - (b - (a))

Eso creo... intentalo asi...

Saludos...
  #3 (permalink)  
Antiguo 20/07/2008, 20:35
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Expresión algebraica, (), [] y {}

No, me referia a eso si no que yo hiciera un programa en el cual este no me dejara poner corchetes o parentesis donde no van. Ej:

[a+b) - {a+b}, cout<<"Introduccion incorrecta de simbolos.";

Pero el problema es que no tengo ni idea de como empezar el programa.
  #4 (permalink)  
Antiguo 21/07/2008, 02:17
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Expresión algebraica, (), [] y {}

Lo más simple que se me ocurre es que cuentes los paréntesis, corchetes y llaves: vas recorriendo la cadena y cada vez que encuentres un paréntesis abriendo "(" sumas 1 a un contador de paréntesis y cada vez que encuentres un paréntesis cerrando ")" restas 1 al mismo contador, haces lo mismo para los demás casos (corchetes y llaves), al final todos los contadores tienen que valer 0 si todo está bien.
  #5 (permalink)  
Antiguo 21/07/2008, 08:36
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Expresión algebraica, (), [] y {}

Te recomiendo que leas algo de expresiones regulares, automatas reconocedores y si te quieres meter en algo mas heavy pero mas divertido, algo de analisis sitactico de lenguajes :P.
__________________
Saludoss
Guille
  #6 (permalink)  
Antiguo 21/07/2008, 08:41
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Expresión algebraica, (), [] y {}

Como escaneo el arreglo?
Eh empezado como has dicho y gracias pq parece una buena idea.

Código:
// (), [] y {}

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
	int count = 0;
	char expr[32];
	char par = '(';
	char par2 = ')';
	char cor = '[';
	char cor2 = ']';
	char llav = '{';
	char llav2 = '}';
	cout<<"Entre tu expresion algebraica: ";
	cin>>expr;
	if (expr[32] = par )
	{
		count= count + 1 ;
		cout<<endl<<count;
		if (expr[32] = par2)
		{	count = count -1;       }
		//cout<<count;
	}
	if (count == 0 )
		cout<<"\nNo hubo errores de parentesis"<<endl;
	else
		cout<<"Error en la expresion\n";
	return 0;
}
Gracias guille_el3, me estoy poniendo al tanto y es justamente lo que deseo hacer aun leo la informacion.

Última edición por d4rkzone; 21/07/2008 a las 08:48
  #7 (permalink)  
Antiguo 21/07/2008, 10:08
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Expresión algebraica, (), [] y {}

Tengo dudas como "escanear" el arreglo expr[32];

Lo haría de esta manera

while (cin>>expr[32])
{
//Como leeria el arreglo para ir buscando los parenteis? ^( , /$) etc.
}
  #8 (permalink)  
Antiguo 21/07/2008, 16:18
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Expresión algebraica, (), [] y {}

Cita:
Iniciado por d4rkzone Ver Mensaje
Tengo dudas como "escanear" el arreglo expr[32];

Lo haría de esta manera

while (cin>>expr[32])
{
//Como leeria el arreglo para ir buscando los parenteis? ^( , /$) etc.
}
La forma más fácil y segura:
Código:
int longitud=strlen(expr);
for(int N=0; N<longitud; N++) {
	if(expr[N]=='(') {
		....
	}
	else if(expr[N]==')') {
		....
	}
}
  #9 (permalink)  
Antiguo 21/07/2008, 18:40
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Expresión algebraica, (), [] y {}

Bien gracias a ustedes e podido hacer algo! :D

Ahora el otro problema es el siguiente
De la forma en que lo hice si pongo esto: {(a+b)-[a+b}], aún me seguirá diciendo que esta bien por que no reconoce el orden, pero y como hago eso? Segun alguien postió algo de expresiones regulares, pero en realidad no se como utilizarlo se la teoria de lo que hacen pero no se ni en que parte ponerlo.

Código:
Código:
// (), [] y {}

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
	int count = 0;
	char expr[45];
	int par = 0;
	int par2 = 0;
	int cor = 0;
	int cor2 = 0;
	int llav = 0;
	int llav2 = 0;
	cout<<"Entre tu expresion algebraica: ";
	cin>>expr;
	int longitud=strlen(expr); 
	for(int N=0; N<longitud; N++)
	{
		if(expr[N]=='(') 
		{ 
			par++;
		}
		else if(expr[N]== ')' )
		{
		par2++;
		}
	if (expr[N] == '[')
	{
		cor++;
	}
	else if (expr[N] == ']')
	{
		cor2++;
	}
		if (expr[N] == '{')
		{
		llav++;
		}
		else if (expr[N] == '}')
		{
		llav2++;
		}
	}
	if ( (par==par2)>0 )
	{	cout<<"\nNo hubo errores de parentesis\n"; }
	else if ( par == 0 && par2 == 0 )
	{	cout<<"\nNo se introdujo parentesis\n";   }
	else
	{	cout<<"Error en la expresion\n";  }
	if ( (cor==cor2)>0 )
	{	cout<<"\nNo hubo errores de corchetes\n"; }
	else if ( cor == 0 && cor2 == 0 )
	{   cout<<"\nNo se introdujo corchetes\n";    }
	else
	{	cout<<"Error en la expresion\n";       }
	if ( (llav==llav2)>0 )
	{	cout<<"\nNo hubo errores de llaves\n";  }
	else if ( llav == 0 && llav2 == 0 )
	{	cout<<"\nNo se introdujo llaves\n";  }
	else
		cout<<"Error en la expresion\n";
	return 0;
}
  #10 (permalink)  
Antiguo 21/07/2008, 19:19
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Expresión algebraica, (), [] y {}

La mejor forma seria usar pilas me parece, por ejemplo, tienes los símbolos que abren expresiones y los símbolos que cierran expresiones. Cuando te llega un símbolo que abre una expresion lo agregas a la pila y cuando te llega uno de cierre sacas el elemento de la pila y los comparas, si no coinciden hay un error.
Te doy un ejemplo:

(2+4)*[3+(1+1)]

llega (, metes ( en la pila
llega ), sacas ( de la pila, como coincide ( con ) sigues
llega [, a la pila
llega ( a la pila
llega ), sacas ( y como coinciden sigues
llega ], sacas [ y como coinciden sigues.

El mismo ejemplo, que falla seria

(2+4)*[3+(1+1]

llega (, metes ( en la pila
llega ), sacas ( de la pila, como coincide ( con ) sigues
llega [, a la pila
llega ( a la pila
llega ], sacas ( y como no coinciden tiras error.

Suerte!
__________________
Saludoss
Guille
  #11 (permalink)  
Antiguo 22/07/2008, 11:26
 
Fecha de Ingreso: julio-2008
Mensajes: 19
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Expresión algebraica, (), [] y {}

Hey tremenda idea y va justo con el tema que estaba practicando!

Estoy en proceso mental de desarrollo de este programita que me a costado...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:54.