Curso de Programación en C/Prog116

De WikiCabal
Ir a la navegación Ir a la búsqueda

Prog116

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define TAMANOAR 1000
 5 
 6 int main( void )
 7 {
 8   double Numeros[TAMANOAR],
 9          Valor;
10 
11   const char * Archivo = "Numeros.dat";
12 
13   int i;
14 
15   long pos;
16 
17   FILE *ioArchivo;
18 
19   // Crear un grupo de valores de dobles
20   for( i = 0; i < TAMANOAR; i++ )
21     Numeros[i] = 100.0 * i + 1.0 / (i + 1);
22 
23   if( ( ioArchivo = fopen( Archivo, "wb" ) ) == NULL )
24   {
25     fprintf( stderr, "No puedo abrir el archivo de salida: %s.\n", Archivo );
26     exit(1);
27   }
28   // write array in binary format to Archivo
29   fwrite( Numeros, sizeof (double), TAMANOAR, ioArchivo );
30   fclose( ioArchivo );
31 
32   if( ( ioArchivo = fopen( Archivo, "rb" ) ) == NULL )
33   {
34     fprintf( stderr, "No puedo abrir %s para acceso random.\n", Archivo );
35     exit( 1 );
36   }
37   // read selected items from Archivo
38   printf( "Ingresa un index en el rango 0-%d: ", TAMANOAR - 1 );
39   scanf( "%d", &i );
40   while( i >= 0 && i < TAMANOAR )
41   {
42     pos = (long)i * sizeof( double ); // calcular el offset
43     fseek( ioArchivo, pos, SEEK_SET );
44     fread( &Valor, sizeof( double ), 1, ioArchivo );
45     printf( "El Valor allá es %f.\n", Valor );
46     printf( "Siguiente index (a fuera del rango para terminar): ");
47     scanf( "%d", &i );
48   }
49   fclose( ioArchivo );
50   puts( "\n¡Adios!\n" );
51   return 0;
52 }

Resultado

[rrc@llawyr CClase]$ gcc -Wall -o Prog116 Prog116.c
[rrc@llawyr CClase]$ ./Prog116
Ingresa un index en el rango 0-999: 40
El Valor allá es 4000.024390.
Siguiente index (a fuera del rango para terminar): 21 
El Valor allá es 2100.045455.
Siguiente index (a fuera del rango para terminar): 66
El Valor allá es 6600.014925.
Siguiente index (a fuera del rango para terminar): 99
El Valor allá es 9900.010000.
Siguiente index (a fuera del rango para terminar): 345
El Valor allá es 34500.002890.
Siguiente index (a fuera del rango para terminar): 999
El Valor allá es 99900.001000.
Siguiente index (a fuera del rango para terminar): 2345

¡Adios!

[rrc@llawyr CClase]$ 

Explicación