Всем здравствуйте! Не могу в программе дописать процедурку которая
удаляет из списка L первый отрицательный элемент, если такой есть.
Вот что у меня получилось:
Pascal |
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
119
120
121
122
123
124
125
126
127
128
129
| program Lab2;
Type E=integer;
U=^Zveno;
Zveno= record inf:E;
Pred:U;
Next:U
end;
Procedure V_Nachalo(Var First:U; X:E);
Var VSP:U;
begin
New(VSp);
Vsp^.inf:=X;
if First=nil then begin
Vsp^.next:=Vsp;
Vsp^.pred:=Vsp;
First:=Vsp;
end
else begin
Vsp^.Pred:=First^.Pred;
Vsp^.Next:=First;
First^.pred^.next:=Vsp;
First^.pred:=Vsp;
First:=Vsp;
end;
end;
Procedure V_Spisok(Var Pr:U; X:E);
Var VSP:U;
begin
New(VSp);
Vsp^.inf:=X;
Vsp^.pred:=Pr;
Vsp^.Next:=Pr^.next;
Pr^.next^.pred:=Vsp;
Pr^.Next:=VSp;
end;
Procedure Iz_Spiska(Var Pr:U; Var X:E);
Var VSP:U;
begin
X:=Pr^.inf;
if Pr^.pred=Pr then begin
dispose(Pr);
Pr:=nil;
end
else begin
Vsp:=Pr;
Pr:=Pr^.next;
Pr^.pred:=Vsp^.Pred;
Pr^.pred^.next:=Pr;
Dispose(Vsp);
end;
end;
Procedure Print(First:U; n:integer);
Var Vsp:U; i:integer;
begin
Vsp:=First;
for i:=1 to n do
begin
Write(Vsp^.inf:5);
Vsp:=Vsp^.next;
end;
end;
Procedure Form (Var First:U; n:integer);
Var Vsp:U; X:E; i:integer;
begin
First:=Nil;
x:=random(5)-2;
V_Nachalo(First,x);
Vsp:=First;
for i:=2 to n do
begin
x:=random(5)-2;
V_Spisok(Vsp,x);
Vsp:=Vsp^.next;
end;
end;
function Pust(First:U):boolean;
begin
Pust:=(First=nil);
end;
procedure Ochistka(Var First:U);
Var Vsp:E;
begin
while not (Pust(First)) do
Iz_Spiska(First,Vsp);
end;
procedure Del(L:U; n:integer);
Var Vsp:U; i,k:integer;
begin
Vsp:=L;
k:=0;
for i:=1 to n do
begin
if (VSP^.next^.inf<0) then VSP^.next^.inf:=Pred;
Pr:=Pr^.next;
Pr^.pred:=Vsp^.Pred;
Pr^.pred^.next:=Pr;
Vsp:=Vsp^.next;
Dispose(VSP);
end;
Sosedi:=k;
end;
Var L,Vsp:U; n,k:integer;
begin
Write('Vvedite kol-vo elementov v spiske L: ');
Readln(n); Writeln;
if (n<=0) then Writeln('Nepravilnoe chislo. Programma okonchena.')
else
begin
Randomize;
Form(L,n);
Writeln('Spisok:');
Print(L,n); Writeln;
k:=Sosedi(L,n);
Writeln('Chislo sosedei ',k:3);
readln;
end;
{ochistka(L);}
Readln;
end. |
|
Где procedure Del это и есть требуемая процедура