Problema de Punteros.
Publicado por Antonio (12 intervenciones) el 12/09/2012 02:16:18
Hola. Tengo este problema de punteros y no se bien como resolverlo.
Insertar elementos enteros en forma ordenada (Ascendente). La lista debe ser doblemente enlazada y sin carro nulo. Los elementos deben visualizarse en forma Ascendente y Descendente.
Debe dar la opción de borrar por el final de la lista
Tengo todo hecho pero en el procedimiento de agregar datos me sale un error al tratar de introducir el segundo dato.
Tampoco me funciona el procedimiento de Borrar.
Si por ahí ven algún otro error háganme saber. Gracias.
Insertar elementos enteros en forma ordenada (Ascendente). La lista debe ser doblemente enlazada y sin carro nulo. Los elementos deben visualizarse en forma Ascendente y Descendente.
Debe dar la opción de borrar por el final de la lista
Tengo todo hecho pero en el procedimiento de agregar datos me sale un error al tratar de introducir el segundo dato.
Tampoco me funciona el procedimiento de Borrar.
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
108
109
110
111
112
113
114
115
116
117
118
Uses crt;
type
tElem= Integer;
tLista= ^tNodo;
tNodo = Record
dato: tElem;
atras, sig: tLista;
end;
Var
prim, ulti, actu, aux : tLista;
Procedure Agregar (var prim, ulti, actu, aux : tLista);
Begin
clrscr;
writeln ('ingrese un dato');
if prim = nil then
begin
new(actu);
read(actu^.dato);
actu^.sig := nil;
actu^.atras := nil;
prim := actu;
ulti := actu
end
else
begin
new (aux);
read (aux^.dato);
actu:= prim;
while actu^.dato < aux^.dato do
begin
actu:=actu^.sig
end;
aux^.sig:=actu^.sig;
aux^.atras:=actu;
actu^.sig^.atras:=aux;
actu^.sig:=aux
end;
end;
Procedure VisualizarAscendente(var prim, actu: tLista);
Begin
writeln('Elementos de la lista : ');
actu:=prim;
while actu<>nil do
begin
writeln(actu^.dato);
actu:=actu^.sig
end;
end;
Procedure VisualizarDescendente(var ulti, actu: tLista);
Begin
writeln('Elementos de la lista : ');
actu:=ulti;
while actu<>nil do
begin
writeln(actu^.dato);
actu:=actu^.atras
end;
end;
Procedure Borrar (var ulti, actu: tLista);
begin
if prim = nil then {pregunta si la lista está vacia}
Write ('no hay datos');
readln
else
begin
actu:= ulti; {se posiciona al final de la lista}
actu:= actu^.atras; {ahora se pasa al anteultimo carro}
actu^.sig:= nil {hace que el carro siguiente no apunte a nada}
end;
end;
Procedure Menu;
var
salir : boolean;
op : char;
begin
salir := false;
repeat
clrscr;
writeln(' 1 = Ingresa Datos');
writeln(' 2 = Ver Ascendente');
writeln(' 3 = Ver Descendente');
writeln(' 4 = Borrar al final');
writeln(' 5 = Salir');
readln (op);
case op of
'1' : begin
clrscr;
Agregar (prim, ulti, actu, aux)
end;
'2' : begin
clrscr;
VisualizarAscendente (prim, actu)
end;
'3' : begin
clrscr;
VisualizarDescendente (ulti, actu)
end;
'4' : begin
clrscr;
Borrar (ulti, actu)
end;
'5' : salir := true;
end;
until salir = true;
end;
Begin
prim := nil;
ulti := nil;
menu;
end.
Si por ahí ven algún otro error háganme saber. Gracias.
Valora esta pregunta
0