Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: HolyGrace en 19 Febrero 2018, 00:52 AM

Título: es una calculadora de operaciones básicas con fracciones
Publicado por: HolyGrace en 19 Febrero 2018, 00:52 AM
Hola a todos

Deseo que tengan un buen día, hoy estoy en busca de ayuda con un programa que estoy realizando en c++ (lo compilo con el programa Dev-C++) en fin, en visto alguno temas (la verdad pocos) sobre el bucle que se produce al ingresar un carácter en una variable, no se si me explique bien, el programa en general es una calculadora de operaciones básicas con fracciones, la condición es que en el menú del programa no acepte caracteres ni otras opciones que no aparezcan en el listado del menú. Pude ver en otro tema del foro la misma pregunta pero la verdad no entendí, espero me puedan ayudar, aquí dejo el código.

Código (cpp) [Seleccionar]
#include<iostream>
#include<math.h>
#include<conio.h>
#include<locale.h>

using namespace std;

int main()
{

setlocale(LC_CTYPE, "Spanish");
int opc;
float n1,d1,n2,d2,sum1,sum2,res1,res2,mul1,mul2,div1,div2,ans;

do{

system("cls");    //Funcion para limpiar la pantalla//

//Menú Principal//

cout<<"\t\t\t\tBIENVENIDO\n";
cout<<"\n¿Qué operación desea hacer?\n";
cout<<"\n1. Suma\n";
cout<<"2. Resta\n";
cout<<"3. Multiplicación\n";
cout<<"4. División\n";
cout<<"5. Salir\n\n";


cout<<"Elija una opción: ";cin>>opc;

system("cls");

switch(opc)
{
case 1:

cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;

system("cls");

cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" + ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";

if (d1 == d2){

sum1 = (n1 + n2);

cout<<"\nResultado en fracción:\n";
cout<<sum1<<"/"<<d1;

ans = sum1/d1;

cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";

cout<<"Presione una tecla para volver al menu principal";
getch();

}
else if (d1 != d2){

sum1 = (n1*d2) + (d1*n2);
sum2 = d1*d2;

cout<<"\nResultado en fracción:\n";
cout<<sum1<<"/"<<sum2;

ans = sum1/sum2;

cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";

cout<<"Presione una tecla para volver al menu principal";
getch();
}
break;

case 2:

cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;

system("cls");

cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" - ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";

if (d1 == d2){

res1 = (n1 - n2);

cout<<"\nResultado en fracción:\n";
cout<<res1<<"/"<<d1;

ans = res1/d1;

cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";

cout<<"Presione una tecla para volver al menu principal";
getch();
}
else if (d1 != d2){

res1 = (n1*d2) - (d1*n2);
res2 = d1*d2;

cout<<"\nResultado en fracción:\n";
cout<<res1<<"/"<<res2;

ans = res1/res2;

cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";

cout<<"Presione una tecla para volver al menu principal";
getch();
}
break;

case 3:

cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;

system("cls");

cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" * ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";

mul1 = n1*n2;
mul2 = d1*d2;

cout<<"\nResultado en fracción:\n";
cout<<mul1<<"/"<<mul2;

ans = mul1/mul2;

cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";

cout<<"Presione una tecla para volver al menu principal";
getch();

break;

case 4:

cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;

system("cls");

cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" / ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";

div1 = n1*d2;
div2 = d1*n2;

cout<<"\nResultado en fracción:\n";
cout<<div1<<"/"<<div2;

ans = div1/div2;

cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";

cout<<"Presione una tecla para volver al menu principal";
getch();

break;

case 5:

return 0;
break;

default:

cout<<"Opción Invalida\n";

system("pause");

}
}while (opc != 5);

}




· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
· Los titulos deben ser descriptivos
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex
Título: Re: URGENTE AYUDA!!
Publicado por: MAFUS en 19 Febrero 2018, 01:26 AM
Pon un ejemplos malo y qué es lo que esperas.
Título: Re: URGENTE AYUDA!!
Publicado por: HolyGrace en 19 Febrero 2018, 01:37 AM
Cita de: MAFUS en 19 Febrero 2018, 01:26 AM
Pon un ejemplos malo y qué es lo que esperas.

Que dices?
Título: Re: URGENTE AYUDA!!
Publicado por: colcrt en 19 Febrero 2018, 04:27 AM
podría en vez de salir del programa en el ultimo case retornarlo al menu con la opción goto
Título: Re: URGENTE AYUDA!!
Publicado por: HolyGrace en 19 Febrero 2018, 04:32 AM
Mmm no te entiendo muy bien, me dices que modifique el último caso? Pero ese es para salír del programa
Título: Re: URGENTE AYUDA!!
Publicado por: colcrt en 19 Febrero 2018, 06:05 AM
ahora q lo pienso puedes dejar el case 5 como la salida del programa y el default que retorne al menu algo así

switch (variable) {
  case 2:
      Console.WriteLine("variable is >= 2");
      goto case 1;
  case 1:
      Console.WriteLine("variable is >= 1");
      break;
}
Título: Re: URGENTE AYUDA!!
Publicado por: MAFUS en 19 Febrero 2018, 07:40 AM
Digo que pongas una captura de pantalla del programa fallando o hagas un copia-pega del terminal. Para saber qué ocurre.
Título: Re: URGENTE AYUDA!!
Publicado por: marcebond en 20 Febrero 2018, 01:47 AM
Lo tenías hecho, solo te faltaba el bucle, he refactorizado tu código y añadido el bucle

Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
#include <locale.h>

using namespace std;

void leerOpcion(unsigned short* opcion) {
    cout
        << "Calculadora de fracciones" << endl << endl
        << "1. Suma" << endl
        << "2. Resta" << endl
        << "3. Multiplicación" << endl
        << "4. División" << endl
        << "0. Salir" << endl << endl
        << "Opción: ";
    cin >> *opcion;
}

void leerFraccion(float* numerador, float* denominador) {
    char separador;
    while (separador != '/') {
        cout << endl << "Fracción [numerador/denominador]: ";
        cin >> *numerador >> separador >> *denominador;
        if (separador != '/') {
            cout << "[ERROR] Se esperaba '/' como separador";
        }
    }
}

int main() {
    setlocale(LC_CTYPE, "Spanish");
    unsigned short opcion;
    float n1, d1, n2, d2, numerador, denominador;

    do {
        system("cls");
        leerOpcion(&opcion);

        if (opcion != 0) {
            cin.get();
            leerFraccion(&n1, &d1);
            cin.get();
            leerFraccion(&n2, &d2);
            switch (opcion) {
                case 1:
                    numerador = d1 == d2 ? n1 + n2 : d1 * d2 + d1 * n2;
                    denominador = d1 == d2 ? d1 : d1 * d2;
                    break;

                case 2:
                    numerador = d1 == d2 ? n1 - n2 : n1 * d2 - d1 * n2;
                    denominador = d1 == d2 ? d1 : d1 * d2;
                    break;

                case 3:
                    numerador = n1 * n2;
                    denominador = d1 * d2;
                    break;

                case 4:
                    numerador = n1 * d2;
                    denominador = d1 * n2;
                    break;
            }
            cout
                << "Resultado: " << numerador << "/" << denominador << endl
                << "División: " << numerador / denominador << endl
                << "Pulse una tecla para continuar...";
            cin.ignore();
            cin.get();
        }
    } while (opcion != 0);
}


Te sugiero no utilices conio, un saludo!