Hola, muy buen dia
Realizo una calculadora, sencilla en cuanto a funcionalidad, sin embargo se me hace algo complicado, bueno todo va de acuerdo al nivel :).
El programa solamente debe realizar la operacion X&Y&Z donde XYZ son cualquier numero y & es cualquiera de los operadores matematicos basicos +*-/ ,... No necesariamente debe tomar en cuenta la precedencia de operadores(no se como hacerlo)
Es funcional hasta cierto punto, sin embargo cuando ingreso una operacion invalida por ejemplo:
//Este es el principal problema que no logro corregir,
**siento que ya estoy saturado**
r+3-Z, //o sea no ingreso numeros donde deben ir numeros o los signos deben ir
me salta hasta el mensaje que coloque "Realizar otra operacion? s/n: " sin embargo al presionar cualquier tecla termina la ejecucion del programa.
--Sin embargo esto no sucede cuando ingreso la operacion de la forma correcta.--
Adjunto el Codigo:
Perdon por los comentarios en el codigo, pero son la manera en la que me logro guiar con lo que voy escribiendo.
//El codigo se puede compilar con Borlan 5 sin errores ni advertencias
Código C++:
Ver original#include <iostream>
#include <conio>
//Funciones a utilizar
int comprobarNumero(int, int, int);
char comprobarSigno(char, char);
float operaciones(float, float, float);
main()
{
float n1, n2, n3, paso1, resultado;
char s1, s2, seleccion='s';
int x=0;
while (seleccion == 's')
{
n1 = 0.0;
n2 = 0.0;
n3 = 0.0;
cin.clear();
clrscr();
cout<<"ingresar la operacion de la forma X%Y%Z donde XYZ = Numero y % = operador [+-*/]"<<endl;
cin >>n1 >>s1 >>n2 >>s2 >>n3;//Asigna los valores a las variables;
//Verificar datos numericos llamando a su respectiva funcion
if ((comprobarNumero(n1, n2, n3))&&(comprobarSigno(s1, s2)))
{
x=1;
}
else
{
cout <<"Ingresar una operacion valida"<<endl;
//goto IN;
}
if(x==1)
{
paso1= operaciones(n1, s1, n2);
resultado = operaciones(paso1, s2, n3);
cout <<"El resultado es: " << resultado << endl<<endl;
}
cout <<"Realizar otra operacion? s/n: ";
cin >> seleccion;
}
return(1);
}
//Funcion para comprobar que el dato ingresado sea del tipo entero
int comprobarNumero(int, int, int)
{
if(cin.fail() && cin.rdstate())//Si no se ingreso un dato del mismo tipo de la variable y hay flujo de datos
{
cin.clear();//Limpiar bufer
clrscr(); //limpiar Pantalla
return(0); //Regresar Falso
}
else
{
return(1);//Regresar Verdadero
}
}
//Funcion para comprobar que se ingrese un operador valido [+,-,*,/]
char comprobarSigno(char s1, char s2)
{
//Compara si las variables para signos son signos de operacion +-*/
if(((s1 == '+')||(s1 == '-')||(s1 == '*')||(s1 == '/')) & ((s2 == '+')||(s2 == '-')||(s2 == '*')||(s2 == '/')))
{
return(1);
}
else //Si no son signos de operacion
{
clrscr(); //Limpiar pantalla
}
return(0);
}
//Funcion que determina la operacion a realizar, en base al signo ingresado
float operaciones (float n1, float signo, float n2)
{
float resultado;
if(signo == '+')
{
resultado = (n1 + n2);
return(resultado);
}
if(signo == '-')
{
resultado = (n1 - n2);
return(resultado);
}
if(signo == '*')
{
resultado = (n1 * n2);
return(resultado);
}
if(signo == '/')
{
resultado = (n1 / n2);
return(resultado);
}
return(0);
}
Podrian brindarme alguna orientacion por favor :)
Muchas Gracias!