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 - CalgaryCorpus

#161
Reemplaza printf por fprintf para escribir en el archivo.
#162
Me gusto la solucion propuesta.

Mientras la miraba se me ocurrio otra, pero es definitivamente mas complicada, asi que la presento solo para incluir una idea adicional.

Si uno mantiene adicionalmente algun valor para cada columna / fila (por ejemplo la suma de los elementos), se puede descartar rapidamente si una fila es candidata a ser igual a otra.

  1   2   3  4
  4   5   6  8
  7   8   9  0
[12  15  18  12]  <-- sumas



Solo es necesario comparar la 1a y 4ta columna.
Lo que significa para el codigo propuesto es hacer 1 comparacion que controle si hay que hacer el ciclo for de la linea 11 o no.

La modificacion es, en la linea 10, cambiar la asignacion y hacer:
             iguales = (sumas[i] == sumas[m]);

El arreglo sumas se crea en generaMat.

#164
Si presionas ^D (Control D) en linux o ^Z en windows, generas un eof para la entrada estandar.
#165
Una precision, pues hay algo incorrecto en lo anterior, una asignacion es una expresion, y las expresiones tienen un valor. El valor de la expresion de asignacion es el valor que se asigna.

Dado esto, x = 0 tiene valor 0, no tiene valor 1 (o "siempre es cierta") como se indico en el comentario anterior.

Para el ejemplo:

if( x = 0 ) {
  // cualquier instruccion
}


la instruccion nunca se ejecutara.
#166
Si haces el buffer circular, simplificaras el codigo, pues no necesitaras hacer copias en de_queue como lo haces ahora.
#167
El nombre del archivo solo se usa para abrir este, no tiene otra utilidad, de modo que la funcion que lo abre podria llamarse, por ejemplo, abrirArchivo, no pasar ningun parametro y retornar el FILE*. Internamente puede definir la variable que guarda el nombre, no es necesario definirla en el main, pasarsela a la funcion y modificarla. Una excepcion seria que que despues el main la use para algo, pero no es el caso aqui.

FILE* abrirArchivo() {
    char nombre[ALGUN_TAMANO_AQUI];
    FILE* archivo;
    ..
    // pedir nombre, do-while, etc. usarlo para abrir el archivo

    return archivo;
}

int main() {
     FILE* archivo = abrirArchivo();

     // usar archivo

    return 0;
}
#168
Te estas ganando innecesariamente un problema al poner los prototipos al lado de la implementacion. No tienen ningun uso alli, deberian estar al lado del main que usa las funciones o un en un header file aparte.

Por otro lado, estar pidiendo memoria y copiando el contenido de la cola todas las veces que insertas, y andar moviendo todos los elementos cada vez que borras parece ineficiente, especialmente a medida que la cola se use mas y mas,

Sugiero usar un buffer circular: No mueves los contenidos al borrar, y solo pides memoria al agregar si ya no queda espacio en el buffer, pero si lo hay solo se copia el contenido en algun lugar disponible. Solo es necesario pedir memoria y mover si el buffer esta lleno,

Por esa ultima razon, parece mejor pedir memoria en potencias de 2, o en algo mayor que 1 cada vez, para darle la oportunidad a la cola que o bien desocupe algunos espacios para las siguientes inserciones o bien haya algun espacio antes de pedir otra vez.
#169
O bien no estas compilando el codigo, o estas ignorando los warnings que se presentan y si no hay warnings, sugiero cambiar de compilador.

Linea 16, el prototipo de la funcion en_queue dice retornar int, pero la definicion, linea 34 establece void en el tipo de retorno.,
#170
Por qué free_queue dice que devuelve int y no devuelve valor alguno?