Теоретичний матеріал:
Вочевидь, що майже в будь-якій програмі будуть присутні обчислення,
адже комп'ютер - це перш за все обчислювальна машина. Причому результати
обчислень необхідно буде запам'ятати для подальшого використання. Для цього
існує команда присвоєння. Формат цього оператора наступний:
<ім'я
змінної> := <вираз>;
Виконується ця операція так: обчислюється
вираз, що знаходиться праворуч від знака присвоєння, і отримане значення замінює
поточне значення змінної, ім'я якої стоїть ліворуч від знака
присвоєння.
Зверніть увагу на те, що яким би складним не був вираз, він
повинен бути записаний у рядок. Звичайні дроби, багатоповерхові дроби, складні
функціональні залежності тощо у мові програмування записуються в один рядок,
причому порядок виконання дій контролюється за допомогою круглих дужок.
Наприклад, такий математичний вираз:
на мові Паскаль буде мати наступний вигляд:
(a-b)/(2*c+(a/(c+(b-5)/(c-b))))
А такий:
на мові Паскаль:
1E04*a-34.2*cos(beta).
Зверніть також увагу на те, що у всіх виразах обов'язково ставити
знаки множення, а імена змінних - це ідентифікатори і тому вони повинні
відповідати раніше зазначеним правилам (так грецька буква b, що використовується
в математиці, замінюється у вище наведеному прикладі ідентифікатором beta).
Дуже важливо при створенні виразів стежити за типами операндів. Як було
зазначено вище, тип даних дозволяє встановлювати внутрішній формат збереження
даних та контролювати дії, що виконуються над ними. Контроль за використанням
змінних на етапі компіляції програми виконується в мові Паскаль автоматично. З
одного боку - це її важлива перевага над іншими мовами програмування. Але з
іншого - іноді не зручно те, що Паскаль майже не дозволяє автоматичне
перетворення типів. Виключення зроблено тільки у відношенні до констант та
змінних цілих типів, що дозволяється використовувати у виразах дійсного типу.
Наприклад, якщо змінні X та Y описані наступним чином:
Var
X: integer;
Y: real;
то оператор
Y :=
X+2;
синтаксично не має помилок, хоча типи змінних і не співпадають.
Перетворення типів (з цілого у дійсний) в цьому випадку виконується автоматично.
В той же час оператор:
X := 2.78;
буде помилковим, тому що автоматичне перетворення дійсних типів у цілі не
виконується. Зверніть увагу, що константа 12.0 з точки зору компілятора буде
також дійсною, хоча дробова частина і дорівнює нулю, тому що константа містить
десяткову точку.
Аналогічно не можна змішувати літерні та числові типи даних,
тобто вираз типу:
5 + 'F'
являється помилковим.
Однак відсутність автоматичного
перетворення типів у Паскалі не означає, що він зовсім не має засобів
перетворення даних: просто їх необхідно використовувати явно. Так, для
перетворення значень одного скалярного типу в інший можна використовувати
наступні функції перетворення типів:
Chr(I) - перетворює цілий тип у
літерний, тобто повертає символ стандартного коду таблиці ASCII з
номером, що дорівнює значенню I. Якщо значення більше 255, виникає
програмне переривання.
Наприклад: Chr(105); результат='i'.
Ord(S) - для значень літерного типу S, функція Ord
повертає їх номер у відповідності з таблицею ASCII. Таким чином, літерний
тип перетворюється у цілий.
Наприклад: Ord('A'); результат =
65.
Trunc(X) - повертає найближче ціле число, яке менше або
дорівнює Х, якщо Х>=0, і більше або рівне Х, якщо
Х<0. Результат відноситься до цілого типу. Виходячи з цього наступний
оператор: X := Y/X;
буде помилковим (X, як описано вище, має цілий, а Y -
дійсний тип), а оператор
X := round(Y/X);
помилок не має. Зверніть
ще увагу на те, що операції DIV та MOD виконуються тільки з цілими
типами даних і спроба використати у якості операторів для них дійсні дані
призводить до помилки.
Наприклад, помилковими будуть вирази
1.5 div
3 (один з операндів - дійсне число)
5 mod Y (змінна
Y має дійсний тип)
4 / 1 div 2 (результатом
операції ділення 4/1 буде дійсне число 4.0)
Введення даних - це
передача інформації від зовнішнього носія в оперативну пам'ять для обробки.
Виведення - це зворотній процес, коли дані передаються після обробки
з оперативної пам'яті на зовнішній носій. У мові Паскаль стандартним засобом
спілкування людини з ЕОМ є консоль, що складається з таких пристроїв, як
клавіатура та екран монітора.
Процедура читання Read забезпечує
введення числових даних, символів, рядків і т.д. для наступної їхньої обробки.
Формат введення:
Read (x1,x2,...xn);
де x1,
x2,... xn - змінні допустимих типів даних,
Значення x1, x2,...xn
набираються мінімум через один проміжок на клавіатурі, при цьому вони
відображаються на екрані для контролю правильності введення. Після набору даних
однієї процедури Read натискається клавіша . Значення введених
даних повинні строго відповідати типам цих даних, інакше компілятор виводить на
екран повідомлення про помилку.
Якщо в програмі є декілька процедур
Read, дані для них вводяться потоком, тобто після зчитування даних для
однієї процедури Read дані для наступної процедури Read
набираються в тому ж рядку до закінчення рядка.
Процедура читання
Readln аналогічна процедурі Read, єдина відзнака полягає в тому, що
після зчитування останнього в списку значення для однієї процедури Readln
дані для наступної процедури Readln будуть зчитуватися з початку
нового рядка.
Процедура запису Write робить виведення числових даних,
символів, рядків і булівських значень на екран монітору.
Формат
виведення:
write (Y1, Y2,... Yn) - виведення на монітор;
де
Y1, Y2,... Yn - дані, що виводяться,
Процедура запису Writeln
аналогічна процедурі Write, але після виведення останнього в списку
значення для поточної процедури Writeln відбувається переміщення курсору
до початку наступного рядка.
Процедура Writeln, записана без
параметрів, виконує тільки переміщення курсору на початок наступного рядка.
Приклад:
Writeln('Y1=',Y1)
У процедурах виведення Write і Writeln
є можливість запису виразу, що визначає ширину поля для виведення. У
прикладах, що подаються далі, використовуються наступні умовні
позначення:
І -
ідентифікатор, що визначає ціле число,
R -
ідентифікатор, що визначає дійсне число,
р,q - цілі
константи, що визначають довжину поля виведення та кількість цифр після
десяткової крапки.
1. Виведення десяткового значення цілої величини I у крайні
праворуч позиції поля шириною р (проміжки перед числом вказані знаком
"_").
Значення I |
Вираз |
Результат |
134 |
write(I:6); |
___134 |
1 |
1 write(I:10); _________1 |
_________1 |
312 |
write(I+I:7); |
____624 |
2. Виведення у крайні праворуч позиції поля шириною р значення
дійсної величини R у форматі з фіксованою крапкою, причому після
десяткової крапки виводиться q цифр (0<=q<=24), що
представляють дробову частину числа. Якщо q=0, ні дробова частина, ні
десяткова крапка не виводяться. Якщо q>24, то при виведенні
використовується формат із плаваючою крапкою. Без використання форматування
число також виводиться у форматі з плаваючою крапкою
Значення R |
Вираз |
Результат |
511.04 |
write(R:8:4); |
511.0400 |
-46.78 |
write(R:7:2); |
_-46.78 |
-46.78 |
write(R:9:4); |
_-46.7800 |
Програма на мові Паскаль складається з рядків, максимальна довжина
яких не повинна перевищувати 127 символів. Програміст, набираючи текст програми,
має право розміщувати рядки на екрані довільно. Рядок може починатися з
будь-якої колонки. Кількість операторів у ньому довільна, причому
відокремлюються вони один від одного крапкою з комою. Однак для яснішого
сприйняття програми рекомендується розміщувати кожен оператор на окремому рядку,
а складені оператори взагалі виокремлювати, роблячи відступи.
Синтаксично програма складається з необов'язкового
заголовка і програмного блока, який у свою чергу
будується з двох частин:
описової;
виконавчої.
Блок, що не входить до складу
будь-якого іншого блоку, називається глобальним. Блоки, що
знаходяться в глобальному, називаються локальними.
Глобальний блок - це основна програма, він присутній обов'язково. Локальні
блоки - це процедури і функції (вивчатимуться пізніше), їх наявність не
обовя'зкова. Об'єкти програми (змінні, константи і таке інше) відповідно
називають глобальними і локальними. Область дії об'єктів - блок, де вони
описані, і усі вкладені в нього блоки.
На початку програми знаходиться
заголовок, що складається в загальному випадку з зарезервованого слова
Program та імені програми. Заголовок несе чисто змістовне навантаження і
може бути відсутнім.
Після заголовка знаходиться програмний
блок, що складається в загальному випадку із п'яти розділів, перші
чотири з яких - описова частина, а останній - виконавча. Склад цих блоків
наступний:
- список імен використовуваних бібліотечних модулів (програм, що
написані заздалегідь і можуть бути використані при розв'язуванні даної
задачі)),
- опис констант,
- опис типів користувача;
- опис змінних,
- опис процедур і функцій користувача,
- оператори.
Program <ім'я>;
Uses <ім'я1,
ім'я2>; {список використаних бібліотечних модулів}
Const
<
ідентифікатор > = < значення >;
Type
< ідентифікатор > =
< опис типу >;
Var
< ідентифікатор > : < тип >;
{
розділ опису підпрограм}
Begin
< оператори
>;
End.
Будь-який розділ, крім розділу
операторів, може бути відсутнім. Розділ uses завжди знаходиться в заголовку
програми. Решта розділів можуть зустрічатися в програмі будь-яку кількість разів
у довільному порядку. Головне, щоб всі описи об'єктів програми були зроблені до
того, як вони будуть використані.
Розділ uses складається
з зарезервованого слова Uses і списку імен стандартних бібліотечних
модулів та бібліотечних модулів користувача.
Формат
опису:
Uses < ім'я 1 >,< ім'я 2 >,...;
Бібліотечні модулі створюється заздалегідь і містять часто
використовувані програми. Вони можуть бути створені самим користувачем або кимсь
іншим В шкільному курсі ми використовуємо деякі зі стандартних модулів, що
створені розробниками мови Паскаль: Crt і Graph:
Crt - містить
засоби керування монітором у текстовому режимі, клавіатурою ПЕОМ, а також
звукові ефекти.
Graph - містить пакет графічних засобів, що
забезпечують ефективну роботу з екраном монітору у графічному режимі.
Як вже
зазначалося, у розділі опису констант робиться присвоювання постійних
значень ідентифікаторам констант. Розділ починається зарезервованим словом
Const, за яким записується ряд виразів, що надають ідентифікаторам
постійні числові або рядкові значення. Вирази присвоювання відокремлюються один
від одного крапкою з комою.
Формат
опису:
Const < ідентифікатор> = < значення
>;
Приклад: Const A = 10.25; Max = 1000;
V = 'Hello';
Кожна змінна, що зустрічається в програмі, повинна бути описана.
Опис обов'язково передує використанню змінної.
Формат
опису:
Var
< ідентифікатор,... > : < тип
>;
Приклад:
Var
A,S : real; n : integer;
У розділі
опису процедур і функцій розміщуються тіла підпрограм. Підпрограмою
називається самостійна програмна одиниця, що має унікальне ім'я, за яким вона
може бути викликана з інших частин програми. Більш докладніше робота з
підпрограмами буде розглянута пізніше.
У програмі на мові Паскаль розділ
операторів є основним. Він починається зарезервованим словом Begin
(початок), далі розміщуються оператори мови, відділені один від
одного крапкою з комою. Завершує розділ зарезервоване слово End
(кінець) і крапка:
Begin < серія >;
End.
В
будь-якому місці програми можуть вживатися коментарі. Це текст, за допомогою
якого програміст занотовує деякі пояснення для користувачів програми. Текст
коментарю обмежується символами { } або (* *) і може містити комбінації
латинських і російських літер, цифр і інших символів. В обмежувачах (* *)
проміжки між дужкою і зірочкою заборонені і крім того, у тексті не повинні
знаходитися знаки обмежувачів, з яких коментар починається. Обмежень на довжину
коментарю немає.