- •Алфавіт мови включає в себе:
- •Лексеми мови. Під лексемами розуміють елементарні конструктивні елементи програми, які є неподільними:
- •Оголошення підпрограм: функцій та процедур. Структурне програмування передбачає побудову програм, яка фактично буде послідовністю звертань до підпрограм.
- •Оператор присвоєння присвоює змінній значення виразу, в якості якого може використовуватися і константа, і змінна, і результат обрахування функції, і група операцій. Оператор має вигляд:
- •Складений оператор. Якщо потрібно деяку групу команд інтерпретувати, їх як одну команду, тобто об’єднати їх в певному контексті, то використовують складені оператори.
- •Оператори вводу-виводу. В мові програмування 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; {ініціалізація графіки}
- •Віртуальним варто оголошувати лише той метод, який:
- •Постановки задачі;
- •Наявними програмними ресурсами;
- •Вимогами по швидкодії, використанням ресурсів еом.
Процедура примусового очищення внутрішнього буфера обміну
FLUSH (<файлова змінна>);
Здійснює скидання у файл останніх записуваних даних, але не закриває файл. При використанні flush можна перевідкрити файл для читання без його закривання після режиму запису.
Спеціальні підпрограми для роботи з типізованими файлами
Відкриваються і закриваються всі види файлів однаково.
Операції зчитування, запису і переміщення по файлу мають відмінності для різних видів файлів.
Типізовані файли умовно є послідовністю елементів деякого базового типу.
Розмір елемента визначається розміром його типу. Всі елементи у файлі умовно записуються в один рядок.
Для роботи з типізованими файлами використовують такі процедури і функції.
Розглянуті раніше встановлюючи та завершальні підпрограми
Процедура читання
READ (<файлова змінна>,<список параметрів вводу>);
Першим параметром процедури читання є файлова змінна, що представляє файл у програмі. Ця змінна повинна попередньо бути зв’язаною з конкретним файлом процедурою assign і цей файл має бути відкритим для читання процедурою reset .
Решта параметрів це перелікк змінних однакового типу, що співпадає з типом файлу. Кількість параметрів вводу має бути не меншою ніж кількість елементів у файлі від поточної позиції файлового вказівника до кінця, інакше помилка. Виклик цієї процедури переміщує файловий вказівник на відповідну кількість елементів.
Процедура запису у файл
WRITE (<файлова змінна>,<список параметрів виводу>);
Першим параметром процедури є файлова змінна. Ця змінна повинна попередньо зв’язана з конкретним файлом і цей файл повинен бути відкритим для читання або запису.
Якщо файл відкритий для запису, то всі дані стираються і запис виконується спочатку. Якщо ж файл відкритий для читання, то всі дані залишаються і файл відкривається для модифікації. Це має місце лише для типізованих файлів. Список параметрів виводу складається із довільної кількості змінних або констант, тип яких співпадає із типом файлу. Виконання процедури запису переміщує файловий вказівник на відповідну кількість записів, причому або дані перезаписуються поверх старих або доповнюються в кінець, причому елемент eof посувається.
Наприклад
Var
f: file of integer;
x, y, z: integer;
…
assign(f, ‘file int.dat’);
reset(f);
x:=3; y:=4; z:=5;
write(f,x,y,z);
Функція визначення розміру файла у записі
Операційна система легко повідомляє про розмір файла у байтах. Якщо ж потрібно встановити кількість елементів певного типу у цьому файлі
Очевидно, що простий поділ розміру файла у байтах є мало ефективним. Для цього виконується функція
FILESIZE(<файлова змінна>);
Якщо один і той самий файл зв’язати з різними файловими змінними різних типів, то результат функції буде різним.
Наприклад
Var
f1: file of integer;
f2:file of real;
x, y:longint;
assign(f1, ‘file.dat’);
reset(f1);
x:=filesize(f1);
close(f1);
assign(f2, ‘file.dat’);
reset(f2);
y:=filesize(f2);
close(f2);
функція визначення позиції файлового вказівника
Позиція вказівника визначає кількість елементів файла перед ним. Нумерація елементів починається з 0. якщо вказівник на початку, то його позиція співпадає із кількістю елементів.
FILEPOS (<файлова змінна>);
Процедура встановлення файлового вказівника в задану позицію
Якщо потрібно перемістити вказівник перед довільним k-тим елементом файлу, то користуватися k операціями читання буде не ефективною. Для цього викликають процедуру
SEEK (<файлова змінна>;<номер позиції>);
Другий параметр номер елемента, перед яким стає файловий вказівник.
Функція визначення кінця файла
EOF(<файлова змінна>);
Результат true, якщо eof в кінці файлу і false – якщо на будь-якій іншій позиції.
Оскільки в більшості випадків кількість елементів у файлі є невизначеною наперед, то для циклічних операцій з елементами файлу викликається оператор з передумовою
WHILE NOT EOF (<файлова змінна>) DO
Функція встановлення файлового вказівника в кінець файлу
SEEKEOF(<файлова змінна>);
Ця функція переміщує файловий вказівник в кінець і дає при цьому істинний результат. Хибний результат означає неможливість переміщення в кінець файлу.
Наприклад
Створити типізований файл цілих чисел, відкрити його для читання і знайти суму кожного п’ятого елементу.
Var
f: file of integer;
i, j, x: integer;
begin
assign(f, ‘file.dat’);
rewrite(f);
for i:=1 to 20 do
begin
readln(x);
write(f,x);
end;
close (f);
reset(f);
j:=0; x:=0;
while not eof (f) do
begin
read(f,i);
x:=x+i; j:=j+5;
if filesize (f) <=j then
seekeof(f) else seek (f,j);
end;
close(f);
writeln(x);
end.
