Anuncios Google

CalculadoraBasica Beta2 en C++

Siguiendo con la evolución de la calculadora básica que estaba desarrollando me han surgido nuevas dudas, dado que el hilo anterior ya era algo extenso he decidido abrir un segundo hilo, así la gente podrá seguir la evolución del código sin liarse mucho.

En el hilo anterior terminamos viendo un código funcional y claro (ademas de adaptable a posibles mejoras), pero tenia una limitación, esa calculadora no podía pasar de una operación entre dos valores (A+B, A-B, A*B, ...) esto todavía estaba algo lejos de ser lo que yo considero una calculadora que sirva para un uso diario, puesto que normalmente usamos la calculadora para realizar varias operaciones, tras un tiempo dándole vueltas y un par de consejos he mejorado el código, ahora podremos realizar todas las operaciones que queramos.

Código fuente:

#include <iostream>
 
using namespace std;
 
int main(){
    float A,B,resultado;
    int accion,accion2,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;
    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 finalizar"<<endl;
    cout<<"Seleccione la accion a realizar: "<<endl;
    cin>>accion;
    if (accion < 1 || accion > 4){ //fuera de accion para finalizar
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"introduce el segundo valor"<<endl;
    cin>>B;
    switch (accion){
    case 1: //sumar
        resultado=A+B;
        break;
 
    case 2: //restar
        resultado=A-B;
        break;
 
    case 3: //multiplicar
        resultado=A*B;
        break;
 
    case 4: //dividir
        resultado=A/B;
        if (B==0)
            cout<<"error, no se puede dividir entre cero"<<endl;
        break;
    }
 
while (1){
    cout<<"Tipos de acciones"<<endl;
    cout<<"- 1.)Sumar"<<endl;
    cout<<"- 2.)Restar"<<endl;
    cout<<"- 3.)Multiplicar"<<endl;
    cout<<"- 4.)Dividir"<<endl;
    cout<<"- 5.)Resultado"<<endl;
    cout<<"-Número fuera de rango para parar"<<endl;
    cout<<"Seleccione la accion a realizar: "<<endl;
    cin>>accion2;
    if (accion < 1 || accion > 5){
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"El resultado anterior es "<<resultado<<endl;
    cout<<"introduce el segundo valor"<<endl;
    cin>>B;
    switch (accion2){ //sumar
    case 1:
        resultado=resultado+B;
        cout<<"El resultado de la suma es "<<resultado<<endl;
        break;
 
    case 2: //restar
        resultado=resultado-B;
        cout<<"El resultado de la resta es "<<resultado<<endl;
        break;
 
    case 3: //multiplicar
        resultado=resultado*B;
        cout<<"El resultado de la multiplicacion es "<<resultado<<endl;
        break;
 
    case 4: //dividir
        resultado=resultado/B;
        if (B==0)
            cout<<"error, no se puede dividir entre cero"<<endl;
        else
            cout<<"El resultado de la division es "<<resultado<<endl;
        break;
 
    case 5: //mostrar resultado
        cout<<"El resultado es "<<resultado<<endl;
        cin>>nada;
        return 0;
    }
}
    return 0;
}

¿Que problemas he encontrado? De momento solo puedo ponerle un fallo después de seleccionar la acción de mostrar el resultado nos pide el valor de B.

¿A alguien se le ocurre como no mostrar lo de "introduce el valor B"?


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 P22

Tu código: #include

Tu código:

#include <iostream>
 
using namespace std;
 
int main(){
    float A,B,resultado;
    int accion,accion2,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;
    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 finalizar"<<endl;
    cout<<"Seleccione la accion a realizar: "<<endl;
    cin>>accion;
    if (accion < 1 || accion > 4){ //fuera de accion para finalizar
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"introduce el segundo valor"<<endl;
    cin>>B;
    switch (accion){
    case 1: //sumar
        resultado=A+B;
        break;
 
    case 2: //restar
        resultado=A-B;
        break;
 
    case 3: //multiplicar
        resultado=A*B;
        break;
 
    case 4: //dividir
        resultado=A/B;
        if (B==0)
            cout<<"error, no se puede dividir entre cero"<<endl;
        break;
    }
 
while (1){
    cout<<"Tipos de acciones"<<endl;
    cout<<"- 1.)Sumar"<<endl;
    cout<<"- 2.)Restar"<<endl;
    cout<<"- 3.)Multiplicar"<<endl;
    cout<<"- 4.)Dividir"<<endl;
    cout<<"- 5.)Resultado"<<endl;
    cout<<"-Número fuera de rango para parar"<<endl;
    cout<<"Seleccione la accion a realizar: "<<endl;
    cin>>accion2;
    if (accion < 1 || accion > 5){
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"El resultado anterior es "<<resultado<<endl;
    cout<<"introduce el segundo valor"<<endl;
    cin>>B;
    switch (accion2){ //sumar
    case 1:
        resultado=resultado+B;
        cout<<"El resultado de la suma es "<<resultado<<endl;
        break;
 
    case 2: //restar
        resultado=resultado-B;
        cout<<"El resultado de la resta es "<<resultado<<endl;
        break;
 
    case 3: //multiplicar
        resultado=resultado*B;
        cout<<"El resultado de la multiplicacion es "<<resultado<<endl;
        break;
 
    case 4: //dividir
        resultado=resultado/B;
        if (B==0)
            cout<<"error, no se puede dividir entre cero"<<endl;
        else
            cout<<"El resultado de la division es "<<resultado<<endl;
        break;
 
    case 5: //mostrar resultado
        cout<<"El resultado es "<<resultado<<endl;
        cin>>nada;
        return 0;
    }
}
    return 0;
}

Errores que he observado, abajo te pongo el código arreglado:

  • Vale, avisas de que no se puede dividir por 0, pero esa comprobación la debes hacer ANTES de la división, porque si no, le das a la variable un valor infinito.
  • Veo innecesario que pongas dos veces la pregunta. Con un bucle te ahorrarías un montón de líneas
  • Lo de B es exactamente lo mismo que antes.
  • No me gusta como lo tienes todo. Estaría mejor estructurado con funciones.
  • Aunque no usases funciones, sería más sencillo escribir resultado += a que lo tuyo.
  • Las variables A y B, las declararía como a y b. Las mayus. se usan para constantes

De momento solo veo eso. El código lo pongo luego que ahora no puedo

 


¡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

Casi lo tengo

Aquí el código:

#include <iostream>
 
using namespace std;
 
float b,resultado;
 
int sumar(int resultado, int b) {
	resultado = resultado+b;
	return resultado;
}
 
int restar(int resultado, int b){
    resultado = resultado-b;
    return resultado;
}
 
int multiplicar(int resultado, int b){
    resultado = resultado*b;
    return resultado;
}
 
int dividir(int resultado, int b){
    resultado = resultado/b;
    return resultado;
}
 
int main(){
 
    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;
    cout<<"\n\nintroduce el valor"<<endl;
    cin>>resultado;
    while (1){
    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 finalizar"<<endl;
    cout<<"Seleccione la accion a realizar: "<<endl;
    cin>>accion;
    if (accion < 1 || accion > 5){
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"introduce el siguiente valor"<<endl;
    cin>>b;
    switch (accion){ //sumar
    case 1:
        resultado=resultado+b;
        cout<<"El resultado es "<<resultado<<endl;
        break;
 
    case 2: //restar
        resultado=resultado-b;
        cout<<"El resultado es "<<resultado<<endl;
        break;
 
    case 3: //multiplicar
        resultado=resultado*b;
        cout<<"El resultado es "<<resultado<<endl;
        break;
 
    case 4: //dividir
        resultado=resultado/b;
        if (b==0)
            cout<<"error, no se puede dividir entre cero"<<endl;
        else
            cout<<"El resultado es "<<resultado<<endl;
        break;
    }
}
    return 0;
}

No consigo parar la apli si intentan dividir entre 0.

Imagen de P22

Ya esta!!

Me ha costado más de lo que esperaba xDxDxD:

#include <iostream>
#include <ctype.h> //Para usar la funcion toupper()
 
#define SI 'Y'
 
using namespace std;
 
int main(){
    float a;
    int eleccion;
    int menu(float a);
 
    cout<<"---------------------------------------------------------------"<<endl;
    cout<<"|               Calculadora basica en C++                     |"<<endl;
    cout<<"|     Programada por The Dragon Lives, ayudado por P22        |"<<endl;
    cout<<"---------------------------------------------------------------"<<endl;
    while(1){
    cout<<"Introducir un numero mayor a 5 o menor a 1 para finalizar el programa"<<endl;
    cout<<"\n\nIntroduce el primer valor: ";
    cin>>a;
    cout<<"\n\n";
    eleccion = menu(a);
    if (eleccion == 0) break;    
}
 
    return 0;
}
 
int menu(float a){
    int accion, nada, i = 0;
    char eleccion;
    float b, resultado;
    float computarresultado(int accion, float a, float b);
 
while (1){
    cout<<"\n\nTipos de acciones"<<endl;
    cout<<"- 1.)Sumar"<<endl;
    cout<<"- 2.)Restar"<<endl;
    cout<<"- 3.)Multiplicar"<<endl;
    cout<<"- 4.)Dividir"<<endl;
    cout<<"- 5.)Resultado"<<endl;
    cout<<"-Numero fuera de rango para parar"<<endl;
    cout<<"\nSeleccione la accion a realizar: ";
    cin>>accion;
    if (accion == 5){
        cout<<"\n\nEl resultado es"<<resultado<<endl;
        cout<<"\nDesea seguir computando calculos? (Y/N): ";
        cin>>eleccion;
        cout<<"\n\n";
        if (toupper(eleccion) == SI)
            return(eleccion = 1);
        else
            accion == 111;
    }
    if (accion < 1 || accion > 5){
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"\nIntroduce el segundo valor"<<endl;
    cin>>b;
    resultado = computarresultado(accion, a, b);
    cout<<"\nEl resultado actual es: "<<resultado<<endl;
    }
    return 0;
}
 
 
float computarresultado(int accion, float a, float b){
    switch(accion){
                   case 1:
                        return(a + b);
                   case 2:
                        return(a - b);
                   case 3:
                        return(a * b);
                   case 4:
                        if (b == 0){
                               cout<<"\n\nNo se puede dividir entre 0, por favor, vuelva a intentarlo"<<endl;
                               return(a);
                               }
                        return(a / b);
                        }
}

Las ventajas:

  • Todas las operaciones se hacen en una misma función, dependiendo de accion que lo paso como argumento.
  • Y más que no me apetece contar xD

PD: Sigues dándole a resultado un valor de infinito al dividir entre 0. Lo que haces es primero darle valor y luego la comprobacion de si el divisor es 0. Debería ser al reves (mira mi código)


¡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

pequeño error

He intentado compilar eso, pero al probarlo me as surgido un error y es que creas un bucle después del valor a, por tanto todas las acciones las hace con referencia a "a" y no al resultado del la operación anterior, ej:

5+4=9+1=6

Tu código coge el valor de a como valor fijo a la acción a realizar, pero no puedes realizar una serie de operaciones (como por ejemplo en mi código, aunque no consigo quitar el error de dividir entre 0) ej en mi código:

5+4=9+1=10+6=16

Así se conseguiría realizar una sucesión de carculos, que es ha donde quiero ir :)

Muchas gracias por todos los consejos, al final lo conseguiremos ;)

PD. Tendré que pasar a poner la calculadora de SB :p

Imagen de P22

Muy sencillo

La variable i la habia definido por eso, pero al final se me paso :-) (tengo memoria pez :p)

#include <iostream>
#include <ctype.h> //Para usar la funcion toupper()
 
#define SI 'Y'
 
using namespace std;
 
int main(){
    float a;
    int eleccion;
    int menu(float a);
 
    cout<<"---------------------------------------------------------------"<<endl;
    cout<<"|               Calculadora basica en C++                     |"<<endl;
    cout<<"|     Programada por The Dragon Lives, ayudado por P22        |"<<endl;
    cout<<"---------------------------------------------------------------"<<endl;
    while(1){
    cout<<"Introducir un numero mayor a 5 o menor a 1 para finalizar el programa"<<endl;
    cout<<"\n\nIntroduce el primer valor: ";
    cin>>a;
    cout<<"\n\n";
    eleccion = menu(a);
    if (eleccion == 0) break;    
}
 
    return 0;
}
 
int menu(float a){
    int accion, nada, i = 0;
    char eleccion;
    float b, resultado;
    float computarresultado(int accion, float a, float b);
 
while (1){
    cout<<"\n\nTipos de acciones"<<endl;
    cout<<"- 1.)Sumar"<<endl;
    cout<<"- 2.)Restar"<<endl;
    cout<<"- 3.)Multiplicar"<<endl;
    cout<<"- 4.)Dividir"<<endl;
    cout<<"- 5.)Resultado"<<endl;
    cout<<"-Numero fuera de rango para parar"<<endl;
    cout<<"\nSeleccione la accion a realizar: ";
    cin>>accion;
    if (accion == 5){
        cout<<"\n\nEl resultado es"<<resultado<<endl;
        cout<<"\nDesea seguir computando calculos? (Y/N): ";
        cin>>eleccion;
        cout<<"\n\n";
        if (toupper(eleccion) == SI)
            return(eleccion = 1);
        else
            accion == 111;
    }
    if (accion < 1 || accion > 5){
        cout<<"\n\nFin del programa. Gracias por utilizarme"<<endl;
        cin>>nada;
        return 0;
    }
    cout<<"\nIntroduce el segundo valor"<<endl;
    cin>>b;
    if (i == 0) {
    resultado = computarresultado(accion, a, b);
    i = 1;
}
    else
    resultado = computarresultado(accion, resultado, b);
    cout<<"\nEl resultado actual es: "<<resultado<<endl;
    }
    return 0;
}
 
 
float computarresultado(int accion, float a, float b){
    switch(accion){
                   case 1:
                        return(a + b);
                   case 2:
                        return(a - b);
                   case 3:
                        return(a * b);
                   case 4:
                        if (b == 0){
                               cout<<"\n\nNo se puede dividir entre 0, por favor, vuelva a intentarlo"<<endl;
                               return(a);
                               }
                        return(a / b);
                        }
}

Ahí lo tienes.


¡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

Esta bien

Ya me has dejado claro quien es quien manda ¬¬ pues nada, aquí esta la open calculadora, de momento me estudio el código que has creado .... si alguien quiere aportar mas a la OpenCalculadora adelante.

Imagen de P22

Jejeje

Tampoco lo he hecho yo todo, empezando por la idea :p

Esto, como ya te dije en el otro post, es saber programar, y no saber C++. Sólo se puede aprender con la práctica. Espero que tu pronto aprendas ;-). Acerca de eso, para que me entiendas, el otro día, fui a casa de un amigo que estaba programando en python (no sabía nada, ni programar ni los comandos) y yo que en mi vida había tocado otro lenguaje distinto de LUA, me puse 5 minutos y le programé un arkanoid xDxD. Con esto quiero decir que no es cuestion de saber un lenguaje, sino de programar. Como se aprende? Practicando y estudiando códigos com oestás haciendo ;-)


¡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

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.