Duda C Struct y función.

Iniciado por tvirus, 18 Octubre 2010, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

tvirus

Hola,

Tengo una duda sobre un programa que estoy haciendo en C. El problema es que tengo una struct:

typedef struct estructura{
        int numerador;
        int denominador;
}tipofraccion;


Y después tengo dos funciones:

void producto(fraccionario f,fraccionario g){
        f->numerador*=g->numerador;
        f->denominador*=g->denominador;
        Calculo (????);
}


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.

DanyKadiz

#1
A ver, vayamos por partes.

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

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:

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)

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 ?

tvirus

#2
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:


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.

Horricreu

#3
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.

tvirus

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.

DanyKadiz

Cita de: 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.

Pues nada simplemente pasale los campos del registro:

calculo(solucion->denominador, solucion->numerador);


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

int numerador = solucion->numerador;
int denominador = solucion->denominador;


y le pasas:


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.

tvirus


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:

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.