
ПРОЦЕДУРНЕ ПРОГРАМУВАННЯ МОВОЮ TURBO PASCAL
Лабораторна робота №1
Програмування лінійних алгоритмів. Обчислення арифметичних виразів
Завдання: Обчислити значення арифметичного виразу
при заданих х та y.
Лінійним алгоритмом називається алгоритм, в якому статична послідовність дій співпадає з динамічною послідовністю дій. Алгоритми обчислення значень виразів є лінійними.
1. Структура Turbo Pascal програми.
Turbo Pascal програма складається з двох частин. В одній частині записуються алгоритмічні дії (ті, що вказані в блок-схемах алгоритмів), в іншій частині описуються дані, над якими виконуються дії. Описати дані означає вказати їх тип.
Тип даних – це характеристика даних, яка вказує на значення, які вони можуть приймати і які операції можна виконувати над ними.
Дані можна представити як сукупність елементів даних:
Дані::={елементи даних}.
Знак ::= означає означення чогось, { } - множину елементів довільної природи. Таким чином, дані - це множина елементів даних.
Елементи даних розділяються на константи та змінні. Константи - це елементи даних, значення яких визначається за час компіляції і не можуть змінюватися за час виконання програми. Змінні - це елементи даних, значення яких можуть змінюватися за час виконання програми. Значення змінних можуть визначатися за час компіляції (в цьому випадку вони називаються початковими значеннями), а можуть і не визначатися.
Використовуючи поняття констант та змінних, дані можуть бути визначені як
Дані::= {{константи};{змінні}},
тобто дані є множиною, елементи котрої є множина констант та множина змінних.
Дії задаються операторами, а дані визначаються описами. Turbo Pascal програма складається з розділів і має такий формат:
[program ім’я програми [(список параметрів)];]
[uses розділ]
[label список міток;]
[const розділ]
[type розділ]
[var розділ]
[розділ procedure’s та function’s]
begin
[список описів та операторів]
end.
Квадратні дужки [ ] означають, що вказане в них не є обов’язковим. Таким чином, найпростіша Turbo Pascal програма має такий формат:
begin
end.
Проте, ця програма нічого не виконує і немає ніякого практичного значення.
Розділи Turbo Pascal програми можуть повторюватися, записуватися в довільному порядку. Але все, що використовується в деякому місці повинно бути описане раніше.
Turbo Pascal програма може починатися з розділу program, в якому програма може бути поіменована, і в якому вказуються параметри програми, що забезпечують її зв’язок з навколишнім програмним середовищем. Розділ program не обов’язковий.
В розділі label описуються мітки операторів алгоритмічних дій. Розділ не обов’язковий, якщо в програмі немає операторів з мітками, і обов’язковий, якщо є хоча б один оператор з міткою. Оператор з міткою називається поіменованим оператором.
В розділі const описуються поіменовані константи, тобто константи, яким програміст призначає імена. Крім цих констант в програмі можна використовувати і наперед визначені константи. Це поіменовані константи з стандартними іменами, які призначаються самою системою Turbo Pascal. Змінним можна присвоїти початкові значення в розділі const з використанням типізованих констант.
В розділі type описуються типи даних. Типи даних, описаних в цьому розділі, називаються поіменованими типами. Типи даних можна описати в розділі VAR. В цьому випадку типи будуть непоіменовані.
В розділі var описуються дані за допомогою описів. В Turbo Pascal програміст може використовувати стандартні типи даних, які можна не визначати.
В розділі procedure’s та function’s програміст описує свої функції та процедури для запису алгоритмів-функцій та алгоритмів-процедур.
Крім своїх функцій та процедур програміст може використовувати стандартні функції та процедури з бібліотеки системи Turbo Pascal.
В розділі uses вказуються модулі, в яких знаходяться стандартні процедури та функції необхідні для даної програми, а також модулі, в яких знаходяться власні функції та процедури програміста.
2. Алфавіт мови Turbo Pascal
Алфавітом алгоритмічної мови називається сукупність символів та службових слів, які використовуються для запису програми:
Алфавіт::= {{символи}; {службові слова}}.
Основними символами алфавіту є великі та малі букви латинського алфавіту (A-Z, a-z), арабські цифри (0-9) та спеціальні символи (+ - * / = <> [] . , : та деякі інші). Крім цих символів можна використовувати і інші знаки, які не належать до основних символів (наприклад, букви кирилиці).
символи::= {{великі та малі букви латинського алфавіту};
{арабські цифри}; {спеціальні знаки}; {інші символи}}.
Службові слова::= {absolute, end, array, begin, case;
{решту службових слів}}.
Повний список службових слів приведений в підручниках та в документації системи програмування Turbo Pascal.
В службових словах великі та малі букви латинського алфавіту не розрізняються. Тому AND, and, And, AnD є одним і тим самим словом. З символів алфавіту програміст може утворювати ідентифікатори, які використовуються в якості імен змінних, констант, програм і т.д. Ідентифікатор - це сукупність символів, яка задовольняє таким умовам:
- сукупність може мати лише латинські букви, арабські цифри та знак підкреслення;
- першим символом може бути латинська буква або знак підкреслення;
- кількість символів не повинна бути більшою за 256, але значущими є лише 63. Останнє означає, що імена, в яких співпадають перші 63 символи, сприймаються однаковими.
Приклади правильних ідентифікаторів: Amax, matrix, X10, x, y, z.
Приклади неправильних ідентифікаторів: a+d (заборонений символ), Женя (заборонені символи, букви українського алфавіту), 45fg (перший символ не буква).
В ідентифікаторах, як і в службових словах, не розрізняються великі та малі букви латинського алфавіту.
Для пояснення дій в програмі програміст може використовувати (ні, він зобов’язаний використовувати) коментарі (ремарки). Коментар - будь-який текст між символами (*...*) або {...}. Коментарі можуть записуватися в будь-якому місці програми без розриву службових слів та ідентифікаторів. В тексті коментарів можна використовувати знаки (*, *), {,} з допустимими комбінаціями: {...(*...*)...} та (*...{...}...*).
3. Дані арифметичних типів
До даних арифметичних типів належать дані цілочисельних типів та дані дійсних типів. Цілочисельні дані можуть приймати цілі значення, дані дійсного типу – дробові значення. В програмуванні дробові значення називаються дійсними значеннями. Необхідно зауважити, що в математиці цілі числа є частковим випадком дійсних чисел. В програмуванні цілі та дробові числа є різними числами. Наприклад, з точки зору математики числа 3.0 та 3 є однаковими числами, а в програмуванні різні.
В Turbo Pascal допускаються цілочисельні типи даних з таблиці 1 та дійсні типи даних з таблиці 2.
Таблиця 1. Цілочисельні типи
Тип Найменування Формат
shortint коротке ціле КЦізЗ
byte байт КЦбЗ
integer ціле ЦізЗ
word слово ЦбЗ
longint довге ціле ДЦіз З
Таблиця 2. Дійсні типи
Тип Найменування Формат
real дійсний 6
single з одномірною точністю КД
double з подвійною точністю ДД8
extended з підвищеною точністю ДДД
comp складний 8
Константи цілочисельних типів використовуються для точного представлення цілих чисел і записуються за тими самими правилами, що і цілі числа в арифметиці. І тому в подальшому цілі константи будуть називатися цілими числами.
Цілі числа можуть бути поіменовані в розділі const. Є дві наперед визначені цілі константи: maxint=32767 та maxlongint=2147483647.
Змінні цілочисельних типів описуються в розділі var за допомогою опису
список змінних:тип з табл. 1;
Приклад.
var
m, n: integer;
m1, n1: byte;
Тут m і n описуються як змінні типу integer. Цим змінним дозволяється приймати цілі значення з діапазону –32768..32767. Намагання присвоїти цим змінним значень, що не належать цьому діапазону, приведе до фатальної помилки з припиненням виконання програми. Змінні m1 і n1 описуються як змінні типу byte, які можуть приймати значення з діапазону 0..255.
Змінним цілочисельних типів можна присвоїти початкові значення в розділі const з використанням типізованих констант цілочисельних типів:
ім’я типізованої константи:тип з табл. 1=значення;
Приклад.
const
n:byte=250; m:integer=3200;
В цьому прикладі описані типізовані константи n i m, значення яких визначається за час компіляції, які можуть бути змінені за час виконання програми. Тому типізовані константи фактично є змінними.
Константи дійсних типів використовуються для наближеного представлення дробових чисел і мають дві форми запису: форма з фіксованою крапкою (F-форма) та форма з плаваючою крапкою (Е-форма).
Змінні дійсних типів описуються в розділі var:
список змінних:тип з табл. 2.
Приклад.
var
x, y, z:real;
x1, x2:extended;
Описані змінні x, y, z типу real і x1, x2 – типу extended.
Змінним дійсних типів можна присвоїти початкові значення в розділі const з використанням типізованих констант дійсних типів:
ім’я типізованої константи:тип з табл. 2=значення;
Приклад.
const
h:real=0.1;
Описана типізована константа h типу real, значення якої визначається за час компіляції і може бути змінене за час виконання програми.
Над даними арифметичних типів можна виконувати арифметичні операції, які вказані в табл. 3.
В цих таблицях літера R позначає будь-який дійсний тип, а літера I – будь-який цілочисельний тип., Тип1 – тип першого операнда, Тип2 – тип другого операнда..
Перші чотири дії в таблиці 3 не вимагають жодних пояснень. Операція div дає цілу частину від ділення цілих чисел.
Приклад.
8 div 2=0,
18 div 7=2,
-56 div 5=11,
-34 div (-8)=4.
Операція mod дає залишок від цілочисельного ділення
Приклад.
45 mod 6=3,
-34 mod 3=-1,
34 mod (-3)=1,
-23 mod (-4)=-3,
23 mod (-4)=3,
Таблиця 3. Арифметичні дії над даними
цілочисельних типів
Операція Знак Тип1 Тип 2 Тип
результату
Додавання + R R R
R I R
I R R
I I I
Віднімання - R R R
R I R
I R R
I I I
Множення * R R R
R I R
I R R
I I I
Ділення / R R R
R I R
I R R
I I R
Цілочисельне
ділення div I I I
залишок від
цілочисельного
ділення mod I I I
З прикладів видно, що знак результату операції mod співпадає зі знаком першого значення. Вона зв’язана з операцією div
a mod b=a-(a div b)*b при a>0 і b>0.
Над даними цілочисельних типів можна виконувати побітові логічні операції (табл. 4), результат яких є цілочисельного типу.
Таблиця 4. Побітові операції над даними
цілочисельних типів
Побітова операція Знак операції
Логічна операція I and
Логічна операція АБО or
Виключаюче АБО xor
Інверсія НІ not
Зсув вправо shr
Зсув вліво shl
Якщо в рамках цілочисельних типів операнди арифметичних дій мають різний тип, то результат буде мати більш складний тип. Розподіл цілочисельних типів по складності
byte shortint зростання word складності integer longint
Аналогічно для дійсних типів, для яких розподіл по складності такий:
single real зростання double складності extended comp
Будь-який дійсний тип є більш складним ніж будь який цілочисельний тип.
Для побітових логічних операцій при різних типах операндів результат має більш простий тип.
Приклад.
Якщо a:byte; b:word; то a and b буде мати тип byte