zadach332.PAS

{* Задача 332 *}

Unit ZADACH332;
Interface
Implementation
Begin
 writeln('Имеются линейные однонаправленные списки: type p=^item; item=record data:real; reference:p end; Написать программу удаления из списка L одного элемента, следующего за элементом E, если такой есть и он отличен от E. ');
End.

Program spisok;

Uses zadach332.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключение модулей *}
Type {* Типы переменных *}
  p = ^item; {определение указателя на объект}
  item = Record {определение для объекта}
  data : real;
  reference : p
  End;
Var {* Объявление переменных *}
  sp  : p;
  sp1 : p;
  sp2 : p;
  sp3 : p;
  a   : char;
  x   : real;
  n   : integer;
  Begin
  clrscr; {очистка экрана}
  New(sp);
  sp^.reference := Nil;
  sp1 := sp; {sp-начало списка, размещаем первый элемент}
  writeln('Formiruem spisok.'); {формируем список}
  write('Vvedite pervoe dannoe:');
  readln(sp1^.data);
  Write('Budem esche vvodit dannye? (yn): ');
  readln(a);
While a = 'y' Do {пока отвечаем 'y', увеличиваем список}
Begin
  New(sp1^.reference); {организуем следующий элемент}
  sp1 := sp1^.reference; {связываем с последним}
  sp1^.reference := Nil{делаем его последним, sp1-конец списка}
  write('Vvedite dannoe:');
  readln(sp1^.data); {заполняем элемент данным}
  Write('Budem esche vvodit dannye? (yn): ');
  readln(a);
End;
writeln('Vvod dannyh okonchen.');
writeln; {* Пустая строка *}
write('Vvedite dannoe dlya poiska:');
readln(x); {запрашиваем поисковый элемент}
writeln; {* Вывод пустой строки *}
sp2 := sp; {sp2-переменная для перемещения по списку - в начало списка}
n := 0;
While (sp2^.referenceNIL) Do {пока не конец списка}
Begin
  If sp2^.data = x Then {если нашли искомый элемент, то}
  Begin
    sp3 := sp2^.reference; {запоминаем указатель на следующий элемент списка в sp3}
    If sp3^.datax Then
    Begin
      writeln('Udalen element ', sp3^.data);
      sp2^.reference := sp3^.reference; {исключаем элемент из списка}
      Dispose(sp3); {освобождаем память для исключенного элемента}
      n := n + 1; {увеличиваем счетчик удаленных элементов}
    End;
    
  End;
  sp2 := sp2^.reference; {перемещаемся далее по списку}
End;
writeln('Kol-vo udalennyh elementov:', n);
writeln('Dlya vyhoda nazhat lyubuyu klavishu');
ReadKey; {ждем нажатия любой клавиши}
End....