Pascal/Turbo Pascal - Mostrar un Top10 en Pascal

   
Vista:

Mostrar un Top10 en Pascal

Publicado por Juan (4 intervenciones) el 10/10/2011 00:00:52
Hola gente, hice un jueguito para la facu en Dev-Pascal. En un archivo se guardan todos los que juegan el juego (diferentes nombres) y sus puntajes, necesito que en un Top10 solo aparezcan de ese archivo los 10 con mas puntos ordenados de mayor a menor.

Ya logre que me guarde en un archivo su puntaje cuando ganan o empatan y que lo actualice si ya habian jugado o cree un nuevo registro si son nuevos, pero me volvi loco para hacer que los muestre y no pude... alguien me puede dar una idea?
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

Mostrar un Top10 en Pascal

Publicado por ramon (2072 intervenciones) el 10/10/2011 17:21:51
Me podrías presentar el registro guardado si no no podre ayudarte por no saber la estructura
que guardas pero si guardas la puntuación es fácil encontrar todos los de 10.
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

Mostrar un Top10 en Pascal

Publicado por Juan (4 intervenciones) el 10/10/2011 17:31:18
Type
REGISTRO = Record
ID: String[10];
Score: Integer;
Rank: Integer
ARCHIVO = File Of REGISTRO;
Var
BUFFER: REGISTRO;
Top10: ARCHIVO;

Esos son, yo cuando los guardo despues de jugar solo guardo el Buffer.Id y el Buffer.Score, supongamos que tengo 50 que ya jugaron y lo que tengo que hacer ahora es mostrar de esos 50 solo los 10 con mas puntaje y ordenados, 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

Mostrar un Top10 en Pascal

Publicado por ramon (2072 intervenciones) el 10/10/2011 17:40:07
Imagino que la falta de el end es un fallo de escritura en esta muestra.

Type
REGISTRO = Record
ID: String[10];
Score: Integer;
Rank: Integer {tendria que tener end}
ARCHIVO = File Of REGISTRO;
Var
BUFFER: REGISTRO;
Top10: ARCHIVO;
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

Mostrar un Top10 en Pascal

Publicado por Juan (4 intervenciones) el 10/10/2011 17:50:22
Asi es, no salio no se porque...
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

Mostrar un Top10 en Pascal

Publicado por ramon (2072 intervenciones) el 10/10/2011 20:00:43
{A ver si esto te ayuda }

program bufferes;
uses
crt;
Type
REGISTRO = Record
ID : String[10];
Score : Integer;
Rank : Integer;
end;
ARCHIVO = File Of REGISTRO;

Var
BUFFER : REGISTRO;
Top10 : ARCHIVO;

procedure guarda;
begin
assign(top10,'c:\tp\archivos.dat');
{$i-} reset(top10); {$i+}
if ioresult <> 0 then
begin
rewrite(top10);
seek(top10,0);
write(top10,buffer);
close(top10);
end
else
begin
seek(top10,filesize(top10));
write(top10,buffer);
close(top10);
end;
end;

procedure asignadatos;
var
teb : char;
begin
repeat
fillchar(buffer.ID,11,' ');
buffer.ID[0] := chr(10);
buffer.score := 0;
gotoxy(10,2);write('Entre ID : ');
gotoxy(21,2);readln(buffer.ID);
gotoxy(10,3);write('Entre Score : ');
gotoxy(24,3);readln(buffer.score);
guarda;
gotoxy(10,6);write('Mas Entradas [S/N]');
repeat
teb := readkey;
until teb in['n','N','s','S'];
clrscr;
until teb in['n','N'];
end;

procedure presentamallores;
var
tomado : array[1..1000] of integer;
identi : array[1..1000] of string[10];
ii, tama : longint;
mallor, k, t, k1 : integer;
dad : string[10];
begin
fillchar(tomado,sizeof(tomado),0);
fillchar(identi,sizeof(identi),' ');
assign(top10,'c:\tp\archivos.dat');
{$i-} reset(top10); {$i+}
if ioresult <> 0 then
begin
exit;
end
else
begin
tama := filesize(top10) - 1;
k := 1;
for ii := 0 to tama do
begin
seek(top10,ii);
read(top10,buffer);
tomado[k] := buffer.score;
identi[k] := buffer.Id;
k := k + 1;
end;
close(top10);
end;
for k1 := 1 to k do
for t := k1 + 1 to k do
begin
if tomado[k1] < tomado[t] then
begin
mallor := tomado[t];
tomado[t] := tomado[k1];
tomado[k1] := mallor;
dad := identi[t];
identi[t] := identi[k1];
identi[k1] := dad;
end;
end;
if tama < 10 then
k1 := tama + 1;
else
k1 := 10;
for t := 1 to k1 do
writeln(identi[t],' ',tomado[t]);
readln;
end;


procedure menu;
var
tecla : char;
sal : boolean;
begin
gotoxy(10,2);write('**** MENU GENERAL ****');
gotoxy(10,4);write(' 1 = Entrada Datos');
gotoxy(10,5);write(' 2 = Ver 10 Datos Mallores ');
gotoxy(10,6);write(' 3 = Anular Archivo Datos');
gotoxy(10,7);write(' 4 = Salir ');
gotoxy(10,8);write('<<<< Elija Opcion >>>>');
sal := false;
repeat
tecla := readkey;
case tecla of
#49 : begin
clrscr;
asignadatos;
end;
#50 : begin
clrscr;
presentamallores;
end;
#51 : begin
assign(top10,'c:\tp\archivos.dat');
{$i-} reset(top10); {$i+}
if ioresult <> 0 then
begin
end
else
begin
clrscr;
close(top10);
erase(top10);
gotoxy(10,3);write('ARCHIVO BORRADO');
delay(1000);
end;
end;
#52 : begin
sal := true;
end;
end;
clrscr;
gotoxy(10,2);write('**** MENU GENERAL ****');
gotoxy(10,4);write(' 1 = Entrada Datos');
gotoxy(10,5);write(' 2 = Ver 10 Datos Mallores ');
gotoxy(10,6);write(' 3 = Anular Archivo Datos');
gotoxy(10,7);write(' 4 = Salir ');
gotoxy(10,8);write('<<<< Elija Opcion >>>>');
until sal = true;
end;


begin
clrscr;
menu;
end.
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

Mostrar un Top10 en Pascal

Publicado por Juan (4 intervenciones) el 11/10/2011 06:22:36
Muchisimas gracias, me sirvio de mucho. Lo edite un poco para que se adapte a mi programa y despues arregle como hacia el guardado en el archivo y listo, ya lo termine!


Pregunta, por una cuestion de "performance", habia alguna forma de hacerlo sin tener que pasar todos los registros a un array x1000 ? Porque asi digamos que usa memoria extra y tambien limita los jugadores a 1000. Igual es solo curiosidad, ya lo hice asi y lo dejo asi :P.
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

Mostrar un Top10 en Pascal

Publicado por ramon (2072 intervenciones) el 11/10/2011 19:21:19
Se podría realizar sobre el archivo o con punteros pero eso es algo mas complicado que
las array pero si es otra opción
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