Лабораторная работа № 6.
Списки

1. Постановка задачи

Разработать модули для работы с однонаправленным и двунаправленным списками из элементов, попадающих в заданный диапазон и, возможно, упорядоченных заданным образом. Модули должны обеспечивать следующие возможности работы со списками:

На основе базовых операций со списками необходимо разработать следующие подпрограммы:

Разработать программу, к которой будут поочерёдно подключаться разработанные модули, при этом сама программа не должна меняться ни на один символ. Программа должна сделать следующее:

После каждого изменения выводить содержимое списка.

Имена файлов передаются через параметры программы.

Создать однонаправленный и двунаправленный списки из целых чисел в диапазоне от -20 до +60, упорядоченных по возрастанию абсолютной величины. Найти в списке элемент, кратный 5. Удалить из списка все элементы, кратные 5.

2. Таблица данных

2.1. Добавление элемента в начало списка/Добавление элемента в конец списка/Добавление элемента так, чтобы сохранялся заданный порядок

Класс Имя Смысл Тип Структура
Входные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная
info Информация для добавления в список TInfo составная переменная
Выходные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная

2.2. Удаление списка

Класс Имя Смысл Тип Структура
Входные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная
Выходные данные list Структура, содержащая указатели на первый и последний элемент списка. Указатели на первый и последний элемент списка должны быть равны nil запись составная переменная

2.3. Ввод элементов списка из текстового файла

Класс Имя Смысл Тип Структура
Входные данные name Имя файла строка простая переменная
Выходные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная

2.4. Вывод элементов списка на экран

Класс Имя Смысл Тип Структура
Входные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная

2.5. Поиск в списке указанного элемента

Класс Имя Смысл Тип Структура
Входные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная
Выходные данные first Указатель на первый элемент, удовлетворяющий условию указатель простая переменная
last Указатель на последний элемент, удовлетворяющий условию.
Для однонаправленного списка всегда равен nil
указатель простая переменная

2.6. Удаление элементов списка, удовлетворяющих условию

Класс Имя Смысл Тип Структура
Входные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная
Выходные данные list Структура, содержащая указатели на первый и последний элемент списка запись составная переменная

3. Аномалии

  1. Недостаточно параметров.
  2. Невозможно открыть файл для чтения.
  3. Некорректные данные в файле.
  4. Значения в текстовом файле не попадают в заданный диапазон – такие значения должны отбрасываться.
  5. Добавляемое значение не попадает в заданный диапазон – такие значения не должны добавляться.

4. Формат представления данных в файле

Целые и вещественные числа обязательно надо разделять либо пробелами, либо переводами строки. Символы либо надо разделять переводами строки – в этом случае следует использовать процедуру readln, либо не разделять ничем – в этом случае следует использовать процедуру read.

5. Тестовые примеры

№ теста Входные данные Ожидаемые результаты Смысл теста
1 0, 2, 3, -5, -7, 16 Первый элемент: 0
Последний элемент: -5
Есть элементы, удовлетворяющие условию. Первый элемент списка удовлетворяет условию.
2 3, -5, 8, -12, 24, 39, 44 Первый элемент: -5
Последний элемент: -5
Есть элементы, удовлетворяющие условию.
3 13, 9, 8, 24, -17 Нет элементов, удовлетворяющих условию.
4 -2, 3, 6, -13, 25, 33, 55 Первый элемент: 25
Последний элемент: 55
Есть элементы, удовлетворяющие условию. Последний элемент списка удовлетворяет условию.

6. Метод

Для нахождения первого элемента просматриваем список сначала. Выходим из цикла при нахождении элемента, удовлетворяющего условию. Если такого элемента нет, присваиваем указателю значение nil. Для нахождения последнего элемента всё делается аналогично, только двунаправленный список просматривается с конца.

Для удаления элементов, удовлетворяющих условию, также просматриваем список, и, если текущий элемент удовлетворяет условию, удаляем. Не забывайте рассматривать случаи, когда удаляемый элемент первый, последний или единственный.