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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Fracciones en C [Ayuda]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Fracciones en C [Ayuda]  (Leído 19,568 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #10 en: 17 Febrero 2013, 22:34 pm »


Ahora tengo otra duda, por ejemplo corro mi programa, hago una operacion con fracciones por ejemplo, al calcular la resistencia, que es sumado, sumo (2/2)+(2/2) me da de resultado 2, lo cual es correcto, el programa cuando termina de hacer la operacion pulso ENTER y regreso al menu principal, y si eligo la misma opcion de volver a calcular otra resistencia, y pongo unas fracciones como (1/2)+(1/2) y me deberia dar como resultado 1, pero me da como resultado 3, por que aun guarda en su bufer el resultado de 2.



El problema que te aparece no tiene nada que ver con el buffer,

¡ ¡ ¡ quita todos los "fflush(stdin)" del código que no hacen nada ¡ ¡ ¡ .

Es más sencillo y el culpable en el fondo es el goto.

Lo que ocurre es que cada vez que hace una llamada el goto debe encontrar las variables que acumulan o suman con valor de cero o uno en el caso de un contador que tienes por ahí, pero lo que se encuentran es a esas variables con el valor que han tomado anteriormente, de ahí que sumen al valor viejo el nuevo.

Ese efecto lo corriges asignando nuevamente ,después de la etiqueta a la que llama el goto, esas variables a sus valores originales. por ejemplo, en el caso de la resistencia tendrías que poner:


Código
  1. void resistencia(void)
  2. {
  3.    float res, total=0,suma=0,numerador[sise], denominador[sise];
  4.    int n,cont,opc,cont1=1,n1;
  5.    a:
  6.    total=0,suma=0,cont1=1; /* <==AQUI INICIALIZAS NUEVAMENTE */
  7.    system("clear");
  8.    printf("\t\tRESISTENCA\n\n");
  9.     ..................


Si tienes duda pregunta nuevamente. :rolleyes:

Saluditos!.


P.D: En todo caso habría que poner un "fflush(stdout)" después de cada printf no terminado en \n y ... pero en fin, eso es otro tema.

REEDITO: Perdona que te cambie system (clear) a system (cls) pero así es como me funciona.

Te faltaba además algunos break, tenías entrada de dos resistencias fraccionarias en el cálculo del voltaje -porqué dos o no 3 o 5- y te he cambiado los goto por while, también nombrabas a Numerador como denominador y ya que usas system, en lugar de dos getchar seguidos yo pondría un system(pause). Revisa no obstante por si se ha colado algún gazapo:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define sise 100
  4.  
  5. void resistencia(void);
  6. void intensidad(void);
  7. void voltaje(void);
  8. /***************************************************/
  9. int main()
  10. {
  11.   int opc;
  12.   printf("\n");
  13.   printf ("\t\tC\tE\tP\tR\tO\tG\n");
  14.   printf("\n"); printf("\n");
  15.   printf ("\t\t\tCIRCUITOS EN SERIE \n");
  16.   printf ("\n");
  17.   printf ("Este Software se basa en la ley de OHM\n");
  18.   printf("\n");
  19.   printf("Precione ENTER para continuar\n");
  20.   getchar();
  21.   while (1){
  22.    system("cls");
  23.     printf("ELIJA UNA OPCCION: \n\n \t1)Calcular Resistencia\n\t2)Calcular Intensidad\n\t3)Calcular Voltaje\n\t4)Salir\n");
  24.     scanf("%d",&opc);
  25.     switch (opc)
  26.     {
  27.         case 1:
  28.         {
  29.             resistencia();
  30.             break;
  31.          }
  32.          case 2:
  33.          {
  34.              intensidad();
  35.              break;
  36.          }
  37.          case 3:
  38.          {
  39.              voltaje();
  40.              break;
  41.          }
  42.          case 4:
  43.          {
  44.              exit(0);
  45.          }
  46.        }
  47.   }
  48.   return 0;
  49. }
  50. /***************************************************/
  51. void resistencia(void)
  52. {
  53.    float res, total=0,suma=0,numerador[sise], denominador[sise];
  54.    int n,cont,opc,cont1=1,n1;
  55.    while (1){
  56.      total=0,suma=0,cont1=1; /* <==AQUI INICIALIZAS NUEVAMENTE */
  57.      system("cls");
  58.      printf("\t\tRESISTENCA\n\n");
  59.      printf("Con que tipo de datos desea calcular la resistencia:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n");
  60.      scanf("%d",&opc);
  61.       switch(opc)
  62.      {
  63.          case 1:
  64.          {
  65.              system("cls");
  66.              printf("\t\tEn esta sección calcularemos la resistencia total\n\n");
  67.              printf("Cuantas resistencias tiene el circuito: ");
  68.              scanf("%d",&n);
  69.              printf("\n");
  70.              for (cont=0;cont<=n-1;cont++)
  71.              {
  72.                  printf("Escribe el valor del Numerador %d (_/ ): ",cont); scanf("%f",&numerador[cont]);
  73.                  printf("Escribe el valor del Denominador %d ( /_): ",cont); scanf("%f",&denominador[cont]);
  74.                  printf("\n");
  75.              }
  76.              for(cont=0;cont<=n-1;cont++)
  77.              {
  78.                  suma=suma+(numerador[cont]/denominador[cont]);
  79.              }
  80.              printf("\n");
  81.              printf("El valor de la resistencia total es: %.2f Ohmios",suma);
  82.              getchar();getchar();
  83.              break;
  84.          }
  85.          case 2:
  86.          {
  87.              system("cls");
  88.              total=0;cont1=1;
  89.              printf("\t\tEn esta sección calcularemos la resistencia total\n\n");
  90.              printf("Cuantas resistencias tiene el circuito: ");
  91.              scanf("%d",&n1);
  92.              printf("\n");
  93.              while (cont1<=n1)
  94.              {
  95.                  printf("Escribe el valor de la resistencia %d :> ",cont1);
  96.                  scanf("%f",&res);
  97.                  total+=res;
  98.                  cont1++;
  99.              }
  100.              printf("\n");
  101.              printf("El resultado de el total de las resistencias es: %.2f ohmios",total);
  102.              getchar();getchar();
  103.              break;
  104.          }
  105.          case 3:
  106.              main();
  107.              break;
  108.          case 4:
  109.              exit(0);
  110.        }
  111.    }
  112. }
  113. /***************************************************/
  114. void intensidad(void)
  115. {
  116.    float vol,res,total=0, numerador[sise],denominador[sise],vol1=0,vol2=0,resul;
  117.    int opc,cont;
  118.    while (1){
  119.      system("cls");
  120.      printf("\t\tIntensidad\n"); printf("\n");
  121.      printf("Con que tipo de datos desea calcular la Intensidad:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n");
  122.      scanf("%d",&opc); switch(opc)
  123.      {
  124.          case 1:
  125.          {
  126.              system("cls");
  127.              printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n");
  128.              printf("Escribe el valor del voltaje:\n\n");
  129.              for (cont=1;cont<=1;cont++)
  130.              {
  131.                  printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador[cont]);
  132.                  printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador[cont]);
  133.                  printf("\n");
  134.                  vol1=vol1+(numerador[cont]+denominador[cont]);
  135.              }
  136.              printf("Escribe el valor de la resistencia total:\n\n");
  137.              for (cont=2;cont<=2;cont++)
  138.              {
  139.                  printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador[cont]);
  140.                  printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador[cont]);
  141.                  printf("\n");
  142.                  vol2=vol2+(numerador[cont]+denominador[cont]);
  143.              }
  144.              resul=vol1/vol2;
  145.              printf("\n");
  146.              printf("El valor de la intensidad total es: %.2f Ampers",resul);
  147.              getchar();getchar();
  148.              system("cls");
  149.              break;
  150.          }
  151.          case 2:
  152.          {
  153.              system("cls");
  154.              printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n");
  155.              printf("Cual es el valor del voltaje total: "); scanf("%f",&vol);
  156.              printf("Cual es el valor de la resistencai total: "); scanf("%f",&res); printf("\n"); total=vol/res;
  157.              printf("La intensidad es: %.2f ampers",total);
  158.              getchar();getchar();
  159.              break;
  160.          }
  161.          case 3:
  162.              main();
  163.          case 4:
  164.              exit(0);
  165.        }
  166.    }
  167.  
  168. }
  169. /***************************************************/
  170. void voltaje(void)
  171. {
  172.    float res,inte,total=0,numerador,denominador,tot1=0,resul;
  173.    int opc;
  174.    while (1) {
  175.      system("cls");
  176.      tot1=0;
  177.      printf("\t\tVoltaje\n\n");
  178.      printf("Con que tipo de datos desea calcular la Intensidad:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n");
  179.      scanf("%d",&opc); switch(opc)
  180.      {
  181.          case 1:
  182.          {
  183.              printf("\t\tEn esta sección calcularemos el voltaje total\n\n");
  184.              printf("Cual es el valor de la resistencia total: \n\n");
  185.              printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador);
  186.              printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador);
  187.              printf("\n");
  188.              tot1=(numerador/denominador);
  189.              printf("Cual es el valor de la intensidad total: "); scanf("%f",&inte); printf("\n");
  190.              resul=inte*tot1;
  191.              printf("El valor de el voltaje total es: %.2f Volts",resul);
  192.              getchar();getchar();
  193.              break;
  194.          }
  195.          case 2:
  196.          {
  197.              system("cls");
  198.              printf("\t\tEn esta sección calcularemos el voltaje total\n\n");
  199.              printf("Cual es el valor de la resistencia total: "); scanf("%f",&res);
  200.              printf("Cual es el valor de la intensidad total: "); scanf("%f",&inte); printf("\n"); total=res*inte;
  201.              printf("El voltaje total es: %.2f vols",total);
  202.              getchar();getchar();
  203.              break;
  204.  
  205.          }
  206.          case 3:
  207.              main();
  208.              break;
  209.          case 4:
  210.              exit(0);
  211.        }
  212.    }
  213.  
  214. }
  215. /***************************************************/
  216.  


