Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R4_КП_12.doc
Скачиваний:
8
Добавлен:
23.11.2018
Размер:
605.18 Кб
Скачать

ПЛАН

ОСНОВНІ КОНСТРУКЦІЇ МОВИ ПРОГРАМУВАННЯ 1

Базові поняття мови програмування 1

Структура програм 8

Введення-виведення інформації 12

Оператори 17

2.1 [ред.] Перевірка типів 31

2.2 [ред.] Прості типи даних 31

2.3 [ред.] Складні типи даних 31

2.4 [ред.] Діапазон числових типів даних 32

2.5 [ред.] Примітки 32

Основні конструкції мови програмування Базові поняття мови програмування

Мову програмування, як і будь-яку формальну мову, визначає три її складові: алфавіт, синтаксис (граматика) і семантика, що задають зовнішній вигляд програми і дії, які виконує комп'ютер під її управлінням.

Алфавіт мови програмування (її термінальний словник) - це фіксований набір символів, які дозволяється використовувати для утворення нетермінальних конструкцій мови (її нетерміналів).

Синтаксис – це сукупність правил побудови допустимих конструкцій мови програмування із символів її алфавіту.

Семантика – це правила тлумачення мовних конструкцій. Вони пояснюють, яке смислове значення має кожна мовна конструкція і які дії повинен виконати комп'ютер під час їх виконання (виконання команди програми).

Порушення форми запису програми приводить до її нерозуміння ПК і видачі повідомлення про синтаксичну помилку, а використання правильно написаних команд, але таких, що не відповідають необхідній послідовності дій, приводить до семантичних помилок (їх ще називають логічними помилками, а також помилками часу виконання).

При описі мови програмування і при побудові алгоритмів використовуються певні поняття мови. Такий підхід, до речі, застосовується і в шкільних курсах, зокрема, геометрії. Так, щоб визначити, що таке «прямокутний трикутник», треба ввести поняття «трикутник», «кут», «прямий кут», тощо.

В будь-якій мові програмування можна виділити наступні базові поняття:

  • алфавіт

  • лексеми

  • коментарі

  • елементи даних

  • операції

  • вирази

  • оператори (команди) - вказівка про виконання деякої дії. При написанні програм команди називають операторами, а величини, що використані в команді - операндами.

  • директиви компілятора.

