Anuncios Google

CalculadoraBasica en C++

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;
}


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pspgorrister

No deberías usar la misma

  • No deberías usar la misma variable "accion" para guardar el resultado y seleccionar la operación matemática. Es confuso.
  • A la hora de mostrar el menú, no hace falta que pongas los espacios del menú "a mano", con cout puedes alinear el texto con setfill() y setw(). Echa un vistazo aquí.
  • Te puedes ahorrar el repetir las lineas de "introduce primer y segundo valor", porque se usan siempre, quedaría mucho menos código haciéndolo así:

cout<<"introduce el primer valor"<<endl;
cin>>A;
cout<<"introduce el segundo valor"<<endl;
cin>>B;
 
swith (accion) {
   case 1: 
       resultado=A+B; 
       cout << "Resultado de la suma: " << resultado << endl;
       break;
   case 2: 
       resultado=A-B;
       cout << "Resultado de la resta: " << resultado << endl;
       break;
   case 3: 
       resultado=A*B; 
       cout << "Resultado de la mult.: " << resultado << endl;
       break;
   case 4: 
       if (B == 0)
          cerr << "error de división por cero" << endl;
       else {
          resultado=A*B; 
          cout << "Resultado de la div.: " << resultado << endl;
       }
       break;
}

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.

Imagen de the dragon lives

Gracias

De momento no se como utilizar el código que comentas (seguiré investigando) de paso acerco los pocos avances que llevo.

Imagen de P22

Aquí lo tienes

Es mu y sencillo:

#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<<"Seleccione la accion a realizar: "<<endl;
    cin>>accion;
        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;
 
    default: //Fin del programa
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
}
    return 0;
}

Te comento algunos problemas que detecté:

  1. Defines accion como float en vez de int, lo que te hará consumir el doble de memoria en dicha variable sin utilizarla (pues solo se almacenan datos integrer)
  2. La última sentencia:
        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

    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)
  3. pones divicion en vez de division (un detalle tonto :p)
  4. Lo de introducir el 2º valor, basta con ponerlo delante de las sentencias (sustituidas por un switch en mi código)
  5. He incluido un bucle que permite hacer las operaciones que quieras hasta que se introduzca un número  fuera de rango en las acciones. Si se introduce el programa se despide (la variable nada está para que se vea la despediada :-P prueba a quitarla para verlo

¡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

Imagen de the dragon lives

Muchas gracias

Te comento los aciertos y ¿errores? de los puntos que describes.

  1. Definir accion como int, ok.
  2. La sentencia funciona bien en mi código, si el usuario intenta poner una accion que no existe manda directamente el mensaje de error, según tu código nos pide el segundo valor que es lo que yo creo un error (puesto que el error se ha producido anteriormente).
  3. Intento no cometer errores gramaticales, pero algunas veces se nos escapan :p, lo tendré en cuenta.
  4. Este punto es el que genera lo que yo considero un error en el punto dos, si hay alguna otra forma de hacerlo ...
  5. Gracias por el bucle.

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.

Imagen de P22

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:

    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

La correcta:

    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

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

Imagen de the dragon lives

cierto

Tienes razón, no se como pude cometer ese error.

Actualizo el hilo para escribir lo que tengo hasta ahora.

Imagen de P22

EDITO

Ya lo tengo:

#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;
}

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

Imagen de the dragon lives

Como quieras

No me ha dado tiempo a editarlo, que decir, eso es exactamente lo que buscaba, muchas gracias a los dos ;)

Imagen de P22

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

Imagen de the dragon lives

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.

Imagen de P22

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

Imagen de the dragon lives

ok

Actualizo el hilo con el código.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.