Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx54 / Моя записка (2).docx
Скачиваний:
26
Добавлен:
01.08.2013
Размер:
242.54 Кб
Скачать

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;

Соседние файлы в папке docx54