Алфавіт мови. Зазвичай, алфавіт мови програмування (її термінальний словник) являє собою підмножину набору символів коду ASCІІ. Так алфавіт мови Рascal складають:

  • рядкові і прописні літери латинського алфавіту, арабські десяткові цифри (0 - 9), а також символ підкреслення (“_”), що служать для задання різних ідентифікаторів;

  • спеціальні символи (+ - * / = > < . , ; : ‘ ( ) [ ] { } ^ @ $ #), що використовуються для конструювання знаків операцій, виразів, коментарів, а також як синтаксичні роздільники;

  • символ пробілу (код 32), що використовується як роздільник;

  • керуючі символи (коди 0 - 31), що служать для задання різних специфічних дій.

Термінальний словник мови Рascal може бути описаний за допомогою наступних правил граматики:

<основний символ> ::= <літера> <цифра> <знак операції> <обмежувач> <роздільник>

<зарезервоване слово>

< літера> ::= a b c d e f g h i  j k l m n o p r s t u v w x y z

<цифра> ::= 0 1 2 3 4 5 6 7 8 9

<знак операції> ::= + -  / div mod not and or in := < <= | > >= | = @

<обмежувач> ::= ( ) [ ] begin end  ’ ’ . , ;  .. ^ :  $

<роздільник> ::= { } (* *) 

<зарезервоване слово> ::= and array case do downto else file for function goto if

label mod nil of procedure program record repeat set then to type until var while with

Відповідно до останнього правила всі зарезервовані слова1 повинні сприйматися як один термінальний символ.

Алфавіт мови С практично співпадає з алфавітом мови Рascal. Відмінності полягають, в основному, в наявності додаткових спеціальних символів (? ! | \ ~ % & “), які використовуються для конструювання знаків операцій, виразів, а також як синтаксичні роздільники, і відсутності символів @ та $. Мова С має також свій перелік зарезервованих слів.

Лексеми. Із символів алфавіту будуються лексеми (слова) - мінімальні значимі одиниці, утворені із символів алфавіту мови, що мають певний зміст (її нетермінальний словник). Розрізняють наступні види лексем.

Ідентифікатори. Це слова, що служать для задання імен програмних об'єктів (імен змінних, констант, підпрограм, програм тощо). Розрізняють: стандартні ідентифікатори, які вбудовані у мову (наприклад, для мови Рascal - write, real, sin, ...) і ідентифікатори користувача, які формує сам користувач. Будь-який із стандартних ідентифікаторів може бути перевизначений, але при цьому втрачається можливість користуватися відповідним вбудованим засобом.

Правила побудови ідентифікаторів для різних мов програмування можуть бути різними. Так, з точки зору синтаксису мови Рascal, ідентифікатор – це довільна послідовність літер латинського алфавіту, цифр і знака підкреслення, що починається з літери або з символу підкреслення і не містить пробілів:

<ідентифікатор> ::= <літера> _<ідентифікатор> <ідентифікатор><літера>

<ідентифікатор>< цифра>

Значимими при цьому є тільки перші 63 символи.

Ідентифікатори Рascal байдужні до регістра клавіатури, тому рекомендується застосовувати цю особливість на практиці для наочного їх задання. Зокрема, замість ідентифікатора nomerotdela, краще написати NomerOtdela, виділивши прописними буквами кожну із двох змістовних частин.

Принципова відмінність правил побудови ідентифікаторів у мові С: співпадаючі рядкові і прописні літери вважаються різними.

Числа. Це абстракція, яка використовується для кількісної характеристики об'єктів.

Числа можуть бути цілими або дійсними; додатними або від’ємними. Дійсні числа можуть бути представлені у формі з фіксованою або плаваючою крапкою.

Як у мові Рascal, так і у мові С конструкція <число> визначає допустиму форму запису чисел за допомогою наступних правил:

<число> ::= <число без знака> <знак><число без знака>

<число без знака> ::= <ціле без знака> <дійсне без знака>

<дійсне без знака> ::= <десятковий дріб> <десятковий дріб> <десятковий порядок>

<десятковий дріб> ::= <ціле без знака>.<ціле без знака>

<десятковий порядок> ::= Е < ціле без знака> Е <знак>< ціле без знака>

<ціле без знака> ::= <цифра> <ціле без знака><цифра>

<знак> ::= + -

Цілі числа можуть бути представлені у різних системах числення. Зокрема, у мові Рascal вони можуть задаватися у десятковій або шістнадцятковій системах числення (для позначення шістнадцяткових чисел як префікс використовується символ $, наприклад, $3E816 = 100010). У мові С цілі числа можуть бути представлені не тільки у десятковій та шістнадцятковій (починаються з префікса 0х або 0Х) системах числення, а й у вісімковій (починаються з префікса 0). Наприклад, 074, 0x2B.

Літерали (рядки символів). Це певним чином оформлена послідовність символів коду ASCІІ.

У мові Рascal літерали – це рядки символів, взяті в лапки (апострофи), наприклад, 'Приклад', ‘’ (порожній рядок); у мові С – вони беруться у подвійні лапки, наприклад, Приклад”.Рядок символів, який нічого не містить між обмежувачами (апострофами або подвійними лапками), є порожнім рядком.

БНФ-конструкція визначення даного поняття у Рascal:

<рядок>:: = '<послідовність символів>'

<послідовність символів>:: = <символ>  <послідовність символів><символ>

<символ>:: = <основний символ> 

Дві сусідні лексеми повинні бути відокремлені одна від одної одним і декількома роздільниками. Виняток - рядки, які можуть включати символ пропуску.

Специфічним видом лексем, що використовуються у програмах на мові С, є управляючі послідовності (Esc-послідовності) - спеціальні символьні комбінації, які використовуються у функціях введення і виведення інформації. Вони будуються на основі використання символа «\» (обов'язковий перший символ) і комбінації латинських літер і цифр. Наприклад, \n - символ нового рядка.

Коментарі. Це частина тексту програми, що виконує чисто інформаційну функцію, тобто, служить для пояснення використання об'єктів програми і дій над ними. Коментар являє собою певним чином виділену послідовність символів (не обов'язково з алфавіту мови), яка не обробляється компілятором.

БНФ даної синтаксичної конструкції для мови Рascal:

<коментар> ::= {<послідовність символів>} (*<послідовність символів>*)

Наприклад,

{Це коментар}.

У мові С – це послідовність символів, взята в дужки виду /* … */ (для багаторядкових коментарів) і відокремлена символами // (для однорядкових коментарів).

Елементи даних. Елементи даних – це найменші неподільні одиниці даних. Елементами даних, що обробляються в програмах, є константи і змінні.

Константи - дані, значення яких в процесі роботи програми залишаються незмінними (постійними). Константи характеризуються своїм значенням і, можливо, ім'ям (типізовані константи). Відповідна БНФ:

<константа> ::=<число><ідентифікатор><літерал>.

У найпростішому випадку константа являє собою число (123, 2.87), символ (‘A’), літерал (‘це рядок’), логічне значення (true, false).

Змінні - це дані, значення яких в процесі роботи програми можуть змінюватися. Змінні характеризуються ім'ям (ідентифікатором) і значенням (початковим, поточним). БНФ-конструкція

<ім’я змінної> ::= <ідентифікатор>

Операції. Для задання дій над даними служать операції.

Вони поділяються на унарні і бінарні. Унарні операції мають тільки один операнд (елемент даних), перед яким вказується символ операції (-7, not false). Більшість же операцій є бінарними, тобто містить два операнда (8 + с, k /9).

По характеру виконуваних дій операції можна розділити на декілька груп:

  • арифметичні,

  • порівняння,

  • логічні,

  • символьні тощо.

Арифметичні операції. Застосовуються до числових операндів. Їх перелік для мови Рascal наведений у табл.1, для мови С - у табл.2.

Таблиця 1. Арифметичні операції мови Рascal

Знак операції

Найменування операції

Приклад

Особливості реалізації

+

додавання

-

віднімання

*

множення

/

ділення

div

цілочисельне ділення

(ціла частина результату)

11 div 5 = 2

Результатом операції буде цілочисельне значення, що дорівнює цілій частині результату ділення першого операнда на другий (дробова частина відкидається)

mod

ділення з залишком

(залишок від ділення)

11 mod 5 = 1

Результатом операції mod буде цілочисельне значення, що дорівнює залишку, отриманому при цілочисельному діленні

Результат операції dіv завжди дорівнює нулю, якщо ділене менше дільника

Таблиця 2. Арифметичні операції мови С

Знак

операції

Найменування операції

Приклад

Особливості реалізації

+

додавання

-

віднімання

*

множення

/

цілочисельне ділення

5 / 2 = 2

5. / 2 = 2.5

Результатом ділення цілих чисел буде цілочисельне значення, що дорівнює цілій частині результату ділення першого операнда на другий (дробова частина відкидається); результат ділення дійсних чисел – дійсне число

Логічні операції. Застосовуються до логічних значень істина (true) або хибність (false). Їх перелік для мови Рascal наведений у табл.3, для мови С – у табл.4.

Таблиця 3. Логічні операції мови Рascal

Знак

операції

Найменування

операції

Приклад

Особливості реалізації

not

Логічне заперечення

not a

Результат протилежний значенню операнда

and

Логічне "і" (кон’юнкція, логічне множення)

a and b

Результат істина, якщо всі операнди істині

or

Логічне "або" (диз'юнкція, логічне додавання)

a or b

Результат істина, якщо хоча б один з операторів - істина

xor

Логічне виключаюче "або"

a xor b

Таблиця 4. Логічні операції мови C

Знак

операції

Найменування операції

Приклад

Особливості реалізації

!

НЕ (заперечення)

!a

Результат - протилежний значенню операнда

&&

І (логічне множення)

a&&b

Результат істина, якщо всі операнди істині

||

АБО (логічне додавання)

a||b

Результат істина, якщо хоча б один з операторів - істина

Дані логічні дії виконуються за правилами булевої алгебри:

Операнди

Операції

a

b

not a

a and b

a or b

a xor b

0

0

1

0

0

0

0

1

1

0

1

1

1

0

0

0

1

1

1

1

0

1

1

0

Основне призначення логічних операцій - побудова складних умов:

not (!) - змінює зміст логічного операнда на протилежний;

and (&& ) - використовується для перевірки істиності декількох компонент;

or (|| ) - служить для перевірки істиності хоча б однієї із компонент;

хоr - для перевірки нерівності / рівності компонент.

Операції порівняння. Застосовуються до числових або символьних операндів. Результатом цих операцій є логічне значення "істина" або "хибність". Перелік операцій порівняння для мов Рascal та С наведений у табл.5.

Таблиця 5. Операції порівняння мови Рascal

Знак операції

(Рascal)

Знак операції

(С)

Найменування операції

=

==

дорівнює

<>

!=

не дорівнює

<

<

менше

>

>

більше

<=

<=

не більше

>=

>=

не менше

Операції зсуву. Операції роботи з бітами. Перший операнд операції зсуву визначає величину, у якій потрібно виконати побітний зсув, а другий - вказує величину цього зсуву . При цьому біти, що звільняються, заповнюються нулями, а значення бітів, що вийшли за межі початкової величини, втрачаються.

Перелік операцій зсуву для мови Рascal наведений у табл.6, для мови С – у табл.7.

Таблиця 6. Операції зсуву мови Рascal

Знак

операції

Найменування операції

Приклад

Особливості реалізації

shr

Зсув вправо на задане число бітів

a shr b

Зсув бітів праворуч у числі а на b позицій.

Здвиг вправо на один розряд зменшує число в 2 рази (00000111>>1 = 00000011)

shl

Зсув вліво на задане число бітів

5 shl 2=20

Зсув бітів ліворуч у числі а на b позицій. Здвиг вліво на один розряд збільшує число в 2 рази, оскільки кожен i-й розряд має вагу 2i (00000111<<1 = 00001110)

Таблиця 7. Операції зсуву мови С

Знак

операції

Найменування операції

Приклад

Особливості реалізації

<<

Зсув вліво на задане число бітів

a<<b

Зсув бітів ліворуч у числі а на b позицій

>>

Зсув вправо на задане число бітів

a>>b

Зсув бітів праворуч у числі а на b позицій

Символьні операції. Застосовуються до літералів або до символів. У мові Рascal є одна така операція (табл. 8).

Таблиця 8. Символьні операції Рascal

Знак операції

Найменування операції

Приклад

+

Конкатенація

'A' + “CD” = “ABCD”

Бітові операції. Застосовуються лише до цілочисельних операндів. Їх перелік представлений у табл. 9.

Таблиця 9. Бітові операції мови С

Знак

операції

Найменування операції

Приклад

Особливості реалізації

~

Доповнення (заперечення бітів)

~6=-7

~6=~(+)00000110=(-)11111001=-7

&

І (логічне множення)

3&2=5

1&1=1, 0&1=0, 1&0=0, 0&0=0

|

АБО (логічне додавання)

3|2=3

1|1=1, 0|1=1, 1|0=0, 0|0=0

^

виключаюче АБО

3^2=1

1^1=0, 0^1=1, 1^0=1, 0^0=0

Операції приросту та спаду. Мова C має два незвичні оператори - приросту та спаду змінних. Оператор приросту ++ додає 1 до свого операнду, тоді як --, навпаки, віднімає 1.

Незвична сторона полягає в тому, що як ++, так і -- можуть використовуватись як префіксні оператори (перед змінною, наприклад, ++n), так і як постфіксні (після змінної, наприклад, n++). В обох випадках, як наслідок — збільшується значення n. Але вираз ++n збільшує n до того, як це значення буде використане, тоді як n++ збільшує n після того, як було використане початкове значення. Це означає, що в контексті, де дійсно використовується значення, а не тільки самий ефект, ++n і n++ — відмінні. Так, якщо n дорівнює 5, тоді

x = n++;

присвоїть x значення 5, зате у випадку

x = ++n;

x дорівнюватиме вже 6. В обох випадках, n стане рівним 6.

Оператори приросту та спаду можуть використовуватись тільки зі змінними; вирази на кшталт (i+j)++ заборонені.

Вирази. Ви́раз — це синтаксична конструкціїя мови, яка складається із даних (операндів) та знаків операцій, і служить для обчислення значення невідомої величини. Формалізація даного поняття за допомогою нотації БНФ:

<вираз> ::= [<операнд>] <операція> <операнд>

<операнд> ::= <змінна> | <константа> | <вираз>

У залежності від типів операндів і операцій розрізняють арифметичні, логічні, символьні вирази, вирази відношення та інші. Наприклад, (z > a1) and (z < b1) - умова перевірки приналежність змінної z інтервалe (a1, b1).

Послідовність виконання операцій у виразі визначається трьома факторами:

- пріоритетом операцій;

- порядком розташування операцій у виразі;

- використанням дужок.

Пріоритет операцій у різних мовах програмування дещо різний (табл.10 – для мови Рascal, табл.11 – для мови С). Зокрема, у С++ пріоритет операцій відношення більший, аніж логічних операцій, а у Рascal - навпаки.

Таблиця 10. Пріоритет операцій у мові Рascal

Пріоритет

Операції

Категорія операцій

Перший (вищий)

+ - not

унарні операції

Другий

* / div mod and

бінарні операції множення

Третій

+ - or xor

бінарні операції додавання

Четвертий (нижчий)

= <> < > <= >=

бінарні операції відносини

Таблиця 11. Пріоритет операцій у мові С

Пріоритет

Операції

Категорія операцій

Перший (вищий)

~ ++ -- + -

унарні операції

* / %

бінарні операції

+ -

бінарні операції

<< >>

бінарні операції

< <= > >=

бінарні операції

== !=

бінарні операції

&

бінарні операції

^

бінарні операції

|

бінарні операції

&&

бінарні операції

||

бінарні операції

Обробка виразів здійснюється у відповідності з наступними правилами:

  1. Операції з більш високим пріоритетом виконуються в першу чергу.

  2. Якщо операції у вираз мають однаковий пріоритет, то вони виконуються послідовно зліва направо.

  3. Частина виразу в круглих дужках виконується в першу чергу.

Окрім констант і змінних до числа операндів виразу відносяться функції - деяка обчислювальна процедура, на вхід якої передається набір допустимих аргументів, а на виході отримується єдиний результат - значення якого-небудь типу.

Подібно змінним, кожна функція має своє унікальне ім'я (ідентифікатор). Аргументами функції можуть бути будь-які вирази, але типи аргументів і їхня кількість визначаються ім'ям функції.

Кожна функція реалізується за допомогою підпрограми, що є або стандартною, або створеною користувачем. Відповідно до цього всі функції поділяються на стандартні та функції користувача.

Основні стандартні математичні функції у мові Рascal:

Функція

Опис

Примітка

abs (x)

sqr (x)

sqrt (x)

exp (x)

ln (x)

sin (x)

cos (x)

arctan (x)

trunc (x)

frac (x)

round (x)

Абсолютна величина числа

Квадрат числа

Квадратний корінь з числа

Експонента ех

Натуральний логарифм

Синус дуги

Косинус дуги

Арктангенс числа

Ціла частина числа

Дробова частина числа

Ціла частина числа

Тип результату збігається з типом аргументу

Тип результату збігається з типом аргументу

е = 2.7182818285

Десятковий логарифм: 0.43429448*ln (x)

Аргумент функції - у радіанах

Аргумент функції - у радіанах

Аргумент функції - у радіанах

Шляхом відкидання дробової частини

Шляхом округлення

У Рascal немає операції піднесення до степеню. Ця проблема частково вирішується наявністю функції sqr. Для піднесення модуля дійсного числа х, відмінного від 0, у до дійсного ступіню р можна застосовувати вираз: exp (р * ln (abs (х))).

Оператори (інструкції). Оператор - це команда мови програмування, якою задається певний крок процесу обробки інформації на ЕОМ.

Директиви компілятора. Це інструкції компілятору, що задають той чи інший режим обробки програми.

У мові Рascal директиви компілятору, як і коментарі, беруться в { }, але містять відразу після символа "{" символ "$" - за цією ознакою компілятор їх і розпізнає. За символом "$" у директивах компілятора вказується мнемоніка, що задає вид інструкції . Наприклад,

{$R -} - відключити перевірку діапазону індексів масивів;

{$I file.pas} - підключити текст підпрограми, що міститься у файлі file.pas .

У мові С обов’язковим елементом будь-якої програми є використання директив препроцесора2. Препроцесор – це частина компілятора, що виконує:

  • підключення бібліотечних файлів;

  • формування макровизначень;

  • умовну компіляцію тощо.

Починаються такі директиви з символа ”#”. Наприклад,

# include <ім'я> - підключення стандартних заголовних файлів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]