¡Hola, Invitado!


Patrocinantes


Síguenos en Facebook


Síguenos en Twitter

Compartir este tema:
Calculadora en C++
NuX Sin conexión
Miembro
***

Mensajes: 27
Registro en: Jan 2011
Gracias dados: 0
Gracias recibidos: 0
Mensaje: #1
Calculadora en C++
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti
Hola

En relación a mi post anterior os traigo la versión "final" de la calculadora, tal vez algún dia la retome y la mejore pero por el momento se queda así :)


Código:
/*
Calculadora realizada por NuX
*/

#include <iostream>
#include <math.h>    
using namespace std;

int main()
{
    
    // Declaramos las variables
    double op1 = 0, op2, resultado=0, aux=1;
    bool error = false, exit = false, repetir = false, cerror = true;;
    char operador;
    int i,menu;
    char suma='+',resta='-',multiplicacion='*',division='/',raiz='r',exponencial='^',factorial='!',cancelar = 'x', limpiar = 'c', conf;

    // INICIAMOS EL PROGRAMA
do
{
    

    cout << "Calculadora v3.0."<< endl<< endl;
    
    cout << "Menu:"<< endl;
    cout << "1.Calculadora"<< endl;
    cout << "2.Configurar"<< endl;
    cout << "3.Salir"<< endl<< endl;
    cout << ">>";
    cin >>    menu;
    
    if (menu <=0)
    {
        cout << "Introduzca una de las opciones del menu" << endl<< endl;
        repetir = true;
    }
    else if (menu >3)
    {
        cout << "Introduzca una de las opciones del menu" << endl<< endl;
        repetir = true;
    }
    else if (menu >= 1 && menu <=3)
    {
        
    switch(menu)
    {
        
        
        
        case 1:    // Calculadora
        
            exit = false;
            cout << endl << "Calculadora: " << endl;
            while (!exit)
            {    
                cout << ">";
                operador = cin.peek();
        
                if (isdigit(operador))
                {
                    cin >> op1;
                }
        
                
                cin.get(operador); // Obtenemos el operador
            
                while (operador!='\n' && !error) //Mientras sea distinto de un retorno de carro....
                {
                    
                        if (operador == suma)
                        {
                            cin >> op2;
                            resultado = op1+op2;
                        }
                    
                        else if (operador == resta)
                        {
                            cin >> op2;
                            resultado = op1-op2;
                        }
                    
                        else if (operador == multiplicacion)
                        {    cin >> op2;
                            resultado = op1*op2;
                        }
                        
                        else if (operador == division)
                        {    cin >> op2;
                            resultado = op1/op2;
                        }
                    
                        else if (operador == raiz)
                        {
                            if (op1>= 0)
                            {
                                resultado = sqrt(op1);
                            }
                        
                            else
                            {
                                cout << "!Error: Debe introducir un numero positivo." << endl;
                                resultado = 0; // Devolvemos 0 a resultado.
                                
                            }
                        
                        }
                        
                        else if (operador == exponencial)
                        {
                            cin >> op2;
                            if (op2 == floor(op2))
                            {
                                if (op2 > 0) // Exponente positivo
                                {
                                    for(i= 1; i<= op2; i++)
                                    {
                                        // Aux = 1 para que aux*operando1 sea igual que operando1¹
                                    // i incrementa hasta operaando2 consiguiendo que aux vaya siendo un multiplo mayor en cada ronda.
                                        aux = aux*op1;
                                        resultado = aux;    
                                    }
                                }
                                else if (op2 == 0) // Exponente = 0
                                {
                                    resultado = 1;
                                }
                                else
                                {    
                                    for(i= 0; i> op2; i--) // Exponente negativo
                                    {
                                        aux = aux*op1;
                                        resultado = 1/aux;
                                    }
                                }
                                aux = 1; // Devolvemos el valor de la auxiliar a 1, para ser usada en otras operaciones...
                            }
                            else
                            {
                                cout << "!Error: El exponente introducido no es numero entero.";
                            }
                        
                        }
                    
                        else if (operador == factorial)
                        {
                    
                            if(op1 >= 0 && op1 == floor(op1)) // Requerimos un entero no negativo
                        
                            {
                                for( i=op1; i>=1; i--) //
                                {
                                    aux = aux*(i);
                                    resultado = aux;
                                }
                                aux= 1;
                            }
                            else // En caso de que el numero no sea entero positivo.
                        
                            {
                                cout << "Introduzca un entero positivo para calcular el factorial." << endl;
                                resultado = 0;
                            }
                        }
                    
                        else if (operador == cancelar)
                        {
                            repetir = true;
                            resultado = 0;
                            exit = true;
                        }
                        
                        else if (operador == limpiar)
                        {
                            resultado = 0;
                        }
                    
                        else
                        { // No nos dan un valor que esperamos para el operador...
                            cout << "La operacion requerida no se encuentra registrada." << endl;
                            error=true; // Vamos al case true para salir del ciclo
                            resultado = 0;
                        }
                
                
                if (error==false)
                {
                    op1 = resultado; // Si no hay error el valor se le asigna a operando1
                    cin.get(operador); // Obtenemos el valor del operador
                }
            }

            switch (error)
            {
                case true:
                    cout<<"Error." << endl;
                    error = false;
                break;
                
                default:
                    cout << "= " <<op1 << endl << endl;
                    break;
            }
            
        
    }
    
    break;// FIN CALCULADORA
    
    
    case 2:
    
    // INICIO CONFIGURACION
    
        cout << endl << endl;
        cout << "Ha escogido la opcion de configuracion, introduzca el caracter deseado para cada operacion"<< endl<< endl;
        cout << "Caracter actual de suma: " << suma << endl;
        cout << "Caracter actual de resta: " << resta << endl;
        cout << "Caracter actual de multiplicacion: " << multiplicacion << endl;
        cout << "Caracter actual de division: " << division << endl;
        cout << "Caracter actual de raiz: " << raiz << endl;
        cout << "Caracter actual de potencia: " << exponencial << endl;
        cout << "Caracter actual de factorial: " << factorial << endl;
        cout << "Caracter para cerrar el programa: " << cancelar << endl;
        cout << "Caracter actual para cancelar: " << limpiar << endl << endl;
        
    
        cout << "Caracter deseado para la  suma: ";
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != resta && conf != multiplicacion && conf != division && conf != factorial && conf != exponencial && conf != raiz && conf != limpiar && conf != cancelar)
            {
                suma = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para la suma: ";
                cin >> conf;
            }
            
        }
        cout << "Caracter deseado para la  resta: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != multiplicacion && conf != division && conf != factorial && conf != exponencial && conf != raiz && conf != limpiar && conf != cancelar)
            {
                resta = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para la resta: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para la multiplicacion: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != division && conf != factorial && conf != exponencial && conf != raiz && conf != limpiar && conf != cancelar)
            {
                multiplicacion = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para la multiplicacion: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para la division: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != multiplicacion && conf != factorial && conf != exponencial && conf != raiz && conf != limpiar && conf != cancelar)
            {
                division = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para la division: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para la raiz: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != division && conf != factorial && conf != exponencial && conf != multiplicacion && conf != limpiar && conf != cancelar)
            {
                raiz = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para la raiz: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para la potencia: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != division && conf != factorial && conf != raiz && conf != multiplicacion && conf != limpiar && conf != cancelar)
            {
                exponencial = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para la potencia: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para el factorial: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != division && conf != exponencial && conf != raiz && conf != multiplicacion && conf != limpiar && conf != cancelar)
            {
                factorial = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para el factorial: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para cerrar el programa: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != division && conf != exponencial && conf != raiz && conf != multiplicacion && conf != limpiar && conf != factorial)
            {
                cancelar = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para cerrar el programa: ";
                cin >> conf;
            }
        }
        cout << "Caracter deseado para limpiar: ";
        cerror = true;
        cin >> conf;
        if (conf != '\n')
        {
            while (cerror)
            if (conf != suma && conf != resta && conf != division && conf != exponencial && conf != raiz && conf != multiplicacion && conf != cancelar && conf != factorial)
            {
                limpiar = conf;
                cerror= false;
            }
            else
            {
                cout << "El caracter especificado se usa para otra operacion. Introduzca un caracter valido." << endl<< endl;
                cout << "Caracter deseado para limpiar: ";
                cin >> conf;
            }
        }
        cout << endl;
                
        
        cout << endl << "Ha terminado la configuracion" << endl;
        repetir = true;
        break; // FIN CONFIGURACION
    
    case 3: // salir.
    
        cout << "Ha seleccionado la opcion 3, salir del programa" << endl<< endl;
        repetir = false; // Para salir del do while
        break; // FIN SALIR DEL PROGRAMA
    
        
    
    
    } // FINALIZAN LAS OPCIONES DEL MENU
        } // Fin else de la opcion del menu
    



}
while (repetir==true);
    
    
    
return 0;
    
}

Características:

- Opera con todos los números menos con los imaginarios.
- Realiza las operaciones leyendo operando,operador y operando sistemáticamente sin tener en cuenta las preferencias de los operadores.
- No tiene paréntesis.
- Menú de configuración para modificar los caracteres con los que hacer las operaciones.
- Realiza suma, resta, multiplicación, división, factorial, raiz y potencias.
- Devuelve mensajes de error en caso de haber introducido caracteres no válidos.

Nota: Para salir de la calculadora (opcion 1) escribid "x" y para poner el resultado a 0 escribid "c". Estas dos letras son configurables..

Un saludo.
11-12-2011 12:07 AM
Buscar Citar




Usuario(s) navegando en este tema: 1 invitado(s)