elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  es una calculadora de operaciones básicas con fracciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: es una calculadora de operaciones básicas con fracciones  (Leído 5,782 veces)
HolyGrace

Desconectado Desconectado

Mensajes: 3


Ver Perfil
es una calculadora de operaciones básicas con fracciones
« 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
  1. #include<iostream>
  2. #include<math.h>
  3. #include<conio.h>
  4. #include<locale.h>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.  
  11. setlocale(LC_CTYPE, "Spanish");
  12. int opc;
  13. float n1,d1,n2,d2,sum1,sum2,res1,res2,mul1,mul2,div1,div2,ans;
  14.  
  15. do{
  16.  
  17. system("cls");    //Funcion para limpiar la pantalla//
  18.  
  19. //Menú Principal//
  20.  
  21. cout<<"\t\t\t\tBIENVENIDO\n";
  22. cout<<"\n¿Qué operación desea hacer?\n";
  23. cout<<"\n1. Suma\n";
  24. cout<<"2. Resta\n";
  25. cout<<"3. Multiplicación\n";
  26. cout<<"4. División\n";
  27. cout<<"5. Salir\n\n";
  28.  
  29.  
  30. cout<<"Elija una opción: ";cin>>opc;
  31.  
  32. system("cls");
  33.  
  34. switch(opc)
  35. {
  36. case 1:
  37.  
  38. cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
  39. cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
  40. cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
  41. cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
  42.  
  43. system("cls");
  44.  
  45. cout<<"El resultado de ";
  46. cout<<n1;
  47. cout<<"/";
  48. cout<<d1;
  49. cout<<" + ";
  50. cout<<n2;
  51. cout<<"/";
  52. cout<<d2;
  53. cout<<" es:\n";
  54.  
  55. if (d1 == d2){
  56.  
  57. sum1 = (n1 + n2);
  58.  
  59. cout<<"\nResultado en fracción:\n";
  60. cout<<sum1<<"/"<<d1;
  61.  
  62. ans = sum1/d1;
  63.  
  64. cout<<"\n\nResultado de la división:\n";
  65. cout<<ans;
  66. cout<<"\n";
  67.  
  68. cout<<"Presione una tecla para volver al menu principal";
  69. getch();
  70.  
  71. }
  72. else if (d1 != d2){
  73.  
  74. sum1 = (n1*d2) + (d1*n2);
  75. sum2 = d1*d2;
  76.  
  77. cout<<"\nResultado en fracción:\n";
  78. cout<<sum1<<"/"<<sum2;
  79.  
  80. ans = sum1/sum2;
  81.  
  82. cout<<"\n\nResultado de la división:\n";
  83. cout<<ans;
  84. cout<<"\n";
  85.  
  86. cout<<"Presione una tecla para volver al menu principal";
  87. getch();
  88. }
  89. break;
  90.  
  91. case 2:
  92.  
  93. cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
  94. cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
  95. cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
  96. cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
  97.  
  98. system("cls");
  99.  
  100. cout<<"El resultado de ";
  101. cout<<n1;
  102. cout<<"/";
  103. cout<<d1;
  104. cout<<" - ";
  105. cout<<n2;
  106. cout<<"/";
  107. cout<<d2;
  108. cout<<" es:\n";
  109.  
  110. if (d1 == d2){
  111.  
  112. res1 = (n1 - n2);
  113.  
  114. cout<<"\nResultado en fracción:\n";
  115. cout<<res1<<"/"<<d1;
  116.  
  117. ans = res1/d1;
  118.  
  119. cout<<"\n\nResultado de la división:\n";
  120. cout<<ans;
  121. cout<<"\n";
  122.  
  123. cout<<"Presione una tecla para volver al menu principal";
  124. getch();
  125. }
  126. else if (d1 != d2){
  127.  
  128. res1 = (n1*d2) - (d1*n2);
  129. res2 = d1*d2;
  130.  
  131. cout<<"\nResultado en fracción:\n";
  132. cout<<res1<<"/"<<res2;
  133.  
  134. ans = res1/res2;
  135.  
  136. cout<<"\n\nResultado de la división:\n";
  137. cout<<ans;
  138. cout<<"\n";
  139.  
  140. cout<<"Presione una tecla para volver al menu principal";
  141. getch();
  142. }
  143. break;
  144.  
  145. case 3:
  146.  
  147. cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
  148. cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
  149. cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
  150. cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
  151.  
  152. system("cls");
  153.  
  154. cout<<"El resultado de ";
  155. cout<<n1;
  156. cout<<"/";
  157. cout<<d1;
  158. cout<<" * ";
  159. cout<<n2;
  160. cout<<"/";
  161. cout<<d2;
  162. cout<<" es:\n";
  163.  
  164. mul1 = n1*n2;
  165. mul2 = d1*d2;
  166.  
  167. cout<<"\nResultado en fracción:\n";
  168. cout<<mul1<<"/"<<mul2;
  169.  
  170. ans = mul1/mul2;
  171.  
  172. cout<<"\n\nResultado de la división:\n";
  173. cout<<ans;
  174. cout<<"\n";
  175.  
  176. cout<<"Presione una tecla para volver al menu principal";
  177. getch();
  178.  
  179. break;
  180.  
  181. case 4:
  182.  
  183. cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
  184. cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
  185. cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
  186. cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
  187.  
  188. system("cls");
  189.  
  190. cout<<"El resultado de ";
  191. cout<<n1;
  192. cout<<"/";
  193. cout<<d1;
  194. cout<<" / ";
  195. cout<<n2;
  196. cout<<"/";
  197. cout<<d2;
  198. cout<<" es:\n";
  199.  
  200. div1 = n1*d2;
  201. div2 = d1*n2;
  202.  
  203. cout<<"\nResultado en fracción:\n";
  204. cout<<div1<<"/"<<div2;
  205.  
  206. ans = div1/div2;
  207.  
  208. cout<<"\n\nResultado de la división:\n";
  209. cout<<ans;
  210. cout<<"\n";
  211.  
  212. cout<<"Presione una tecla para volver al menu principal";
  213. getch();
  214.  
  215. break;
  216.  
  217. case 5:
  218.  
  219. return 0;
  220. break;
  221.  
  222. default:
  223.  
  224. cout<<"Opción Invalida\n";
  225.  
  226. system("pause");
  227.  
  228. }
  229. }while (opc != 5);
  230.  
  231. }
  232.  
  233.  


· 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
-Engel Lex


« Última modificación: 20 Febrero 2018, 14:15 pm por engel lex » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #1 en: 19 Febrero 2018, 01:26 am »

Pon un ejemplos malo y qué es lo que esperas.


En línea

HolyGrace

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #2 en: 19 Febrero 2018, 01:37 am »

Pon un ejemplos malo y qué es lo que esperas.

Que dices?
En línea

colcrt

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #3 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
En línea

HolyGrace

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #4 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
« Última modificación: 19 Febrero 2018, 04:34 am por HolyGrace » En línea

colcrt

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #5 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í

Código:
switch (variable) {
   case 2:
       Console.WriteLine("variable is >= 2");
       goto case 1;
   case 1:
       Console.WriteLine("variable is >= 1");
       break;
}
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #6 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.
En línea

stderr

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: URGENTE AYUDA!!
« Respuesta #7 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
  1. #include <iostream>
  2. #include <string>
  3. #include <locale.h>
  4.  
  5. using namespace std;
  6.  
  7. void leerOpcion(unsigned short* opcion) {
  8.    cout
  9.        << "Calculadora de fracciones" << endl << endl
  10.        << "1. Suma" << endl
  11.        << "2. Resta" << endl
  12.        << "3. Multiplicación" << endl
  13.        << "4. División" << endl
  14.        << "0. Salir" << endl << endl
  15.        << "Opción: ";
  16.    cin >> *opcion;
  17. }
  18.  
  19. void leerFraccion(float* numerador, float* denominador) {
  20.    char separador;
  21.    while (separador != '/') {
  22.        cout << endl << "Fracción [numerador/denominador]: ";
  23.        cin >> *numerador >> separador >> *denominador;
  24.        if (separador != '/') {
  25.            cout << "[ERROR] Se esperaba '/' como separador";
  26.        }
  27.    }
  28. }
  29.  
  30. int main() {
  31.    setlocale(LC_CTYPE, "Spanish");
  32.    unsigned short opcion;
  33.    float n1, d1, n2, d2, numerador, denominador;
  34.  
  35.    do {
  36.        system("cls");
  37.        leerOpcion(&opcion);
  38.  
  39.        if (opcion != 0) {
  40.            cin.get();
  41.            leerFraccion(&n1, &d1);
  42.            cin.get();
  43.            leerFraccion(&n2, &d2);
  44.            switch (opcion) {
  45.                case 1:
  46.                    numerador = d1 == d2 ? n1 + n2 : d1 * d2 + d1 * n2;
  47.                    denominador = d1 == d2 ? d1 : d1 * d2;
  48.                    break;
  49.  
  50.                case 2:
  51.                    numerador = d1 == d2 ? n1 - n2 : n1 * d2 - d1 * n2;
  52.                    denominador = d1 == d2 ? d1 : d1 * d2;
  53.                    break;
  54.  
  55.                case 3:
  56.                    numerador = n1 * n2;
  57.                    denominador = d1 * d2;
  58.                    break;
  59.  
  60.                case 4:
  61.                    numerador = n1 * d2;
  62.                    denominador = d1 * n2;
  63.                    break;
  64.            }
  65.            cout
  66.                << "Resultado: " << numerador << "/" << denominador << endl
  67.                << "División: " << numerador / denominador << endl
  68.                << "Pulse una tecla para continuar...";
  69.            cin.ignore();
  70.            cin.get();
  71.        }
  72.    } while (opcion != 0);
  73. }
  74.  

Te sugiero no utilices conio, un saludo!
« Última modificación: 20 Febrero 2018, 01:51 am por marcebond » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines