| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
hera24
Registrado: 20 Jun 2010 Mensajes: 14
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |