Buenas, como digo en el titulo, estoy haciendo una calculadora en C++, pero me he metido en algo donde no veo la salida, la calculadora funciona bien, pero lo primero que nos pide es la acción que queremos realizar (sumar, restar, multiplicar, dividir) y después los dos valores, a mi me gustaría cambiar esto del siguiente modo, que nos pida un numero, la acción y el segundo numero, alguien puede guiarme un poco.
Codigo fuente:
#include <iostream> using namespace std; int main(){ float A,B,accion; cout<<"---------------------------------------------------------------"<<endl; cout<<"| Calculadora basica en C++ |"<<endl; cout<<"| Programada por The Dragon Lives |"<<endl; cout<<"---------------------------------------------------------------"<<endl; cout<<" Tipos de acciones"<<endl; cout<<" -- 1.)Sumar"<<endl; cout<<" -- 2.)Restar"<<endl; cout<<" -- 3.)Multiplicar"<<endl; cout<<" -- 4.)Dividir"<<endl; cout<<" Seleccione la accion a realizar: "<<endl; cin>>accion; if (accion == 1) //sumar { cout<<"introduce el primer valor"<<endl; cin>>A; cout<<"introduce el segundo valor"<<endl; cin>>B; accion=A+B; cout<<"El resultado de la suma es "<<accion; } else if (accion == 2) //restar { cout<<"introduce el primer valor"<<endl; cin>>A; cout<<"introduce el segundo valor"<<endl; cin>>B; accion=A-B; cout<<"El resultado de la resta es "<<accion; } else if (accion == 3) //multiplicar { cout<<"introduce el primer valor"<<endl; cin>>A; cout<<"introduce el segundo valor"<<endl; cin>>B; accion=A*B; cout<<"El resultado de la multiplicacion es "<<accion; } else if (accion == 4) //dividir { cout<<"introduce el primer valor"<<endl; cin>>A; cout<<"introduce el segundo valor"<<endl; cin>>B; accion=A/B; if (B==0) cout<<"error, no se puede dividir entre cero"<<endl; else cout<<"El resultado de la divicion es"<<accion; } return 0; }
Actualizo:
Cambios, me he dado cuenta de que antes podia haber un fallo al marcar la accion (sumar, restar, multiplicar, dividir) con un valor no existente, ahora manda un mensaje de error.
Ya guarda el esquema de ValorA + accion + Valor B = resultado
Nuevo codigo fuente:
#include <iostream> using namespace std; int main(){ float A,accion,B,resultado; cout<<"---------------------------------------------------------------"<<endl; cout<<"| Calculadora basica en C++ |"<<endl; cout<<"| Programada por The Dragon Lives |"<<endl; cout<<"---------------------------------------------------------------"<<endl; cout<<"introduce el primer valor"<<endl; cin>>A; cout<<"Tipos de acciones"<<endl; cout<<"- 1.)Sumar"<<endl; cout<<"- 2.)Restar"<<endl; cout<<"- 3.)Multiplicar"<<endl; cout<<"- 4.)Dividir"<<endl; cout<<"Seleccione la accion a realizar: "<<endl; cin>>accion; if (accion == 1) //sumar { cout<<"introduce el segundo valor"<<endl; cin>>B; resultado=A+B; cout<<"El resultado de la suma es "<<resultado; } else if (accion == 2) //restar { cout<<"introduce el segundo valor"<<endl; cin>>B; resultado=A-B; cout<<"El resultado de la resta es "<<resultado; } else if (accion == 3) //multiplicar { cout<<"introduce el segundo valor"<<endl; cin>>B; resultado=A*B; cout<<"El resultado de la multiplicacion es "<<resultado; } else if (accion == 4) //dividir { cout<<"introduce el segundo valor"<<endl; cin>>B; resultado=A/B; if (B==0) cout<<"error, no se puede dividir entre cero"<<endl; else cout<<"El resultado de la divicion es "<<resultado; } else if (accion > 1) //mensaje de error { cout<<"Error, no existe esa accion"<<endl; } else if (accion < 4) //mensaje de error { cout<<"Error, no existe esa accion"<<endl; } return 0; }
De momento los espacios del menú no son mi prioridad (prefiero optimizar el codigo y dejar lo visual para el final), por tanto los quito hasta que le heche un vistazo a los controles de flujo.
Para quitar las lineas de introducir el valor B, solo se me ocurre pedir el valor B antes de pedir la accion (he intentado hacer unas pruebas con el codigo que me dio gorrister, pero sin exito) y el pedir el segundo valor delante de la accion no me agrada (en vistas de seguir mejorando la aplicacion, puesto que me gustaria que si introducimos el segundo valor e indicamos una segunda accion nos muestre el resultado como primer valor + la accion seleccionada y volviera a tomar el siguiente valor como valor B).
Codigo final de calculadora basica beta1:
#include <iostream>
using namespace std;
int main(){
float A,B,resultado;
int accion, nada;
cout<<"---------------------------------------------------------------"<<endl;
cout<<"| Calculadora basica en C++ |"<<endl;
cout<<"| Programada por The Dragon Lives |"<<endl;
cout<<"---------------------------------------------------------------"<<endl;
cout<<"Introducir un numero mayor a 4 o menor a 1 para finalizar el programa"<<endl;
while (1){
cout<<"\n\nintroduce el primer valor"<<endl;
cin>>A;
cout<<"Tipos de acciones"<<endl;
cout<<"- 1.)Sumar"<<endl;
cout<<"- 2.)Restar"<<endl;
cout<<"- 3.)Multiplicar"<<endl;
cout<<"- 4.)Dividir"<<endl;
cout<<"-Número fuera de rango para parar"<<endl;
cout<<"Seleccione la accion a realizar: "<<endl;
cin>>accion;
if (accion < 1 || accion > 4){
cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
cin>>nada;
return 0;
}
cout<<"introduce el segundo valor"<<endl;
cin>>B;
switch (accion){ //sumar
case 1:
resultado=A+B;
cout<<"El resultado de la suma es "<<resultado;
break;
case 2: //restar
resultado=A-B;
cout<<"El resultado de la resta es "<<resultado;
break;
case 3: //multiplicar
resultado=A*B;
cout<<"El resultado de la multiplicacion es "<<resultado;
break;
case 4: //dividir
resultado=A/B;
if (B==0)
cout<<"error, no se puede dividir entre cero"<<endl;
else
cout<<"El resultado de la division es "<<resultado;
break;
}
}
return 0;
}
No deberías usar la misma
Sobre tu pregunta, realmente ya casi lo tienes, tan sólo muestra lo de introducir en primer valor antes de mostrar el menú. El resto es igual.
Un saludo.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Gracias
De momento no se como utilizar el código que comentas (seguiré investigando) de paso acerco los pocos avances que llevo.
Aquí lo tienes
Es mu y sencillo:
Te comento algunos problemas que detecté:
Está mal. Has de tener en cuenta que las opciones van de 1 a 4, que son precisamente las que bloqueas ;-). Además, yo lo pondría con un or (aunque aproveche el default de switch)
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Muchas gracias
Te comento los aciertos y ¿errores? de los puntos que describes.
En fin, creo que es eso .... muchas gracias a los dos, si conocéis otra forma de introducir el valor B sin que se muestre esa petición en una accion no valida me vendría de perlas XD.
Acerca del punto 2: A ver,
Acerca del punto 2:
A ver, pides un número que puede ser o 1, 2, 3 o 4. Pero dices que si es mayor a 1 o menor a 4, que muestre el mensaje de error. Ahora, por qué no pruebas a introducir un valor fuera de rango (p. ej. 5, -4, 0)? El mensaje no saldrá. ¿Y por qué no sale si introduzco un valor dentro del rango? Porque antes de que se cumpla la sentencia if del error, se cumple la sentencia de la operación a realizar, y dicha sentencia de control se acaba. Espero haberme expresado bien.
Por último:
Tu prueba de error:
La correcta:
Comprueba ambos con números fuera de rango (en tu código) y el tuyo no mostrará nada (como si se bloquease) o se cierra. El arreglado si que lo mostrará, pero también s eterminará por el hecho de que no hay nada despues que pare el programa yno se cierre (véase un cin).
Un saludo
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
cierto
Tienes razón, no se como pude cometer ese error.
Actualizo el hilo para escribir lo que tengo hasta ahora.
EDITO
Ya lo tengo:
Creo que ahí está lo que pides. Un saludo
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Como quieras
No me ha dado tiempo a editarlo, que decir, eso es exactamente lo que buscaba, muchas gracias a los dos ;)
Sabes que te recomiendo?
Que leas códigos simples. En internet hay muchos, y te vendrán genial para este tipo de cosas. Esto es todo pura lógica. Con el tiempo se aprende, pero sin darte cuenta :p A mí me pasaba lo mismo...
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
lo tendre en cuenta
Aun así todavía queda mucho trabajo en la calculadora ^^ cuantas mejoras podre sacarle, quien sabe, pero sin duda espero ir aprendiendo de todas las dudas que me surjan.
Sería sencillo, pero al menos
Sería sencillo, pero al menos enséñame tu código para ver como vas, y luego te indico. No es por nada, pero soy un vago y no me apetece ponerme a escribir código ahora :p
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
ok
Actualizo el hilo con el código.