Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: tvirus en 18 Octubre 2010, 20:02 pm



Título: Duda C Struct y función.
Publicado por: tvirus en 18 Octubre 2010, 20:02 pm
Hola,

Tengo una duda sobre un programa que estoy haciendo en C. El problema es que tengo una struct:
Código:
typedef struct estructura{
        int numerador;
        int denominador;
}tipofraccion;


Y después tengo dos funciones:
Código:
void producto(fraccionario f,fraccionario g){
        f->numerador*=g->numerador;
        f->denominador*=g->denominador;
        Calculo (????);
}

Código:
int Calculo (int a, int b) {
     if (a<b) return a;
     else return b;
}

Y mi duda és como puedo pasar los parametros de la función producto a la función Calculo ?

Gracias.


Título: Re: Duda C Struct y función.
Publicado por: DanyKadiz en 18 Octubre 2010, 20:59 pm
A ver, vayamos por partes.

La estructura de un tipo fracción es la siguiente:

Código:
typedef struct estructura{
        int numerador;
        int denominador;
}tipofraccion;

después imagino que para no tener que copiar todo el contenido y sólo pasarle la dirección de memoria de la fracción harias lo siguiente:

Código:
typedef tipofraccion *fraccion;

y por ultimo operarias con dicho tipo de datos, tienes dos opciones, tendrias que devolver una fraccion o pasarle otra para que esta sea su resultado, en mi caso voy a hacerlo así. (Se que tu lo has almacendo en la primera fracción pero el código es menos claro)

Código:
void producto_fracciones(fraccion a, fraccion b, fraccion solucion)
{
  solucion->numerador = f->numerador * g->numerador;
  solucion->denominador = f->denominador * g->denominador;
}

Ahora... ¿Que haría la función calculo ?


Título: Re: Duda C Struct y función.
Publicado por: tvirus en 18 Octubre 2010, 22:18 pm
No me expresado bien y edito.

Ahora con este resultado tendriam una fraccion, por ejemplo: 2/4 en la estructura.

Ahora queria pasarla a la función para conseguir 1/2 y hacer la funcion irreducible:

Código:
int Calculo (int numerador, int denominador) {
    if (numerador < denominador) return Calculo (denominador, numerador);
    if (denominador == 0) return numerador;
    return Calculo (denominador, numerador%denominador);
}

Gracias y perdon por las molestias.


Título: Re: Duda C Struct y función.
Publicado por: Horricreu en 18 Octubre 2010, 22:39 pm
Vamos por partes, es todo una cuestión de pensar:

  • En una instrucción condicional, compruebas si el resto del numerador y denominador entre 2 es igual a 0. Si no es igual, lo pruebas con 3 y así sucesivamente hasta llegar al número máximo que quieras.
  • Una vez tengas el número común para dividir AMBOS números y, como hemos dicho el resto sea 0, divides el numerador y el denominador por este número y lo guardas en dos variables.
  • Luego si quieres, lo muestras por pantalla.


Título: Re: Duda C Struct y función.
Publicado por: tvirus en 18 Octubre 2010, 22:48 pm
Pero yo lo que quiero es pasar el numerador y el denominador a la funcion calculo y despues que esta lo guarde en la estructura.


Título: Re: Duda C Struct y función.
Publicado por: DanyKadiz en 19 Octubre 2010, 15:02 pm
Pero yo lo que quiero es pasar el numerador y el denominador a la funcion calculo y despues que esta lo guarde en la estructura.

Pues nada simplemente pasale los campos del registro:
Código:
calculo(solucion->denominador, solucion->numerador);

o si lo quieres hacer más claro hazte antes de pasarlo:

Código:
int numerador = solucion->numerador;
int denominador = solucion->denominador;

y le pasas:

Código:
calculo(numerador,denominador)

y después si lo quieres almacenar en sol pues más de lo mismo... vas trabajo con registros, recuerda que la fecha es porque es: *solucion.denominador, es decir *solucion.denominador es igual a: solucion->denominador, cuidado con eso

Un cordial saludo.


Título: Re: Duda C Struct y función.
Publicado por: tvirus en 19 Octubre 2010, 23:02 pm
Código:
int calculo(int a, int b) {
    if(a < b) return calculo(b,a);
    if(b == 0) return a;
    return calculo(b, a % b);
}

Fraccio producto(Fraccio f, Fraccio z) {
    f->numerador*=z->numerador;
    f->denominador*=z->denominador;
    int x = f->numerador;
    int y = f->denominador;
    calculo (x,y);
    f->numerador = x;
    f->denominador = y;
}

Bueno pues ya lo tengo. Pero a la hora de ejecutar el programa no me escribe nada...

Y en el main tengo esto para ejecutarlo:

Código:
Fraccio f6 = producto(f1, f3); //He creado anteriormente las fracciones.
printf("\tfraccio(f6)= %d/%d\n", f6->numerador, f6->denominador);

Y no muestra nada.

Gracias.