Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Паскалю.doc
Скачиваний:
33
Добавлен:
04.06.2015
Размер:
7.33 Mб
Скачать

Inf: Integer;

Next: TPoint;

End;

Var head, q, r : tPoint;

posle: Integer;

flag: 0..1; флаг поиска (0 – элемент не найден)

Procedure Formir_spisok;

Begin

New(head); head - указатель на голову списка

head^.Inf := 0; количество элементов в списке

head^.Next := Nil; списка еще нет

New(q); формируем первый элемент

Write(‘Первое число: ’);

ReadLn(q^.Inf); вводим его информационную часть

If (q^.Inf=0) если ввели 0,

Then Exit; то выходим из процедуры

head^.Inf := 1; в списке один элемент

q^.Next := head^.Next; помещаем его в голову списка

head^.Next := q; в head^.Next адрес головы списка

Repeat

New(q); формируем очередной элемент

Write(‘Очередное число: ’);

ReadLn(q^.Inf); вводим его информационную часть

If (q^.Inf=0) если ввели 0,

Then Break; то выходим из цикла ввода

head^.Inf := head^.Inf + 1; увеличиваем счетчик элементов на 1

q^.Next := head^.Next; вставляем элемент в голову списка

head^.Next := q; в head^.Next адрес головы списка

Until (q^.Inf = 0);

End;

Procedure Vyvod_spisok; процедура вывода списка

Begin

q := head^.Next; текущую ссылку – на первый элемент

While (q <> Nil) Do пока не конец списка

Begin

Write(q^.Inf:5); выводим очередной элемент

q := q^.Next; ссылку – на следующий элемент

End;

WriteLn;

End;

Begin головная программа

ClrScr;

WriteLn(‘Создание списка’);

WriteLn;

Formir_spisok; обращение к процедуре создания списка

WriteLn(‘Введено чисел: ’, head^.Inf);

WriteLn(‘Введенные числа:’);

Vyvod_spisok; обращение к процедуре вывода списка

WriteLn;

WriteLn(‘Вставка элементов в список’);

WriteLn;

Repeat

New(r);

WriteLn;

Write(‘Новый элемент: ’);

ReadLn(r^.Inf); информационная часть нового элемента

If (r^.Inf = 0) если она равна нулю,

Then Break; то выходим из цикла ввода

Write(‘После какого: ’);

ReadLn(posle);

flag := 0; флаг поиска равен нулю – элемент пока не найден

q := head^.Next; поисковый указатель q – в голову списка

While (q <> Nil) Do пока не конец списка

If (q^.Inf = posle) ищем нужный элемент

Then

Begin

flag := 1; если элемент найден:

Break; выходим из цикла поиска

End

Else q := q^.Next; иначе делаем шаг по списку

If (flag = 0) Then если элемент не найден:

Begin

WriteLn(‘Такого элемента в списке нет’);

WriteLn(‘Список:’);

Vyvod_spisok; выводим список

Continue; и продолжаем цикл ввода

End;

r^.Next := q^.Next; если элемент найден,

q^.Next := r; то вставляем его в список

head^.Inf := head^.Inf + 1; увеличиваем счетчик элементов на единицу

WriteLn;

WriteLn(‘Новый список:’);

Vyvod_spisok; выводим новый список

Until (r^.Inf = 0); окончание цикла ввода

WriteLn(‘Список:’);

Vyvod_spisok; выводим окончательный список

ReadLn;

End.