|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - i82maria
26
« en: Miércoles 18 de Mayo de 2005, 20:15 »
No he mirado todo el código por falta de tiempo pero te doy un consejo, cada vez que hagas un fopen comprueba que la función no te devuelva NULL, puede que al abrir algún fichero éste te devuelva NULL y luego al hacer fprintf() como el puntero a FILE vale NULL te de un error de ejecución.
FILE *pf; if((pf=fopen(nombre_fichero,"r"))==NULL) { system("Cls"); printf("\n\n\t\aERROR el fichero %s no se puede abrir.",nombre_fichero); getchar(); }
Haz esto cada vez que hagas un fopen y así sabrás si los ficheros se abren bien o no. Piensa que cuando abres para leer el fichero debe existir, mientras que para escribir y añadir el fichero si no existe se crea. Un saludo. Gracias por tu ayuda, resolvi mi problema de ejecucion.
27
« en: Miércoles 18 de Mayo de 2005, 19:51 »
Perdon por la tardanza, fgets es similar a gets, es decir ambas son funciones para cadenas de caracteres(texto), y si , puedes usar fgets en lugar de fscanf, nada mas que creo que fgets interpreta los datos como una cadena(creo), ademas tienes que pasarle el numero de caracteres que quieres que te lea, el archivo y creo que el buffer do nde se va a guardar la cadena. Gracias por responder, pero insisto, se trata de un fichero tipo texto, y yo no se cual es el tamaño del buffer, se necesita leer linea a linea, el fichero. Para q no se amontonen las palabras y se metan en el campo diferente. De todos modos gracias por tu ayuda.
28
« en: Lunes 16 de Mayo de 2005, 18:12 »
Ya probaste con fgets.
fgets te permite leer cadenas con espacios, creo que su uso es mas o menos asi
fgets(fichero,cadena para guardar texto, numero de caracteres a guardar);
Mas o menos, creo que va asi con esos argumentos,ahora como dice el cuate de arriba, para estructuras es mejor usar fread y fwrite, ademas te sirven para escribirlos de modo binario, no solo texto.
Espero que te sirva adios Gracia por responder lo primero, pero una pregunta, se trata de un fichero texto, se puede usar la funcion fgets, para un fichero texto, como quedaria, quiero decir, entonces la linea del fscanf, tengo q sustituirla por una de fgets,. Gracias
29
« en: Viernes 13 de Mayo de 2005, 21:29 »
Hola, buenas, vereis, tengo un problema, a la hora de mostrar el contenido de un fichero en consola. La cosa es la siguiente. Yo tengo q mostrar en pantalla, las personas q hay en un fichero de clientes de coches. Pues bien, lo hago asi: void verPropietarios() { FILE *pf; struct propietario p1; pf = fopen("propietarios.txt", "r"); /*se abre para lectura*/ if(pf == NULL) { printf("\n No existe el archivo\n"); exit (-1); } /*comienzo a leer datos hasta que llegue al final*/ while(fscanf(pf, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) == 4) { escribirPropietario(p1); } fclose(pf); }
El problema está q cuando me los muestra, me coge para el nombre una palbra, no dos. Es decir, si le meto: Nombre: Maria Jose Apellidos: Perez Muñoz Me troca los campos, y me muestra Nombre:Maria Apellidos:Jose NIF: Perez. Entendeis lo que quiero decir no, yo se q esto pasa por leer los campos con scanf, pero es q no se como leerlos, ya q se trata de ficheros texto, si alguien puede decirme como puedo solucionar este problema. Gracias void escribirPropietario(struct propietario p1) { printf("Nombre: %s Apellidos: %s NIF: %s Direccion: %s\n", p1.nombre, p1.apellidos, p1.NIF, p1.direccion); }
30
« en: Miércoles 11 de Mayo de 2005, 13:18 »
No he mirado todo el código por falta de tiempo pero te doy un consejo, cada vez que hagas un fopen comprueba que la función no te devuelva NULL, puede que al abrir algún fichero éste te devuelva NULL y luego al hacer fprintf() como el puntero a FILE vale NULL te de un error de ejecución.
FILE *pf; if((pf=fopen(nombre_fichero,"r"))==NULL) { system("Cls"); printf("\n\n\t\aERROR el fichero %s no se puede abrir.",nombre_fichero); getchar(); }
Haz esto cada vez que hagas un fopen y así sabrás si los ficheros se abren bien o no. Piensa que cuando abres para leer el fichero debe existir, mientras que para escribir y añadir el fichero si no existe se crea. Un saludo. Gracias por rsponderme lo primero, he cogido nota de lo que me has dicho, pero aún asi sigue dandome error al ejecutar el programa. Es un error segun me dice, del fscanf de la funcion buscarporMatri, dice stream ! = NULL. Si estas interesado en ayudarme, dame tu correo, y te envio el codigo entero. Gracias de nuevo.
31
« en: Miércoles 11 de Mayo de 2005, 02:40 »
Hola que tal.
La verdad no veo cual pueda ser el error, tal ves hubiera sido de más ayuda que especificaras que mensaje obtienes.
Si quieres pasarme tu código como dices para ver que es lo que sucede, así como el archivo del cual estas leyendo, espero poder ayudarte.
Hasta luego. Gracias el codigo es este: El archivo de funciones es este: [CODE] #include "cabecera.h" int menu() { int opcion; printf("1. Asegurar vehiculo\n"); printf("2. Consultar fichero de coches\n"); printf("3. Consultar fichero de clientes\n"); printf("4. Consultar datos de un vehiculo y su propietario dada su matricula\n"); printf("5. Consultar vehiculo dado el Nif Del cliente\n"); printf("*****************************"); printf("\nIntroduzca una opcion: "); scanf("%d", &opcion); //system("clear"); return opcion; } void anyadirPropietario(char *fichero, struct propietario p1) { FILE *pf; pf = fopen(fichero, "a"); fprintf(pf, "%s %s %s %s\n", p1.nombre, p1.apellidos, p1.NIF, p1.direccion); fclose(pf); } void escribirVehiculo(struct vehiculo c1) { printf("Tipo: %s Matri: %d Coste: %3.2f \n", c1.tipo, c1.matri,c1.coste); } void escribirPropietario(struct propietario p1) { printf("Nombre: %s Apellidos: %s NIF: %s Direccion: %s\n", p1.nombre, p1.apellidos, p1.NIF, p1.direccion); } void escribirDatosVePro(struct vehiculoPropietario aux) { printf("Matricula: %d NIF: %s\n", aux.matri, aux.NIF); } void verPropietarios(char *fichero) { FILE *pf; struct propietario p1; pf = fopen(fichero, "r"); /*se abre para lectura*/ /*comienzo a leer datos hasta que llegue al final*/ while(fscanf(pf, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) == 4) { escribirPropietario(p1); } fclose(pf); } void verVehiculos(char *fichero) { FILE *pf; struct vehiculo c1; pf = fopen(fichero, "r"); /*se abre para lectura*/ /*comienzo a leer datos hasta que llegue al final*/ while(fscanf(pf, "%s %d %f", c1.tipo, &c1.matri, &c1.coste) == 3) { escribirVehiculo(c1); } fclose(pf); } void verVePro(char *fichero, struct vehiculoPropietario nueva) { FILE *pb; pb = fopen(fichero, "rb"); /*se abre para lectura*/ /*comienzo a leer los datos hasta que llegue al final*/ while(fread(&nueva, sizeof(struct vehiculoPropietario), 1, pb)==1) /*COmprueba que no ha llegado al final del fichero*/ { /*HAY que comprobar que no este marcado como borrado*/ /* if(coche1.borrado == 0)*/ escribirDatosVePro(nueva); /*muestra el registro por pantalla*/ } fclose(pb); } //leer el fichero y comprobar q no esta la matricula void anyadirVehiculo(char *fichero, struct vehiculo c1) { FILE *pf; pf = fopen(fichero, "a"); fprintf(pf, "%s %d %3.2f\n", c1.tipo, c1.matri, c1.coste); /*printf("%s %d %f %s\n", coche.tipo, coche.matri, coche.coste);*/ fclose(pf); } void anyadirVePro(char *fichero, struct vehiculoPropietario aux) { FILE *pb; pb = fopen(fichero, "ab"); /*abre el fichero para añadir*/ /*guarda los datos en el fichero*/ fwrite(&aux, sizeof(struct vehiculoPropietario), 1, pb); fclose(pb); } int existeFichero(char *fichero) { FILE *pf; pf = fopen(fichero, "r"); /*abre fichero para lectura*/ if(pf == NULL) /*el fichero no existe*/ { return 0; } else /*el fichero si existe*/ { fclose(pf); return 1; } } int buscarPorMatri(char *fichero, int matri, struct vehiculo *coche) { FILE *pfichero; int salir = 0; int encontrado = 0; int cont; struct vehiculo auxiliar; //struct vehiculo *coche; pfichero = fopen(fichero, "r"); /*abrimos para lectura*/ while(salir ==0) { cont = fscanf(pfichero,"%s %d %f", auxiliar.tipo, &auxiliar.matri, &auxiliar.coste); /*en la variable cont almacenamos el numero de campos del fichero*/ if(cont!=3) /*hemos llegado al final del fichero*/ salir = 1; else if(auxiliar.matri == matri) /*ha encontrado el registro*/ { encontrado = 1; salir = 1; *coche = auxiliar; /*almacena en coche el registro encontrado*/ } } fclose(pfichero); return encontrado; } int buscarPorNIF(char *fichero, char *auxNIF) { FILE *pf; int encontrado = 0; /*variables auxiliar para la busqueda*/ struct propietario auxiliar; pf = fopen(fichero, "r"); /*abrimos para lectura*/ while(fscanf(pf,"%s %s %s %s", auxiliar.nombre, auxiliar.apellidos, auxiliar.NIF, auxiliar.direccion)==4) { if(strcmp(auxiliar.NIF, auxNIF)==0) /*ha encontrado el registro*/ { escribirPropietario(auxiliar); /*se escriben sus datos*/ encontrado = 1; } } fclose(pf); return encontrado; } struct propietario introducirDatosPropietario() { struct propietario aux; printf("\n Introducir nombre: "); gets(aux.nombre); printf("\n Introducir apellidos: "); gets(aux.apellidos); printf("\nIntroducir NIF: "); gets(aux.NIF); printf("\nIntroducir direccion: "); gets(aux.direccion); return aux; } int existePropietario(char *fichero, char *auxNIF, struct propietario p1) { FILE *fp; int encontrado; fp = fopen(fichero, "r"); encontrado = buscarPorNIF(fichero, auxNIF); if(!encontrado) { return 0; } else { printf("\nEl propietario ya existe\n"); fclose(fp); return 1; } } int existeVehiculo(char *fichero, int matri, struct vehiculo c1) { FILE *fp; int encontrado; fp = fopen(fichero, "r"); //se abre para lectura encontrado = buscarPorMatri(fichero, matri, &c1); if(!encontrado) { return 0; } else{ printf("\n El vehiculo ya existe\n"); fclose(fp); return 1; } } struct vehiculo introducirDatosVehiculo() { struct vehiculo aux; printf("\n Introducir tipo: "); scanf("%s", aux.tipo); getchar(); /*printf("\n %s", aux.tipo);*/ printf("\n Introducir matricula: "); scanf("%d", &aux.matri); getchar(); /*printf("\n %d" ,aux.matri);*/ printf("\nIntroducir coste: "); scanf("%f", &aux.coste); getchar(); /*printf("\n %.3f", aux.coste);*/ return aux; printf("\n La matricula es: %d", aux.matri); //crear una funcion q compruebe si existe o no el vehiculo } /* void borrarVehiculo(char *fichero, int matri) { FILE *pf1, *pf2; struct vehiculo aux; pf1 = fopen(fichero, "r"); /*se abre para lectura el fichero original* pf2 = fopen("temporal.txt", "w"); /*se abre para escritura el fichero temporal* /*Se recorre el fichero original y los registros que no hay que borrar se psan al temporal* while(fscanf("%s %d %f", &aux.tipo, aux.matri, aux.coste) == 3) { if (aux.matri !=matri) fprintf(pf2, "%s %d %f\n", aux.tipo, aux.matri, aux.coste); } fclose(pf1); fclose(pf2); /*se borra el fichero original* remove(fichero); /*se renombra el temporal* rename("temporal.txt",fichero); } void borrarPropietario(char *fichero, char NIF) { FILE *pf1, *pf2; struct propietario aux; pf1 = fopen(fichero, "r"); /*se abre para lectura el fichero original* pf2 = fopen("temporal.txt", "w"); /*se abre para escritura el fichero temporal*/ /*Se recorre el fichero original y los registros que no hay que borrar se psan al temporal* while(fscanf("%s %s %s %s", aux.nombre, aux.apellidos, aux.NIF, aux.coste) == 4) { if (strcmp(aux.NIF, NIF)!=0) fprintf(pf2, "%s %s %s %s\n", aux.nombre, aux.apellidos, aux.NIF, aux.direccion); } fclose(pf1); fclose(pf2); /*se borra el fichero original* remove(fichero); /*se renombra el temporal/ rename("temporal.txt",fichero); } */ [CODE] El de cabecera.h es este #include <stdio.h> #include <stdlib.h> #include <string.h> struct vehiculo { char tipo[7]; int matri; float coste; }; struct propietario { char nombre[10]; char apellidos[30]; char NIF[10]; char direccion[30]; }; struct vehiculoPropietario { int matri; char NIF[10]; }; int menu(); void anyadirPropietario(char *fichero, struct propietario p1); void anyadirVehiculo(char *fichero, struct vehiculo c1); void anyadirVePro(char *fichero, struct vehiculoPropietario aux); int existeFichero(char *fichero); int buscarPorMatri(char *fichero, int matri, struct vehiculo *coche); int buscarPorNIF(char *fichero, char *auxNIF); void escribirDatosVePro(struct vehiculoPropietario aux); void escribirPropietario(struct propietario p1); void escribirVehiculo(struct vehiculo c1); int existeVehiculo(char *fichero, int matri, struct vehiculo c1); int existePropietario(char *fichero, char *auxNIF, struct propietario p1); struct propietario introducirDatosPropietario(); struct vehiculo introducirDatosVehiculo(); void verPropietarios(char *fichero); void verVehiculos(char *fichero); void verVePro(char *fichero, struct vehiculoPropietario nueva); Y el ppal.c es este [CODE] #include "cabecera.h" struct vehiculoPropietario nueva; main(void) { //FILE *fictxt; int opcion; /*variables para opcion del menu*/ int salir = 0; /*variable auxiliar usada en la busqueda*/ //int encontrado = 0; /*variable q indica si el registro se ha encontrado*/ int existe; /*variable auxiliar que indica si el fichero existe*/ int existe1; char fichero[15]; struct vehiculo coche1; struct propietario persona1; //struct vehiculoPropietario nueva; //system("clear"); /*introduccion del nombre del fichero para trabajar*/ printf("\nIntroduzca el nombre del fichero: "); gets(fichero); /*menu de opciones del programa*/ do{ do{ opcion = menu(); }while(opcion <1 || opcion >3); switch(opcion) { case 1: /*asegurar un vehiculo*/ { coche1= introducirDatosVehiculo(); /*se añade el registro ya que seria el primero*/ existe = existeVehiculo(fichero, coche1.matri, coche1); if(existe) /*el coche ya existe*/ { printf("\nVehiculo ya existente\n"); exit(-1); } /*se añade el registro ya q seria el primero*/ anyadirVehiculo(fichero, coche1); printf("Vehiculo añadido. Pulse intro para seguir\n"); persona1 = introducirDatosPropietario(); existe1 = existePropietario(fichero, persona1.NIF, persona1); if(existe1) { printf("\n EL propiestario ya existe\n"); exit(-1); } anyadirPropietario(fichero, persona1); anyadirVePro(fichero, nueva); printf("\nPropietario añadido. Pulse intro para seguir\n"); getchar(); break; } case 2: /*visualizar todos los vehiculos asegurados*/ { /*comprueba si existe el fichero*/ existe = existeFichero(fichero); if(existe == 1) /*el fichero existe*/ { verVehiculos(fichero); /*muestra los registros del fichero vehiculos*/ printf("Datos leidos. Pulse INtro para continuar\n"); } else /*el fichero no existe*/ { printf("EL fichero de vehiculos no existe. Pulsa intro para ontinuar\n"); } getchar(); getchar(); break; } case 3: /*visualizar todos los propietarios de vehiculos*/ { /*comprueba si existe el fichero*/ existe = existeFichero(fichero); if(existe == 1) /*el fichero existe*/ { verPropietarios(fichero); /*muestra los registros del fichero vehiculos*/ printf("Datos leidos. Pulse INtro para continuar\n"); } else //el fichero no existe { printf("\nEL fichero de propietarios no existe. Pulsa intro para continuar\n"); } getchar(); getchar(); break; } case 0: /*salida del programa*/ break; } }while(opcion!=3); } La practica va sobre un fichero de coches y otro de propietarios y primero hay q introducir los coches, sin q se repita la matricula y luego los propietarios.< Muchas gracias, por responderme, pq estoy ya desesperada. Es q en si, no me da ningun msj, de warning ni nada, es al ejecutar.
32
« en: Miércoles 11 de Mayo de 2005, 02:21 »
Hola tengo que hacer una practica de ficheros de c, estoy yendo poco a poco. Y bueno no es plande ponerle todo el codigo, solo les pondre, donde me dice el debug q me da error, dice q es en el fscanf y yo no sé por que.
int buscarPorMatri(char *fichero, int matri, struct vehiculo *coche) { FILE *pfichero; int salir = 0; int encontrado = 0; int cont; struct vehiculo auxiliar; //struct vehiculo *coche; pfichero = fopen(fichero, "r"); /*abrimos para lectura*/ while(salir ==0) { cont = fscanf(pfichero,"%s %d %f", auxiliar.tipo, &auxiliar.matri, &auxiliar.coste); /*en la variable cont almacenamos el numero de campos del fichero*/ if(cont!=3) /*hemos llegado al final del fichero*/ salir = 1; else if(auxiliar.matri == matri) /*ha encontrado el registro*/ { encontrado = 1; salir = 1; *coche = auxiliar; /*almacena en coche el registro encontrado*/ } } fclose(pfichero); return encontrado; }
Yo ejecuto el programa, y se sale , y el debug me dice q es el fscanf de estga funcion, si alguien puede ayudarme, y quiere ver el codigo entero que me lo diga. Gracias, necesito consejos.
33
« en: Miércoles 15 de Diciembre de 2004, 11:34 »
No lei con mucha atencion el codigo, pero note que cuando agregar un elemento en la cola, solamente estas pasando un puntero (el final), si usas cola normar (una estructura tipica, no una cola circular ni nada de eso), tenes que pasar los dos punteros, aca va un ejemplo:
struct cola { int dato; struct cola *next; };
int enqueue(struct cola **head, struct cola **tail, int dato) { struct cola *nuevo = (struct cola *) malloc(sizeof(struct cola));
if (!nuevo) return -1; /* No hay memoria suficiente */
nuevo->dato = dato; nuevo->next = NULL;
if (*head == NULL) *head = nuevo; else (*tail)->next = nuevo;
*tail = nuevo; return 0; /* Todo concluyo bien */ }
(Consejo: Trata de dibujar todo, es mas facil de entender, "Si puedes dibujarlo puedes organizarlo") Saludos!!!, Mgitano2001 Entonces segun tu me dices tengo que usar ds punteros, el final y la cabeza de la cola, no?. Asi me funcionará bien el programa?. Por favor, respondeme es importante, tengo que tenerlo echo para esta tarde. Gracias por haberme respondido antes.
34
« en: Martes 14 de Diciembre de 2004, 20:35 »
Wenas a todos, solo pido porfavor si alguien sabe de algun manual que este bien para principiantes y también que tenga ejercicios y sus correcciones, y si puede ser algo de algoritmos dibujados. Tiene que ser lo mas basico, para una persona que no ha vista en su vida una linea de codigo. Espero que me podais ayudar, muchas gracias. Hola buenas, bueno manuales hay muchos mira en la pagina de http://www.ulpgc.es/otros/tutoriales/mtutor/indice.htmlaqui hay un tutorial, para principiantes, y en el rincondelvago.com, hay otro que se llama rincondelc.Pones en el google, rincon del C. Y te sale, suerte SI necesitas orta cosa, pa eso estamos
35
« en: Martes 14 de Diciembre de 2004, 12:59 »
Hola a todos, estoy haciendo una practica de colas en C, otra de pilas, y ambas me dan error de ejecucion de memoria, si alguien tiene tiempo, y puede ayudarme, es que no se donde esta el fallo,es muy importante.Adjunto aqui el codigo de cada una de ellas.Ruego me contesten lo antes posible, gracias. [CODE] /*colas.h*/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h>
struct cola{ char fichero[31]; int tamanyo; char usuario[31]; int ident; struct cola *sig; }; void crear(struct cola **frente); int vaciaCola(struct cola *frente); void introducirDatos(struct cola *datos); void anyadir(struct cola **final); struct cola *nuevoElemento(); void eliminar(struct cola **frente); void visualizar(struct cola *actual); void imprimirTrabajo(struct cola **frente); void listar(struct cola **frente); int presentaMenu(void);
/*colas.c*/ #include "colas.h"
main() { int opcion; struct cola *frente, *final;
do{
crear(&frente); do{ opcion = presentaMenu();
}while(opcion <0 || opcion > 4); switch(opcion) { case 1: /*Añadir un trabajo*/ anyadir(&final); break; case 2: //Imprimir un trabajo imprimirTrabajo(&frente); break; case 3: //listar trabajos listar(&frente); break; case 4: //eliminar un trabajo eliminar(&frente); break; case 0: printf("\n\n\nADIOS\n"); break; } }while(opcion); }
void crear(struct cola **frente) { *frente = NULL; }
int vaciaCola(struct cola *frente) { if(frente == NULL) return 1; else return 0; }
void introducirDatos(struct cola *datos) { printf("\nIntroduzca el nombre del fichero: "); gets(datos->fichero); fflush(stdin);
printf("\n Introduzca el tamanyo: "); scanf("%d", &datos->tamanyo); fflush(stdin);
printf("\nIntroduzca el nombre de usuario: "); gets(datos->usuario); fflush(stdin);
printf("\nIntroduzca el identificador: "); scanf("%d", &datos->ident); getche(); }
int presentaMenu(void) { int opcion; printf("EJEMPLO DE MANEJO DE COLAS\n"); printf("-------------------------\n\n"); printf("1.- Anyadir un trabajo a la cola\n"); printf("2.- Imprimir un trabajo\n"); printf("3.- Listar los trabajos\n"); printf("4.- Eliminar un trabajo\n"); printf("0.- TERMINAR.\n\n\n"); printf("Introduce una opcion: "); scanf("%d",&opcion); fflush(stdin); return opcion; }
struct cola *nuevoElemento() { struct cola *a; a = (struct cola *) malloc(sizeof(struct cola)); return a; }
void anyadir(struct cola **final) { struct cola *nuevo= NULL; struct cola *aux = NULL; //almacena el posterior al que se inserta
printf("AÑADIR TRABAJOS\n"); printf("**********************\n\n"); nuevo = nuevoElemento(); introducirDatos(nuevo);
if(vaciaCola(*final)) { nuevo->sig = *final; *final = nuevo;
} else { aux = *final; while((aux->sig) !=NULL){ aux = aux->sig; } if(nuevo !=NULL) { aux->sig = nuevo; nuevo->sig =NULL; } } }
void eliminar(struct cola **frente) { struct cola *borrar, *ant = NULL; int id;
system("clear"); printf("ELIMINAR TRABAJOS\n"); printf("**********************\n\n"); printf("\n Introduzca el identificador de trabajo: "); scanf("%d", &id);
if(vaciaCola(*frente)) { printf("\nLa cola esta vacia\n"); exit(0); } else { while(borrar!=NULL && borrar->ident == id) { if(ant == NULL){ borrar = *frente; *frente = (*frente)->sig; free(borrar); } else{ ant->sig = borrar->sig; free(borrar); } } //si son distintos ant = borrar; borrar = borrar->sig;
} }
void visualizar(struct cola *actual) { printf("\n Fichero..................: %s", actual->fichero); printf("\n Tamanyo en bytes.........: %d", actual->tamanyo); printf("\n Nombre de usuario........: %s", actual->usuario); printf("\n Identificador............: %d", actual->ident); actual = actual->sig;
}
void listar(struct cola **frente) { struct cola *actual; system("clear"); printf("LISTAR TRABAJOS DE LA COLA\n"); printf("**********************\n\n"); actual = *frente; if(!vaciaCola(*frente)) { while(actual!=NULL) { visualizar(actual); printf("\n"); fflush(stdin); printf("\nPulse intro para continuar...."); getchar();
actual = actual->sig; } } }
void imprimirTrabajo(struct cola **frente) { struct cola *borrar; system("clear"); printf("IMPRIMIR TRABAJOS\n"); printf("**********************\n\n"); borrar = *frente; visualizar(borrar); fflush(stdin); printf("\nPulse intro para continuar...."); getchar(); *frente = (*frente)->sig; free(borrar); }
/*pilas.h*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define ASCENDENTE 1 #define DESCENDENTE 0
struct pila{ char nombre[15]; int edad; struct pila *sig; };
void crearPila(struct pila **cima); int pilaVacia(struct pila *cima); void apilar(struct pila **cima); void desapilar(struct pila **cima); void listarPila(struct pila *cima); //void eliminarPila(struct pila **cima, char *nombre); void liberar(struct pila **cima); int menu(void);
struct pila *nuevoElemento(); void visualizar(struct pila *cima); void leerDatos(struct pila *dat); void verCima(struct pila *cima); void top(struct pila *cima,char *nom, int *ed);
/*pilas.c*/ #include "pilas.h"
main(void) { struct pila *cima; int opcion; do{ crearPila(&cima);
do { opcion = menu(); }while(opcion <0 || opcion >5);
switch(opcion) { case 1: //añadir en la pila apilar(&cima);
break; case 2: //ver la cima de la pila verCima(cima); break; case 3: //Desapilar un elemento de la cima desapilar(&cima); break; case 4: //Listar la pila listarPila(cima); break; case 5: //Liberar la memoria de la pila liberar(&cima);
break; } }while(opcion); }
int menu(void) { int opcion;
printf("******** EJEMPLO DE PILAS **********\n"); printf("1. Añadir en la pila\n"); printf("2. Cima de la pila\n"); printf("3. Desapilar un elemento de la pila\n"); printf("4. Listar la pila\n"); printf("5. Liberar la memoria ocupada por la pila\n\n"); printf("0. TERMINAR\n\n"); printf("\nIntroduce una opcion: "); scanf("%d",&opcion); fflush(stdin);
return opcion; } /************************** Funcion crearPila() *********************/ /* Propósito.........: Crea la pila. Parametro.........: Puntero cima d ela pila por referencia Devuelve..........: Nada */ /********************************************************************/
void crearPila(struct pila **cima) { *cima = NULL; }
/************************** Funcion pilaVacia() *********************/ /* Propósito.........: Comprueba si la pila está vacia Parametro.........: Puntero cima de la pila por valor Devuelve..........: SI si la pila está vacia NO si la pila no lo está. */ /********************************************************************/
int pilaVacia(struct pila *cima) { if(cima == NULL) return 1; else return 0; }
void leerDatos(struct pila *dat) { printf("\nIntroduzca el nombre...: "); gets(dat->nombre); fflush(stdin);
printf("\nIntroduzca la edad...: "); scanf("%d", &dat->edad); fflush(stdin);
dat->sig = NULL; }
struct pila *nuevoElemento() { struct pila *a; a = (struct pila *) malloc(sizeof(struct pila)); return a; }
/************************** Funcion apilar() *********************/ /* Propósito.........: Añade elementos a la pila Parametro.........: Puntero cima de la pila por referencia Devuelve..........: Nada */ /********************************************************************/
void apilar(struct pila **cima) { struct pila *nuevo; nuevo = nuevoElemento(); leerDatos(nuevo);
nuevo->sig = *cima; *cima = nuevo; } /************************** Funcion desapilar() *********************/ /* Propósito.........: Elimina elementos de la cima de la pila Parametro.........: Puntero cima de la pila por referencia Devuelve..........: nada */ /********************************************************************/
void desapilar(struct pila **cima) { struct pila *borrar; if (pilaVacia(*cima)) printf("\n La pila está vacia\n"); else {
borrar = *cima; *cima = borrar->sig; free(borrar); } } /************************** Funcion eliminarPila() *********************/ /* Propósito.........: Se encarga de eliminar un elemento por su nombre Parametro.........: Puntero cima de la pila por valor, y el nombre del alumno que queremos que se borre. Devuelve..........: Nada. Llamadas... a la funcion crearPila, apilar, y desapilar */ /********************************************************************/
/************************** Funcion desapilar() *********************/ /* Propósito.........: Muestra por pantalla los elemento s de la pila desde la cima hasta la base Parametro.........: Puntero cima de la pila por valor Devuelve..........: nada */ /********************************************************************/ void visualizar(struct pila *cima) { struct pila *actual; actual = cima; while(actual!=NULL) { printf("Nombre.........%s\n ", actual->nombre); printf("Edad...........%d\n ", actual->edad); actual = actual->sig; } }
/************************** Funcion listarPila() *********************/ /* Propósito.........: Muestra por pantalla los elementos de la pila. Parametro.........: Puntero cima de la pila por valor. Devuelve..........: Nada. Llamada ... a la funcion visualizar() */ /********************************************************************/ void listarPila(struct pila *cima) { if(pilaVacia(cima)) printf("\n\nLa pila esta vacia\n"); else { printf("\nLISTADO DEL ESTADO DE LA PILA\n"); visualizar(cima); } getchar(); }
void liberar(struct pila **cima) { struct pila *actual, *aux; actual = *cima; while(actual!=NULL) { aux = actual->sig; free(actual); actual = aux; } *cima = NULL; }
void verCima(struct pila *cima) { char nom[15]; int ed;
if (pilaVacia(cima)) printf("\n\nLa pila está vacía.\n"); else { top(cima,nom,ed);
printf("\n\nValor de la cima: %s\n",nom); printf("\n\nValor de la cima: %d\n",ed); } } void top(struct pila *cima,char *nom, int *ed) { /* si la pila está vacía no hacemos nada */ if (pilaVacia(cima)) exit (0);
/* proceso normal (pila no vacía) */ strcpy(*nom, cima->nombre); *ed = cima->edad; }
36
« en: Domingo 12 de Diciembre de 2004, 19:46 »
Hola, lamentablemente he estado muy ocupado, y aunque he recibido tu correo lo ciertyo es que no he teniodo tiempo de seguirlo revisando.
Tratare de hacer algo más tarde pero es incierto a que hora comenzare a hacerlo debido a algunas cosas que tengo que hacer.
en este momento aca enm colombia son las 13:00. Gracias de todos modos, entiendo no sabia qu eres colombiano. Aqui son las 8 de la tarde, cuando puedas las miras, luego veo si me has contestado. Gracias Y perdon por las molestias. Saludos desde ESpaña
37
« en: Sábado 11 de Diciembre de 2004, 22:39 »
ok, aunque a mi me funcinaba bien.
No se si ya has arreglado lo que te comente, y por favor adjuntame el codigo comlpeto en un archivo .zip- Gracias voy a cenar, ahora despues vuelvo.
38
« en: Sábado 11 de Diciembre de 2004, 21:31 »
hOLA.
he revisado un poco Y paso a paso en orden de ejecucion y de opciones y tienes varios inconvenientes asi que solo te dire hasta donde encontre los primeros fallos graves, corrigelos, busca mas errores y si tienes dudas pregunta de nuevo, pero eso si te pido el favor de que antes de preguntar le hagas seguimiento a tu programa ejecutandolo paso a paso ya que las cosas que encontre las encontre haciendolo asi y eso lo hubieses podido hacer tu misma.
El fflush(stdin) no siempre funciona como quisieramos asi que cada vez que quieras capturar algun dato trata de hacer algo como esto, pero no el fflush(stdin)
Ahora si te fijas en este pedacito de codigo:
case 1: /*Insercion al principio*/ introducirDatos(nombre, ape1, ape2, edad); /*comprobamos si existe la persona*/ existe = buscarPersona(cabeza, ape1); if(!existe) //existe == NULL { do { insertarPrincipio(&cabeza, nombre,ape1, ape2,edad); printf("\n Persona insertada"); printf("\n\n┐Desea introducir otra persona? (S/N): "); gets(NULL);//JUANK scanf("%c", &resp); }while(resp == 's' || resp =='S'); mostrarLista(cabeza); getchar(); }
Preguntas que si se desea insertar mas personas .... pero si seleccionas que si volvera a realizar la funcion insertarPrincipio(...) sin antes haber realizado la funcion introducirDatos(...) lo cual hara que vuelva a insertar el mismo nodo.
Espero te sea de ayuda y si tienes más dudas solo pregunta. Gracias verás ya he modificado la funcion void introducirDatos(struct lista *dat) { printf("\nIntroduzca el nombre => "); gets(dat->nombre); fflush(stdin); printf("\nIntroduzca el apellido1 => "); gets(dat->ape1); fflush(stdin); printf("\nIntroduzca el apellido2 => "); gets(dat->ape2); fflush(stdin); printf("\nIntroduzca la edad => "); scanf("%d",&dat->edad); fflush(stdin); dat->sig = NULL; } y me salen mejor, ya si me coge la edad. Mi problema ahora, es que inserta por apellido, ordenador, pero tengo echa una funcion para ordenar lista, y no se donde ponerla, ademas que no se proque siempre da error de ejecucion de memoria. Te pongo aqui las dos funciones insertarporApellido1, y la nueva de ordenarLista. void insertarPorApellido1(struct lista **cabeza,char *nombre, char *ape1, char *ape2, int edad) { struct lista *aux=NULL; //almacena elemento posterior al que se inserta struct lista *ant =NULL; //almacena elemento anterior al que se inserta struct lista *nuevo = NULL; //almacena el nuevo elemento int encontrado = 0; //Se reserva espacio para el nuevo elemento nuevo = nuevoElemento(); introducirDatos(nuevo); if(listaVacia(*cabeza) == SI) //comprueba si la lista esta vacia { *cabeza = nuevo; //la cabeza será el nuevo elemento nuevo->sig = NULL; } else{ aux = *cabeza; if(strcmp(ape1, aux->ape1)<0 ) //nuevo elemento se inserta delante de //la cabeza { nuevo->sig=*cabeza; //El siguiente de nuevo será la cabeza *cabeza=nuevo; } else { ant = *cabeza; aux=(*cabeza)->sig;//buscamos la posicion de insercion, se interrumpe cuando se //encuentra el primer elemento mayor que n o cuando se llega al final de la lista { while(aux!=NULL && encontrado == 0) { if( strcmp( ape1, aux->ape1 ) <0 ) //hemos encontrado la posicion de insercion { ant->sig=nuevo; nuevo->sig=aux; encontrado = 1; break; } else //se actualizan los valores de ayx y ant { ant=aux; aux=aux->sig; } } if(aux == NULL){ //el elemento se inserta al final ant->sig = nuevo; nuevo->sig = aux; } } } } } int listaOrdenadaApellido(struct lista *cabeza) { while(cabeza->sig!=NULL) { if (strcmp(cabeza->ape1,cabeza->sig->ape1)>0) { printf ("La lista no está ordenada por apellido1\n"); exit (1); } cabeza=cabeza->sig; } return 0; } Voy a cenar, ahora despues de cenar, vere si mehas contestado, gracias por tu ayuda. Slaudos Mercedes.
39
« en: Sábado 11 de Diciembre de 2004, 18:59 »
ok, ya lo estoy revisando.... Gracias espero tu respuesta, un saludo.
40
« en: Sábado 11 de Diciembre de 2004, 17:28 »
por favor anexa el codigo completo y cuantame que has logrado revisar del problema y donde crees que sta el error. hola Juank, ya he anezado el codigo, si no entiendes algo, dimelo, por favor, pero respondeme, q es urgente para mi, gracias. Saludos Mercedes
41
« en: Viernes 10 de Diciembre de 2004, 22:28 »
por favor anexa el codigo completo y cuantame que has logrado revisar del problema y donde crees que sta el error. Lo primero rgracias por responderme, eeres el unico, te voy a adjuntar el codigo que llevo hecho hasta ahora. /*listas.c*/ #include "listas.h" /* Programa principal */ main() { struct lista *existe; struct lista *cabeza; char nombre[15]; char ape1[20]; char ape2[20]; int edad = 0; int opcion; char resp; char fichero[35]; /* opciones */ do{ crearLista(&cabeza); do{ cogerDatosTexto(&cabeza); printf("\n La lista enlazada es asi: \n\n"); mostrarLista(cabeza); presentaMenu(); printf("Introduce una opcion: "); scanf("%d",&opcion); fflush(stdin); }while(opcion <0 || opcion > 11); switch(opcion) { case 1: /*Insercion al principio*/ introducirDatos(nombre, ape1, ape2, edad); /*comprobamos si existe la persona*/ existe = buscarPersona(cabeza, ape1); if(!existe) //existe == NULL { do{ insertarPrincipio(&cabeza, nombre,ape1, ape2,edad); printf("\n Persona insertada"); printf("\n\n¿Desea introducir otra persona? (S/N): "); scanf("%c", &resp); }while(resp == 's' || resp =='S'); mostrarLista(cabeza); getchar(); } else printf("\n Esta persona ya existe"); visualizarNodo(existe); getchar(); getchar(); break; case 2: /*Insercion al final*/ introducirDatos(nombre, ape1, ape2, edad); /*comprobamos si existe la persona*/ existe = buscarPersona(cabeza, ape1); if(!existe) //si no existe { do{ insertarFinal(&cabeza, nombre, ape1, ape2, edad); printf("\n Persona insertada"); printf("\n\n¿Desea introducir otra persona? (S/N): "); scanf("%c", &resp); system("clear"); }while(resp == 's' || resp =='S'); mostrarLista(cabeza); } else printf("\n Esta persona ya existe"); visualizarNodo(existe); getchar(); getchar(); break; case 3: /*Insertar por apellido1*/ introducirDatos(nombre, ape1, ape2, edad); /*comprobamos si existe la persona*/ existe = buscarPersona(cabeza, ape1); if(!existe) { do { insertarPorApellido1(&cabeza, nombre, ape1, ape2, edad); printf("\n\n¿Desea introducir otra persona? (S/N): "); scanf("%c", &resp); getchar(); }while(resp == 's' || resp =='S'); mostrarLista(cabeza); getchar(); getchar(); } else printf("\n Esta persona ya existe"); visualizarNodo(existe); getchar(); getchar(); break; case 4: /*Borrar por apellido1*/ printf("\n Introduzca el apellido a borrar: "); gets(ape1); //comprobamos si la persona existe existe = buscarPersona(cabeza, ape1); if(existe) //si existe { borrarPorApellido1(&cabeza, ape1); printf("\n Elemento borrado"); getchar(); mostrarLista(cabeza); } else printf("\n Elemento no encontrado\n"); getchar(); getchar(); break; case 5: /* Visualizar por apellido1 */ printf("Introduzca el apellido de la persona a buscar => "); gets(ape1); existe = buscarPersona(cabeza,ape1); if (!existe){ printf("\nEl apellido no existe\n"); } else { visualizarPorApellido1(cabeza,ape1); getchar(); getchar(); } break; case 6: visualizarCabezaCola(cabeza); getchar(); break; case 7: visualizarColaCabeza(cabeza); getchar(); case 10: printf("Introduzca el nombre del fichero: "); scanf("%s", fichero); fflush(stdin); grabarLista(cabeza, fichero); break; } //cierre del switch }while (opcion); /* opcion != 0 */ } /************************ Función crear() ***************************/ /* Propósito..: Crea la lista. Parámetros.: Puntero cabeza de lista por referencia. Devuelve...: Nada. */ /********************************************************************/ void crearLista(struct lista **cabeza) { *cabeza = NULL; } void cogerDatosTexto(struct lista **cabeza) { FILE *p; //declaro un puntero al fichero struct lista *actual; struct lista *aux; char nombre[15]; char ape1[20]; char ape2[20]; int edad = 0; if((p=fopen("listas.txt","r")) == NULL) // abro para lectura { printf("\n Error al abrir el archivo\n"); exit (1); } *cabeza=NULL; while(fscanf(p,"%s %s %s %d",nombre,ape1,ape2,&edad)!=EOF) { //reservamos espacio para el nuevo elemento actual = nuevoElemento(); strcpy(actual->nombre,nombre); strcpy(actual->ape1,ape1); strcpy(actual->ape2,ape2); actual->edad=edad; actual->sig = NULL; if(*cabeza ==NULL) *cabeza = actual; else aux->sig = actual; fflush(stdin); aux = actual; } fclose(p); } void presentaMenu(void) { printf("EJEMPLO DE LISTA ENLAZADA\n"); printf("-------------------------\n\n"); printf("1.- Insertar al Principio\n"); printf("2.- Insertar al Final\n"); printf("3.- Insertar por apellido1\n"); printf("4.- Borrar por apellido 1\n"); printf("5.- Visualizar por apellido1 \n"); printf("6.- Visualizar cabeza cola\n"); printf("7.- Visualizar cola cabeza\n"); printf("8.- Liberar Memoria\n"); printf("9.- Liberar Memoria Recursivo\n"); printf("10.- Grabar Lista\n"); printf("0.- TERMINAR.\n\n\n"); } /******************************Funcion nuevoElemento****************/ /*Funcion que sirve para reservar espacio para un nuevo elemento*/ struct lista* nuevoElemento() { struct lista *a; a = (struct lista*)malloc(sizeof(struct lista)); return a; } /************************ Función vacia() ***************************/ /* Propósito: Comprueba si la lista está vacía. Parámetros: Puntero cabeza de lista por valor. Devuelve: 1 si la lista está vacía. 0 si no lo está. */ /********************************************************************/ int listaVacia(struct lista *cabeza) { if (cabeza==NULL) return SI; /* verdad */ else return NO; /* falso */ } /*Funcion que sirve para insertar los datos al principio de la lista*/ void insertarPrincipio(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad) { struct lista *nuevo; /*reservamos espacio para el nuevo elemento*/ nuevo = nuevoElemento(); strcpy(nuevo->nombre, nombre); strcpy(nuevo->ape1, ape1); strcpy(nuevo->ape2, ape2); nuevo->edad = edad; nuevo->sig = *cabeza; *cabeza = nuevo; } //FUNCION BUSCAR PERSONA struct lista* buscarPersona(struct lista *cabeza, char *ape1) { struct lista *existe; existe = cabeza; if (listaVacia(cabeza) == SI) { printf("\n La lista esta vacia.\n"); } //se recorre la lista hasta encontar el elemento o hasta llegar al final while(existe!=NULL) { if(strcmp(existe->ape1, ape1)== 0) { return existe; } else{ existe= existe->sig; } } return (NULL); } //Funcion que sirve para insertar los datos al final de la lista void insertarFinal(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad) { struct lista *nuevo = NULL; struct lista *aux = NULL; //se reserva espacio para el nuevo elemento nuevo = nuevoElemento(); strcpy(nuevo->nombre, nombre); strcpy(nuevo->ape1, ape1); strcpy(nuevo->ape2, ape2); nuevo->edad = edad; nuevo->sig = NULL; if(listaVacia(*cabeza) == SI) //la lista esta vacia, el nuevo sera la cabeza *cabeza = nuevo; else //se localiza el ultimo elemento para enlazarlo al nuevo { aux = *cabeza; while(aux->sig != NULL) { aux = aux->sig; } aux->sig = nuevo; //cuando recorra la lista aux->sig apunta a nuevo } } void introducirDatos(char *nombre, char *ape1, char *ape2, int edad) { printf("\n Introduzca el nombre => "); gets(nombre); fflush(stdin); printf("\nIntroduzca el apellido1 => "); gets(ape1); fflush(stdin); printf("\nIntroduzca el apellido2 => "); gets(ape2); fflush(stdin); printf("\nIntroduzca la edad => "); scanf("%d",&edad); fflush(stdin); } void mostrarLista(struct lista *cabeza) { struct lista *actual; actual = cabeza; while(actual!=NULL) { printf("%s %s %s %d \n",actual->nombre,actual->ape1,actual->ape2,actual->edad); actual = actual->sig; } printf("\n"); } void visualizarNodo(struct lista *nodo) { printf("\n Nombre.....: %s" "\n Apellido1......: %s" "\n Apellido2.....: %s" "\n Edad.....: %d \n",nodo->nombre,nodo->ape1,nodo->ape2,nodo->edad); } //Esta funcion sirve para insertar por orden alfabetico el primer apellido void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad) { struct lista *aux=NULL; //almacena elemento posterior al que se inserta struct lista *ant =NULL; //almacena elemento anterior al que se inserta struct lista *nuevo = NULL; //almacena el nuevo elemento int encontrado = 0; //Se reserva espacio para el nuevo elemento nuevo = nuevoElemento(); strcpy(nuevo->nombre, nombre); strcpy(nuevo->ape1, ape1); strcpy(nuevo->ape2, ape2); nuevo->edad = edad; if(listaVacia(*cabeza) == SI) //comprueba si la lista esta vacia { *cabeza = nuevo; //la cabeza será el nuevo elemento nuevo->sig = NULL; } else{ aux = *cabeza; if(strcmp(aux->ape1, ape1)>0 ) //nuevo elemento se inserta delante de //la cabeza { nuevo->sig=*cabeza; //El siguiente de nuevo será la cabeza *cabeza=nuevo; } else //buscamos la posicion de insercion, se interrumpe cuando se //encuentra el primer elemento mayor que n o cuando se llega al final de la lista { while(aux!=NULL && encontrado == 0) { if( strcmp( aux->ape1, ape1 ) >=0 ) //hemos encontrado la posicion de insercion { encontrado = 1; break; } else //se actualizan los valores de ayx y ant { ant=aux; aux=aux->sig; } } if(aux == NULL){ //el elemento se inserta al final ant->sig = nuevo; nuevo->sig = aux; } } } } void borrarPorApellido1(struct lista **cabeza, char *ape1) { struct lista *ant = NULL; //almacena el elemento anterior al que se borra struct lista *borrar; //almacena el elemento a borrar if (listaVacia(*cabeza) == SI) { printf("\n La lista esta vacia.\n"); exit (0); } else if (strcmp(ape1, (*cabeza)->ape1) == 0 ) //el elemento a borrar es cabeza { borrar = *cabeza; *cabeza = (*cabeza)->sig; free(borrar); //se libera la antigua cabeza } else { ant = *cabeza; borrar = (*cabeza) -> sig; } while(borrar != NULL) { if(!strcmp(ape1, borrar->ape1)) break; else{ //si son distintos ant = borrar; borrar = borrar->sig; } } //el elemento a borrar no es la cabeza if (borrar != NULL) //Si borrar es distinto de NULL { //si el elemento a borrar no es la cabeza ant->sig = borrar->sig;; free(borrar); } printf("\n\n El apellido ha sido borrado\n"); fflush(stdin); getchar(); } //Visualizar por Apellido1 void visualizarPorApellido1(struct lista *cabeza,char *ape1) { struct lista *aux = NULL; aux = cabeza; while( aux!= NULL ) { if( strcmp(aux->ape1, ape1)==0 ) { visualizarNodo(aux); aux = aux->sig; } else { aux=aux->sig; } } } void visualizarCabezaCola(struct lista *cabeza) { if (listaVacia(cabeza) == SI) { printf("\n La lista esta vacia\n"); } else{ printf("\n Nombre.........: %s", cabeza->nombre); printf("\n Apellido1......: %s", cabeza->ape1); printf("\n Apellido2......: %s", cabeza->ape2); printf("\n Edad...........: %d\n", cabeza->edad); //visualizaCabezaCola(cabeza->sig); getchar(); fflush(stdin); } } void visualizarColaCabeza(struct lista *cabeza) { if (listaVacia(cabeza) == SI) { printf("\n La lista esta vacia\n"); } else{ visualizarColaCabeza(cabeza->sig); printf("\n Nombre.........: %s", cabeza-> nombre); printf("\n Apellido1......: %s", cabeza->ape1); printf("\n Apellido2......: %s" ,cabeza->ape2); printf("\n Edad...........: %d\n", cabeza->edad); getchar(); fflush(stdin); } } //grabar lista void grabarLista(struct lista *cabeza, char *fichero) { FILE *f; struct lista *actual = cabeza; if (listaVacia(cabeza) ==SI) { printf("\n La lista esta vacia\n"); } f=fopen(fichero, "wb"); while(actual!=NULL){ fwrite(actual, sizeof(struct lista), 1, f); actual = actual->sig; } fclose(f); } /*listas.h*/ /*Declaracion de estructuras y funciones*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define SI 1 #define NO 0 struct lista { char nombre[15]; char ape1[20]; char ape2[20]; int edad; struct lista *sig; }; struct lista *nuevo; void cogerDatosTexto(struct lista **cabeza); void introducirDatos(char *nombre, char *ape1, char *ape2, int edad); struct lista* nuevoElemento(); void presentaMenu(void); void crearLista(struct lista **cabeza); int listaVacia(struct lista *cabeza); void insertarPrincipio(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void visualizarNodo(struct lista *nodo); void mostrarLista(struct lista *cabeza); void insertarFinal(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void visualizarPorApellido1(struct lista *cabeza,char *ape1); struct lista* buscarPersona(struct lista *cabeza, char *ape1); void visualizarCabezaCola(struct lista *cabeza); void visualizarColaCabeza(struct lista *cabeza); void liberarMemoria(struct lista **cabeza); void liberarMemoriaRecursivo(struct lista **cabeza); void grabarLista(struct lista *cabeza, char *fichero); void borrarPorApellido1(struct lista **cabeza, char *ape1);
Yo de momento, lo que veo q aunque funcionen bien las de insertarPrincipio, y insertarFinal, la lista sale, pero luego da error de ejecución de memoria. Luego en inserttarApellido1, no sé si es que tengo que hcer alguna funcion de ordenar lista, porque si no, no tiene sentido, y la de borrar Apellido1, no me sale bien la ejecucion, lo pide, pero no lo borra, da errores luego al mostrar la lista. Gracias.
42
« en: Viernes 10 de Diciembre de 2004, 20:46 »
hola, creo que habia un nuevo mensaje tuyo pero se borro por los problemas del lunes, podrias volverlo a postear por favor? Hola Juank, he visto tu mensaje, y te digo que por favor, si puedes ayudarme leas de nuevo lo que he colgado en el foro, necesito ayuda para dos de las funciones, asi que solo he puesto el codigo necesario,para las mismas.De todos modos, si tienes interes en ayudarme, te daré mi correo. Es que esto es muy importante, tengo examen el lunes, y me juego la nota. gRACIAS
43
« en: Lunes 6 de Diciembre de 2004, 20:05 »
Hola a todos, estoy desesperada, tengo que ahcer una practica de listas, y he optado por ir haciendo poco a poco, función a función, resulta que me compila, pero me da un error de ejecución en memoria, en las funciones InsertarporApellido1 y borrarporApellido1, asi que voy a a poner el enunciado de la práctica, y el código que yo he hecho, por si alguien puede ayudarme, gracias.Solo he puesto el codigo necesario para que funcionen estas funciones. El codigo es este: adjunto el de listas. h y listas. C #include "listas.h" /* Programa principal */ main() { struct lista *existe; struct lista *cabeza; char nombre[15]; char ape1[20]; char ape2[20]; int edad = 0; int opcion; char resp; /* opciones */ do{ crearLista(&cabeza); do{ cogerDatosTexto(&cabeza); printf("\n La lista enlazada es asi: \n\n"); mostrarLista(cabeza); presentaMenu(); printf("Introduce una opcion: "); scanf("%d",&opcion); fflush(stdin); }while(opcion <0 || opcion > 11); switch(opcion) { case 3: /*Insertar por apellido1*/ introducirDatos(nombre, ape1, ape2, edad); /*comprobamos si existe la persona*/ existe = buscarPersona(cabeza, ape1); if(!existe) { do { insertarPorApellido1(&cabeza, nombre, ape1, ape2, edad); printf("\n\n¿Desea introducir otra persona? (S/N): "); scanf("%c", &resp); system("clear"); }while(resp == 's' || resp =='S'); mostrarLista(cabeza); getchar(); } else printf("\n Esta persona ya existe"); visualizarNodo(existe); getchar(); getchar(); break; case 4: /*Borrar por apellido1*/ printf("\n Introduzca el apellido a borrar: "); gets(ape1); //comprobamos si la persona existe existe = buscarPersona(cabeza, ape1); if(existe) //si existe { borrarPorApellido1(&cabeza, ape1); printf("\n Elemento borrado"); mostrarLista(cabeza); } else printf("\n Elemento no encontrado\n"); getchar(); getchar(); break; } //cierre del switch }while (opcion); /* opcion != 0 */ } /************************ Función crear() ***************************/ /* Propósito..: Crea la lista. Parámetros.: Puntero cabeza de lista por referencia. Devuelve...: Nada. */ /********************************************************************/ void crearLista(struct lista **cabeza) { *cabeza = NULL; } void presentaMenu(void) { printf("EJEMPLO DE LISTA ENLAZADA\n"); printf("-------------------------\n\n"); printf("1.- Insertar al Principio\n"); printf("2.- Insertar al Final\n"); printf("3.- Insertar por apellido1\n"); printf("4.- Borrar por apellido 1\n"); printf("5.- Visualizar por apellido1 \n"); printf("6.- Visualizar cabeza cola\n"); printf("7.- Visualizar cola cabeza\n"); printf("8.- Liberar Memoria\n"); printf("9.- Liberar Memoria Recursivo\n"); printf("10.- Grabar Lista\n"); printf("0.- TERMINAR.\n\n\n"); } /******************************Funcion nuevoElemento****************/ /*Funcion que sirve para reservar espacio para un nuevo elemento*/ struct lista* nuevoElemento() { struct lista *a; a = (struct lista*)malloc(sizeof(struct lista)); return a; } /************************ Función vacia() ***************************/ /* Propósito: Comprueba si la lista está vacía. Parámetros: Puntero cabeza de lista por valor. Devuelve: 1 si la lista está vacía. 0 si no lo está. */ /********************************************************************/ int listaVacia(struct lista *cabeza) { if (cabeza==NULL) return SI; /* verdad */ else return NO; /* falso */ } //FUNCION BUSCAR PERSONA struct lista* buscarPersona(struct lista *cabeza, char *ape1) { struct lista *existe; existe = cabeza; if (listaVacia(cabeza) == SI) { printf("\n La lista esta vacia.\n"); } //se recorre la lista hasta encontar el elemento o hasta llegar al final while(existe!=NULL) { if(strcmp(existe->ape1, ape1)== 0) { return existe; } else{ existe= existe->sig; } } return (NULL); } void introducirDatos(char *nombre, char *ape1, char *ape2, int edad) { printf("\n Introduzca el nombre => "); gets(nombre); fflush(stdin); printf("\nIntroduzca el apellido1 => "); gets(ape1); fflush(stdin); printf("\nIntroduzca el apellido2 => "); gets(ape2); fflush(stdin); printf("\nIntroduzca la edad => "); scanf("%d",&edad); fflush(stdin); } void mostrarLista(struct lista *cabeza) { struct lista *actual; actual = cabeza; while(actual!=NULL) { printf("%s %s %s %d \n",actual->nombre,actual->ape1,actual->ape2,actual->edad); actual = actual->sig; } printf("\n"); } void visualizarNodo(struct lista *nodo) { printf("\n Nombre.....: %s" "\n Apellido1......: %s" "\n Apellido2.....: %s" "\n Edad.....: %d \n",nodo->nombre,nodo->ape1,nodo->ape2,nodo->edad); } //Esta funcion sirve para insertar por orden alfabetico el primer apellido void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad) { struct lista *aux=NULL; //almacena elemento posterior al que se inserta struct lista *ant =NULL; //almacena elemento anterior al que se inserta struct lista *nuevo = NULL; //almacena el nuevo elemento int encontrado = 0; //Se reserva espacio para el nuevo elemento nuevo = nuevoElemento(); strcpy(nuevo->nombre, nombre); strcpy(nuevo->ape1, ape1); strcpy(nuevo->ape2, ape2); nuevo->edad = edad; if(listaVacia(*cabeza) == SI) //comprueba si la lista esta vacia { *cabeza = nuevo; //la cabeza será el nuevo elemento nuevo->sig = NULL; } else{ aux = *cabeza; if(strcmp(aux->ape1, ape1)>0 ) //nuevo elemento se inserta delante de //la cabeza { nuevo->sig=*cabeza; //El siguiente de nuevo será la cabeza *cabeza=nuevo; } else //buscamos la posicion de insercion, se interrumpe cuando se //encuentra el primer elemento mayor que n o cuando se llega al final de la lista { while(aux!=NULL && encontrado == 0) { if( strcmp( aux->ape1, ape1 ) >=0 ) //hemos encontrado la posicion de insercion { encontrado = 1; break; } else //se actualizan los valores de ayx y ant { ant=aux; aux=aux->sig; } } if(aux == NULL){ //el elemento se inserta al final ant->sig = nuevo; nuevo->sig = aux; } } } } void borrarPorApellido1(struct lista **cabeza, char *ape1) { struct lista *ant = NULL; //almacena el elemento anterior al que se borra struct lista *borrar; //almacena el elemento a borrar borrar = *cabeza; if (listaVacia(*cabeza) == SI) { printf("\n La lista esta vacia.\n"); exit (0); } while(borrar != NULL) { if(!strcmp(ape1, borrar->ape1)) break; else{ //si son distintos ant = borrar; borrar = borrar->sig; } } if (strcmp(ape1, (*cabeza)->ape1) == 0 ) //el elemento a borrar es cabeza { *cabeza = borrar->sig; free(borrar); //se libera la antigua cabeza } //el elemento a borrar no es la cabeza if (borrar != NULL) //Si borrar es distinto de NULL { if(borrar == *cabeza) { *cabeza = borrar->sig; free(borrar); } else //si el elemento a borrar no es la cabeza { ant->sig = borrar->sig;; free(borrar); } } printf("\n\n El apellido ha sido borrado\n"); fflush(stdin); getchar(); } /*listas.h*/ /*Declaracion de estructuras y funciones*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define SI 1 #define NO 0 struct lista { char nombre[15]; char ape1[15]; char ape2[15]; int edad; struct lista *sig; }; struct lista *nuevo; void cogerDatosTexto(struct lista **cabeza); void introducirDatos(char *nombre, char *ape1, char *ape2, int edad); struct lista* nuevoElemento(); void presentaMenu(void); void crearLista(struct lista **cabeza); int listaVacia(struct lista *cabeza); void insertarPrincipio(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void visualizarNodo(struct lista *nodo); void mostrarLista(struct lista *cabeza); void insertarFinal(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); visualizarpersona(struct lista *cabeza, char *nombre); void visualizarPorApellido1(struct lista *cabeza,char *ape1); struct lista* buscarPersona(struct lista *cabeza, char *ape1); void visualizarCabezaCola(struct lista *cabeza); void visualizarColaCabeza(struct lista *cabeza); void liberarMemoria(struct lista **cabeza); void liberarMemoriaRecursivo(struct lista **cabeza); void grabarLista(struct lista *cabeza, char *fichero); void borrarPorApellido1(struct lista **cabeza, char *ape1);
Gracias a todos, Si Juank, ve esto, que sepa q solo me refiero a la funcion borrarPorApellido1
44
« en: Sábado 4 de Diciembre de 2004, 18:09 »
Hola ¡¡¡ Cuanto tiempo ¡¡
Pues si parece que estuvo bastante tiempo sin funcionar esto, yo intente entrar varios dias seguidos pero me canse y deje de intentarlo xd. Desde cuando esta esto operativo?
Espero que hayas progresado algo en la practica, yo hice algo pero como no tenia donde mandartelo (por cierto que con tu permiso te agrego al messenger, que siempre viene bien tener una informatica a mano jeje) Creo que consigo meter lo del archivo de texto en la lista pero al mostrarlo por pantalla solo me sale el ultimo registro, a lo mejor es que esta mal la funcion de mostrar, echale tu un vistazo a ver si das con el fallo. De todas maneras este puente que tengo mas tiempo libre lo mirare de nuevo que ya ni me acuerdo lo que hice.
fwrite es para grabar los registros en un archivo .DAT asi que no te sirve para meter nada en las listas, para meterlos en una lista tendras que crear tu la funcion ir leyendo del archivo de texto y meter cada registro en un nodo de la lista
Este es el codigo que hice:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct lista { char nombre[15]; char ape1[15]; char ape2[15]; int edad; struct lista *enlace; }; typedef struct lista LISTA; int menu(void); void cogerDatosTexto(LISTA *ptr); void mostrarLista(LISTA *ptr); void main() { LISTA *principal; int eleccion; do { eleccion =menu(); switch (eleccion) { case 1: principal= (LISTA *) malloc(sizeof(LISTA)); cogerDatosTexto(principal); continue; case 2: printf("\n"); mostrarLista(principal); continue; default: printf("fin de las operaciones\n"); } }while(eleccion !=3); } int menu(void) { int eleccion; do { printf("\n menu principal:\n"); printf("1.-crear la lista enlazada\n"); printf("2.-mostrar lista\n"); printf("3.-fin\n"); printf("por favor introduzca su elecci¢n (1,2,3)->\n"); scanf("%d",&eleccion); if (eleccion<1 || eleccion>3) printf("\n ERROR - porfavor , intentelo de nuevo \n"); } while(eleccion<1 || eleccion>3); printf("\n"); return(eleccion); } void cogerDatosTexto(LISTA *ptr) { char nom[15]; char ap1[15]; char ap2[15]; int ed; FILE *puntero; puntero=fopen("TEXTO.TXT","r"); while(fscanf(puntero,"%s %s %s %i",nom,ap1,ap2,&ed)!=EOF) { strcpy(ptr->nombre,nom); strcpy(ptr->ape1,ap1); strcpy(ptr->ape2,ap2); ptr->edad=ed; ptr->enlace=(LISTA*)malloc(sizeof(LISTA)); fflush(stdin); } ptr->enlace=NULL; fclose(puntero); } void mostrarLista(LISTA *ptr) { if(ptr!=NULL) { printf("%s %s %s %i \n",ptr->nombre,ptr->ape1,ptr->ape2,ptr->edad); } return; }
Para que funcione tienes que crear el archivo de texto TEXTO.txt en el directorio raiz, que si no da error
Espero que te sirva de ayuda, si logro que funcione del todo te aviso
Un saludito Gracias Diodo yo tambien me alegro de tener noticias tuyas, si que creo que tienes razón para lo de grabar lista, asi que voy a probar lo que me has escrito, Ojalá consigamos que funcione bien la practica, jejej. Gracias de nuevo, saludos.
45
« en: Lunes 29 de Noviembre de 2004, 19:01 »
Hola Aqui estoy ¡¡
Empecemos, ....., lo de texto o binario solamente has de preocuparte a la hora de grabar o cargar archivos, es decir, segun lo que te piden debes cargarlo de uno de texto y grabarlo en uno binario. fwrite y fread creo que era para el caso de guardar o cargar estructuras enteras en un archivo, el caso que te piden yo creo que es el de un archivo de texto en el que cada dato esta separado por un espacio y cada registro por un salto de linea
ejemplo
Jose Hernando Gutierrez 45 Alfonso Hurtado Sanchez 22 ........... etc
Para poder extraer los datos del archivo de texto he usado fprintf, aqui tienes el codigo, solo me ha dado tiempo a cogerlos e imprimirlos por pantalla, pero seria facil de meter en la lista, mañana nos miramos eso
#include <stdio.h> void main(void) { // variables para meter temporalmente los datos que leemos del fichero char nombre[15]; char ape1[15]; char ape2[15]; int edad; FILE *puntero; // declaro un puntero al fichero puntero=fopen("TEXTO.TXT","r"); // asocio ese puntero al archivo y le // digo que lo voy a leer /* ahora hacemos un bucle para ir recogiendo cada linea(cada registro) con la funcion fscanf, lo que hace fscanf es leer datos segun le indica el entrecomillado y los mete en las variables que le digamos, cuando acaba con el entrecomillado salta a la siguiente linea.El bucle terminara si se llega al final del archivo EOF*/ while(fscanf(puntero,"%s %s %s %i",nombre,ape1,ape2,&edad)!=EOF) { printf("%s %s %s %i\n",nombre,ape1,ape2,edad); } fclose(puntero); // cerramos el acceso al archivo printf("\n\npulsa cualquier tecla para salir"); getchar(); }
Este es todo el codigo, como puedes ver facilillo,bueno habria que hacerle una implementacion de gestion de errores, ya que por ejemplo si no existe el archivo de texto salta un error de ejecucion
Mañana estare un poco liado que tengo practicas , pero si me da tiempo miro como meterlo en una lista enlazada, aunque eso creo que tu lo dominas bastante mejor
Aqui te dejo el ejecutable para que veas que funciona, puedes probar a cambiar el archivo de texto, pero respetando el orden de los datos
Un saludito animo que esto marcha ¡¡¡ Gracias, insisto que eres muy amable, lo de meterlos en la lista, creo que es con fwrite( LISTA, sizeof(struct lista), 1, fp);
No estoy segura pero creo que es así, cuando terminemos esta parte, ya podemos ver si funcionan las funciones no?. Es que eso me preocupa mucho. De nuevo gracias, y te deseo mucha suerte en tus estudios y practicas. Un saludo Mjose Hola DIodo, no sabes cuanto me alegro de poder escribirte, resulta que ha estado este foro caido, unas semanas creo, si quieres te dejo mi correo, por si vuelve a caerse el foro, es matrigca@hotmail.com, es que como nos iba tan bien terminando la practica de listas. Asi será mejor. De nuevo, gracias, espero q me contestes pronto, saludos
46
« en: Jueves 18 de Noviembre de 2004, 12:26 »
Hola Aqui estoy ¡¡
Empecemos, ....., lo de texto o binario solamente has de preocuparte a la hora de grabar o cargar archivos, es decir, segun lo que te piden debes cargarlo de uno de texto y grabarlo en uno binario. fwrite y fread creo que era para el caso de guardar o cargar estructuras enteras en un archivo, el caso que te piden yo creo que es el de un archivo de texto en el que cada dato esta separado por un espacio y cada registro por un salto de linea
ejemplo
Jose Hernando Gutierrez 45 Alfonso Hurtado Sanchez 22 ........... etc
Para poder extraer los datos del archivo de texto he usado fprintf, aqui tienes el codigo, solo me ha dado tiempo a cogerlos e imprimirlos por pantalla, pero seria facil de meter en la lista, mañana nos miramos eso
#include <stdio.h> void main(void) { // variables para meter temporalmente los datos que leemos del fichero char nombre[15]; char ape1[15]; char ape2[15]; int edad; FILE *puntero; // declaro un puntero al fichero puntero=fopen("TEXTO.TXT","r"); // asocio ese puntero al archivo y le // digo que lo voy a leer /* ahora hacemos un bucle para ir recogiendo cada linea(cada registro) con la funcion fscanf, lo que hace fscanf es leer datos segun le indica el entrecomillado y los mete en las variables que le digamos, cuando acaba con el entrecomillado salta a la siguiente linea.El bucle terminara si se llega al final del archivo EOF*/ while(fscanf(puntero,"%s %s %s %i",nombre,ape1,ape2,&edad)!=EOF) { printf("%s %s %s %i\n",nombre,ape1,ape2,edad); } fclose(puntero); // cerramos el acceso al archivo printf("\n\npulsa cualquier tecla para salir"); getchar(); }
Este es todo el codigo, como puedes ver facilillo,bueno habria que hacerle una implementacion de gestion de errores, ya que por ejemplo si no existe el archivo de texto salta un error de ejecucion
Mañana estare un poco liado que tengo practicas , pero si me da tiempo miro como meterlo en una lista enlazada, aunque eso creo que tu lo dominas bastante mejor
Aqui te dejo el ejecutable para que veas que funciona, puedes probar a cambiar el archivo de texto, pero respetando el orden de los datos
Un saludito animo que esto marcha ¡¡¡ Gracias, insisto que eres muy amable, lo de meterlos en la lista, creo que es con fwrite( LISTA, sizeof(struct lista), 1, fp); No estoy segura pero creo que es así, cuando terminemos esta parte, ya podemos ver si funcionan las funciones no?. Es que eso me preocupa mucho. De nuevo gracias, y te deseo mucha suerte en tus estudios y practicas. Un saludo Mjose
47
« en: Martes 16 de Noviembre de 2004, 12:24 »
Uhm... Por que no buscas en Google?? Yo lo he buscado tal cual ("pvm") y me han salido mas de 5.000 resultados en Español. Gracias por la molestia, pero eso ya lo he hecho, yo necesito alguien que sepa ese lenguaje, para orientarme de que puedo hacer la practica. Entiendes?. Lo de buscar en el google, ya lo hice. De todos modos, gracias.
48
« en: Martes 16 de Noviembre de 2004, 12:21 »
Hola ¡¡
Por favor, ya lei lo que me pusiste, me puedes echar una mano, es que no se por dodne empezar, entonces que tengo que quitar todas las funciones, no están bien, además de estar mal porque falta la funcion grabar lista, el resto del codigo, esta mal. Por favor, ayudame, que estoy muy apurada. Gracias Saludos
Tranquilidad ¡¡ ante todo tranquilidad, no te pongas nerviosa que es lo peor que puedes hacer,las cosas poco a poco acaban saliendo, y si no a golpes jeje a veces tambien salen
Voy a intentar echarte una mano (con el trabajo no pienses mal ehh ) , pero ten en cuenta que yo tambien estudio (poco pero estudio) y no dispongo de mucho tiempo libre.
Bueno, lo primero de todo es empezar por el principio, vaya chorradas que digo, queria decir que lo primero de todo seria recuperar los datos del archivo de texto e introducirlos en la lista.Supongo que tendras que usar fopen.......fclose, etc si no es asi dime que librerias usas para manejar archivos.De momento supongo que lo haces con la de stdlib.h (creo que era esa donde estaban), ahi o en stdio.h. Una vez hecho esto hay que implementar las funciones de manejo de la lista
Mañana en el metro me leere todo el lio de manejo de archivos para refrescar la memoria, porque ultimamente solo he usado librerias MFC y las cosas se van olvidando. De todas maneras si quieres ir mirando algun libro te recomiendo el de James L.Antonakos "Programacion estructurada en C" que viene muy bien el tema de archivos y tambien viene el tema de listas enlazadas.Si no puedes conseguirlo dejame un email donde mandarte scaneado esos dos temas.
Mañana por la tarde o el miercoles ya te digo si se me ocurrio algo
Un saludito y no te rindas Ante todo lo primero muchisimas gracias, eres un encanto, Me hago cargo de que tambien eres estudiante, y no tienes mucho tiempo. Asi que si alguna vez yo te puedo ayudar en algo, es un placer, porque te estás portando muy bien conmigo. Según lo dicho, lo primero es crear un fichero de texto, por ejemplo listas. txt. No? Y dices que hay que abrirlo y meterlo en la lista, verdad?. Pues yo creo que sería algo así #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> /*Declaramos la lista*/ struct lista { char nombre[15]; char ape1[15]; char ape2[15]; int edad; struct lista *sig; }; struct lista LISTA; FILE *fp; if(fp = fopen("listas.txt", "rb")) == NULL) //abrimos el fichero para lectura{ printf("Error al abrir el archivo"\n"); return 0; else{ fwrite( LISTA, sizeof(struct lista), 1, fp); } Yo creo que es algo asi, primero abro el archivo de texto, listas.txt, auqnue es que pasa una cosa, lo he abierto como binario, para luego poder escribir los datos en la lista, de manera binaria, con el fwrite, que es la forma mejor de pasar toda la estructura entera. Cuando tengas tiempo le echas un vistacillo. Vale?. Pero apesar de eso, mi mayor preocupación, es saber si el resto de funciones de la lista, estan correctas o no. De nuevo, muchas gracia, me has tranquilizado mucho. Suerte en tus estudios. Saludos Mjose
49
« en: Lunes 15 de Noviembre de 2004, 18:12 »
Hola Maria
Lo siento pero creo que no has leido bien el enunciado de la practica
Realiza un programa en C para gestionar los datos incluidos en un fichero de tipo texto mediante una lista simplemente enlazada.
por eso no te cuadra el apartado 11
11. grabarLista: graba los datos de la lista en un fichero binario. El nombre del fichero debe ser tomado del argumento en la línea de comandos. La función tendrá como parámetros la lista y el nombre del fichero.
En mi opinion lo que tienes que hacer es un programa que lea los datos de un archivo de texto "fichero.txt o fichero.dat" que esta en el disco duro de tu ordenador, entonces carga esos datos a una lista para poder operar con ellos, buscar por apellido, borrar registros, etc y finalmente si el usuario quiere ,volver a grabar los datos en un nuevo archivo, y asi los datos no se pierdan al finalizar la aplicacion
Sera mejor que preguntes a quien te haya mandado hacer la practica , si es eso lo que te pedian de todas maneras es una pena por que ya tenias hecho un buen trozo de codigo, aunque las funciones de borrar, buscar,almacenar teseguiran valiendo, con algun retoque
Siento darte "malas" noticias pero tranqui que lo de acceso a archivos es mas facil que lo de las listas enlazadas, para mi gusto, si tienes algun problema con el manejo de archivos dimelo, que no se me da del todo mal.
Un saludo y animo que no hay nada imposible a programar ¡¡ Por favor, ya lei lo que me pusiste, me puedes echar una mano, es que no se por dodne empezar, entonces que tengo que quitar todas las funciones, no están bien, además de estar mal porque falta la funcion grabar lista, el resto del codigo, esta mal. Por favor, ayudame, que estoy muy apurada. Gracias Saludos
50
« en: Domingo 14 de Noviembre de 2004, 21:01 »
Hola Maria
Lo siento pero creo que no has leido bien el enunciado de la practica
Realiza un programa en C para gestionar los datos incluidos en un fichero de tipo texto mediante una lista simplemente enlazada.
por eso no te cuadra el apartado 11
11. grabarLista: graba los datos de la lista en un fichero binario. El nombre del fichero debe ser tomado del argumento en la línea de comandos. La función tendrá como parámetros la lista y el nombre del fichero.
En mi opinion lo que tienes que hacer es un programa que lea los datos de un archivo de texto "fichero.txt o fichero.dat" que esta en el disco duro de tu ordenador, entonces carga esos datos a una lista para poder operar con ellos, buscar por apellido, borrar registros, etc y finalmente si el usuario quiere ,volver a grabar los datos en un nuevo archivo, y asi los datos no se pierdan al finalizar la aplicacion
Sera mejor que preguntes a quien te haya mandado hacer la practica , si es eso lo que te pedian de todas maneras es una pena por que ya tenias hecho un buen trozo de codigo, aunque las funciones de borrar, buscar,almacenar teseguiran valiendo, con algun retoque
Siento darte "malas" noticias pero tranqui que lo de acceso a archivos es mas facil que lo de las listas enlazadas, para mi gusto, si tienes algun problema con el manejo de archivos dimelo, que no se me da del todo mal.
Un saludo y animo que no hay nada imposible a programar ¡¡ Te agradezco tu pronta respuesta, tiens razón no lei bien, el enunciado de la practica. Me podrías ayudar a comenzar a modificarla, es que estoy un poco perdida. Tengo el examen en diciembre, y esta vez tengo que aprobar como sea. Gracias, espero tu respuesta. Saludos
|
|
|