Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - amchacon

#451
Cita de: Draked393 en 15 Diciembre 2013, 18:48 PM
no me realiza la operación bien. Supongo que no esta bien hecha..
Supongo. ¿Pero que datos le has metido y que valor te sale?
#452
¿Y cual es el error exactamente? Para ir al grano ;)
#453
Programación C/C++ / Re: Ayuda con struct en C
15 Diciembre 2013, 18:40 PM
struct jugadas
{
       int f[1];
       int c[1];
}jugadas;

¿Arrays de longitud 1?


int funcion(int c, int f)
{
        int fa=0, ca=0;
        FILE *jugadas;
        jugadas=fopen("ia.txt","r+");
        if(jugadas!=NULL)
       {
      while(!feof(jugadas))
        {
         if(fread(&jugadas,sizeof(jugadas),1,jugadas))
          {
            fa=jugadas.f;
            ca=jugadas.c;
          }
        }
       }
}


Has llamado al archivo y a la estructura con el mismo nombre.
#454
Vale fallo mío, creía que el operador + era para sumar la misma matriz. Pero por lo que veo genera otra matriz nueva  :silbar:

Para eso te recomiendo que uses una función, un operador se supone que es para hacer una operación en un objeto (no para generar otros).
#455
Programación C/C++ / Re: PREOGRAMACION
14 Diciembre 2013, 20:42 PM
Cita de: wiD^ en 14 Diciembre 2013, 20:29 PMCabe recalcar que estoy aprendiendo, si alguien ve un error, porfavor que me lo remarque. Lo único que no pude realizar es obtener la mejor y la menor nota de cada fila.
Que ese no es el algoritmo que le piden :silbar:

Hay que meter las notas y los promedios en un array y no crear 32 variables a mano:
int notas[32]; // array de 32 elementos
int promedio[5];


Y luego con un for lo recorres y haces los cálculos correspondientes. No te enredo más porque no sé hasta donde llegan tus conocimientos, pero te felicito, es una buena costumbre perderle el miedo y atreverte a hacer las cosas ^^. Detesto a la gente que se planta sin hacer ni una línea de código.

Luego cuando hayas dado bucles y arrays intenta rehacer el ejercicio ;)
#456
Cita de: xaps en 14 Diciembre 2013, 20:01 PM
Vale, el porqué del constructor copia lo he entendido. Pero cuando tu retornas Matriz&, estás retornando una dirección de memoria de una matriz que al terminar la función será eliminada si no me equivoco
No, estoy retornando una referencia. En este caso la referencia es this, asi que estoy retornando una referencia al propio objeto.

Eso te permite poner varios = consecutivos, cada uno coge la referencia del anterior ;)

PD: Si no usas la referencia no pasa nada, no es como si estuvieses creando un objeto ni nada parecido.

Cita de: xaps en 14 Diciembre 2013, 20:01 PMademás de que el objeto al que se le hace la asignación debería ser un puntero, ¿no?. ]En cambio, si retornas una copia, asignas la copia a la matriz correspondiente y luego la copia se elimina, ¿cierto?
¿A que te refieres? No te sigo...
#457
Cita de: xaps en 14 Diciembre 2013, 17:08 PM
¿A que te refieres con "Como no tienes hecho un constructor copia se copian los punteros literales"? No entiendo cual es el problema aún :S
A ver, tu tenías definido el operador = para que devolviese un nuevo objeto matriz.

Como has hecho return *this esa matriz era una copia de this. Para hacer copias de un objeto se llama al constructor copia.

Si no has definido el constructor copia, el compilador crea uno por ti. El problema esque el compilador hace la copia literal. Lo que implica que se copian los punteros de la matriz tal cual.

Cuando esa matriz "copia" desaparece, se llama al destructor y se libera la memoria. Cuando la matriz "original" desaparece, se vuelve a llamar al destructor y se libera la misma memoria (¡Los punteros son iguales!). De ahí la excepción en tiempo de ejcución.

Aunque el error se solucionaría poniendo Matriz& en el retorno del operador =, no puedes dejarlo así porque ya sabes que las copias te van a fallar. Asi que te he rehecho el constructor copia (y para no copy&pastear el código, me he aprovechado del operador de asignación que hemos definido).

PD: Ya que estoy, los demás operadores (+ - *) también debería devolver Matriz& en vez de Matriz. De lo contrario estarás haciendo copias al montón :silbar:
#458
Vale ya he arreglado el operador de asignación, el problema es que no devuelves una referencia sino un nuevo objeto matriz. Como no tienes hecho un constructor copia se copian los punteros literales, eso te provoca problemas...

Simplemente haz estos dos cambios:

- Haz que el operador = devuelva Matriz& en vez de un nuevo objeto.
- Create un constructor copia tal que así:

Código (cpp) [Seleccionar]
Matriz::Matriz(const Matriz &m)
{
    *this = m;
}


Con eso a mí me funciona perfecto.
#459
Joder, en el editor se ve igual un corchete que un paréntesis xD.

Gracias :)
#460
¿Que código has usado para las pruebas?

PD: No sabía lo de los punteros null y delete. Siempre se aprende algo nuevo  :silbar: