
- •Алфавіт мови включає в себе:
- •Лексеми мови. Під лексемами розуміють елементарні конструктивні елементи програми, які є неподільними:
- •Оголошення підпрограм: функцій та процедур. Структурне програмування передбачає побудову програм, яка фактично буде послідовністю звертань до підпрограм.
- •Оператор присвоєння присвоює змінній значення виразу, в якості якого може використовуватися і константа, і змінна, і результат обрахування функції, і група операцій. Оператор має вигляд:
- •Складений оператор. Якщо потрібно деяку групу команд інтерпретувати, їх як одну команду, тобто об’єднати їх в певному контексті, то використовують складені оператори.
- •Оператори вводу-виводу. В мові програмування Turbo Pascal ввід-вивід здійснюється насправді не операторами, а стандартними
- •Оператор розгалуження. В ряді випадків алгоритм розв’язку задачі передбачає розгалуження, тобто можливість виконання декількох різних дій в залежності від значення певної логічної умови.
- •Оператори циклу.
- •Програма знаходження суми чисел 1..10.
- •Програма друкування символів ‘a’..’z’.
- •Програма побудови таблиці істинності для and.
- •Скалярні / прості / стандартні типи даних:
- •Скалярні типи користувача:
- •Наприклад
- •4.Структурокані типи даних:
- •1 Діапазон – одновимірний масив;
- •2 Діапазони – двовимірний ( таблиці, матриці);
- •Наприклад
- •5.Комбіновані структури даних.
- •Варіантна частина у записі може бути лише одна і лише в кінці. Службове слово end є спільним для конструкції record і варіантної частини.
- •Приклади задач з масивами
- •Знайти середнє арифметичне додатніх і від’ємних елементів масиву цілих чисел.
- •Стандартні підпрограми обробки рядків
- •Операції над множинами
- •1. Процедури являють собою дію, тому їх можна використовувати в якості окремого оператора в розділі операторів програми.
- •2. Функції являють собою значення певного типу, крім цього вони можуть використовувати деяку дію, але значення їх є головним. Тому функції використовують як окремі оператори у виразах.
- •Параметри-змінні
- •Без типові параметри
- •Наявність умови зупинки, при якій деякому параметру рекурсії передається деяке значення рекурсії.
- •Чітко визначений алгоритм, при обчисленні кожного вищого рівня рекурсії через попередній рівень.
- •Типізовані.
- •Текстові.
- •Безтипові.
- •Процедура зв’язування певної файлової змінної із конкретним файлом на диску
- •Процедура відкриття файлу для читання
- •Процедура відкривання файлу для запису
- •Процедура закривання файлу
- •Процедура примусового очищення внутрішнього буфера обміну
- •Розглянуті раніше встановлюючи та завершальні підпрограми
- •Процедура читання
- •Процедура запису у файл
- •Функція визначення розміру файла у записі
- •Процедура відсікання хвостової частини файлу
- •Процедура читання з текстового файлу
- •Процедура запису
- •1. Процедура для перейменування файлів
- •2. Процедура видалення файлу
- •Xxxx0 адреса
- •35 Квартира з номером 34 у 13 будинку з номером 12.
- •Файли розміщуються в зовнішній пам'яті, а динамічні структури в оперативній.
- •Типізовані файли фактично є файлами прямого доступу, що означає довільний доступ до елементів. В динамічних структурах доступ до елементів виключно послідовний.
- •Здійснюватиметься рух по дереву до крайнього лівого елемента (найменшого).
- •Це значення друкується.
- •Робиться один крок вправо і послідовність 1-3 повторюється відносно нової поточної вершини.
- •Заголовок.
- •Інтерфейс на частина.
- •Розділ реалізації. В реалізації описуються всі компоненти мови, які мають бути невидимі зовні.
- •Процедури управління виконанням програм
- •Функції перетворення типів
- •Процедури і функції для змінних порядкового типу
- •Математичні функції
- •Процедури та функції роботи з рядками
- •Процедури та функції управління динамічною пам’яттю
- •Функції роботи з вказівниками і адресні функції
- •Процедури вводу-виводу і роботи з файлами і каталогами
- •Інші процедури і функції
- •Змінні та константи модуля
- •Змінні модуля crt
- •Процедури і функції модуля crt
- •Перепризначення файлів вводу-виводу
- •Процедури роботи з екраном
- •Процедури і функції управління курсором
- •Процедури роботи з рядками
- •Функції допиту клавіатури
- •Процедури управління кольором
- •Процедури управління вбудованим динаміком і таймером
- •Використання клавіш редагування рядків
- •Використання командних символі
- •Типи драйверів
- •Типи шрифтів
- •Ініціалізація графіки класифікація типів драйверів і відео режимів
- •Ініціалізація і завершення відеорежиму
- •Обробка помилок ініціалізації
- •Процедури роботи з відеорежимами
- •Переключення між текстовим і графічним режимами
- •Побудова зображень на екрані система координат
- •Управління поточним вказівником
- •Графічні вікна
- •Відображення точки на екрані
- •Відображення відрізків прямих ліній
- •Побудова прямокутників
- •Побудова многокутників
- •Побудова дуг, еліпсів і кіл
- •Робота з текстом
- •Відображення рядків
- •Відображення числової інформації
- •Управління параметрами зображення встановлення кольору
- •Встановлення палітри
- •Функції управління операційним середовищем
- •Процедури управління процесами
- •Процедури обслуговування переривань
- •Програми, резидентні в пам'яті
- •Процедури роботи з датою і часом
- •Процедури і функції перевірки стану диску
- •Процедури і функції роботи з файлами
- •Інші процедури і функції
- •Поля даних оголошуються на початку, а методи після них.
- •При оголошенні методів у структурі задаються лише заголовок відповідної підпрограми (подібно до інтерфейсу в модулях).
- •Окремі методи можуть використовувати інші методи цього ж об’єкта, тому вони повинні бути оголошенні в певному порядку.
- •Ini; {ініціалізація графіки}
- •Віртуальним варто оголошувати лише той метод, який:
- •Постановки задачі;
- •Наявними програмними ресурсами;
- •Вимогами по швидкодії, використанням ресурсів еом.
Здійснюватиметься рух по дереву до крайнього лівого елемента (найменшого).
Це значення друкується.
Робиться один крок вправо і послідовність 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-програми, але є певні відмінності. В модулях виділяють чотири розділи: