/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

archivos binarios(cambiar posicion)

 
      Índice del Foro elrincondelc.com -> Dev-C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
hera24



Registrado: 20 Jun 2010
Mensajes: 14

MensajePublicado: 23/10/2010 7:13 pm
Título: archivos binarios(cambiar posicion)

Hola, tengo un ejercicio que no puedo resolver. El enunciado dice lo siguiente: Ingresar y grabar números enteros en un archivo llamado “numeros.dat”, encontrar el menor y mayor valor. Modificar el archivo intercambiándolos de lugar.

Esto es o que yo hice:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

main()
{
FILE *arch;
int i,x,n,aux,may=0,men;
arch=fopen("numeros.dat","wb");
printf("Ingrese la cantidad de valores: ");
scanf("%d", &n);
for (i=1;i<=n;i++)
{
printf("Ingrese el numero: ");
scanf("%d",&x);
fwrite(&x,sizeof(int),1,arch);
}
fclose(arch);
printf("\nel archivo creado es:");
arch=fopen("numeros.dat","rb");
fread(&x,sizeof(int),1,arch);
while (!feof(arch))
{
printf("\nnumero:%d",x);
fread(&x,sizeof(int),1,arch);
}

arch=fopen("numeros.dat","rb");
fread(&x,sizeof(int),1,arch);
while (!feof(arch))
{
if(x>may)
may=x;
else
men=x;
fread(&x,sizeof(int),1,arch);
}
printf("\n\nel menor valor es: %d",men);
printf("\n\nel mayor valor es: %d",may);
fclose(arch);

/* AQUI QUIERO MOSTRARLO CUANDO YA INTERCAMBIE DE LUGAR */
printf("\nel archivo quedo:");
arch=fopen("numeros.dat","rb");
fread(&x,sizeof(int),1,arch);
while (!feof(arch))
{
printf("\nnumero:%d",x);
fread(&x,sizeof(int),1,arch);
}


getch();
}

Lo unico que no me sale es intercmabiar de lugar. Yo quiero hacer el intercambio del primer numero por el ultimo y bueno el ultimo por el primero. Espero puedan ayudarme. [/b]
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 6586
Ubicación: Mexico

MensajePublicado: 25/10/2010 3:23 pm
Título:

Ya te habia comentado antes que no utilizes la biblioteca conio de Borland. Si la utilizas porque Dev-C++ no realiza una pausa automatica entonces cambia de IDE, y si te obligan en tu escuela a utilizarla, bueno, en un caso asi lo que te enseñan no te servira de mucho a futuro.

El programa tiene errores importantes, por ejemplo abres el archivo, no lo cierras y a continuacion tratas de abrirlo de nuevo.

El programa corregido es (C estandar):
Código:
#include <stdio.h>
#include <stdlib.h>

#define NOM_ARCHIVO  "numeros.dat"

FILE *abrir_archivo(const char *nombre, const char *modo);
void imprimir_archivo(const char *nombre);

int main(void)
{
   FILE *archivo;
   int num_elem;
   int num;
   int i;
   
   int min;
   int max;
   
   long pos;
   long pos_min;
   long pos_max;
   
   /* Leemos el numero de elementos a procesar */
   printf("Ingrese la cantidad de valores: ");
   fflush(stdout);
   if (scanf("%d", &num_elem) != 1 || num_elem < 1)
      return EXIT_FAILURE;
   
   /* Escribimos los valores en el archivo */
   archivo = abrir_archivo(NOM_ARCHIVO, "wb");
   for (i = 0; i < num_elem; i++){
      printf("Ingrese el numero %d: ", i + 1);
      fflush(stdout);
      scanf("%d", &num);
      fwrite(&num, sizeof num, 1, archivo);
   }
   fclose(archivo);
   
   /* Imprimimos el contenido del archivo */
   imprimir_archivo(NOM_ARCHIVO);
   
   /*
   ** Encontramos el minimo y maximo (lectura)
   ** y los intercambiamos (escritura)
   */
   archivo = abrir_archivo(NOM_ARCHIVO, "rb+");
   
   /* Encontrar el minimo y el maximo */
   pos_min = pos_max = ftell(archivo);
   fread(&num, sizeof num, 1, archivo);
   min = max = num;
   
   while (pos = ftell(archivo), fread(&num, sizeof num, 1, archivo) == 1)
      if (min > num){
         min = num;
         pos_min = pos;
      }else if (max < num){
         max = num;
         pos_max = pos;
      }
   printf("Minimo: %d\n", min);
   printf("Maximo: %d\n", max);
   
   /* Intercambio del minimo y maximo */
   fseek(archivo, pos_min, SEEK_SET);
   fwrite(&max, sizeof max, 1, archivo);
   fseek(archivo, pos_max, SEEK_SET);
   fwrite(&min, sizeof min, 1, archivo);
   fclose(archivo);
   
   /* Imprimimos el contenido del archivo */
   imprimir_archivo(NOM_ARCHIVO);
   
   return EXIT_SUCCESS;
}

FILE *abrir_archivo(const char *nombre, const char *modo)
{
   FILE *archivo;
   
   archivo = fopen(nombre, modo);
   if (archivo == NULL){
      perror(nombre);
      exit(EXIT_FAILURE);
   }
   
   return archivo;
}

void imprimir_archivo(const char *nombre)
{
   FILE *entrada;
   int num;
   
   entrada = abrir_archivo(nombre, "rb");
   
   puts("\nContenido del archivo:");
   while (fread(&num, sizeof num, 1, entrada) == 1)
      printf("%d\n", num);
   
   fclose(entrada);
}
Volver arriba
hera24



Registrado: 20 Jun 2010
Mensajes: 14

MensajePublicado: 28/10/2010 5:24 pm
Título:

Gracias por la respuesta, me sirvio de mucho, y si en mi universidad nos hacen usar la biblioteca conio, la verdad no entiendo mucho de programacion y si agarro un libro yo sola es como si estuviera leyendo en chino, en la universidad a la que asisto nos enseñan a la mitad y bueno que se va a hacer. Muchas gracias por la ayuda. Saludos[/b]
Volver arriba
      Índice del Foro elrincondelc.com -> Dev-C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com