Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: skatres en 15 Enero 2012, 19:03 pm



Título: Ayuda ejercicio de registros
Publicado por: skatres en 15 Enero 2012, 19:03 pm
Hola, pues resulta que estaba estudiando, y me puse a hacer un ejercicio de operaciones con fracciones, ya lo tengo casi terminado, pero al compilarlo, me salen estos errores y nose como solucionarlos ni a que son debidos:

Código:
11 \Desktop\Practicas Programacion\Ejermplo Tema 6- Fracciones.cpp too few arguments to function `Fraccion sumar_fracciones(Fraccion, Fraccion)'
20 \Desktop\Practicas Programacion\Ejermplo Tema 6- Fracciones.cpp at this point in file
20 \Desktop\Practicas Programacion\Ejermplo Tema 6- Fracciones.cpp At global scope:
 44 \Desktop\Practicas Programacion\Ejermplo Tema 6- Fracciones.cpp `struc' does not name a type

Y aqui esta el codigo fuente:

Código:
#include <stdio.h>
#include <stdlib.h>


struct Fraccion{
       unsigned num,dem;
};
       
void mostrar_fraccion(struct Fraccion f);
struct Fraccion leer_fraccion();
struct Fraccion sumar_fracciones(struct Fraccion f1,struct Fraccion f2);
struct Fraccion restar_fracciones(struct Fraccion f1,struct Fraccion f2);
void simplificar_fraccion(struct Fraccion &f);
unsigned MCD(unsigned a, unsigned b);

int main()
{   struct Fraccion f1;struct Fraccion f2;struct Fraccion f3;
    f1=leer_fraccion();
    f2=leer_fraccion();
    f3=sumar_fracciones(f3);
    simplificar_fraccion(f3);
    mostrar_fraccion(f3);
   
    system("pause");
    return 0;
}
   



struct Fraccion leer_fraccion()
{      struct Fraccion f;
       printf("Introduce el numeros:");
       scanf("%u",&f.num);
       printf("Introduce el denominador:");
       scanf("%u",&f.dem);
       return f;
}

void mostrar_fraccion(struct Fraccion f)
{    printf("%u %u",f.num,f.dem);
}

struc Fraccion sumar_fracciones(struct Fraccion f1,struct Fraccion f2)
{     struct Fraccion f3;
      f3.num=f1.num+f2.num;
      f3.dem=f1.dem+f2.dem;
      return f3;
}

struct Fraccion restar_fracciones(struct Fraccion f1,struct Fraccion f2)
{      struct Fraccion f3;
       f3.num=f1.num-f2.num;
       f3.dem=f1.dem-f2.dem;
       return f3;
}

void simplificar_fraccion(struct Fraccion &f)
{    f.num/=MCD(f.num,f.dem);
     f.dem/=MCD(f.num,f.dem);
}


Título: Re: Ayuda ejercicio de registros
Publicado por: Xandrete en 15 Enero 2012, 19:16 pm
Ehmmm...

Mira los mensajes de error... Están para leerlos, no están en rapanui ni en ningún idioma exótico. No hay que desencriptarlos y normalmente tratan de informarte de cual es el error. No los han puesto ahí en plan "¡Ja, ja, ja, ja! ¡Tienes un error, jódete!"  ;D

1er error: sumar_fracciones requiere dos argumentos. En el main sólo le pasas uno.

2º error: en la cabecera de la operación sumar_fracciones has puesto struc en lugar de struct.

Venga, jefe.
Saludos.


Título: Re: Ayuda ejercicio de registros
Publicado por: Xandrete en 15 Enero 2012, 19:24 pm
Y, por cierto, hay otros fallos (de los cuales se hubiera quejado el compilador tras solucionar los anteriores).

Uno de ellos es que tras definir el prototipo de la función MCD no la programas. A lo mejor es que se te pasó al copiarnos el código aquí.

Otro es que en C estricto no se pueden pasar parámetros por referencia como lo estás haciendo tú, con el & (en la función simplificar_fraccion). Para lograr lo mismo lo que se hace es pasar un puntero y luego, dentro de la función, desreferenciarlo.

Y otro fallo (de este no se hubiera quejado el compilador, porque no es un error de sintaxis) es que en la función para simplificar divides el numerador por el mcd del numerador y del denominador originales, pero luego divides el denominador por el mcd del numerador reducido y el denominador original. Hay que usar una variable:

Código
  1. void simplificar_fraccion(struct Fraccion *f) {
  2. int mcd = MCD((*f).num,(*f).dem);
  3. (*f).num/=mcd;
  4. (*f).dem/=mcd;
  5. }
  6.  
  7. unsigned MCD(unsigned a, unsigned b) {
  8. unsigned aux;
  9. if (a < b) {
  10. aux = b;
  11. b = a;
  12. a = aux;
  13. }
  14. while (a%b > 0) {
  15. aux = b;
  16. b = a%b;
  17. a = aux;
  18. }
  19. return b;
  20. }

Saludos



Título: Re: Ayuda ejercicio de registros
Publicado por: skatres en 15 Enero 2012, 19:35 pm
Hola compi, gracias por la ayuda, ya he solucionado los errores(que tonto yo al no darme cuenta que solo le estaba pasando un valor al main :rolleyes:).

La funcion MCD se me olvido programarla, en la funcion simplificar fracciones, segun mi profesor es asi como se hace, es decir, por referencia.


Un saludo!!


Título: Re: Ayuda ejercicio de registros
Publicado por: Xandrete en 15 Enero 2012, 19:40 pm
Hola compi, gracias por la ayuda, ya he solucionado los errores(que tonto yo al no darme cuenta que solo le estaba pasando un valor al main :rolleyes:).

La funcion MCD se me olvido programarla, en la funcion simplificar fracciones, segun mi profesor es asi como se hace, es decir, por referencia.


Un saludo!!

¿Así cómo? ¿Con el &? Entonces, ¿qué estás haciendo? ¿C en C++?

Si es el profe quien te lo dice, no soy quien para desautorizarlo, pero te informo de que, como dije antes, en C estricto se hace pasando el puntero (y si el compilador no te da error al hacerlo con el & es porque es un compilador mixto de C/C++).

Saludos


Título: Re: Ayuda ejercicio de registros
Publicado por: skatres en 15 Enero 2012, 19:47 pm
¿Así cómo? ¿Con el &? Entonces, ¿qué estás haciendo? ¿C en C++?

Si es el profe quien te lo dice, no soy quien para desautorizarlo, pero te informo de que, como dije antes, en C estricto se hace pasando el puntero (y si el compilador no te da error al hacerlo con el & es porque es un compilador mixto de C/C++).

Saludos

Pues la verdad, ahora estoy algo desconcertado de si estoy en C estricto o no, en la uni usamos el DEV C++, por lo que sera como una especie de mezcla entre C/C++, otra cosilla, con respecto a los punteros, nose si seran muy importantes o no, puesto que nuestro profre dijo de no verlos.


Título: Re: Ayuda ejercicio de registros
Publicado por: Xandrete en 15 Enero 2012, 20:19 pm
¿Haces informática? ¿O haces telecomunicaciones, industriales u otra carrera técnica? En el primer caso, no me parece correcto ese esquema. En los demás, tampoco, pero es menos grave.


Título: Re: Ayuda ejercicio de registros
Publicado por: skatres en 15 Enero 2012, 23:23 pm
¿Haces informática? ¿O haces telecomunicaciones, industriales u otra carrera técnica? En el primer caso, no me parece correcto ese esquema. En los demás, tampoco, pero es menos grave.

Pues yo estoy en industriales


Título: Re: Ayuda ejercicio de registros
Publicado por: Xandrete en 16 Enero 2012, 00:50 am
Ya veo.

En cualquier caso, aquí (http://www.cs.usfca.edu/~wolber/SoftwareDev/C/paramPassing.htm) lo explican. Está en la lengua de Shakespeare, espero que no tengas problemas para entenderlo.

Por cierto, si utilizas Dev-Cpp, deberías bajar la última versión de MinGW y sustituir la que viene con el programa (creo que está en C:\Program Files\Dev-Cpp\bin). Dev-Cpp es un proyecto abandonado y lleva muchos años sin recibir actualizaciones, así que como mínimo deberías actualizar el compilador.

EDITO: He leído que un desarrollador independiente sacó en 2012 una nueva versión de Dev-Cpp. Mira a ver si la que tienes es del 2011 y si no, mira a ver si puedes encontrar esta última versión.