« Última modificación: 18 Febrero 2013, 00:15 am por leosansan » En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #11 en: 18 Febrero 2013, 16:17 pm »

@leosansan, te dejo un truco de preprocesador que he usado mas de una vez aqui para limpiar la pantalla:

Código
  1. #ifdef __unix__ /* Estamos en *nix */
  2. #define clscr() system("clear");
  3. #elif defined __WIN32 /* Estamos en windows */
  4. #define clscr() system("cls");
  5. #else
  6. #warning Missing clear screen function
  7. #endif
  8.  
  9. /* En el codigo puedes usar clscr() tranquilamente para limpiar la pantalla */
  10.  
  11.  


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #12 en: 18 Febrero 2013, 16:57 pm »

@leosansan, te dejo un truco de preprocesador que he usado mas de una vez aqui para limpiar la pantalla:
.....................................................................................

Muchas gracias, la verdad es que lo veo muy útil. ;-)

Saluditos!.
En línea

BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #13 en: 18 Febrero 2013, 23:22 pm »

@leosansan, te dejo un truco de preprocesador que he usado mas de una vez aqui para limpiar la pantalla:

Código
  1. #ifdef __unix__ /* Estamos en *nix */
  2. #define clscr() system("clear");
  3. #elif defined __WIN32 /* Estamos en windows */
  4. #define clscr() system("cls");
  5. #else
  6. #warning Missing clear screen function
  7. #endif
  8.  
  9. /* En el codigo puedes usar clscr() tranquilamente para limpiar la pantalla */
  10.  
  11.  

