Autor
|
Tema: Ayuda C - Archivos - Ordenamiento (Leído 2,279 veces)
|
juanjuanjuanjuan
Desconectado
Mensajes: 3
|
Buen dia a todos! Estoy aprendiendo a programar en C y llegue a la parte de Archivos. Busque muchisimos tutoriales en google y en youtube pero no termino de entender como empezar a resolver los ejercicios. Supongo que dps de ayudarme a dar los primeros pasos lo voy a poder terminar solo..
El modelo de ejercicio que yo quiero hacer es: En un archivo yo tengo millones de nombres de personas. Necesito guardar los 100 primeros nombres ordenados alfabeticamente en un vector.. el nombre del archivo llega a la funcion como parametro
Habia pensado guardar los primeros 100 de esos millones que me pasan y dps, si encuentra uno anterior, que saque el que estaba y ponga ese, pero no me los terminaria dando alfabeticamente y cre oque quedaria un quilombo... estoy bastante complicado porque no se como arrancar, si me pueden dar una mano se los agradezco muchisimo!
Gracias! Juan
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Yo guardaría todos los nombres, los ordeno y cojo los 100 primeros. ¿C o C++? En C++ eso se hace rápido con con una estructura map: #include <iostream> #include <fstream> #include <map> using namespace std; int main { map<string,bool> Nombres; ifstream archivo("Nombre.txt"); string aux; if (!archivo) throw "Archivo no encontrado..."; while (archivo.good()) { getline(archivo,aux); Nombres[aux] = true; } string Nombres[100]; int i = 0; for (map<string,bool>::iterator it = Nombres.begin(); it != Nombres.end(); it++) { cout<<"Guardando: "<<it->first<<endl; Nombres[i++] = it->first; } return 0; }
|
|
|
En línea
|
|
|
|
juanjuanjuanjuan
Desconectado
Mensajes: 3
|
Gracias por la respuesta!
El lenguaje es C
En el ejercicio me dicen que solamente se puede usar 1 vector, asi que no puedo ordenar los millones de nombres e imprimir los 100 primeros (yo tmb habia pensado eso jajaj)
Creo que la idea es guardar los 100 primeros en orden alfabetico y despues ir "actualizando" esos 100 primeros a medida que se recorre el archivo donde estan los otros millones de nombres, se entiende?
O sea, si fuera con numeros, guarda primero 0 3 y 9, dps encuentra un 8 entoncs borra el 9 y pone el 8, dps encuentra un 1 y corre el 3 al lugar del 8 y pone el 1 en lugar del 3 y asi...
Graciassssss!
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Bueno en C se complica un poco más el asunto al no poder usar contenedores STL. Pero tampoco mucho más.
El algoritmo ya lo tienes tú hecho realmente:
1º Leer los primeros 100 nombres. 2º Lo ordenas alfabeticamente. 3º ¿No quedan más nombres por leer? Terminado. 4º Lee el siguiente nombre. 5º ¿Va después del último nombre?. Si es así volvemos al paso 3. 6º Coges la posición donde debería ir, sobreescribes el nombre que estaba antes. Vuelves al paso 3.
El paso 6º puede ser un poco más complejo de ver, lo pongo con más detalle:
1º ¿Va antes del primer nombre? Devolvemos esa posicion y ya hemos terminado. 2º Recorremos el array desde 1 hasta 100. 3º ¿Va antes del nombre actual? Terminamos el bucle y devolvemos la posición actual. 4º En caso contrario volvemos al paso 2.
Todo esto puede sonar un poco complicado así leído, por eso te invito a que intentes ir escribiendo código ya. No te lo pienses mucho.
|
|
|
En línea
|
|
|
|
juanjuanjuanjuan
Desconectado
Mensajes: 3
|
Bueno en C se complica un poco más el asunto al no poder usar contenedores STL. Pero tampoco mucho más.
El algoritmo ya lo tienes tú hecho realmente:
1º Leer los primeros 100 nombres. 2º Lo ordenas alfabeticamente. 3º ¿No quedan más nombres por leer? Terminado. 4º Lee el siguiente nombre. 5º ¿Va después del último nombre?. Si es así volvemos al paso 3. 6º Coges la posición donde debería ir, sobreescribes el nombre que estaba antes. Vuelves al paso 3.
El paso 6º puede ser un poco más complejo de ver, lo pongo con más detalle:
1º ¿Va antes del primer nombre? Devolvemos esa posicion y ya hemos terminado. 2º Recorremos el array desde 1 hasta 100. 3º ¿Va antes del nombre actual? Terminamos el bucle y devolvemos la posición actual. 4º En caso contrario volvemos al paso 2.
Todo esto puede sonar un poco complicado así leído, por eso te invito a que intentes ir escribiendo código ya. No te lo pienses mucho.
Eso es exactamente lo que pense! Me alegra saber que por ahi voy bien jaja. El problema es que voy a necesitar usar la parte de ficheros (los nombres me los dan en un archivo y los tengo que sacar de ahi) y tambien voy a necesitar MUCHO de punteros (es un tema que tengo un poco flojo) Por eso les pido ayuda.. hace 1 semana que estoy tratando de resolverlo y a lo maximo que llegue es a esto que me escribiste recien.. Si alguno me puede dar una mano con el codigo, se lo super agradezco! Edito: para comparar los nombres y ordenarlos, tendria que usar la funcion "strcmp"
|
|
« Última modificación: 13 Febrero 2014, 00:53 am por juanjuanjuanjuan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con Ordenamiento en Java
Java
|
ErnestS3
|
1
|
3,866
|
25 Noviembre 2010, 01:51 am
por ErnestS3
|
|
|
AYUDA metodo de ordenamiento selccion
Programación C/C++
|
lecxe
|
2
|
2,446
|
18 Diciembre 2011, 21:26 pm
por eltongabinghiman
|
|
|
Ayuda con Programa en c/c++ para Ordenamiento.
Programación C/C++
|
BKsiragon
|
1
|
2,240
|
15 Enero 2013, 01:08 am
por durasno
|
|
|
Ayuda con ordenamiento de vector
.NET (C#, VB.NET, ASP)
|
josezamp
|
2
|
2,067
|
31 Octubre 2014, 12:05 pm
por Senior++
|
|
|
Ayuda con ordenamiento de nombres y numeros
Java
|
Tada
|
3
|
1,948
|
2 Abril 2016, 23:44 pm
por LaiaxanIV
|
|