C/Visual C - ordenar scores.txt

 
Vista:

ordenar scores.txt

Publicado por Milpin (3 intervenciones) el 30/11/2007 05:59:09
Saludos, tengo un programa que guarda unos scores en un txt y los leo tambien, pero como hacerle para que a la hora de mostrarlos se muestre ordenada la tabla. los datos se insertan de la siguiente manera

Juan 45859
Pedro 4848483
Otelo 399


y asi, y a la hora de mostrarlo en pantalla pues me lo muestra igual que como esta en el archivo,
hay alguna manera de ordenarlos por puntaje??????????????????????? ya sea a la hora de leerlo o a la hora de escribir ke los ordene antes??????????????????????
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ordenar scores.txt

Publicado por Nelek (816 intervenciones) el 04/12/2007 09:41:23
Yo lo haria a la hora de presentarlos en pantalla, ya que es mejor cuando sabes el numero de elementos que hay.

Para ello, o bien usas asignacion dinamica de memoria para un vector (alloc, malloc y demas) o bien estableces un vector de un tamanyo que sepas seguro que no va a quedarse corto. Si eres principiante te recomiendo la segunda.

Luego lees el fichero y vas guardando cada uno de las estructuras en dicho vector. Luego lo recorres buscando la mayor puntuacion, cuando la has encontrado, escribes los datos y anulas dicha posicion.

Mas o menos quedaria algo asi (hace tiempo que no uso C asi que no va a ser una respuesta totalmente funcional, pero la idea la tienes ahi):

struct {
char* nombre [20];
long int puntos;
} scores;

scores ranking [100]; //supongo que no vas a tener mas de 100 elementos

void main ()
{
//inicializar el vector con valores nulos (al menos la puntuacion)
for (int i = 0; i < 100; i++)
ranking[i].puntuacion = -1; // puntuacion negativa para saber que es una posicion no valida.

int num_scores = 0;
// tu codigo para leer y guardar cada pareja de datos en el vector ranking.
// Cada uno que guardes, suma 1 a num_scores para saber cuandos hay en total

int contador = num_scores;
int pos_temp = -1;
int puntos_temp = 0;

// Para ir presentandolos de forma ordenada
do
{
pos_temp = -1;
for (int i = 0; i < num_scores; i++)
{
if (ranking[i].puntos > puntos_temp)
{
puntos_temp = ranking[i].puntos;
pos_temp = i;
}
}

if (pos_temp != -1) // si se encontro alguno que cumpla...
{
printf ("%d .- Nombre: %s, Puntos: %d ", num_scores - contador + 1, ranking[pos_temp].nombre, ranking[pos_temp].puntos);
ranking[pos_temp].puntos = 0; // Para que a la proxima este ya no se cuente
contador--; // Al acabar una pasada valida, quitamos uno al total para buscar.
continue;
}
else
{ printf ("Algo ha fallado, contador sigue siendo mayor que cero pero no se encuentran datos que presentar en la pantalla ");
getchar ();
}
} while (contador > 0)

//mas codigo

}


Esta solucion, no es la unica ni digo que sea la mejor, pero lo he hecho de manera que vas claro el procedimiento. Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar