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!