Ejercicio obligatorio 4
Fecha de entrega: Lunes 6 de noviembre
Introducción
Se tiene un formato de archivo binario que representa curvas de Bézier con la siguiente estructura:
C1
C2
...
CN
Donde cada curva a su vez tiene la siguiente estructura:
Nombre
n
x0
y0
x1
y1
...
xn-1
yn-1
Donde el nombre es una cadena que contiene primero un unsigned char que
representa la longitud de la misma, y luego la cantidad de caracteres de su
longitud, sin el '0'.
n es un uint32_t que representa la cantidad de puntos en la curva y,
finalmente, se encuentra cada uno de esos puntos x, y cada uno representado
como un float.
Trabajo
Lectura
Implementar una función bool leer_nombre(FILE *f, char **s); que reciba un
archivo f abierto en modo lectura y devuelva en s un nombre almacenado como
se dijo previamente. Por el nombre debe devolver true de haber
funcionado correctamente.
Implementar una función bool leer_numero_puntos(FILE *f, uint32_t *n);
que reciba un archivo f y lea de él la cantidad de puntos. Debe
devolver true en caso correcto.
Implementar una función bool leer_punto(FILE *f, float *x, float *y);
similar a las anteriores pero que lea un punto de la curva.
Escritura
Implementar una función
bool escribir_nombre(FILE *f, const char *s); que reciba un
archivo f abierto en modo escritura y escriba en él el nombre s.
Por el nombre debe devolver true de haber funcionado
correctamente.
Implementar una función
bool escribir_numero_puntos(FILE *f, uint32_t n);
que escriba el número de puntos.
Implementar una función
bool escribir_punto(FILE *f, float x, float y);
que escriba un punto.
Aplicación
Escribir un programa que se ejecute como:
$ ./20232_ej4 entrada salida
que lea un archivo de entrada con el formato dado y en simultaneo vuelque su
contenido por stdout y además lo escriba en salida con el mismo formato
binario, haciendo uso de las funciones ya desarrolladas. Luego de ejecutado el
programa, el archivo de salida deberá ser una copia exacta al de entrada.
Pruebas
Se provee un archivo 20232_ej4.bin el cual al pasar por la aplicación (además
de la copia) debe generar por stdout la siguiente salida:
$ ./20232_ej4 20232_ej4.bin salida.bin
CURVA 1
    Nombre: Curva 1
    Puntos: 13
            Punto 0: 7.1815, 21.1680
            Punto 1: 37.2663, 62.4798
            Punto 2: 29.1042, 119.8198
            Punto 3: 20.7887, 89.9597
            Punto 4: 13.2206, 60.0610
            Punto 5: 19.7725, 24.0883
            Punto 6: 20.2217, 21.1680
            Punto 7: 19.3440, 22.0458
            Punto 8: 11.1062, 35.0083
            Punto 9: 23.0565, 40.4448
            Punto 10: 33.7424, 47.6839
            Punto 11: 33.6838, 24.5675
            Punto 12: 32.8839, 21.1680
CURVA 2
    Nombre: Curva 2 sdsdf
    Puntos: 22
            Punto 0: 32.8839, 21.1680
            Punto 1: 39.6875, 34.7752
            Punto 2: 39.8765, 41.0118
            Punto 3: 40.6324, 32.6963
            Punto 4: 37.2389, 22.6123
            Punto 5: 53.0936, 14.3520
            Punto 6: 54.9955, 24.9478
            Punto 7: 56.1295, 32.8853
            Punto 8: 65.3899, 38.7439
            Punto 9: 54.0506, 41.7677
            Punto 10: 42.7113, 44.7915
            Punto 11: 38.9315, 42.3347
            Punto 12: 42.3333, 36.2871
            Punto 13: 45.7351, 30.2395
            Punto 14: 48.9312, 26.3146
            Punto 15: 55.5625, 32.8853
            Punto 16: 59.7736, 37.0580
            Punto 17: 61.1327, 35.8230
            Punto 18: 62.1921, 35.0695
            Punto 19: 63.1400, 34.3953
            Punto 20: 64.2836, 19.2192
            Punto 21: 65.9568, 20.2231
CURVA 3
    Nombre: Curva 3 asjdioasd
    Puntos: 13
            Punto 0: 65.9568, 20.2231
            Punto 1: 87.3125, 21.9240
            Punto 2: 90.7143, 136.8288
            Punto 3: 78.2411, 97.5192
            Punto 4: 65.7679, 58.2097
            Punto 5: 69.5476, 39.6889
            Punto 6: 74.4613, 29.8615
            Punto 7: 79.3750, 20.0341
            Punto 8: 83.9107, 15.4984
            Punto 9: 87.3125, 21.9240
            Punto 10: 90.7143, 28.3496
            Punto 11: 91.4702, 28.7276
            Punto 12: 91.4702, 28.7276
CURVA 4
    Nombre: Curva 4
    Puntos: 22
            Punto 0: 91.4702, 28.7276
            Punto 1: 99.4077, 45.3585
            Punto 2: 109.9911, 45.7365
            Punto 3: 112.2589, 46.1145
            Punto 4: 114.5268, 46.4924
            Punto 5: 104.3214, 45.7365
            Punto 6: 102.8095, 42.3347
            Punto 7: 101.2976, 38.9329
            Punto 8: 92.2262, 35.5311
            Punto 9: 97.1399, 30.9954
            Punto 10: 102.0536, 26.4597
            Punto 11: 108.4792, 20.4121
            Punto 12: 112.6369, 25.3258
            Punto 13: 116.7946, 30.2395
            Punto 14: 112.6369, 53.6740
            Punto 15: 114.9047, 45.3585
            Punto 16: 117.1726, 37.0430
            Punto 17: 111.1250, 33.2633
            Punto 18: 117.5506, 28.3496
            Punto 19: 123.9762, 23.4359
            Punto 20: 126.6220, 27.5936
            Punto 21: 126.6220, 27.5936
$
El archivo puede descargarse de acá 20232_ej4.bin
Nota
Para este trabajo no es necesario modularizar el problema, pero se recomienda hacerlo para practicar modularización y Makefile.
En el caso de modularizar en archivos entregar tanto los archivos como el Makefile que compila el proyecto.
Entrega
Deberá entregarse el código fuente del programa desarrollado o los fuentes y el Makefile en caso de haber modularizado.
El programa debe:
- Compilar correctamente con los flags: - -Wall -Werror -std=c99 -pedantic 
- validar la salida que se provee y que genere una copia de la entrda en la salida. 
La entrega se realiza a través del sistema de entregas.
El ejercicio es de entrega individual.