¿Y Para Mac OS? *.* xD
En línea

Puede que desees aprender a programar desde 0: www.espascal.es
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #14 en: 19 Febrero 2013, 16:23 pm »

¿Y Para Mac OS? *.* xD

1) I don't give a shit about Mac OS
2) La idea queda clara, solo hay que buscar la macro que debe estar definida en Mac OS
3) *Creo* que __unix__ esta definida en Mac OS
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #15 en: 23 Febrero 2013, 14:38 pm »

gracias por tu aporte leosansan disculpa por responder hasta ahora, es que por mi trabajo me ocupo toda la semana, y lamentablemente donde no voy no hay cobertura de red movil, pero gracias por tus consejos, no sabia que el while se podria usar como un goto, y que el goto provocaba esos errores, y el system("pause") nunca lo habia usadado, checare ahora el codigo gracias.


0xDani Gracias por tu aporte para limpiar mas facilmente la pantalla, si es muy bueno, lo hace mas rapido, gracias de nuevo.

Cualquier duda y aclaracion la publico mas al rato, gracias a todos.
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Amigos necesito ayuda con un background para un logo de una web ayuda.
Diseño Gráfico
™Carlos.® 2 3,374 Último mensaje 14 Agosto 2004, 00:23 am
por ™Carlos.®
convertir decimales a fracciones
Programación Visual Basic
asdexiva 5 8,811 Último mensaje 6 Marzo 2014, 07:06 am
por javinet
ejercicio fracciones
Programación C/C++
kuni2006 2 2,061 Último mensaje 22 Mayo 2016, 01:40 am
por HardForo
[C] Problema con fracciones
Programación C/C++
padi22 5 2,685 Último mensaje 11 Enero 2018, 00:50 am
por MAFUS
es una calculadora de operaciones básicas con fracciones
Programación C/C++
HolyGrace 7 5,232 Último mensaje 20 Febrero 2018, 01:47 am
por stderr
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines