Pascal/Turbo Pascal - Ordenar listas antes de pasar a fichero

 
Vista:

Ordenar listas antes de pasar a fichero

Publicado por Dani (2 intervenciones) el 19/02/2010 16:45:56
Os cuento mi problema,tengo este trozo de codigo:

begin
fich_entrada:= paramstr(2);
assign (fich,fich_entrada);
rewrite (fich);
p_jug:=cab_jugadores;

while (p_jug <> nil) do begin


if (p_jug^.cue < 0) then

begin
cue:=Formato_numero_real(p_jug^.cue);
cadena:=concat(p_jug^.dni,' ',p_jug^.nombre,',',p_jug^.pr_apell,',',p_jug^.se_apell,' ',cue);
writeln (fich,cadena);
p_jug:=p_jug^.sig;
end

else p_jug:=p_jug^.sig;
end;

close(fich);

end; { buscar_jugadores }

Pues modificandolo lo menos posible,tengo que hacer me ordene el fichero que he creado de la siguiente forma:
1º el de mayor saldo negativo al comienzo.
2º si varios tienes el mismo saldo negativo,tengo que poner 1º el del dni más bajo.

Nota: tenemos un archivo con los jugadores que tenemos,y lo pasamos a la lista: p_jug que utilizo ahí,y solo tengo que quedarme con los que tienen saldo negativo y ordenarlos de la forma que dije.

A mi se me ocurrió o bien por cadenas y ficheros,o bien utilizando punteros auxiliares.El problema es que tengo que modificarlo lo menos posible,y no sé cual utilizar.Muchas gracias
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 listas antes de pasar a fichero

Publicado por Diego Romero (996 intervenciones) el 19/02/2010 18:02:56
Ordena la lista antes de escribirla en el archivo, es más rápido y cómodo.
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

RE:Ordenar listas antes de pasar a fichero

Publicado por Dani (2 intervenciones) el 19/02/2010 18:20:57
pero como puedo hacer?
Por ejemplo,encuentro el primer negativo,entonces tendria que ir leyendo toda la lista para ver si hay algun mas pequeño o igual,si hay uno más pequeño cojerlo,y asi hasta tener el más pequeño,y si es = guardarlo,pero si tengo varios iguales?
Es que no sé como guardar los que me interesa,para ordenarlos para dnies y despues eliminarlos...

No sé si me entiendes.

Por que la lista original de jugadores tiene que quedar igual que estaba al principio.

Gracias
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

RE:Ordenar listas antes de pasar a fichero

Publicado por Diego Romero (996 intervenciones) el 20/02/2010 17:54:35
Algoritmos de ordenación hay montones, yo tengo una demostración de la eficiencia de cada uno en mi página web, en Pascal (pero no para listas con punteros, aunque se puede adaptar perfectamente).

Según lo que yo veo tienes que ordenar por dos claves, una primara y otra secundaria.

Primero haz una ordenación común y silvestre por la clave primara (usando el método QuickSort, por ejemplo).

Cuando la lista esté ordenada, los valores iguales de la clave primaria te quedarán uno a continuación del otro, lo que tienes que hacer ahora es poner un puntero al primero de los repetidos y otro puntero al último de los repetidos y ordenar esa sublista por la clave secundaria.

Supongamos que luego de ordenar la lista por la clave primaria te ha quedado así:

P|S
1|1
2|1
3|1<-- Puntero al inicio
3|3
3|2
3|5<-- Puntero al final
4|1
4|5
5|2
6|2
7|5
8|6

Donde P es la clave primara y S la secundaria. Mira el grupo de nodos con clave primaria 3, la clave secundaria está desordenada, pues nada más ordena entre los punteros señalados por la clave secundaria y ya está. Lo mismo para la clave 4.

No entendí tu último párrafo. Cuando haces una ordenación por supuesto que la lista va a cambiar así que no va a quedar "como al principio".
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