Здравствуйте.
Помогите пожалуйста напсиать программу. Из списка натуральных чилет удалить отрицательные компоненты.
type
One=^chislo;
chislo=record
number:real;
nexts:one;
end;
ch=array[1..15] of chislo;
var
type
List_r=^chis;
chis=record
value:real;
next:list_r;
end;
const n=6;
a: array [1..n] of real=(1,-4,5,-3,7,3);
var
m_list,curc,pred,current:list_r;
next,i:byte;
//створення списку из масиву дійсних чисел
Procedure Create_list;
var
i:byte;
begin
new(m_list);
current:=m_list;
for i:=1 to n do begin
current^.value:=a[i];
if (i<n) then begin
new(current^.next);
current:=current^.next;
end;
writeln('elements insert to the list!');
readln;
end;
end;
//виведення масиву дійсних чисел на екран
Procedure write_list(s:list_r);
var
curc:list_r;
i:byte;
begin
writeln('-----List-----');
i:=1;
curc:=s;
while curc<>nil do begin
writeln('element ',i,'= ',curc^.value:5:1);
readln;
curc:=curc^.next;
inc(i);
end; readln;
end;
begin
create_list;
write_list(m_list);
curc:=m_list;
pred:=curc;
while (curc<>nil) do
begin
writeln('element ',i,'= ',curc^.value:5:1);
readln;
if curc^.value<0 then
curc^.value:=pred; //а тут удаление... я не знаю как его сделать...
pred^.next:=curc^.next;
dispose(curc^.next);
end;
readln;
end.
Var
T: list_r; {это придется добавить в описания переменных }
...
{ Ну, а вот само удаление: }
curc := m_list;
{ Проходим по всем элементам от 2-го до ПРЕДпоследнего... }
while curc^.next <> nil do
if curc^.next^.value < 0 then begin
T := curc^.next; curc^.next := T^.next;
dispose(T);
end
else begin
pred := curc;
curc := curc^.next;
end;
{ ... и отдельно проверяем Первый ... }
if (m_list <> nil) and (m_list^.value < 0) then begin
T := m_list;
m_list := m_list^.next;
dispose(T);
end;
{ ... и Последний элементы списка ... }
if (curc <> nil) and (curc^.value < 0) then begin
T := curc;
pred^.next := nil;
dispose(T)
end;
{ Можно выводить на печать... }
Procedure Create_list;
var i:byte;
begin
new(m_list);
current:=m_list;
for i:=1 to n do begin
current^.value:=a[i];
if (i<n) then begin
new(current^.next);
current:=current^.next;
end
else current^.next := nil; { <--- Вот теперь ошибки не будет !!! }
writeln('elements insert to the list!');
readln;
end;
end;