DUDA PARCIAL 2020

DUDA PARCIAL 2020

de Joaquin Andres Ramirez Martins -
Número de respuestas: 2
En el ejercicio 3 cuando se pide declarar una funcion con un conjunto de argumentos no logro entender como deberia escribir el tercer argumento (puntero a arreglo de tipo int). Se me ocurrio que capaz la idea era escribirlo como un puntero a int y que cada vez que se llamaba a la funcion en ese espacio se colocaba la direccion de un indice del arreglo.

Con este planteo en la parte 4 que se pide hacer la reserva de memoria pense hacer uso de la funcion malloc reservando memoria suficiente para almacenar un int.

Este razonamiento es correcto?

Adjunto imagen de los ejercicios


En respuesta a Joaquin Andres Ramirez Martins

Re: DUDA PARCIAL 2020

de Leopoldo Agorio -

Estimado, varios comentarios:

1) El primer problema que te encuentras es que las preguntas de ese parcial (y del que propondremos) resultaban naturales para alguien que hubiera desarrollado el código de los obligatorios de esa edición del curso. Habiendo hecho la tarea era rápido entender de qué se hablaba. Como para que quede como insumo por si alguien quiere profundizar, me tome la molestia de subir las letras de los obligatorios 2020 en la sección de recursos y materiales, PERO, noten que precisamente nuestra idea es que pongan fuerzas en repasar lo que les hemos pedido y lo que han hecho en los obligatorios DEL 2021.

2) La idea de la lógica de esto es la que está descripta en la función leer_archivo_txt (ver página 9 del pdf del obligatorio 2 del 2020 que subí). Paso a explicar: la idea es salir de la función con un arreglo de caracteres cargado con ciertos valores que se leen de un archivo. Antes del llamado a la función leer_archivo_txt no se sabe de que tamaño debe ser el arreglo en el que se guardará la función.

3) Por esto, el uso de la función leer_archivo_txt (desde afuera) debe ser el de definir un puntero (que oficia de arreglo de tamaño desconocido), pasar dicho puntero por referencia, y en leer_archivo_txt encargarse de determinar qué tamaño se desea para el arreglo y reservar memoria para esa dimensión. Va un ejemplo en implementación de lo que digo, sacado de mi solución del curso del año pasado (nótese el uso de buenas prácticas de programación que logra que el código sea claro y legible un año después):

CodigoError leer_archivo_txt(FILE* fpIn, unsigned char **Msj, int* nbM){
    if (fpIn==NULL)
        return ARCHIVO_INEXISTENTE; /*reconozco si el file es null*/
    int i;
   *nbM = tamano_archivo(fpIn);
    *Msj = (unsigned char *) malloc(sizeof(unsigned char)*(*nbM));
    for (i = 0; i < *nbM; ++i)
        (*Msj)[i] = (unsigned char) fgetc(fpIn);
    return TODO_OK;
}

CodigoError codificar(FILE *fpIn, FILE *fpOut, codificacion* tablaCod, int nbS){
    CodigoError scanflag;
    unsigned char *Msj;
    int nbM=0;

    leer_archivo_txt(fpIn, &Msj,&nbM);
    scanflag = codificarConTabla(tablaCod, nbS, Msj, nbM, fpOut);
    free(Msj);
    return scanflag;
}