• Viernes 26 de Abril de 2024, 20:41

Autor Tema:  Problemas con puntero  (Leído 1794 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Problemas con puntero
« en: Miércoles 21 de Enero de 2009, 22:42 »
0
Código: Text
  1.  
  2. #include<stdio.h>
  3.  
  4. void suma(int num1, int num2);
  5. void calculden(int, int, int *resul);
  6. void calculnum(int num1, int num2,int resulden,int den1,int den2, int *sumnumtotal);
  7. void mcd(int dividendo, int divisor, int *resul);
  8. void mcm(int dividendo, int divisor, int resul, int *resulmcm);
  9.  
  10. int main()
  11. {
  12.     int num1,num2,den1,den2,resul,resulden,resulmcm,sumnumtotal;
  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.         calculden(den1,den2, &resul);
  36.         calculnum(num1,num2,resulmcm,den1,den2,&sumnumtotal);
  37.         printf("La suma de les fracciones dona com a resultat: %d/%d n", sumnumtotal,resul);
  38.         getchar();
  39.         getchar();
  40.     }
  41. }
  42.  
  43. void calculden(int den1, int den2, int *resulmcm)
  44. {
  45.     int dividendo1;
  46.      
  47.    if (den1 > den2)
  48.    {
  49.         mcd(den1,den2,*dividendo1);
  50.         mcm(den1,den2,dividendo1,*resulmcm);
  51.    }
  52.    else
  53.    {
  54.        mcd(den2,den1,*dividendo1);
  55.        mcm(den2,den1,dividendo1,*resulmcm);
  56.    }
  57. }
  58.  
  59. void mcd(int dividendo1, int divisor, int *resul)
  60. {
  61.     int aux;
  62.    
  63.     do
  64.     {
  65.     aux = divisor;
  66.     divisor = dividendo1 % divisor;
  67.     dividendo1 = aux;
  68.     }while (divisor != 0);
  69.     *resul=dividendo1;
  70.  
  71. }
  72. void mcm(int dividendo, int divisor, int resul,int *resulmcm)
  73. {
  74.    
  75.     *resulmcm=(dividendo*divisor)/resul;
  76. }
  77. void calculnum(int num1,int num2, int resulden, int den1, int den2, int *sumnumtotal)
  78. {
  79.     int sumnum1,sumnum2;
  80.    
  81.     sumnum1=num1*resulden/den1;
  82.     sumnum2=num2*resulden/den2;
  83.     *sumnumtotal=sumnum1+sumnum2;
  84. }
  85.  
  86.  

Tengo este codigo pero no se donde falla, pq al haber una funcion dentro de otra me lia mucho :s
Siempre me falla dentro del calculden

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con puntero
« Respuesta #1 en: Jueves 22 de Enero de 2009, 09:09 »
0
Cita de: "badyalberto"
mcd(den1,den2,*dividendo1);
dividendo1 no es un puntero, sino un entero, por tanto no acepta el operador *. Lo que quieres es pasar el puntero a dividendo1, para eso se usa el operador &.

Cita de: "badyalberto"
int *resulmcm
Cita de: "badyalberto"
mcm(den1,den2,dividendo1,*resulmcm);
Aquí te pasa algo parecido. resulmcm es un puntero, por tanto al hacer *resulmcm estás referenciando el entero al que apunta, cuando void mcm(int dividendo, int divisor, int resul, int *resulmcm); necesita un puntero al entero. Debes pasar resulmcm sin operador puesto que ya es un puntero.

Ya me cuentas, salud

badyalberto

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

algo asi ?
pero ahora me dice:
  [Linker error] undefined reference to `mcm(int, int, int, int*)'
  [Linker error] undefined reference to `mcm(int, int, int, int*)'
  ld returned 1 exit status

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Problemas con puntero
« Respuesta #3 en: Jueves 22 de Enero de 2009, 09:55 »
0
en void calculden(int den1, int den2, int *resulmcm)
estas pasando resulmcm como PUNTERO a INT.

luego se lo das a una funcion mcm(den1,den2,dividendo1,resulmcm); <- resultmcm es un puntero

asi que el compilador cree que mcm deberia recibir un puntero a int. Como puedes sobrecargar las funciones, el linkador esta esperando a que hagas una funcion de mcm que acepte punteros a int como parametro.
 
La solucion: refiere el contenido del puntero

mcm(den1,den2,dividendo1,*resulmcm); <- el operador * sirve para referirse al contenido del puntero.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con puntero
« Respuesta #4 en: Jueves 22 de Enero de 2009, 10:07 »
0
En ningún momento de he comentado de cambiar las cabeceras de las funciones, me refería a que tenías errores en la manera de llamarlas. Leete mi post otra vez con más calma.

Saludos

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Problemas con puntero
« Respuesta #5 en: Jueves 22 de Enero de 2009, 10:09 »
0
pero entonces me dice conversion invalida :S

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con puntero
« Respuesta #6 en: Jueves 22 de Enero de 2009, 10:13 »
0
Me refiero a esto (eres muy impaciente...):

Código: C
  1. void calculden(int den1, int den2, int *resulmcm)
  2. {
  3.     int dividendo1;
  4.      
  5.    if (den1 > den2)
  6.    {
  7.         mcd(den1,den2,&dividendo1);
  8.         mcm(den1,den2,dividendo1,resulmcm);
  9.    }
  10.    else
  11.    {
  12.        mcd(den2,den1,&dividendo1);
  13.        mcm(den2,den1,dividendo1,resulmcm);
  14.    }
  15. }
  16.  

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Problemas con puntero
« Respuesta #7 en: Jueves 22 de Enero de 2009, 10:18 »
0
ahhhhh yaaaaaaaa porfin xDDD

Muchas gracias ^^