20-03-2014, 23:33
Estoy practicando C con mi grupo antes de cursar , y quisiera saber si esta bien encarado el ejercicio de la guia:
Ejercicio 2 (Modelado de TADs)
Se pide modelar un TAD que represente un Archivo, se debe poder abrir (definir la forma: read/write/append), cerrar un archivo, leer una linea determinada, exponer una operación que reciba una función y la ejecute por cada línea del archivo; exponer otra operación que dada una lista y una función, itere la lista y escriba sobre el archivo abierto.
Guia: https://docs.google.com/document/d/1n_u1...edit?pli=1
Lo probamos con un archivo prueba.txt con algunas lineas y todo anda bien, lo que faltaria es hacer un .h para el typedef y los prototipos de función calculamos
Muchas Gracias!
Ejercicio 2 (Modelado de TADs)
Se pide modelar un TAD que represente un Archivo, se debe poder abrir (definir la forma: read/write/append), cerrar un archivo, leer una linea determinada, exponer una operación que reciba una función y la ejecute por cada línea del archivo; exponer otra operación que dada una lista y una función, itere la lista y escriba sobre el archivo abierto.
Guia: https://docs.google.com/document/d/1n_u1...edit?pli=1
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
typedef FILE ARCHIVO;
ARCHIVO *abrir(char *nombre, char *modo);
int cerrar(ARCHIVO *p);
char *leerlinea(char *linea, int maxlinea, ARCHIVO *p);
void operacion( unsigned int(*f)(const char *) , ARCHIVO *p);
int main(void){
ARCHIVO *fp;
char *linea=(char *)malloc(sizeof(char)*1000);
char *linealeida=(char *)malloc(sizeof(char)*1000);
if((fp=abrir("prueba.txt", "leer"))==NULL){
fprintf(stderr, "no se pudo abrir");
exit(1);
}
printf("Ya esta abierto, y ahora leo la primer linea\n");
if((linealeida=leerlinea(linea, 1000, fp))==NULL){
fprintf(stderr, "no se pudo leer linea");
exit(1);
}
printf(" la linea era: %s \n", linealeida);
printf("Ahora hago la operacion mandando la funcion strlen: \n");
operacion(strlen, fp);
cerrar(fp);
free(linea);
free(linealeida);
printf("ya se cerro\n");
return 0;
}
ARCHIVO *abrir(char *nombre, char *modo){
if(strcmp(modo, "leer")==0)
return fopen(nombre,"r");
if(strcmp(modo, "escribir")==0)
return fopen(nombre,"w");
if(strcmp(modo, "apend")==0)
return fopen(nombre,"a");
fprintf(stderr, "Modo mal escrito, hay 3: leer, escribir, o apend");
exit(1);
}
int cerrar(ARCHIVO *p){
return fclose(p);
}
char *leerlinea(char *linea, int maxlinea, ARCHIVO *p){
return fgets(linea, maxlinea, p);
}
void operacion( unsigned int(*f)(const char *) , ARCHIVO *fp){
char *l=(char *)malloc(sizeof(char)*1000);
char *leida=(char *)malloc(sizeof(char)*1000);
while((leida=leerlinea(l, 1000, fp))!=NULL)
printf("%d \n", (*f)(leida) );
free(l);
free(leida);
return;
}
Lo probamos con un archivo prueba.txt con algunas lineas y todo anda bien, lo que faltaria es hacer un .h para el typedef y los prototipos de función calculamos
Muchas Gracias!