- •Содержание
- •1 Задача №1.46
- •1.1 Постановка задачи и ее анализ
- •1.2 Описание структур данных
- •1.3 Проектирование программы
- •1.4 Результаты тестирования
- •2.4 Результаты тестирования
- •3.4 Результаты тестирования
- •4 Задача 4.7
- •4.1 Постановка задачи и ее анализ
- •4.2 Описание алгоритма
- •4.3 Проектирование программы
- •4.4 Результаты тестирования
- •Список использованных источников
1.4 Результаты тестирования
В результате тестирования мы убедились, что программа открывает файл, заносит данные из файла в список и корректно находит искомую информацию.
Результат поиска суммарной задолженности абонента приведен на рисунке 1.

Рисунок 1 – Поиск задолженности абонента.
1.5 Оформление
В данной задаче также используется графический интерфейс. За оформление отвечают дополнительные процедуры, такие как CHOSE, command и другие.
CHOSE - это процедура, которая отвечает за выбор пункта меню.
Command – это процедура, которая выводит список команд и окно помощи.
Меню можно увидеть на рисунке 2.

Рисунок 2 – Меню программы.
2 Задача №2.20
2.1 Постановка задачи и ее анализ
Задание:
Элементы стека – вещественные числа. Описать процедуру или функцию, которая: a) вычисляет среднее арифметическое всех элементов стека; b) удаляет из стека элементы со значением меньшим среднего арифметического.
Сперва создадим вспомогательную программу для создания файла вещественных чисел.
Затем пишем процедуру для занесения информация с файла в стек.
И в завершении пишем процедуры для решения данной задачи.
2.2 Описание структур данных
Для реализации данной программы необходимо использовать стек, имеющий следующую структуру:
type stack=^st;
st=record;
data: real;
next:stack;
end;
Структура содержит информационное поле data(хранит вещественные числа), а также поля next– указатели на следующий элемент стека.
2.3 Проектирование программы
В основной программе вначале напишем процедуру создание стека:
Листинг процедуры:
procedure create_stack(var u: stack; el: real);
var x: stack;
begin
new(x);
x^.data:=el;
x^.next:=u;
u:=x;
end;
Затем создадим две процедуры для решения данной задачи:
arifm_stack-это процедура, которая проходит все элементы стека и находит среднее арифметическое стека.
Листинг процедуры:
Procedure arifm_ctack;
begin
k:=0;
sum:=0;
kol:=0;
while u<>nil do
begin
inc(k);
kol:=kol+1;
sum:=sum+u^.data;
u:=u^.next;
end;
c:=sum/kol;
writeln('Среднеарифмитическое стека:',c:3:3);
end;
Процедура itog выполняет удаление элементов, которые меньше среднего арифметического.
Листинг процедуры:
procedure itog;
Begin
while stack1<>nil do
begin
p:=stack1;
if stack1^.data>=c then
create_stack(u,p^.data);
stack1:=stack1^.next;
delete(p);
end;
end;
И мы должны вывести результат выполнения этих процедур, с помощью процедуры print_stack:
Листинг процедуры:
procedure print_stack(u:stack);
begin
k:=0;
while u<>nil do
begin
inc(k);
writeln ('-->',u^.data);
u:=u^.next;
end;
end;
2.4 Результаты тестирования
При помощи дополнительной программы мы создаём файл с вещественными числами. В основной программе мы заносим данные в стек и при помощи процедур находим среднее арифметическое, удаляем элементы из стека меньше среднего арифметического и выводим результат на экран.
На рисунке 3 изображен пример работы данной программы.

Рисунок 3 – вывод итоговых данных на экран.
3 Задача №3.13
3.1 Постановка задачи и ее анализ
Вершины АВЛ–дерева – вещественные числа. Описать процедуру или функцию, которая: a) вычисляет среднее арифметическое всех вершин дерева; b) добавляет в дерево вершину со значением, вычисленным в предыдущей процедуре (функции).
Для решения данной задачи необходимо реализовать процедуру добавления элементов дерева, не забывая о балансе, и процедуру для подсчёта среднего арифметического дерева.
3.2 Описание структур данных
В данной программе необходимо реализовать АВЛ дерево. Описание его структуры представлено ниже:
type
PTree = ^AVLTree;
AVLTree = record
balancefactor:shortint;
key:real;
left,right:PTree;
end;
Структура содержит информационное поле key, а поля left и right – это левый и правый сыновья. Для удобства создаем также дополнительное поле, хранящее баланс дерева.
3.3 Проектирование программы
Для решения поставленной задачи необходимы следующие процедуры: AVLInsert, Sredn, graphOUT.
AVLInsert – процедура для добавления элемента в дерево.
Sredn – процедура для подсчёта среднего арифметического.
graphOUT – процедура для вывода дерева на экран.
Рассмотрим одну из процедур.
AVLInsert –добавление элемента в дерево. Данной процедурой мы пользуемся как в начале программы, для создания дерева, так и в конце, для добавления среднего арифметического в дерево.
Листинг процедуры:
Procedure AVLInsert(var Tree:PTree;x:real;var need_balance: boolean);
var
need_balance_cur:boolean;
begin
need_balance_cur:=false;
if Tree=nil then
begin
Tree:=NewNode(x);
need_balance:=true;
end
else
if x<Tree^.key then
begin
AVLInsert(Tree^.left,x,need_balance_cur);
if need_balance_cur then
begin
if (tree^.balanceFactor = leftheavy) then
UpdateLeftTree(tree, need_balance) else
if (tree^.balanceFactor = balanced) then begin
tree^.balanceFactor := leftheavy; need_balance := true;
end
else
begin
tree^.balanceFactor := balanced;
need_balance :=false;
end;
end
else
need_balance := false;
end
else
if x>Tree^.key then
begin
AVLInsert(Tree^.right,x,need_balance_cur);
if need_balance_cur then
begin
if (tree^.balanceFactor = rightheavy) then
UpdateRightTree(tree, need_balance) else
if (tree^.balanceFactor = balanced) then begin
tree^.balanceFactor := rightheavy;
need_balance := true; end
else
begin
tree^.balanceFactor := balanced;
need_balance :=false;
end;
end
else
need_balance := false;
end;
end;
