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.
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 ?
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.
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.
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.
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.
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.