[ Foro de C++ ]

ayuda ejercicio: fichero, lista

02-May-2014 05:29
carlos aguilar
7 Respuestas

ay un archivo llamado data.txt que tiene una lista de personas en el siguiente
formato, hay personas que pueden estar repetidas en la lista:
<ID> <Apellido_paterno> <Primer_nombre> <Edad>
Ej:
1 Bustos Juan 33
2 Perez Diego 45
3 Bustos Raul 30
4 Perez Diego 45

campos separados por un espacio simple).
1- Es necesario hacer un programa llamado calcular-edad que lea el archivo
data.txt y guarde los usuarios en una lista simple sin guardar las personas
repetidas.
2- Este programa debe traversar la lista, calcular el promedio y la desviacion
estandar de la lista de usuarios y las debe imprimir a la pantalla en formato
flotante truncado a dos decimales de precision. Se invoca sin parametros.

aun me cuesta mucho programar pero me gusta y eso me motiva a seguir esforzandome, si me pudieran ayudar con esto podria aprender mejor, muchas gracias


02-May-2014 12:13
Nacho Cabanes (+31)

Has publicado la pregunta dos veces, primero de forma anónima y luego como usuario registrado, supongo que porque después de preguntar has decidido que preferías recibir el aviso cuando tengas respuesta. Si te parece, borraré la pregunta original.

El ejercicio que propones no es trivial, así que vamos a hacerlo paso a paso, para ver qué sabes hacer, y que vayas aprendiendo lo que necesites para el ejercicio y no sepas:

1.- ¿Sabrías leer todo el fichero, de principio a fin, y mostrar cada línea que lees?

2.- ¿Sabrías leer todo el fichero, de principio a fin, guardando los datos en un array sobredimensionado (por ejemplo, con 10 "huecos")?

3.- ¿Sabrías leer todo el fichero, de principio a fin, guardando los datos en un array sobredimensionado (por ejemplo, con 10 "huecos"), pero sólo si cada dato no se ha guardado ya en el array?

4.- ¿Sabrías pedir al usuario 5 nombres y guardarlos en una lista enlazada?

5.- ¿Sabrías pedir al usuario 5 nombres y guardarlos en una lista enlazada, sin duplicados?

6.- ¿Sabrías leer todo el fichero, de principio a fin, guardando los datos en una lista enlazada, sin duplicados?

7.- ¿Sabrías leer todo el fichero, de principio a fin, guardando en una lista enlazada los datos excepto el primer número (el "ID"), sin duplicados?

(...)

Como ves, no es un problema trivial, y requiere que sepas hacer un poco de todo. Por tu propuesta de solución para cada una de las partes, y te voy ayudando con ellas.


03-May-2014 06:17
carlos aguilar

decidi registrarme dado que encontre esta pagina como una ayuda bastante buena y pienso que me ayudara a futuro sobre todo por la carrera que estoy estudiando.

entiendo que la funcion debe abrirse primero el archivo con fopen y que se puede recorrer fgets para asi recorrerlo, mi problema viene al momento de tener que empezar a guardar los datos y saber si esta duplicado, tenia la idea de que era con arreglos pero no se como es para que cree lo suficientes para la cantidad de nombres necesarios, tambien para poder guardar sin duplicar
te agradeceria mucho si me pudieras ayudar


04-May-2014 17:47
Nacho Cabanes (+31)

Efectivamente, abres con "fopen" y lees con "fgets", pero no debes usar ningún arreglo, porque te piden que guardes los datos en una lista enlazada.

Puedes hacer que en una lista enlazada los datos se guarden en el mismo orden en que llegan, o que se ordenen a medida que se insertan. En este caso (lista ordenada) es fácil ignorar los datos en vez de insertarlos, cuando veas que se trata de un dato repetido.

Has trabajado ya con listas enlazadas?


05-May-2014 18:01
carlos aguilar

ya eh trabajado con listas enlazadas lo que no sabria es como podria ignorar los datos si es que el dato esta repetido?


05-May-2014 19:02
Nacho Cabanes (+31)

En una lista ordenada, avanzarías hasta encontrar un dato mayor o igual que el actual, y, en ese punto insertarías.

En una lista ordenada sin duplicados, deberás avanzar hasta encontrar un dato mayor o igual que el actual. Si el que has encontrado es mayor, insertas; si es igual, no haces nada (de modo que ese dato duplicado no se almacena).


06-May-2014 15:01
carlos aguilar

como puedo ver que dato es mayor o igual?


06-May-2014 23:24
Nacho Cabanes (+31)

Los datos exactos dependen de cómo hayas implementado la lista. Una forma de insertar en orden podría ser:

 
if (nodoActual->valor < nuevoValor)
      InsertaLista(&nodoActual->siguiente, nuevoValor);
 


En tu caso, habría que comprobar si es igual, y en ese caso no se hace nada:

 
if (nodoActual->valor == nuevoValor)
      return;
else if (nodoActual->valor < nuevoValor)
      InsertaLista(&nodoActual->siguiente, nuevoValor);
 


Pero insisto, los detalles exacto dependen de cómo estés manipulando la lista.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)