Pascal/Turbo Pascal - codigo de apuntadores y reguistros

 
Vista:
sin imagen de perfil

codigo de apuntadores y reguistros

Publicado por Sandy salas (2 intervenciones) el 30/01/2014 14:45:48
Codigo donde se reguistran cierta cantidad de datos y luego son mostrados en manera de un arreglo, pero con la utilizacion de apuntadores, y tambien los reguistros son modificables y pueden eliminarlos espero y les ayude


Program listas_trabajo;

Uses Crt;
Type
nodos = ^datos;
datos = record
CEDULA : string[8];
Nombretraba : string[30];
Cargo : string;
sueldo : real;
sueldbono : real;
sig : nodos
end;
Var
p,q,inicio:nodos;
tecla :char;
i :integer;

procedure inserta_nodo(var p : nodos);
begin
if inicio=nil then
inicio:=p
else
q^.sig:=p;
q:=p
end;

procedure elimina_nodo(var p,q:nodos);
begin
if p=inicio then
begin
if inicio^.sig=nil then
inicio:=nil
else
inicio:=inicio^.sig
end
else
q^.sig := p^.sig;
dispose(p)
end;

function busca_clave(var pos,q:nodos;clave:string):boolean;
begin
if inicio <> nil then
begin
p:=inicio;
While ((p^.CEDULA<>clave)and (p^.sig<>nil)) do
begin
q:=p;
p:=p^.sig
end;
if p^.CEDULA=clave then
busca_clave:=true
else
busca_clave:=false
end
else
busca_clave:=false
end;


procedure libera_memoria;
begin
p:=inicio;
while(p<>nil) do
begin
q:=p;
p:=p^.sig;
dispose(q)
end
end;


procedure Insertar;
Var
otro:char;
begin
Repeat
ClrScr;
gotoxy(30,5);Write('Ingreso de Datos del trabajador');
New(p);
p^.sig:=nil;
gotoxy(25,7);Write('Insertar Cedula Del Trabajador: ');ReadLn(p^.CEDULA);
gotoxy(25,8);Write('Nombre Y apellido del Trabajador: ');ReadLn(p^.Nombretraba);
gotoxy(25,9);Write('Cargo del trabajador: ');ReadLn(p^.cargo);
gotoxy(25,10);Write('Sueldo del Trabajador: ');ReadLn(p^.Sueldo);
if (p^.sueldo) < 1500 then
(p^.sueldbono):=(p^.sueldo)+500;
writeln('Recibes un Bono, tu sueldo neto sera');
write(p^.sueldbono:2:0);



inserta_nodo(p);
gotoxy(20,22);write('Desea incluir otro registro del trabajador s/n? ');
otro:=ReadKey
until otro in ['n','N']
end;

procedure Eliminar;
Var
otro :char;
clave:string[8];
begin
Repeat
ClrScr;
gotoxy(30,5);Write('Eliminar Registro del trabajador');
gotoxy(25,7);Write('cedula: ');
ReadLn(clave);
if busca_clave(p,q,clave) then
begin
gotoxy(25,8); Write('N0MBRE DEL TRABAJADOR : ');Write(p^.nombretraba);
gotoxy(25,9); Write('Cargo : ');Write(p^.cargo);

gotoxy(20,15);Write('Desea eliminar este registro s/n? ');
otro:=ReadKey;Write(otro);
if otro in['s','S'] then
elimina_nodo(p,q)
end
else
begin
gotoxy(20,10); Write('El trabajador no existe...')
end;
gotoxy(20,22);write('Desea Eliminar otro registro del trabajador s/n? ');
otro:=ReadKey
until otro in ['n','N']
end;

procedure consultas;
Var
otro:char;

begin
ClrScr;
p:=inicio;
i:=0;
gotoxy(30,3);Write('Consulta de Trabajador');
gotoxy(30,4);Write('-------------------');

gotoxy(1,7);Write(' CEDULA Nombre y Apellido Cargo sueldo Sueldo+Bono ');
gotoxy(1,8);Write('------------------ -------------------- ------- -------- ------------- ');
while p<>nil do
begin

i:=i+1;
gotoxy(5,8+i);Write(p^.CEDULA);
gotoxy(25,8+i);Write(p^.nombretraba);
gotoxy(45,8+i);Write(p^.cargo);
gotoxy(58,8+i);write(p^.sueldo:2:0);
gotoxy(70,8+i);write(p^.sueldbono:2:0);
p:=p^.sig;
end;
gotoxy(20,22);write('Pulse una Tecla Para Continuar ');
otro:=ReadKey
end;



begin
inicio:=nil;
Repeat
ClrScr;
gotoxy(30,3); Write('Menu Principal');
gotoxy(30,4); Write('--------------');
gotoxy(30,8); Write('1. Insertar datos del Trabajador');
gotoxy(30,9); Write('2. Eliminar Registro del Trabajador');
gotoxy(30,10);write('3. Consultar Datos del Trabajador');
gotoxy(30,11);Write('4. Salir (Esc)');
gotoxy(30,13);Write('Opcion [ ]');
gotoxy(38,13);
tecla:=ReadKey;
case tecla of
'1' :Insertar;
'2' :Eliminar;
'3' :consultas
end
until tecla in ['4'];
libera_memoria;
ClrScr
end.
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