-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtp8_ej6.pas
107 lines (92 loc) · 2.93 KB
/
tp8_ej6.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
program SepararJubilados;
type
TJubilado = record
documento: integer;
apellido: string;
nombre: string;
monto: real;
ultimoDigito: integer;
siguiente: ^TJubilado;
end;
ListaJubiladosPtr = ^TJubilado;
ListaSeparada = array [0..9] of ListaJubiladosPtr;
procedure inicializarListasSeparadas(var listas: ListaSeparada);
var
i: integer;
begin
for i := 0 to 9 do
listas[i] := nil;
end;
procedure agregarJubilado(var lista: ListaJubiladosPtr; jubilado: TJubilado);
var
nuevoJubilado, actual: ListaJubiladosPtr;
begin
new(nuevoJubilado);
nuevoJubilado^ := jubilado;
nuevoJubilado^.siguiente := nil;
if lista = nil then
lista := nuevoJubilado
else
begin
actual := lista;
while actual^.siguiente <> nil do
actual := actual^.siguiente;
actual^.siguiente := nuevoJubilado;
end;
end;
procedure separarJubilados(listaJubilados: ListaJubiladosPtr; var listasSeparadas: ListaSeparada);
var
actual, siguiente: ListaJubiladosPtr;
begin
while listaJubilados <> nil do
begin
actual := listaJubilados;
listaJubilados := listaJubilados^.siguiente;
siguiente := listasSeparadas[actual^.ultimoDigito];
agregarJubilado(siguiente, actual^);
listasSeparadas[actual^.ultimoDigito] := siguiente;
end;
end;
procedure imprimirListaJubilados(lista: ListaJubiladosPtr);
begin
while lista <> nil do
begin
writeln('Documento:', lista^.documento, ' Apellido:', lista^.apellido, ' Nombre:', lista^.nombre, ' Monto:', lista^.monto:0:2, ' Ultimo dígito:', lista^.ultimoDigito);
lista := lista^.siguiente;
end;
end;
procedure imprimirListasSeparadas(listas: ListaSeparada);
var
i: integer;
begin
for i := 0 to 9 do
begin
writeln('Lista para el último dígito ', i);
imprimirListaJubilados(listas[i]);
writeln;
end;
end;
var
listaJubilados: ListaJubiladosPtr;
listasSeparadas: ListaSeparada;
jubilado: TJubilado;
begin
inicializarListasSeparadas(listasSeparadas);
writeln('Ingrese los datos de los jubilados (documento, apellido, nombre, monto, último dígito):');
writeln('(Ingrese 0 para terminar la entrada de datos)');
repeat
readln(jubilado.documento);
if jubilado.documento <> 0 then
begin
readln(jubilado.apellido);
readln(jubilado.nombre);
readln(jubilado.monto);
jubilado.ultimoDigito := jubilado.documento mod 10;
agregarJubilado(listaJubilados, jubilado);
end;
until jubilado.documento = 0;
separarJubilados(listaJubilados, listasSeparadas);
writeln;
writeln('Listas de jubilados separadas por último dígito del documento:');
imprimirListasSeparadas(listasSeparadas);
end.