//--------------------------------------------------------------------------#include <stdio.h> #include <stdlib.h> #pragma hdrstop /* UTILIZACION DE ESTRUCTURAS EN ARCHIVOS */ //--------------------------------------------------------------------------struct punto { double x, y; }; struct registro { int serie; punto a, b; }; #pragma argsused double generarvalor(void) { /* esta función genera un número real aleatorio con dos decimales positivo o negativo */ int n; double x = random(10000)+1; x /= 100.00; n = random(100); if( n%2 == 0 ) {//determinamos el signo del número segun el número sea par o impar x *= -1.0; } return x; } main() { FILE * f; int r, i= 0,n, srn; registro rg; randomize(); f = fopen("lecturas", "a+b"); if( f != NULL ) { //buscamos el ultimo numero de serie fseek(f, (sizeof(registro)*-1 ), SEEK_END ); //OBSERVAR QUE VA MULTIPLICADO POR -1 AUN UTILIZANDO SEEK_END r = fread( &rg, sizeof(rg), 1, f ); srn = 1; //valor de la serie si no hay datos cargados if( r != 0 ) {//ya hay datos cargados en el archivo srn = rg.serie + 1; } fseek(f, 0, SEEK_END ); //nos vamos al fin del archivo //seleccionamos una cantidad aleatoria de valores a generar n = random(200) + 1; for( i = 0; i < n; i++ ) { rg.serie = srn; rg.a.x = generarvalor();//ver funcion generarvalor rg.a.y = generarvalor(); rg.b.x = generarvalor(); rg.b.y = generarvalor(); fwrite(&rg, sizeof(rg), 1, f ); //con un solo fwrite se guardan los valores de la estructura } fclose(f); } } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------#include <stdio.h> #include <stdlib.h> /* UTILIZACION DE ESTRUCTURAS EN ARCHIVOS (Lectura de Datos) */ //--------------------------------------------------------------------------struct punto { double x, y; }; struct registro { int serie; punto a, b; }; //--------------------------------------------------------------------------#pragma hdrstop //--------------------------------------------------------------------------#pragma argsused main() { FILE* f; registro rg; int n = 0; f = fopen( "lecturas", "rb" ); if( f != NULL ) { while( !feof(f) ) {//feof() funcion que devuelve 0 si no se alcanzó el fin de archivo // y 1 si lo hizo fread(&rg, sizeof(rg), 1, f ); printf( "secuencia: %d Punto a (%lf, %lf ), b (%lf, %lf)\n", rg.serie, rg.a.x, rg.a.y, rg.b.x, rg.b.y ); //OBSERVAR QUE UNA SOLA LECTURA LEVANTA TODOS LOS DATOS A LA //ESTRUCTURA EN LA OPERACION DE LECTURA n++; } fclose(f); printf( "\n\nFueron leidos %d juegos de valores", n ); } } //---------------------------------------------------------------------------