Выполнить поиск элемента в списке - Pascal ABC
Формулировка задачи:
Разработать программу, выполняющую coздание односвязного списка, вывод его элементов на экран, а также указанные действия в соответствии с вариантом. Построить схемы действий со списком, отражающие связи между элементами списка, а также их изменение в случае добавления или удаления элементов из списка.Тип элементов списка – символы. Выполнить поиск элемента в списке. Помогите исправить
Решение задачи: «Выполнить поиск элемента в списке»
textual
Листинг программы
program listexample;
uses CRT;
type
plist = ^tlist;
tlist = record
data: real;
next: plist
end;
var
list, start: plist;
i: integer;
b: real;
f: boolean;
procedure Add(d: real);
var
l: plist;
begin
New(l);
l^.data := d;
l^.next := nil;
if start <> nil then
begin
list := start;
while list^.next <> nil do
list := list^.next;
list^.next := l
end
else
start := l;
list := l
end;
procedure Display;
begin
if start = nil then
begin
writeLn('Список пуст');
exit
end;
list := start;
while list <> nil do
begin
write(#32, list^.data);
list := list^.next
end
end;
procedure Clean;
var
l: plist;
begin
if start = nil then
exit;
list := start;
while list <> nil do
begin
l := list;
list := list^.next;
Dispose(l)
end;
start := nil
end;
procedure Delete;
var
l: plist;
begin
if start = nil then
exit;
l := list^.next;
begin
list := start^.next;
Dispose(start);
start := list
end
end;
procedure Search(d: real; var flag: boolean);
begin
list := start;
flag := false;
while (list <> nil) and (not flag) do
begin
if d = list^.data then
begin
flag := true;
break;
end
else
list := list^.next
end;
end;
begin
while true do
begin
ClrScr;
writeLn('Выберите действие');
writeLn('1 - Добавление');
writeLn('2 - Удаление');
writeLn('3 - Очистка памяти');
writeLn('4 - Вывод');
writeLn('5 - Поиск');
writeLn('6 - Выход');
writeLn('>>>>>');
Display;
gotoxy(7, 8);
readLn(i);
gotoxy(1, 10);
case i of
1:
begin
write('Введите значение ');
readln(b);
Add(b)
end;
2:
begin
write('Искомое значение ');
readLn(b);
Search(b, f);
if list = nil then
begin
writeLn('Список пуст');
readLn;
continue
end;
Delete;
end;
3: Clean;
4:
begin
ClrScr;
Display;
readLn;
end;
5:
begin
write('Искомое значение: ');
readLn(b);
Search(b, f);
if f then
writeln('Найденное значение: ', b)
else
writeln('Нет такого значения');
readLn;
end;
6:
begin
Clean;
break
end;
end;
end;
end.
Объяснение кода листинга программы
- В программе используется структура данных список, представленная типом plist.
- Функция Add добавляет новый элемент в список.
- Функция Display выводит элементы списка.
- Функция Clean очищает список.
- Функция Delete удаляет элемент из списка.
- Функция Search ищет элемент в списке.
- Программа предлагает пользователю выбрать действие и выполняет соответствующую операцию.
- Код программы реализован с помощью условного оператора gotoxy для перемещения курсора на нужную позицию на экране.
- В случае поиска элемента программа выводит сообщение
Найденное значение:, а затем просит пользователя ввести найденное значение.