Pascal/Turbo Pascal - Ayuda con RECORDS y FILES

 
Vista:

Ayuda con RECORDS y FILES

Publicado por Juanito (2 intervenciones) el 25/01/2008 02:38:18
Buenas, estoy con un programa pero no consigo realizar ciertas cosas.

Este es el código que llevo:

-------------------------------------------------------------------------------------------------------------------------------
program menu11;

{$APPTYPE CONSOLE}

uses
SysUtils;

const
max_participantes=50; max_vueltas=100; max_long_nombre=255;
type
t_participante=record
nombre:string[max_long_nombre];
apellido:string[max_long_nombre];
dorsal:integer;
equipo:string[max_long_nombre];
end;
datos=array [1..max_participantes] of t_participante;
var
lista_completa:datos;
opc,cantidad,c:integer;
res:string[1];
busqueda:integer;
begin
{inicializo las variables}
repeat
{imprimo el titulo del menu}
writeln;
writeln('------------------------');
writeln('Gestion de Participantes');
writeln('------------------------');
writeln;
writeln;
{imprimo el menu}
Writeln(' 1.-Agregar participante');
Writeln(' 2.-Lista de participantes');
Writeln(' 3.-Busqueda de participante');
Writeln(' 4.-Guardar Participantes en archivo');
Writeln(' 5.-Cargar Participantes desde archivo');
Writeln(' 6.-Borrar participante');
Writeln(' 7.-Salir');
{pido la opcion del menu}
writeln;
Write(' -> Introduce la opcion que desees: ');Readln(opc);
case opc of
1: //Agregar Participantes
begin
for cantidad:=(cantidad +1) to max_participantes do
begin
writeln;
writeln('----------------------');
writeln('Agregar Participantes');
writeln('----------------------');
writeln;
writeln;
write(' -Nombre ',cantidad,': ');
readln(lista_completa[cantidad].nombre);
write(' -Apellido: ');
readln(lista_completa[cantidad].apellido);
write(' -Dorsal: ');
readln(lista_completa[cantidad].dorsal);
write(' -Equipo: ');
readln(lista_completa[cantidad].equipo);
writeln;
Write('Desea introducir otro participante? s/n: ');
Readln(res);
{si no, saco del ciclo}
if (res='n') OR (res='N') then break;
end;
end;
2: //Listar Participantes
begin
writeln;
writeln('------------------------');
writeln('Lista de Participantes');
writeln('------------------------');
writeln;
writeln;
for c:=1 to cantidad do
begin
writeln('--------------------------------------');
writeln('Nombre',c,': ',lista_completa[c].nombre);
writeln('Apellido: ',lista_completa[c].apellido);
writeln('Dorsal: ',lista_completa[c].dorsal);
writeln('Equipo: ',lista_completa[c].equipo);
writeln('-------------------------------------');
writeln;
end;{ciclo de impresion}
end;{fin de opcion 2 reporte de productos}
3: //Buscar participantes por dorsal
begin
Writeln('Buscar participantes por dorsal y mostrar el resto de datos')
end;
4: //Guardar participantes en un archivo
begin
Writeln('Guardar participantes en archivo')
end;
5: //Cargar Participantes desde archivo
begin
Writeln('Cargar participantes desde archivo');
end;
6: //Borrar participante
begin
Writeln('Borrar participante');
end;
end;{case}

until opc=7;
end.

-----------------------------------------------------------------------------------------------------------------------------

El programa tiene que realizar las siguientes acciones:

1.-Agregar participante
2.-Lista de participantes
3.-Búsqueda de participante por dorsal
4.-Guardar Participantes en archivo
5.-Cargar Participantes desde archivo
6.-Borrar participante

He conseguido implementar bien las dos primeras opciones. El problema me ha venido con el resto.

En el punto 3 hay que hacer una búsqueda por dorsal y que se muestren los datos del participante, tengo la impresión de que no debe ser muy difícil pero ni idea oye...

El 4 y el 5 lo mismo, no sé como guardar toda la información del record en un archivo y, por lo tanto no sé como cargar un archivo externo que sobreescriba el record del programa.

Y para terminar, no sé como borrar un participante en concreto del récord, primero porque necesito saber como buscar uno (apartado 3) y luego no sé cómo borrarlo.

En fin, no pido que me digáis todos los puntos que me faltan, con uno me conformo xDDD

Gracia de antemano.
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:Ayuda con RECORDS y FILES

Publicado por ivan (3 intervenciones) el 25/01/2008 16:37:52
Ya que he visto que por aqui me han ayudado cuando lo he precisado, voy a intentar resolverte el problema que tienes, aunque por otra parte lo que te pasa es que no has estudiado lo suficiente porque lo que ocurre son problemas muy sencilloos de busquedas y recorridos (en arrays que son sota , caballo y rey).A ver, por partes:

PARA LO DE LA OPCION 3:

Procedure BuscarDorsal (lista:datos;Dorsal:integer;MaxArray:integer);

VAR
i:integer;
BEGIN
i:=1;
while (i<=MaxArray) And (Dorsal<>lista[i].dorsal) Do
i:=i+1;
IF (i<MaxArray) Then
begin
writeln('el nombre es:' , lista[i].nombre);
writeln('el apellido es:',lista[i].apellido);
writeln('el equipo es:',lista[i].equipo);
end
ELSE
IF (i=MaxArray) And (Dorsal=lista[i].dorsal) Then
begin
//aqui lo mismo de mostrar los datos de antes
end
ELSE
begin
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:Ayuda con RECORDS y FILES

Publicado por Juanito (2 intervenciones) el 25/01/2008 17:44:16
Bueno, muchas gracias por tu ayuda ^^ Gracias a ti he podido poner la búsqueda de participantes y la eliminación de participantes.

Cierto es que es por falta de estudio, o que no lo pillo demasiado bien esto de los arrays y ficheros...pero estoy con la soga al cuello y te agradezco enormemente tu ayuda.

Ahora estoy a ver si consigo hacer las dos cosas que me quedan, lo de guardar todo el RECORD en un archivo y cargar al RECORD un archivo externo, pero no lo consigo :S

Gracias por todo ;)
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:Ayuda con RECORDS y FILES

Publicado por Diego Romero (996 intervenciones) el 26/01/2008 05:24:21
Si bien el código de búsqueda funciona creo que hay una forma mejor de hacerlo basándome en tu código.

Procedure BuscarDorsal (lista:datos;Dorsal:integer;MaxArray:integer);
VAR
i:integer;
BEGIN
i:=1;
while (i<=MaxArray) And (Dorsal<>lista[i].dorsal) Do
i:=i+1;
IF (i>MaxArray) Then WriteLn('No encontrado')
else
begin
writeln('el nombre es:' , lista[i].nombre);
writeln('el apellido es:',lista[i].apellido);
writeln('el equipo es:',lista[i].equipo);
end; { else }
end; { procedure }

O sea, por la condición del while si i es mayor a MaxArray quiere decir que el segundo término del AND se cumplió para todos los casos, lo que significa que el dato buscado no está en el array. Caso contrario sí se encontró y el índice del dato buscado es el valor de i.
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