• Domingo 5 de Mayo de 2024, 00:16

Autor Tema:  Problema  (Leído 1333 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Problema
« en: Lunes 19 de Enero de 2009, 22:45 »
0
Código: Text
  1.  
  2. #include<stdio.h>
  3.  
  4. int suma(int num1, int num2);
  5. int calculden();
  6. int calculnum(int num1, int num2,int resulden,int den1,int den2);
  7. int mcd(int dividendo,int divisor);
  8. int mcm(int dividendo,int divisor,int dividendo1);
  9.  
  10. int main()
  11. {
  12.     int num1,num2,den1,den2,resul,resulden,resulnum;
  13.    
  14.     printf("Programa que cacula el resultat de la suma de dues fracciones. n");
  15.     printf("n");
  16.     printf("n");
  17.     printf("Introdueix el numerador de la primera fraccio: n");
  18.     scanf("%d", &num1);
  19.     printf("Introdueix el denomirador de la primera fraccio: n");
  20.     scanf("%d", &den1);
  21.     printf("Ahora la segona fraccio. n");
  22.     printf("Introdueix el numerador de la segona fraccio: n");
  23.     scanf("%d", &num2);
  24.     printf("Introdueix el denominador de la segona fraccio: n");
  25.     scanf("%d", &den2);
  26.    
  27.     if (den1 == den2)
  28.     {  
  29.              printf("La suma de les fraccions dona com a resultat: %d/%d n", num1+num2,den1);
  30.              getchar();
  31.              getchar();
  32.     }
  33.     else
  34.     {
  35.         resulden=calculden();
  36.         resulnum=calculnum(num1,num2,resulden,den1,den2);
  37.         printf("La suma de les fracciones dona com a resultat: %d/%d n", resulnum,resulden);
  38.         getchar();
  39.         getchar();
  40.     }
  41. }
  42. int calculden()
  43. {
  44.     int num,i,resulmcm,dividendo1;
  45.     int dividendo=num, divisor=num;
  46.    
  47.         printf("Introduce el primer denominador: n");
  48.         scanf("%d", &num);
  49.        
  50.        for (i = 1; i <= 2; i++)
  51.        {
  52.          
  53.          
  54.                      if (num > dividendo)
  55.                      {  
  56.                            dividendo = num;
  57.                            printf("Introduce el segundo denominador: n");
  58.                            scanf("%d", &num);
  59.                      }  
  60.                      else if (num < dividendo)
  61.                      {
  62.                           divisor = num;
  63.                      }
  64.          }
  65.      dividendo1=mcd(dividendo,divisor);
  66.      resulmcm=mcm(dividendo,divisor,dividendo1);
  67.      
  68.      return resulmcm;
  69.  
  70. }
  71. int mcd(int dividendo1, int divisor)
  72. {
  73.     int aux;
  74.    
  75.     do
  76.     {
  77.     aux = divisor;
  78.     divisor = dividendo1 % divisor;
  79.     dividendo1=aux;
  80.     }while (divisor != 0);
  81.  
  82. return dividendo1;
  83. }
  84. int mcm(int dividendo, int divisor, int dividendo1)
  85. {
  86.     int resulmcm;
  87.    
  88.     resulmcm=(dividendo*divisor)/dividendo1;
  89.     return resulmcm;
  90. }
  91.  
  92.    
  93. int calculnum(int num1,int num2, int resulden, int den1, int den2)
  94. {
  95.     int sumnumtotal,sumnum1,sumnum2;
  96.    
  97.     sumnum1=num1*resulden/den1;
  98.     sumnum2=num2*resulden/den2;
  99.     sumnumtotal=sumnum1+sumnum2;
  100.     return sumnumtotal;
  101. }
  102.  
  103.  
  104.  
  105.  

Queria saber como puedo arreglar el calculden para que no me tenga q introducir de nuevo los denominadores.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema
« Respuesta #1 en: Martes 20 de Enero de 2009, 08:55 »
0
Pasándolo como parámetro, tal y como haces en calculnum() o mcd().

Salud

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Problema
« Respuesta #2 en: Martes 20 de Enero de 2009, 08:56 »
0
ya pero esq no lo entiendo, entonces los dos den se tienen q llamar igual ? :S y no se puede

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema
« Respuesta #3 en: Martes 20 de Enero de 2009, 09:00 »
0
No sé a qué te refieres... Yo digo esto:

Código: C
  1. int calculden(int den1, int den2);
  2.  

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Problema
« Respuesta #4 en: Martes 20 de Enero de 2009, 09:03 »
0
entonces como hace el divisor=num y el dividendo=num, si no hay ningun divisor ni dividendo :S

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema
« Respuesta #5 en: Martes 20 de Enero de 2009, 10:36 »
0
Vamos a ver:

Código: C
  1. int calculden(int den1, int den2)
  2. {
  3.     int resulmcm,dividendo1;
  4.  
  5.     if (den1 > den2)
  6.     {
  7.         dividendo1=mcd(den1,den2);
  8.         resulmcm=mcm(den1,den2,dividendo1);
  9.     }
  10.     else
  11.     {
  12.         dividendo1=mcd(den2,den1);
  13.         resulmcm=mcm(den2,den1,dividendo1);
  14.     }
  15.      
  16.     return resulmcm;
  17. }
  18.  
Yo haría la lógica de otra manera, sobre todo que la función mcd() no dependa del orden de los parámetros y que mcm() no necesite 3 números para hallar el mínimo común múltiplo de 2 números. De hecho todo ello podría calcularse dentro de esta misma función y ahorrarse malabarismos previos, parámetros innecesarios y ganar en reusabilidad del código.

Salud

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Problema
« Respuesta #6 en: Martes 20 de Enero de 2009, 13:43 »
0
Ostia muchas gracias pues era eso, pues no me e tirao rato yo xDDDD

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema
« Respuesta #7 en: Martes 20 de Enero de 2009, 13:52 »
0
De nada, pero la próxima vez intenta pensar mejor la lógica del programa porque con eso que has puesto no vas a ninguna parte.

¡Suerte y a darle al teclado y a depurar!  B)