En el artículo anterior os estuve hablando del bucle do-while, este bucle es de una gran importancia para muchos programas y funciones, sobre todo ayuda mucho a la creación de menús interactivos. En este artículo os voy a mostrar cómo podemos realizar un control de los datos introducidos por el usuario y como podemos hacer que nuestro programa responda bien a errores. Si consigues realizar el ejercicio que te pondré en este artículo ya estarás en una fase muy avanzada de la programación.
Para este artículo os he preparado un vídeo que os muestra toda la información sobre el control de errores a la hora de realizar un menú. También el vídeo os propone un ejercicio. Mira el vídeo dos o tres veces y después lee el ejercicio propuesto que te especificaré a continuación:
El ejercicio propuesto es el siguiente:
Realiza un programa que simule una calculadora, esta deberá tener las siguientes características:
- Deberá aparecer un menú inicial que te de la opción de sumar, restar, multiplicar y dividir y una opción de salir que deberá de ser con la tecla escape.
- Cuando el usuario pulse en cada una de las opciones el programa le tendrá que dar la opción de introducir los números a sumar, restar, multiplicar o dividir. Deberá de sacar el resultado por pantalla y a continuación volver a poner el menú inicial.
- Solo se podrá salir de la aplicación pulsando la tecla escape del teclado.
Espero que este vídeo te haya servido y que te pongas en acción y realices este ejercicio que te propongo. Si piensas y repasas seguro que no lo ves muy complicado.
Me gustaría que me dejaras cualquier comentario, quiero saber que te ha parecido este artículo y las dificultades a la hora de resolver el ejercicio.
Un saludo,
Javi Pizarro
hola, he conseguido casi hacer la calculadora pero tengo un problema que no se resolver y no lo entiendo solo me suma y no entiendo el por que.
Te pongo mi codigo haber si me das una pista de donde estoy fallando.
#include
#include
using namespace std;
int main(){
double num1,num2,suma,resta,mul,div;
char option;
cout<< "Introduce el primer valor "<>num1;
cout<<" Introduce el segundo valor "<>num2;
cout<<"\n";
do{
cout<<" Introduce el valor de la opreacion "<<endl;
cout<<" 1- Suma \n";
cout<<" 2- Resta \n";
cout<<" 3- Multiplicacion \n";
cout<<" 4- Division \n";
cout<>option;
cout<<"\n";
}while (option!=49 && option!=50 && option!=51 && option!=52 && option!=27);
if(option==option!=49){
suma=num1+num2;
cout<<"La Suma es de : "<<suma;
}
else{
if(option==option!=50){
resta=num1-num2;
cout<<" La Resta es de : "<<resta;
}
else{
if(option == option!=51){
mul=num1*num2;
cout<<"La Multiplicacion es de :"<<mul;
}
else{
if(option == option!=52){
num2==0;
cout<<"Error, no es posible dividir entre 0.\n";
div=num1/num2;
cout<<"La Division es de :"<<div;
}
}
}
}
getch();
}
un saludo y gracias por tu ayuda.
hola redcash,
Mira bien cuando haces cout si tienes los cin para recoger del teclado el dato.
Mira el cin de la variable opcion, ese es importante. Veo que en vez de un cin tienes un cout. Corrigelo.
En los if no pones bien la condición. En opcion tienes un dato guardado ( según lo que ha pulsado el usuario) compruebalo con if(opcion==49) no como lo has puesto tu que es algo raro.
Corrige los fallos y comentame si te ha ido bien, y si sigues con dudas sigue preguntandome por aquí.
Un saludo
si vamos a ver los cin los tengo bien puestos pero no se por que cuando copio y pego y se publica en el blog se cambian muchas cosas del codigo.
Bueno los cin los tengo bien y los if ya los he cambiado pero me sigue haciendo solo la suma, yo tecleo el dos por ejemplo para que me haga la resta y el resultado que me muestra por pantalla es : La suma es: y la respuesta ccorrecta a la suma pero ni resta ni multiplica ni divide y no se porque???..
un saludo y gracias.
ok vale ya esta arreglado gracias
Hola javi, ya tengo mi calculadora, pero como le hacemos para que al presionar ESC se acabe el programa?
he intentado usar:
if(opcion==27)
cout<<"adios";
aparte de que no se la expresion para terminar el programa, ni aun asi sale la palabra adios, parece que no me captura la tecla esc.
Gracias
Buenas Panchito,
prueba a poner la opción salida en la condición del bucle while, me explico, haz que salga por pantalla las 4 operaciones y pon como opción 5 la de esc. para salir y, en la condición del while incluyes if(opcion!=27 && opcion!=….). haz la prueba a ver si así te sale. Si es así compártelo con todos nosotros, si no, aquí me tienes para lo que haga falta.
Un saludo
Despues de pensarlo detenidamente, me di cuenta que en la condicion de while estaba poniendo:
while (opcion!=49 || opcion!=50 || opcion!=51 || opcion!=52 || opcion!=27);
lo que seria:
Mientras la opcion no sea 49 o 50 o 51 o 52 o 27, hacer «el menu de opciones»
Con esto, si seleccionaba ESC se repetia el bucle ya que ESC si es igual a 27 (con esto saldria del bucle), pero no es igual a 49 ni 50 ni 51 ni 52, con esto no podia salir del bucle nunca.
Y se me ocurrio ver si funcionaba con una coma, asi se separaria la condicion :
«49 o 50 o 51 o 52» de la condicion «27», y funcionó.
Aunque siguio sin captar la tecla ESC, solo la capta con su remplazo, que es ^[
Bueno aqui esta mi calculadora.
Como la ves Javi? Saludos
_____________
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
int main(){
double num1,num2;
char opcion;
do{
cout<<«\nCALCULADORA. Elige la operacion que deseas realizar\n\n»;
cout<<«(1) = Suma»<<endl;
cout<<«(2) = Resta»<<endl;
cout<<«(3) = Division»<<endl;
cout<<«(4) = Multipicacion»<<endl;
cout<<«\nCTRL + { = Salir»<<endl;
cout<<«\n Opcion: «;
cin>>opcion;
if(opcion!=49&&opcion!=50&&opcion!=51&&opcion!=52&&opcion!=27)
cout<<«\nElige una opcion valida.»;
if(opcion==49){
cout<<«\nSUMA\nInserte el valor del numero 1: «;
cin>>num1;
cout<<«Inserte el valor del numero 2: «;
cin>>num2;
cout<<«\n El resultado es: «<<num1+num2<<endl;
}
if(opcion==50){
cout<<«\nRESTA\nInserte el valor del numero 1: «;
cin>>num1;
cout<<«Inserte el valor del numero 2: «;
cin>>num2;
cout<<«\n El resultado es: «<<num1-num2<<endl;
}
if(opcion==51){
cout<<«\nDIVISION\nInserte el valor del numero 1: «;
cin>>num1;
if(num1==0)
cout<<«\nERROR. No es posible dividir entre 0.\n»;
else {
cout<<«Inserte el valor del numero 2: «;
cin>>num2;
if(num2==0)
cout<<«ERROR. No es posible dividir entre 0.\n»;
else
cout<<«\n El resultado es: «<<num1/num2<<endl;
}
}
if(opcion==52){
cout<<«\nMULTIPLICACION\nInserte el valor del numero 1: «;
cin>>num1;
cout<<«Inserte el valor del numero 2: «;
cin>>num2;
cout<<«\n El resultado es: «<<num1*num2<<endl;
}
if(opcion==27){
//salir del bucle
}
}
while(opcion!=49||opcion!=50||opcion!=51||opcion!=52 , opcion!=27);
cout<<«Hasta luego, presiona cualquier tecla para salir «; // este mensaje solo sale fuera del bucle
getch();
}
____________
SOLO ALGO MAS, PARA LAS DEMAS PERSONAS QUE PUBLICAN SU CODIGO FUENTE.
Para poder publicar correctamente un codigo fuente, hay que remplazar todos los
< por "& l t ;" (sin los espacios entre letras ni comillas) y todos los
> por "& g t ;" (sin los espacios entre letras ni comillas)
y ya se podra visualizar esas etiquetas prohibidas por wordpress
Muy buenas Panchito, tu solución está muy bien. Estoy muy contento con los avances que estas obteniendo, también veo que estas buscando información sobre c++ y esforzandote mucho, enhorabuena.
Hola al igual que tu tambien termine mi codigo pero me pasaba lo mismo de la tecla «esc» gracias a ti lo solucione, te muestro como quedo mi codigo es muy parecido al tuyo:
#include
#include
#include
using namespace std;
int main ()
{
char opcion;
int num1;
int num2;
int suma;
int resta;
int multi;
int divi;
do
{
cout<<"\nElije una opcion: \n";
cout<<"1.- Suma\n";
cout<<"2.- Resta\n";
cout<<"3.- Multiplicacion\n";
cout<<"4.- Division\n";
cout<>opcion;
if(opcion==49)
{
cout<>num1;
cout<>num2;
suma=num1+num2;
cout<<"El resultado de la suma es:\n"<<suma;
}
else if(opcion==50)
{
cout<>num1;
cout<>num2;
resta=num1-num2;
cout<<"\nEl resultado de la esta es:\n"<<resta;
}
else if(opcion==51)
{
cout<>num1;
cout<>num2;
multi=num1*num2;
cout<<"\nEl resultado de la multiplicacion es:\n"<<multi;
}
else if(opcion==52)
{
cout<>num1;
cout<>num2;
if((num1%num2)==0)
{
divi=num1/num2;
cout<<"El resultado de la division es:\n"<<divi;
}
else
{
cout<<"Solo acepto divisiones entre numeros enteros\n";
}
}
else if(opcion==27)
{
//Fin del ciclo
}
}while (opcion!=49||opcion!=50||opcion!=51||opcion!=52,opcion!=27);
cout<<"\nAdios..";
getch ();
}
lo siento por alguna razon no se copio el codigo
#include
#include
#include
using namespace std;
int main ()
{
char opcion;
int num1;
int num2;
int suma;
int resta;
int multi;
int divi;
do
{
cout<<"\nElije una opcion: \n";
cout<<"1.- Suma\n";
cout<<"2.- Resta\n";
cout<<"3.- Multiplicacion\n";
cout<<"4.- Division\n";
cout<>opcion;
if(opcion==49)
{
cout<>num1;
cout<>num2;
suma=num1+num2;
cout<<"El resultado de la suma es:\n"<<suma;
}
else if(opcion==50)
{
cout<>num1;
cout<>num2;
resta=num1-num2;
cout<<"\nEl resultado de la resta es:\n"<<resta;
}
else if(opcion==51)
{
cout<>num1;
cout<>num2;
multi=num1*num2;
cout<<"\nEl resultado de la multiplicacion es:\n"<<multi;
}
else if(opcion==52)
{
cout<>num1;
cout<>num2;
if((num1%num2)==0)
{
divi=num1/num2;
cout<<"El resultado de la division es:\n"<<divi;
}
else
{
cout<<"Solo acepto divisiones entre numeros enteros\n";
}
}
else if(opcion==27)
{
//Fin del ciclo
}
}while (opcion!=49||opcion!=50||opcion!=51||opcion!=52,opcion!=27);
cout<<"\nAdios..";
getch ();
}
Hola javi !
He estado practicando la salida con lo de la tecla esc y no lo consigo de ninguna de las maneras, ya molesto me dio por probar a poner otra tecla, en este caso utilice «!» para salir del bucle y me funciona a la perfeccion con el mismo codigo solo cambiando el munero que en este caso es el 33 y ahora si que me funciona sale del bucle me dice adios «como le tengo pouesto yo» y pulsando una tecla se cierra ¡Estupendo..!. Pero mi pregunta es ¿Por que diantres no funciona con la tecla esc?
Un saludo y gracias
Buenas redcash,
cuando propuse el ejercicio me acorde que yo programe algo parecido con la tecla esc para la facultad, en este caso lo dije pero no lo comprobé. A raiz de este comentario lo he probado y me pasa lo que a ti, no se cual es la explicación aunque veo que al pulsar la tecla esc no se produce ningún carácter en el simbolo del sistema, por tanto creo que la variable no obtiene ningún valor (o valor aleatorio). Voy a seguir investigando para responder tu duda. Por ahora en vez de salir con esc programa la salida del bucle con otra tecla ok?
Un saludo y espero poder resolver la duda pronto o que alguien que nos visite nos saque de dudas. Me encanta aprender enseñando 😉
Por cierto panchito he encontrado otra manera de publicar en wordpress nuestro codigo
solo hay que poner en la cabecera en este caso el lenguaje seria «cpp» osea que quedaria asi seguido del codigo.
Muchas gracias por este aporte, muy útil para poder responderos con calidad. Un saludo
Hey muy buena opcion , resulta mas facilito que mi metodo! Gracias
no hay por que darlas para eso estamos aqui para aprender ayudandonos todos.
otra vez no se copio el codigo bien me imagino que lo tengo que tipear para que se vea bien….
wenas antes de nada a todo el mundo
hola javi mira no e sido capaz de usar el boton de ESC se que el valor es 27 pero cuando compilo el programa el boton de ESC no funcion
¿puede ser mi ordenador o teclado?
¿como podtria controlarlo
gracias DEWW
gracias
XDDD
perdon javi no ace falta respuesta , leiendo me e dado cuenta que a todos nos pasa lo mismo ,menos mal pensaba que me tenia k comprar otro teclado o pc.
SORRY por las molestias.
HOLA MUY BUEN VIDEO!!
TENGO UNA DUDA, ME PRODUCE UN ERROR AL CORRER EL PROGRAMA.
Me repite el mensaje dos veces, cuando pido que introduzca las opciones, se repite dos veces. que puedo hacer 😦 ya lo he intentado todo. Intente limpiando pantalla pero nada.