
- •Лабораторна робота № 1
- •Теоретичні відомості Середовище програмування TurboPascal.
- •Основні етапи, з яких складається сеанс роботи з програмою
- •Коди типових помилок
- •Елементи мови Pascal
- •Структура програми на мові Pascal
- •Стандартні типи даних
- •Прості програми
- •Оператор присвоєння
- •Арифметичні вирази
- •Оператори введення-виведення даних
- •Завдання до лабораторної роботи Робота у інтегрованому середовищі Turbo Pascal:
- •Формати виведення у процедурах Write і WriteLn
- •Завдання для індивідуальної роботи
- •Контрольні запитання
Структура програми на мові Pascal
Програма на мові Pascal складається з заголовка, розділів описової частини та виконуваної частини.
PROGRAM – Складена програма
USES – Бібліотеки, що підключаються (модулі)
LABEL – опис міток
CONST – опис констант
TYPE – опис типів
VAR – опис змінних
FUNCTION – опис функцій
PROCEDURE – опис процедур
BEGIN – початок виконуваної частини програми
<оператори програми>
END. – кінець програми
Тут ділянка, що починається словом PROGRAM та закінчується словом PROCEDURE, є розділом описів. Розділ описів містить необхідну інформацію про мітки, константи, типи даних, опис змінних (перелік імен із зазначенням типів), описи процедур та функцій. При цьому деякі пункти розділу описів, що не використовуються в конкретній програмі, можна не писати.
Розділ BEGIN…END – це виконувана частина програми. Тут наводяться оператори, що слугують для розв’язання задачі. Усі дані (мітки, константи, змінні та ін.), до яких звертаються оператори виконуваної частини Pascal-програми, обов’язково мають бути описані (наведені в розділі описів).
Розділи та оператори (окрім BEGIN) закінчуються крапкою з комою (;), а після кінцевого END ставиться крапка (.).
Заголовок та розділи описової частини є необов’язковими. Заголовок програми несе лише значеннєве навантаження, його надає програміст.
Для роботи з даними слід зарезервувати певний обсяг оперативної пам’яті комп’ютера, де зберігатимуться їхні значення. Тому всі дані, які використовуються у програмі, потрібно заздалегідь описати (оголосити), оскільки компілятор розподіляє пам’ять згідно з описами. Всі дані у програмі зберігаються у вигляді сталих та змінних. Як перші, так і другі визначаються ідентифікаторами (іменами), за допомогою яких можна звертатися для одержання відповідних даних.
Сталі (константи) – це елементи даних, значення яких визначені у описовій частині програми та не мінятимуться протягом виконання програми. Для опису констант слугує зарезервоване слово const.
Формат опису константи:
const <ідентифікатор> = <значення константи> ;
Приклад:
const max =1000 ;
Vxod=’Сегмент 5’ ;
Змінні – це елементи даних, типи яких визначені у описовій частині програми та значення яких мінятимуться протягом виконання програми. Змінна – це поіменована ділянка оперативної пам’яті комп’ютера, де зберігається значення деякої величини. Змінна має такі властивості: назву (ім’я), значення, тип. Кількість змінних та їх властивості задає користувач.
Формат оголошення змінної:
var <ідентифікатор або список ідентифікаторів> : <тип> ;
Приклад:
var Sum1, Sum2 : real;
x : integer ;
Тип визначає допустимі значення даного, операції, які можна над ним виконувати, й обсяг оперативної пам’яті, який резервується для нього.
Тип змінної визначає її допустимі значення, розмір відведеної для неї пам’яті та операції, які можна над нею виконувати. Тип констант компілятор автоматично розпізнає без попереднього опису.
Стандартні типи даних
Кожний елемент даних належить до одного із множини типів.
Всі типи даних поділяються на прості (скалярні) та складені (структуровані). Прості типи у свою чергу поділяються на стандартні та типи користувачів. Стандартні типи надаються користувачам розробниками мови (системи) програмування. Типи користувача розробляються самим програмістом.
Прості стандартні типи даних – цілі, дійсні, символьні, логічні.
До структурованих типів даних належать: масив, запис, множина, файл.
Стандартні типи даних мови Pascal
Таблиця 2
Стандартне ім’я |
Діапазон значень |
Необхідна пам’ять (байт) |
Цілі числові типи |
||
byte |
0..255 |
1 |
shortint |
-128..127 |
1 |
word |
0..65535 |
2 |
integer |
-32768..32757 |
2 |
longint |
-2147483648..2147483647 |
4 |
Дійсні типи |
||
real |
2.9*10E-39..1.7*10E38 |
6 |
single |
1.5*10E-45..3.4*10E38 |
4 |
double |
5.0*10E-324..1.7*10E308 |
8 |
extended |
1.9*10E-4951..1.1*10E4932 |
10 |
Символьний тип |
||
char |
множина символів кодової таблиці |
1 |
Логічний тип |
||
boolean |
false (хибність), true (істинність) |
1 |
Значення даних цілого типу подаються як десяткові числа записані без крапки. Перед від’ємним числом ставлять знак “-“. Приклади чисел цілого типу:
14 -357 0 5390
Змінні, які оголошені як змінні цілого типу даних, можуть приймати значення тільки цілого типу.
Приклад
Var x : byte; y : integer;
X:=65; y:=-5;
Змінна X не може набувати від’ємних значень, оскільки вони не входять до діапазону допустимих значень типу byte.
Над даними цілого типу можна виконувати такі арифметичні операції:
Таблиця 3
Пріоритет |
Символ операції |
Дія |
1 |
+ , - |
присвоєння знаку |
2 |
* / mod div |
множення звичайне ділення остача ділення без остачі |
3 |
+ - |
додавання віднімання |
Виконання кожної операції здійснюється з урахуванням пріоритету (1-найвищій). Операції одного пріоритету виконуються зліва направо. Для зміни звичайного порядку операцій використовують круглі дужки. Два знаки не можуть стояти поруч.
Наприклад:
13 div 3 = 4
13 mod 3 = 1
13 / 3 = 4.33
18 div 2 * 3 = 27
20+100/20*5 = 45
20+100/(20*5) = 21
Дійсні типи даних являють собою дійсні значення, які подаються як дійсні десяткові числа, що використовуються в арифметичних виразах. Припускається представлення дійсних значень у вигляді як із фіксованою крапкою, так і з плаваючою крапкою.
Дійсні десяткові числа із фіксованою крапкою записують за звичайними правилами арифметики, але ціла частина від дробової відокремлюється десятковою крапкою, а не комою. Якщо десяткова крапка відсутня, то число вважається цілим. Перед числом може знаходитися знак “+” або “–”. Якщо знак відсутній, за замовчуванням число вважається додатнім.
Приклад
5.04 -12.56 +5. -6.008 .0005
Дійсні десяткові числа із плаваючою крапкою подаються в такому (експоненціальному) вигляді n E ± k =n∙10 ± k, де n – мантиса (ціле або дробове число із фіксованою десятковою крапкою), E – означає “десять у степені”, k – порядок (ціле число).
Приклад
4 Е -5 = 0.00004, 0.62Е+4, -10.88Е12
Символи
Над даними дійсного типу можна виконувати такі операції
Таблиця 4
Пріоритет |
Символ операції |
Дія |
1 |
+ , - |
присвоєння знаку |
2 |
* / |
множення ділення |
3 |
+ - |
додавання віднімання |
Дані символьного типу можуть набувати значень таблиці ASCII кодів. Під дане символьного типу в пам’яті виділяється один байт, тому воно може приймати значення лише одного символу ASCII таблиці. Наприклад ‘a’, ‘7’, ‘&’. Тобто дане символьного типу – це символ, взятий у апострофи. Над символьними даними не визначені ніякі арифметичні операції, але вони можуть порівнюватися, брати участь у читанні та виведенні на друк, у операторах присвоєння.
Приклад
const s = ‘$’ ;
var ch1, ch2: char;
ch1:=’F’;
ch2:= s;
Усі стандартні типи крім дійсного є впорядкованими, тобто для кожного даного визначені наступне та попереднє значення.
Логічний тип характеризується двома значеннями false або true.
Крім стандартних типів даних компілятор мови Pascal підтримує типи, визначені користувачем. До них відносяться перераховані та інтервальні (діапазони) типи. Їх застосування значно покращує наочність програми, робить більш легким пошук помилок і економить пам’ять.
Перераховний тип даних – такий, за якого кількість усіх можливих значень обмежена (скінчена). Наприклад, тип Word відповідає цьому визначенню, оскільки має 65 536 значень – від 0 до 65535. Перераховними є також типи: Byte – 256 значень від 0 до 255 та Char – у ньому 256 символів із кодами від 0 до 255. Також можна перерахувати всі значення типів ShortInt, Integer і LongInt, починаючи з від’ємного цілого значення.
Визначеним перераховним типом є також логічний тип Boolean. У нього всього два значення – False та True. Номер False дорівнює 0, а номер True – 1.
Перераховний тип можна розписати в ряд за значеннями. Наприклад, для Char, Byte і Boolean правильно таке:
Type
Char = {симв 0, симв 1, ..., симв 64, ‘A’,’B’,’C’,…, симв 255};
Byte = {0, 1, 2,…, 254, 255};
Boolean = {False, True};
Ці визначення зроблені на етапі написання самого компілятора мови Pascal, і ми можемо ними користуватися. Крім того, є можливість вводити нові перераховні типи, надаючи їм імена та перераховуючи через кому в круглих дужках назви елементів-значень цього типу, наприклад:
TYPE
Counter ={first, second, third};
Test = {Leve l0,Leve l1, Leve l3, Leve l4, Leve l5};
Number = {N 1, N 2, N 3, N 4, N 5, N 6, N 7};
Тут вміст дужок – це значення нових типів. Далі можна оголошувати змінні цих типів, а їхніми значеннями можна індексувати масиви або організовувати за ними цикли. Але завжди змінна такого типу може містити тільки ті значення, що вказані при його перерахуванні.
Перераховні дані повинні мати синтаксис ідентифікаторів, і тому не можуть бути перераховними цифри, символи, рядки.
Використання перераховних типів має деякі переваги, а саме:
поліпшується змістовне сприймання програми;
більш чітко проводиться контроль значень;
перераховні типи мають дуже компактне машинне подання.
Для роботи з перераховними типами в мові Pascal використовуються функції Ord, Pred та Sucс. Їх дія базується на тому факті, що будь-який прераховний тип має внутрішню нумерацію. Перший елемент має завжди номер 0, другий – номер 1 і так далі. Порядок нумерації відповідає порядку перерахування. Номер кожного елемента можна отримати функцією Ord(x): LongInt, що повертає ціле число у форматі довгого цілого, де x – значення перераховного типу або змінна, що його містить. Для значень типу Char вона поверне їхній код, а для логічних значень – 0 або 1. Обернена функція для витягання значення за його порядковим номером у мові – chr. Приклад: ord(‘a‘)=65; ch(65)= ‘a‘. Вираз вигляду X:= <ім’я перераховного типу> (порядковий номер) запише в змінну X значення, що відповідає поданому порядковому номеру елемента перерахування. Крім того, є дві функції послідовного перебирання значень перераховного типу. Succ(X) – повертає наступне за X значення в перераховному типі; Pred(X) – повертає попереднє значення в перераховному типі. Вони можуть використовуватися до цілочислових значень і поліпшують роботу, наприклад, у виразах вигляду (N-1)*N*(N+1), які можна переписати, наприклад, у вигляді Pred(N)*N*Succ(N). Невизначеною є спроба отримати результат Succ (останній елемент перерахування) або Pred (перший елемент перерахування). Перераховні значення можна порівнювати між собою; більшим вважається той елемент, що має більший номер.
Інтервальні типи. Діапазони.
Діапазони вводяться на етапі написання програми і можуть визначати тип, що міститиме значення тільки з обмеженого піддіапазону деякого базового типу. Базовим типом, з якого беруться діапазони, може бути будь-який цілочисловий тип, тип Char та будь-який із введених нами перераховних типів. Щоб визначити діапазон, вказують у блоці TYPE ім’я цього типу та межі діапазону через дві крапки підряд:
TYPE
IR = 1..25;
Letters = ‘A’..’Я’;
Days = mon..sun;
Змінні таких типів можуть мати тільки значення у межах, визначених типом діапазонів, включаючи граничні значення. Це зручно, бо поліпшує контроль даних під час введення програми. При конструюванні діапазону в описі типу можна використовувати нескладні арифметичні вирази для обчислення меж. Але треба дотримуватися правила, щоб запис цього виразу не починався з дужки, бо дужка – це ознака початку перерахування.