- •Содержание
- •1 Задача №1.57
- •1.1 Постановка задачи и ее анализ
- •1.2. Описание структур данных
- •1.3. Проектирование программы
- •2. Задача №2.14
- •3. Задача №3.24
- •3.1. Постановка задачи и ее анализ
- •3.2. Описание структур данных
- •3.3. Проектирование программы
- •Var WasNext: tTree;
- •4. Задача №4.34
- •4.1. Постановка задачи и ее анализ
- •4.2. Описание структур данных
- •4.3. Проектирование программы
- •Список использованных источников
Содержание
1 Задача №1.57_______________________________________________3
1.1. Постановка задачи и её анализ_________________________3
1.2. Описание структур данных____________________________3
1.3. Проектирование программы___________________________4
1.4. Результаты тестирования______________________________4
2 Задача №2.14_______________________________________________5
2.1. Постановка задачи и её анализ_________________________5
2.2. Описание структур данных____________________________5
2.3. Проектирование программы___________________________5
2.4. Результаты тестирования______________________________5
3 Задача №3.24______________________________________________6
3.1. Постановка задачи и её анализ________________________6
3.2. Описание структур данных___________________________6
3.3. Проектирование программы__________________________6
3.4. Результаты тестирования_____________________________8
4 Задача №4.34______________________________________________9
4.1. Постановка задачи и её анализ________________________9
4.2. Описание структур данных___________________________9
4.3. Проектирование программы__________________________9
4.4. Результаты тестирования____________________________10
5 Список использованных источников__________________________11
1 Задача №1.57
1.1 Постановка задачи и ее анализ
Составить программу, которая формирует двунаправленный список L, включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входят в другой. Списки реализовать через указатели.
1.2. Описание структур данных
Для реализации данной программы будем использовать двунаправленный список со следующей структурой:
type sp=^uk; //указатель на узел
uk=record; //структура узла
data: integer;
next,pred:sp; //указатели на следующий и предыдущий элемент
1.3. Проектирование программы
Для работы с двунаправленным списком я реализовала следующие функции и процедуры:
*Procedure Create (создание списка)
*Procedure Printf (вывод списка)
*Procedure DeleteNode (удаление элемента из списка)
*Procedure Sravn (сравнение элементов двух списков и удаление одинаковых)
*Procedure Unite (объединение списков)
Рассмотрим подробнее процедуру Sravn, которая является основой создания итогового списка:
Procedure Sravn(var st:sp; var st1:sp);
var cur,tp:sp;
begin
cur:=st;
tp:=st1;
while cur<>nil do //пока не дошли до конца
begin
while tp<>nil do //пока не дошли до конца
begin
if cur^.data=tp^.data then //если элемент второго списка равен элементу первого
begin
Deletenode(st,cur); //удаляем этот элемент из одного списка
Deletenode(st1,tp); //удаляем этот элемент из другого списка
end;
tp:=tp^.next; //переносим указатель
end;
cur:=cur^.next; //переносим указатель
tp:=st1;
end;
end;
1.4. Результаты отладки и тестирования программы.
Для проверки корректности выполнения программы были введены и занесены в 2 двунаправленных списка случайные числа: L1 – 1 3 5 7 9; L2 – 2 4 6 8 5 3. Полученный список: L – 1 7 9 2 4 6 8, результат слияния элементов, которые входят в один из списков L1 и L2, но в то же время не входят в другой. Следовательно, тест прошёл успешно, программа работает правильно (рис 1.1.):
Рис. 1.1. – Результат слияния двух списков