[?] Archivos Binarios

Iniciado por MeCraniDOS, 20 Octubre 2013, 11:38 AM

0 Miembros y 1 Visitante están viendo este tema.

MeCraniDOS

Buenas, tengo un problema con estos dos códigos  :rolleyes:

Son unas prácticas de la universidad, los enunciados son estos

2.3.- Escriu un programa que llegeixi els valors del radi de diferents esferes que hi ha en el  fitxer binari "10radi_esfera.dat" (les dades són enteres) i calculi el volum de les esferes corresponents. Els resultats s'han de guardar en un fitxer binari anomenat "10vol_esfera.dat" amb una precisió  de  tres  decimals.  A priori  desconeixem el  nombre  de  valors  que  hi  ha emmagatzemats al fitxer d'entrada.

2.4.-  Escriu un programa que llegeixi  el  volum de les esferes que hi  ha en el  fitxer binari "10vol_esfera.dat" i mostri el seu contingut per pantalla.



2.3

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <math.h>

#define PI 3.141592654

int main()
{

FILE *EsfRad, *EsfVol;
int Radio;
float Volumen;

EsfRad = fopen("10radi_esfera.dat","rb");

if(!EsfRad)
{
printf("Error: No se puede abrir el archivo");
}
else
{
EsfVol = fopen("10vol_esfera.dat","wb");

if(!EsfVol)
{
printf("Error: No se puede abrir el archivo");
}
else
{
while(!feof(EsfRad))
{
fread(&Radio, sizeof(Radio), 1, EsfRad);
Volumen = (float)((4*PI*(pow(Radio,3)))/3);
fwrite(&Volumen, sizeof(Volumen), 1, EsfVol);
}
}

fclose(EsfRad);
fclose(EsfVol);
}

return 0;

}


2.4

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <math.h>

#define PI 3.141592654

int main()
{

FILE *EsfRad;
float Volumen;

EsfRad = fopen("10vol_esfera.dat","rb");

if(!EsfRad)
{
printf("Error: No se puede abrir el archivo");
}
else
{
while(!feof(EsfRad))
{
                        fread(&Volumen, sizeof(Volumen), 1, EsfRad);
printf("Volumen = %.3f\n",Volumen);
}

fclose(EsfRad);
}

return 0;

}


El problema que le veo no es de código (eso creo), sino que con los archivos que nos dan para hacer las pruebas, dos o tres volúmenes salen iguales..  :¬¬

No se si se puede, pero adjunto los archivos *.dat por si alguien lo puede/quiere revisar :rolleyes:

Saludos

Link (10radi_esfera.dat): http://www.mediafire.com/?jdangsbyw9ric1u
"La física es el sistema operativo del Universo"
     -- Steven R Garman

ivancea96

Me podrías dar el enunciado en Español? xD

MeCraniDOS

Cita de: ivancea96 en 20 Octubre 2013, 14:01 PM
Me podrías dar el enunciado en Español? xD

:¬¬ :¬¬

Hahaha en Español es así  :rolleyes:


Citar2.3.- Escribe un programa que lea los valores del radio de diferentes esferas que hay en el archivo binario "10radi_esfera.dat" (los datos son enteros) y calcula el volumen de las esferas correspondientes. Los resultados se deben guardar en un archivo binario llamado "10vol_esfera.dat" con una precisión de tres decimales. A priori desconocemos el número de valores que hay almacenados en el archivo de entrada.

2.4.- Escribe un programa que lea el volumen de las esferas que hay en el archivo binario "10vol_esfera.dat" y muestre su contenido por pantalla.

Saludos  :silbar:
"La física es el sistema operativo del Universo"
     -- Steven R Garman

rir3760

En mi opinión los enunciados no explican de forma clara las operaciones a realizar. El primero indica "Los resultados se deben guardar ... con una precisión de tres decimales" y ello implica el uso de la función fprint sin embargo en el siguiente enunciado se refiere al archivo "10vol_esfera.dat" como uno binario cuando en realidad es texto.

Otro problema con los archivos binarios es que el numero y orden de sus bytes dependen de la implementación. En el caso de cuatro bytes por entero el valor 0x03000000 (o 0x00000003) aparece en dos ocasiones en el archivo y como utilizas la funcion feof para controlar el bucle (no deberias, utiliza directamente el valor de retorno de fread) el ultimo puede presentarse tambien como repetido.

Platica con tu profesor, en un caso ideal debe darles no solo el archivo de entrada sino también el de salida (para que verifiquen que el programa funciona correctamente)

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language