Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programuv_good.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
990.21 Кб
Скачать
  1. Здійснюватиметься рух по дереву до крайнього лівого елемента (найменшого).

  2. Це значення друкується.

  3. Робиться один крок вправо і послідовність 1-3 повторюється відносно нової поточної вершини.

Програмна реалізація алгоритму друку має вигляд процедури:

PROCEDURE OUTPUT (p:bintree);

BEGIN

if p^.left<>nil then OUTPUT(p^.left);

write(p^.inf,' ');

if p^.right<>nil then OUTPUT(p^.right);

END;

Пошук елементу за вказаним значенням подібний до алгоритму виведення, при цьому замість процедури друку використовується порівняння інформаційних полів.

PROCEDURE FIND (p:bintree; x:integer);

BEGIN

inc(i);

if p^.right<>nil then FIND(p^.right,x);

if p^.inf=x then

begin

write('є під номером(ами) ');

Str(i,d);

s:=s+d;

end;

if p^.left<>nil then FIND(p^.left,x);

if (p=top) and (s='') then writeln('елемент не знайдено');

END;

Щоб визначити ширину дерева достатньо здійснити рекурсивний рух вліво і вправо до кінця відносно вершини із підрахунком кількості кроків, а потім додати.

PROCEDURE MOVE_RIGHT(p:bintree);

BEGIN

if p^.right<> nil then

begin

k:=k+1;

MOVE_RIGHT(p^.right)

end;

END;

PROCEDURE MOVE_LEFT(p:bintree);

BEGIN

if p^.left<> nil then

begin

k:=k+1;

MOVE_LEFT(p^.left)

end;

END;

В основній програмі це буде мати вигляд:

n:=0;

k:=0;

MOVE_RIGHT(top);

MOVE_LEFT(top);

writeln('ширина :',n+k+1);

Процедура визначення висоти бінарного дерева буде мати вигляд:

PROCEDURE HIGHT(p:bintree;k:integer);

BEGIN

if p^.left<>nil then HIGHT(p^.left, k+1);

if k>h then h:=k;

if p^.right<>nil then HIGHT(p^.right,k+1)

END;

Для встановлення кількості висячих вершин використовують таку процедуру:

PROCEDURE LUSTOK(p:bintree;var l:word);

begin

if (p^.left=nil) and (p^.right=nil) then inc(l);

if p^.left<>nil then LUSTOK(p^.left,l);

if p^.right<>nil then LUSTOK(p^.right,l);

end;

Доповнення новим елементом проводиться так само як формування дерева.

Складність видалення пов’язана із тим, що приходиться аналізувати декілька можливих ситуацій:

а). Видалення висячої вершини найбільш проста. Вона передбачає встановлення у nil вказівника на елемент, що видаляється, для цього потрібно мати фіксований вказівник на попередній елемент.

Dispose(p^.right);

p^.right:=nil;

Dispose(p^.left);

p^.left:=nil;

б). Видалення напіввисячої вершини. При цьому всі елементи, що знаходяться нижче елемента, що видаляється підтягуються на один рівень вверх.

Тема: Модульний принцип організації програм.

Структурне програмування передбачає розділення алгоритмів на під алгоритми і програм на підпрограми. Такий поділ здійснюється не простим розділенням тексту програми на куски, а на логічно завершені цілісні компоненти. Об'єднання таких компонентів забезпечує об'єднання дій.

В ранніх компіляторах мови Turbo Pascal з'явилася перша можливість розділення програм на окремі модулі, при цьому в модулях зосереджувалися окремі компоненти мови, що пов'язувалися спільними властивостями.

Ці модулі окремо компілювалися і були доступними для всіх програм; це були свого роду бібліотеки інструментів мови програмування.

Пізніше модульний принцип став переважати у програмуванні і особливо з початком розробки складних програмних систем. Теперішні програми фактично є невеликим виконуваним файлом, який використовує багато різних бібліотек.

З розвитком мов програмування з'явилися бібліотеки динамічної компоновки.

В Pascal модулі є окремими програмними одиницями, але не самостійно виконуваними. Окремі їх компоненти використовуються головними програмами або іншими зовнішніми модулями.

Результатами компіляції є файл, компоненти якого готові до виконання. Такі файли мають розширення *.tpu (Turbo Pascal Unit). Всі модулі, що використовуються однією програмою або іншими модулями повинні бути оголошені

USES <ім'я модуля>;

При такому оголошені компілятор в процесі трансляції і компоновки програми у виконуваний модуль здійснює пошук готових відкомпільованих компонентів у цих модулях. Якщо ж ні сама програма, ні виконувані нею модулі не містять дійсних описань, тоді виникає помилка компілятора. Тема: Структура модуля.

Як вже відмічалося модуль подібний до Pascal-програми, але є певні відмінності. В модулях виділяють чотири розділи:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]