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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  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,566 veces)
barnix456

Desconectado Desconectado

Mensajes: 128


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


Ver Perfil
Fracciones en C [Ayuda]
« en: 11 Febrero 2013, 00:47 am »

Hola buenas tardes, tengo una duda, mi maestro de Fisica me ha dejado un pequeño programa en C para resolver la ecuacion de OHM, y lo he echo, pero me ha pedido que lo haga para que el programa tambien lea numero fraccionarios  :rolleyes: ahora no se, he buscado en google pero no he encontrado grandes cosas, si alguien sabe como trabajar con fracciones en C, me imagino que debe ser una funcion. Aqui les dejo mi codigo, cualquier comentario acerca del codigo son bienvenidos  ;D


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void resistencia(void);
  4. void intensidad(void);
  5. void voltaje(void);
  6.  
  7. int main()
  8. {
  9.   int opc;
  10.   printf("\n");
  11.   printf ("\t\tC\tE\tP\tR\tO\tG\n");
  12.   printf("\n"); printf("\n");
  13.   printf ("\t\t\tCIRCUITOS EN SERIE \n");
  14.   printf ("\n");
  15.   printf ("Este Software se basa en la ley de OHM\n");
  16.   printf("\n");
  17.   printf("Precione ENTER para continuar\n");
  18.   getchar();
  19.   a:
  20.   system("clear");
  21.   printf("ELIJA UNA OPCCION: \n\n \t1)Calcular resistencia\n\t2)Calcular Intensidad\n\t3)Calcular Voltaje\n\t4)Salir\n");
  22.   scanf("%d",&opc);
  23.   switch (opc)
  24.   {
  25.       case 1:
  26.       {
  27.           resistencia();
  28.           break;
  29.        }
  30.        case 2:
  31.        {
  32.            intensidad();
  33.            break;
  34.        }
  35.        case 3:
  36.        {
  37.            voltaje();
  38.            break;
  39.        }
  40.        case 4:
  41.        {
  42.            exit(0);
  43.        }
  44.        default:
  45.        {
  46.            goto a;
  47.        }
  48.   }
  49.   return 0;
  50. }
  51.  
  52. void resistencia(void)
  53. {
  54.    float n, res, total=0;
  55.    int cont=1;
  56.    system("clear");
  57.    printf("\t\tEn esta sección calcularemos la resistencia total\n"); printf("\n");
  58.    printf("Cuantas resistencias tiene el circuito: "); scanf("%f",&n); printf("\n");
  59.    while (cont<=n)
  60.    {
  61.        printf("Escribe el valor de la resistencia %d :> ",cont); scanf("%f",&res);
  62.        total+=res;
  63.        cont++;
  64.    }
  65.    printf("\n");
  66.    printf("El resultado de el total de las resistencias es: %.2f ohmios",total);
  67. }
  68.  
  69. void intensidad(void)
  70. {
  71.    float vol,res,total=0;
  72.    system("clear");
  73.    printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n");
  74.    printf("Cual es el valor del voltaje total:> "); scanf("%f",&vol);
  75.    printf("Cual es el valor de la resistencai total:> "); scanf("%f",&res); printf("\n"); total=vol/res;
  76.    printf("La intensidad es: %.2f ampers",total);
  77. }
  78.  
  79. void voltaje(void)
  80. {
  81.    float res,inte,total=0;
  82.    system("clear");
  83.    printf("\t\tEn esta sección calcularemos el voltaje total\n"); printf("\n");
  84.    printf("Cual es el valor de la resistencia total:> "); scanf("%f",&res);
  85.    printf("Cual es el valor de la intensidad total:> "); scanf("%f",&inte); printf("\n"); total=res*inte;
  86.    printf("El voltaje total es: %.2f vols",total);
  87. }
  88.  


En línea

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

Isaac Asimov
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Fracciones en C [Ayuda]
« Respuesta #1 en: 11 Febrero 2013, 01:08 am »

Hola.

Para trabajar con fracciones, puedes hacer una estructura que contenga dos campos: numerador y denominador. Así, cuando sea necesario mostrar la fracción, solo debes poner en un printf numerador / denominador, y te muestra ambos, y si quieres dividir, puedes también. No sé si me he expresado bien...


En línea

barnix456

Desconectado Desconectado

Mensajes: 128


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


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #2 en: 11 Febrero 2013, 02:01 am »

Ah ver si entendi, poner algo como.

printf("Escriba la fraccion:)";
printf("  /  ");
scanf("%d%d, &a,&b);


o bueno esa es la idea pero, es una buena tecnica la habia pensado, pero no habra una funcion en la que si se puedan escribir una fraccion, o solo podremos trabajar de esa manera.
En línea

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

Isaac Asimov
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Fracciones en C [Ayuda]
« Respuesta #3 en: 11 Febrero 2013, 02:12 am »

Me refería a crear un struct de esta forma:

Código
  1. #include <stdio.h>
  2.  
  3. struct division
  4. {
  5.    int numerador;
  6.    int denominador;
  7. }fraccion;
  8.  
  9. int main()
  10. {
  11.    //Las cantidades las asignamos desde donde queramos.
  12.    //Desde el programa, se las pedimos al usuario...
  13.    fraccion.numerador = 59;
  14.    fraccion.denominador = 3;
  15.  
  16.    //Queremos mostrar solo la fracción:
  17.  
  18.    printf("Resultado 1: %d / %d\n\n", fraccion.numerador, fraccion.denominador);
  19.  
  20.    //Queremos mostrar el resultado con decimales:
  21.  
  22.    printf("Resultado 2: %f", (float) fraccion.numerador / fraccion.denominador);
  23.  
  24.    return 0;
  25. }
  26.  

Así podrías trabajar con fracciones de una forma sencilla.

Otra forma que se me acaba de ocurrir, aunque es mucho más pesada y larga, es trabajar con números decimales y expresar el resultado en forma de fracción generatriz. Obviamente esta forma es más larga, supongo que lo que buscas es la primera.  ;)

Un saludo.
En línea

barnix456

Desconectado Desconectado

Mensajes: 128


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


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #4 en: 11 Febrero 2013, 02:37 am »

guaoo eso se ve muy interesante, la verdad no se hacer eso de las "struct" apenas comienzo jejej pero se ve interesante... tendre que buscar algo de eso para poder hacerlo jeje gracias
En línea

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

Isaac Asimov
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Fracciones en C [Ayuda]
« Respuesta #5 en: 11 Febrero 2013, 02:39 am »

En el último caso, si no sabes usar estructuras todavía y no tienes tiempo de aprender, puedes crear dos variables numerador, denominador. No queda "tan elegante", pero sigue siendo útil.

Pero bueno, el uso del struct es bastante sencillo, no tiene más que lo que te he mostrado en el código.  ;)
En línea

barnix456

Desconectado Desconectado

Mensajes: 128


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


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #6 en: 11 Febrero 2013, 03:31 am »

siii practicare apartir de ahi.. gracias por la informacion
En línea

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

Isaac Asimov
BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


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

Generalmente para trabajar con un cierto tidpo de dato que no existe predefinidamente en el lenguaje, lo que se hace es crear un TAD (tipo abstracto de datos) que dependiendo del lenguaje se puede implementar de una forma u otra.

Es decir, tener un tipo de dato complejo (formado a partir de tipos de datos simples) que pueda manejarse a través de rutinas para así abstraer el código y restringir el uso de cierto TAD; entre otras características.
En línea

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

Desconectado Desconectado

Mensajes: 128


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


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #8 en: 16 Febrero 2013, 21:29 pm »

disculpa por responder hasta ahora, habia estado ocupado en el trabajo, pasando a lo que explicaste, la verdad, todavia lo de "struct" me parecio algo mas simple de entender a lo tuyo, pero bien, como aun no se mucho de programacion lo que hice fue, hacer un arreglo, para el numerador y denominador, asi primero pedia el numerador y luego el denominador y los fui guardando en la misma posicion del arreglo:

numerador[1]=4
denominador[1]=5

y ya tenia mi fraccion 4/5

y divido los numeros y ya tengo el valor real de cada fraccion, al momento de mostrar el resultado lo muestra con decimales.

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.

como hago para limpiar este bufer?? busque algo como:

fflush(stdin)

while(getchar()!='\n');

pero no se como funciona?? alguien me podria explicar
En línea

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

Isaac Asimov
barnix456

Desconectado Desconectado

Mensajes: 128


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


Ver Perfil
Re: Fracciones en C [Ayuda]
« Respuesta #9 en: 16 Febrero 2013, 21:58 pm »

Les dejo mi codigo, ya sabes lo errores, observaciones y consejos me lo dicen... estoy aprendiendo apenas.


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

por ahora mi unica duda es eso del buffer... gracias
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,372 Último mensaje 14 Agosto 2004, 00:23 am
por ™Carlos.®
convertir decimales a fracciones
Programación Visual Basic
asdexiva 5 8,809 Ú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,231 Último mensaje 20 Febrero 2018, 01:47 am
por stderr
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines