
- •Алфавіт мови включає в себе:
- •Лексеми мови. Під лексемами розуміють елементарні конструктивні елементи програми, які є неподільними:
- •Оголошення підпрограм: функцій та процедур. Структурне програмування передбачає побудову програм, яка фактично буде послідовністю звертань до підпрограм.
- •Оператор присвоєння присвоює змінній значення виразу, в якості якого може використовуватися і константа, і змінна, і результат обрахування функції, і група операцій. Оператор має вигляд:
- •Складений оператор. Якщо потрібно деяку групу команд інтерпретувати, їх як одну команду, тобто об’єднати їх в певному контексті, то використовують складені оператори.
- •Оператори вводу-виводу. В мові програмування 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; {ініціалізація графіки}
- •Віртуальним варто оголошувати лише той метод, який:
- •Постановки задачі;
- •Наявними програмними ресурсами;
- •Вимогами по швидкодії, використанням ресурсів еом.
Постановки задачі;
Наявними програмними ресурсами;
Вимогами по швидкодії, використанням ресурсів еом.
Останній пункт означає, що обраний варіант програмування задачі повинен реалізувати її за найменший час або якомога менше використовувати ресурси оперативної та зовнішньої пам'яті. Зрозуміло, що час роботи програми в часових одиницях не є критерієм ефективності, оскільки він ще суттєво залежить від архітектури ЕОМ, тому цей варіант оцінювання ефективності проводять за кількістю так званих важких операцій даної задачі.
Враховуючи багатоманіття способів розв'язку конкретної задачі, потрібно володіти основними методами побудови алгоритмів та способами оцінювання їх ефективності. Окрім розглянутої часової ефективності це може бути критерій стійкості розв'язку, повноти розв'язку, оптимальності.
Тема: Метод повного перебору.
Застосовується так званих задачах вибору оптимального варіанту. Полягає у наступному: перебираються всі можливі варіанти розв'язку і для кожного з них визначається деяка цільова функція, яка має набувати
Переваги: простота методу як в алгоритмічному варіанті, так і в програмній реалізації.
Недоліки: в більшості випадків надзвичайно великий об’єм обчислень, що суттєво збільшує час роботи програми.
Наприклад. Пошук мінімального (максимального) елемента у масиві. Для п-елементів є величина порядку о(п). Для даної задачі чи не єдиний алгоритм розв'язку.
Задача „Комівояжер”. Дано п-пунктів, між якими є шляхи сполучення. Відомі вартості всіх сполучень, потрібно побудувати такий маршрут, що сполучає всі пункти лише по одному разу, при якому витрати будуть мінімальними.
Згідно з МПП перебираються всі можливі варіанти маршруту, для кожного з яких встановлюється цільова функція. В якості розв'язку буде той варіант, де функція мінімальна.
При програмуванні даної задачі за цим методом використовується п вкладених циклів по всіх можливих пунктах.
for i1=1 to n do
begin
f:=0;
for i2:=1 to n do
if i2<>i1 then
begin
f:=f+a[i1,i2]
for i3:=1 to n do
if i3<>i2 then
begin
... ... ... ...
if in<>in-1 then
f:=f+a[in-1,in]
end; ... end;
if f<min then min:=f;
end;
Даний фрагмент програми передбачає перебір всіх можливих значень величини f для різних варіантів маршрутів, змінна і має бути достатньо велике значення.
Цей варіант передбачає наявність всіх шляхів сполучень, тому у випадку відсутності частини шляхів сполучень потрібно передбачити вилучення тих варіантів, які не можливі за умовою.
Тема: Метод „розділяй і володарюй”.
Ідея методу полягає по розділені складної задачі на декілька окремих під задач, що має цілісну структуру. Такий поділ дозволяє отримати декілька простіших задач, кожну з яких можна окремо розв’язати. Остаточний розв'язок є об'єднанням всіх часткових розв’язків. Метод РІВ передбачає адитивний поділ. Кожна під задача має той самий характер, що і основна задача. Об'єднання часткових розв’язків виконується не комбінуванням а сумуванням.
Якщо ж поділ дає різноманітні задачі, метод виділення під цілей.
Наприклад. Обчислення площі п-кутника, що заданий координатами вершин.
п-кутник розбивається діагоналями на п-2 трикутники.
Зауваження. В розглянутому прикладі діагоналі проводяться з однієї вершини. Якщо многокутник опуклий, то вибір такої вершини для поділу на трикутники є довільним. У випадку не опуклого п-кутника в якості вершини поділу вибирається не опукла вершина. Якщо таких вершин буде декілька, то за методом РІВ п-кутник поділяється на к- та т-кутники між двома не опуклими вершинами.
Для перевірки не опуклості вершин можна скористатися одним з двох способів:
Якщо вершина і опукла, то пряма, проведена через вершини і та і+1 або і-1 та і матиме всі вершини лише по оду сторону, якщо ж вершина і є не опуклою, то відносно такої прямої решта вершин розмістяться по різні сторони. В програмній реалізації цього факту можна скористатися рівнянням прямої, що проходить через дві точки.
.
Якщо підстановка замість
вільних змінних по у та х координати
решти вершин
даватиме один і той же знак, то відповідна
вершина буде опуклою.
Сортування масиву. Розділення його на частини, по окремим впорядкуванням їх та наступним злиттям частин.
Виявляється дешевше сортувати два під масиви і об’єднати їх у впорядкований, а ніж сортувати весь масив вцілому.
Злиття
.
.
Фрагмент підпрограми має вигляд:
i:=1;
j:=1;
k:=1;
while (i<=N)and(j<=M)do
if a[i]<b[j] then
begin
i:=i+1;
k:=k+1
end
else
begin
c[k]:=b[j];
j:=j+1;
k:=k+1;
end;
while i<=N do
begin
c[k]:=a[i];
i:=i+1;
j:=k+1
end;
while j<=M do
begin
c[k]:=b[j];
j:=j+1;
k:=k+1;
end;
Тема: Метод послідовних наближень.
В ряді випадків розв’язок задачі не може бути знайдений абсолютно точно. Це може мати місце лише, якщо вхідні дані задачі визначені не точно. В процесі обчислення виконується округлення або взагалі задача немає точного розв'язку. В таких випадках користуються методом послідовних наближень, при цьому вибирається або довільним чином, або за певною умовою початкове наближення розв'язку, потім будується деякий алгоритм, який дозволяє за кожним попереднім наближенням розв'язку отримати наступне наближення. Такий процес уточнень продовжується до тих пір, поки буде досягнута необхідна точність результату.
Оскільки точний розв'язок в принципі
є невідомим, то користуються наступною
умовою припущення уточнень
.
Наприклад. Формула Ньютона-Рафоса для обчислення кореня квадратного для невід’ємного числа.
;
алгоритм Ньютона-Рафоса закладений в реалізацію функцій sqr, sqrt.
Обчислення значень функції за розкладом у ряд.
Для всіх неперервних функцій існує розклад у ряд по степеням аргументу.
.
Всі стандартні функції
мов програмування обчислюються саме
через розклад в ряд, оскільки в цьому
випадку операція зводиться до додавання
і множення. Умова зупинки процесу
обчислень
.
Обчислення визначеного інтегралу.
замінюється інтегральною сумою з
відповідним набором вагових коефіцієнтів.
В залежності від вибору квадратних
формул вагові коефіцієнти будуть такими:
h,
коли і=0,...,п-1 і 0, коли і=п;
h,
коли і=1,...,п і 0, коли і=0;
h/2,
коли і=0, і=п і h,
коли і=1,...,п-1;
h/3,
коли і=0,і=2к,2к=п і 2h/3,
коли i=2j,
j=1,…,n-1
i
4h/3,
коли i=2j+1,
j=0,…,n-1.
Обчислення інтеграла з заданою точністю можна проводити за таким алгоритмом: спочатку вибирається невелике число з п кількістю інтервалів розбиття, при заданому значенні обчислюється початкове наближення інтегралу за відповідною квадратичною формулою.
Тема: Метод найшвидшого „градієнтного” спуску.
В ряді випадків задач розв'язок легко отримати, роблячи щоразу черговий крок алгоритму в напрямі досягнення мети, при цьому встановлюється деякий порядок пріоритетів ходів. На кожному кроці наступний крок алгоритму встановлюється у певному у певному порядку, по-порядку пріоритетів ходів, який можливий на даному, тому цей метод називають найшвидшим спуском з аналізом пріоритетів напряму.