Trabajo Práctico Nº 5

323 142 815 105 236. 984 155 352 ... char *fgets(char *CadDestino, int n, FILE * ) que almacena en CadDestino "n" bytes extraídos de cada línea del archivo.
270KB Größe 8 Downloads 71 vistas
Taller de Lenguajes I – 2014 LICENCIATURA EN INFORMATICA. Dictado: Ing. Juan Manuel Conti

Trabajo Práctico Nº 5 Problema 1 Archivos de texto y Matrices Dinámicas 3D. Un conjunto de matrices planas (2D) generadas con EXCEL mediante la función: ALEATORIO.ENTRE(100,999) y salvadas en disco como un archivo de texto mediante la opción de Exportar, contiene los datos necesarios para llenar una matriz dinámica 3D cuyas dimensiones son: DIM3=3 DIM1=9 DIM2=5

(coordenada k) (coordenada i) (coordenada j)

(El nombre del archivo de texto podría MatrizDesdeEXCEL.txt) Ud. mediante punteros triples, deberá generar una matriz dinámica 3D, y asignar los valores del archivo a cada domicilio correspondiente, sabiendo que el archivo de texto está organizado en matrices 2D por "capa", y separadas entre sí por una línea en blanco. Por ejemplo para un par de capas cualquiera: 180 242 913 338 853 589 358 239 330

692 411 217 818 503 919 424 821 739

876 900 258 815 399 754 714 977 954

379 482 908 141 343 351 488 425 670

347 923 891 520 796 532 519 696 914

452 708 323 984 686 716 854 262 814

931 746 142 155 465 749 112 799 135

209 869 815 352 205 970 155 218 189

210 917 105 192 940 574 939 168 557

602 529 236 209 312 592 524 227 387

..............................................

Taller de Lenguajes I – 2014 LICENCIATURA EN INFORMATICA. Dictado: Ing. Juan Manuel Conti

Para la lectura del archivo de texto utilice la función: int fscanf( FILE *,"...formatos....", dirección de las variables )   

En caso de éxitos retorna el número de campos exitosamente escaneados, convertidos y almacenados. Retorna 0 si ningún campo fue almacenado. Retorna EOF si se intenta leer al final del archivo.

Finalmente, y partiendo de las reservas dinámicas ya asignadas, mostrar por capas el contenido de la matriz 3D.

Problema 2 Archivos de texto y Matrices Dinámicas 3D. El siguiente archivo de texto Datos de provincias argentinas.txt, con formatos, le será provisto: Codigo

Provincia

Superficie

Capital

2898 6351 3393 8882 9830 9655 1094 3432 3913 1736 4061 2509 7088 6494 5699 2680

BUENOS AIRES CATAMARCA CHACO CHUBUT CORDOBA CORRIENTES ENTRE RIOS FORMOSA JUJUY LA PAMPA LA RIOJA MENDOZA NEUQUEN RIO NEGRO SALTA TUCUMAN

15625084 367828 1055259 509108 3308876 992595 1235994 530162 673307 318951 333642 1738929 551266 638645 1214441 1448200

LA PLATA SAN FERNANDO DEL VALLE DE CATAMARCA RESISTENCIA RAWSON CORDOBA CORRIENTES PARANA FORMOSA SAN SALVADOR DE JUJUY SANTA ROSA LA RIOJA MENDOZA NEUQUEN VIEDMA SALTA SAN MIGUEL DE TUCUMAN

En base a dicho archivo (no a la lista mostrada más arriba), Ud. determinará dónde comienza y dónde finaliza cada campo, como así también el número de caracteres de cada uno de ellos. Estos valores le permitirán, posteriormente, extraer con precisión cada campo en sub-cadenas de longitud específica (aún las que expresen magnitudes numéricas).

Taller de Lenguajes I – 2014 LICENCIATURA EN INFORMATICA. Dictado: Ing. Juan Manuel Conti

NOTA: Las dos primeras líneas del archivo no aportan información para nuestro objetivo. Cada línea del archivo de texto será leída con la función: char *fgets(char *CadDestino, int n, FILE * ) que almacena en CadDestino "n" bytes extraídos de cada línea del archivo. Recuerde que fgets( ) retienen el caracter LF y agrega un finalizador '\0' a cada línea leída.  

En caso de éxito retorna una dirección distinta de NULL. En caso de fallo (final de archivo o algún error) regresa EOF.

Para la extracción de sub-cadenas de cada línea leída, utilice la función: char *strncpy(char *CadDestino, char *CadFuente, int nBytes) que copia hacia la CadDestino los nBytes a partir de una dirección dada de CadFuente. Esta función se halla en la librería string.h así que no olvide incluirla al comienzo de su programa. Para realizar conversiones de tipo, en nuestro caso específico de cadenas numéricas a tipo numérico, utilice la función: int atoi(CadNumerica) double atof(CadNumerica) A medida que vaya leyendo cada línea vaya generando una lista simple encadenada cada uno de cuyos nodos contendrá tantos miembros como campos tenga el archivo: - Codigo - Provincia - Superficie - Capital

int cadena de caracteres int cadena de caracteres

Finalmente mostrar por pantalla (a través de la lista encadenada) cada uno de los campos extraídos del archivo original.

NOTA: Utilice también la función de usuario EliminarBlancos( ) para ajustar el finalizador '\0' de los campos que sean cadenas, en el último caracter.

Taller de Lenguajes I – 2014 LICENCIATURA EN INFORMATICA. Dictado: Ing. Juan Manuel Conti

Problema 3 Archivos de texto y Graficación con EXCEL. Dos funciones matemáticas: F1(x) = A.exp(-Abs(x/Xo)) F2(x) = -sqrt(pow(R,2)-pow(x,2))

con A=10 y Xo=2 con R=5

siendo el rango de x: x_ini=-3.Xo x_fin=+3.Xo Deberán generar una tabla de valores en un archivo de texto en disco, conformada de tal manera que la misma pueda ser importada desde EXCEL y graficada convenientemente. Indudablemente para generar ambas funciones dentro del rango establecido, necesitará trabajar con variables de tipo numérico. Ahora bien, como cada registro de archivo (cada línea de texto grabada) deberá tener un formato dado sobre una cadena, conviene primero armar dicha cadena a través de la función: sprintf(Linea, "...cadena de formatos...", variables) que almacenará, como si fuera en pantalla, pero en una cadena de caracteres y en forma encolumnada, los diferentes campos: x

F1(x)

F2(x)

Una vez armada dicha Linea, recién será transferida hacia su archivo destino mediante fprintf( ).

IMPORTANTE: Un detalle a tener en cuenta es que los puntos decimales (.) deberán ser sustituidos por comas (,) para que EXCEL la tome sin problemas.