Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

bobalo(1)

.pdf
Скачиваний:
588
Добавлен:
12.02.2016
Размер:
1.24 Mб
Скачать

Логічного: TRUE, FALSE Символьного: ’А’, ’S’, ’5’, ’9’.

Якщо у програмі використовуються іменовані константи, вони повинні бути описані у розділі визначення констант.

CONST Pi=3.141592;

E=2.72;

L1=FALSE;

Тип константи розпізнається компілятором автоматично за її значенням. Так, 5 буде цілого типу, ’5’ – символьного, 7.34 – дійсного, TRUE –

логічного.

Змінні використовуються для запису значень, які змінюються у процесі виконання програми.

Вибір імені (ідентифікатора) змінної бажано узгоджувати з її змістом. У Паскалі розрізняють прості змінні і змінні з індексами.

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

SVM, MAX, X, Y

Змінні з індексом – це елементи масиву, наприклад А[4], B[I].

Усі змінні, що використовуються у програмі, повинні бути описані у розділі опису змінних VAR:

VAR X,Y:REAL;

I,N:INTEGER;

T1, T2:BOOLEAN;

S1, S2:CHAR;

У мові Паскаль існує чотири стандартні прості типи: REAL – дійсний;

INTEGER – цілий; BOOLEAN – логічний; CHAR – символьний.

2.5. СТРУКТУРА ПАСКАЛЬ-ПРОГРАМИ

Паскаль-програма складається з:

1)заголовка програми;

2)тіла програми.

Заголовок програми призначений для ідентифікації окремих програмних продуктів і має такий вигляд:

PROGRAM <ім’я прогр.>(<ім’я вхідного файла>, <ім’я вихідного файла>);

41

Program

Ім'я

 

;

програми

 

 

 

 

 

(

Ідентифікатор

)

,

Рис. 2. Синтаксична діаграма заголовку Паскаль-програми

Тіло програми містить два розділи:

1)розділ описів і декларацій;

2)розділ операторів.

Оголошення

Begin

Оператор

End

.

 

 

;

 

 

Рис. 3. Синтаксична діаграма тіла програми мовою Паскаль

Розділ описів або оголошень містить:

1) опис міток: LABEL <мітка>,<мітка>;

LABEL мітка

,

Рис. 4. Синтаксиична діаграма опису міток

LABEL 5, 7;

Якщо в програмі міток немає, цей розділ відсутній.

2) визначення констант:

CONST<ідентифік.> = <константа>; <ідентиф.> = <константа>;

CONST

ідентифікатор

=

константа

;

Рис. 5. Синтаксиична діаграма розділу визначення констант

42

CONST Pi = 3.141592;

EX = 2.72;

Якщо в програмі іменованих констант немає – розділ відсутній. 3) опис типів даних:

TYPE<ідентиф.> = <тип>;

TYPE

ідентифікатор

=

тип

;

Рис. 6. Синтаксиична діаграма розділу опису типів

TYPE COLOR=(BLUE, GREEN, RED);

Якщо користувач не створює своїх типів, а використовує лише стандартні, то цей розділ відсутній.

4) опис змінних:

VAR <ідентиф.>, <ідентиф.>: <тип>;

,

VAR

ідентифікатор

:

тип

;

Рис. 7. Синтаксиична діаграма розділу опису змінних

VAR A, B, C: REAL; I, J:INTEGER;

S1:CHAR;

B1:BOOLEAN; MAS:ARRAY[1..20]OF REAL;

Треба пам’ятати, що всі змінні, які використовуються в програмі, необхідно описати в розділі опису змінних.

5) опис процедур або функцій:

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

Розділ операторів – це основний розділ програми, в якому відображається зміст поставленої задачі. Розділ операторів починається службовим словом

43

BEGIN і закінчується словом END. Оператори розділяються символом ‘;’ –

крапка з комою. Паскаль-програма закінчується крапкою ‘.’. Крапка – це команда для компілятора, що вже можна компілювати програму – вона закінчена.

BEGIN

оператор

END

.

;

Рис. 8. Синтаксиична діаграма розділу операторів

В одному рядку Паскаль-програми може бути як один, так і кілька операторів.

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

Проілюструємо структуру програми на прикладі програми обчислення суми чисел натурального ряду.

{Заголовок}

PROGRAM TEST (INPUT, OUTPUT);

{Розділ опису}

Var s, i, n : real;

 

BEGIN

 

WRITELN(‘Введи N’);

 

READLN(N);

{Розділ операторів}

S:=0;

 

FOR I:=1 TO N DO

 

S:=S+I;

 

WRITELN(‘S=’, S);

 

END.

Операції в алгоритмічній мові Паскаль

Залежно від типу операндів і типу результату розрізняють три групи операцій:

1)арифметичні операції;

2)операції порівняння;

3)логічні операції.

Арифметичні операції:

1.Унарні: +, - зміни знаку;

2.Бінарні: +, -, *, /, DIV, MOD виконуються над операндами цілого або дійсного типу.

44

Наприклад, 2+7 результат 9 цілого типу. 2.5+7=9.5 – результат дійсного

типу.

Треба зазначити, що операція ділення “/” дає результат дійсного типу, навіть якщо операнди будуть цілого типу: 5/2=2.5. Тобто перед виконанням операції ділення операнди 5 і 2 спочатку перетворюються до дійсного типу і тільки після цього здійснюється ділення.

Операції DIV і MOD виконуються тільки над операндами цілого типу.

5

2

 

 

 

 

 

4

2

 

 

 

 

5 div 2 = 2 (частка)

 

 

1

 

 

 

 

 

5 mod 2 = 1 (остача)

 

 

 

 

 

Тобто операція DIV дає результат ділення двох цілих чисел, а операція MOD – залишок від ділення двох цілих чисел.

Операції порівняння : <=, >, <>, <, >=, = можуть виконуватись над операндами будь-якого однакового типу. Результат виконання логічна константа TRUE або FALSE.

’А’ < ’В’ буде TRUE;

3.7 < 2.4 буде FALSE;

Але не можна виконати операції:

’А’ > 5, оскільки А – це символ, а 5 – ціле число. Але якщо записати: ’А’ > ’5’, то така операція вже має зміст, оскільки обидва операнди

однакового типу.

 

Логічні операції NOT, AND, OR виконуються над операндами логічного

типу і дають результат логічного типу: TRUE або FALSE. Наприклад:

 

(4>2) AND (5<3)= FALSE

 

 

 

 

 

 

 

TRUE FALSE

 

 

 

 

 

 

 

Операції визначаються так:

 

 

 

 

 

 

NOT

TRUE = FALSE

 

 

 

 

 

 

NOT

FALSE = TRUE

 

Операція AND:

 

 

 

 

 

 

 

 

AND

 

TRUE

FALSE

 

 

 

 

TRUE

 

TRUE

FALSE

 

 

 

 

FALSE

 

FALSE

FALSE

 

 

 

 

 

 

Операція OR:

 

 

 

OR

 

TRUE

 

FALSE

 

 

 

 

TRUE

 

TRUE

 

TRUE

 

 

 

 

 

FALSE

 

TRUE

 

FALSE

 

 

 

Зведемо всі операції в табл. 2.2.

 

 

 

 

 

 

 

45

 

 

 

 

 

 

 

 

 

 

Таблиця 2.2

 

 

 

 

 

 

 

 

Операція

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

Тип

 

 

 

 

 

 

операндів

 

результату

 

Додавання

+

 

INTEGER

 

INTEGER

 

Віднімання

-

 

або

 

або

 

Множення

*

 

REAL

 

REAL

 

Ділення

/

 

REAL або

 

REAL

 

 

 

 

 

INTEGER

 

 

 

 

 

 

 

 

 

Цілочисельне

 

DIV

 

 

 

 

ділення

 

 

 

 

 

 

 

Визначення

 

MOD

INTEGER

 

INTEGER

 

остачі від

 

 

 

 

 

 

 

ділення

 

 

 

 

 

 

 

Рівне

=

 

Будь-який

 

BOOLEAN

 

 

 

 

 

дискретний тип

 

 

 

 

 

 

 

 

 

Не рівне

<>

 

 

 

 

 

Більше

>

 

Будь-який

 

 

 

Більше рівне

>=

 

 

BOOLEAN

 

 

скалярний тип

 

 

Менше

<

 

 

 

 

 

 

 

 

 

Менше рівне

<=

 

 

 

 

 

Заперечення

 

NOT

 

 

 

 

Диз’юнкція

 

 

 

 

 

 

 

(Логічне “або”)

 

 

 

BOOLEAN

 

BOOLEAN

 

 

OR

 

 

 

Кон’юнкція

 

 

 

 

(логічне “і”)

 

 

 

 

 

 

 

 

AND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

За пріоритетом (старшинством) операції діляться на чотири групи:

1)Унарні +, -, NOT;

2)*, /, DIV, MOD, AND;

3)+, -, OR;

4)=, < >, >, >=,<, <=,

тобто найвищий пріоритет має операція логічного заперечення заперечення і унарні операції зміни знаку, а найнижчий – операції порівняння.

Операції однакового пріоритету виконуються послідовно зліва направо. Якщо треба підвищити пріоритет операції, то ця операція береться в дужки.

Так, у виразі

2 + 5 * A

- 4

спочатку виконується множення 5*А, тоді до 2

1

 

додається результат множення і третя операція –

2

 

 

від результату відняти 4.

3

 

У виразі :

 

 

(2 + 5 ) * (A - 4 )

спочатку виконуються операції в дужках, а

1

2

потім множення.

3

 

 

 

 

 

46

2.7.СТАНДАРТНІ ФУНКЦІЇ МОВИ ПАСКАЛЬ

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

Так, в алгоритмічній мові Фортран є більше сорока стандартних математичних функцій. Оскільки мова Паскаль не розроблялась для розв’язання задач математики, в цій алгоритмічній мові тільки 8 математичних функцій.

Для виклику стандартної функції вказують її ім’я і в дужках її аргумент.

Перелік стандартних функцій мови Паскаль, тип аргументів і результату наведено в табл. 2.3.

Треба пам’ятати, що функції знаходження попереднього PRED(X) і наступного SUCC(X) визначені тільки для впорядкованої послідовності:

PRED(8)=7;

SUCC(8)=9

PRED(’М’)=’L’

SUCC(’M’)=’N’

PRED(TRUE)=FALSE

SUCC(TRUE)= -

Оскільки логічні константи впорядковані як FALSE, TRUE, то константа TRUE наступного не має.

 

 

 

 

Таблиця 2.3

 

 

 

 

 

 

Виклик

Виконувана функція

 

Тип

 

 

 

аргумента

 

функції

 

ABS(x)

IxI

REAL або

 

REAL або

 

SQR(x)

x2

INTEGER

 

INTEGER

 

SIN(x)

Sin x

 

 

 

 

COS(x)

cos x

REAL або

 

 

 

EXP(x)

ex

 

REAL

 

LN(x)

ln x

INTEGER

 

 

 

 

 

 

SQRT(x)

x

 

 

 

 

ARCTAN(x)

arc tg x

 

 

 

 

TRUNC(x)

Виділення цілої частини

 

 

 

 

 

дійсного числа.

REAL

 

INTEGER

 

ROUND(x)

Заокруглення числа

 

 

 

 

 

 

 

 

 

 

 

 

PRED(x)

Знаходження поперед.

INTEGER

 

INTEGER

 

 

елемента

або CHAR

 

або CHAR

 

SUCC(x)

Знаходження

або

 

або BOOLEAN

 

 

наступного елемента

BOOLEAN

 

 

 

ORD(x)

Визначення коду

CHAR

 

 

 

 

символа або

 

 

 

 

або

 

INTEGER

 

 

порядкового номера

 

 

 

BOOLEAN

 

 

 

 

перелічимого типу

 

 

 

 

 

 

 

 

CHR(I)

Визначення символа

INTEGER

 

CHAR

 

 

по коду

 

 

 

 

 

 

 

ODD(x)

Визначення парності

 

 

 

 

 

числа

INTEGER

 

BOOLEAN

 

 

Непарне – TRUE

 

 

 

 

 

 

 

 

Парне – FALSE

 

 

 

 

47

2.8. ОПЕРАТОР ПРИСВОЮВАННЯ

Це один з найпростіших і найважливіших операторів алгоритмічної мови. Він слугує для обчислення значень виразів і присвоєння цього значення імені змінної V.

У загальному оператор присвоювання записується: V:=В,

де

В – вираз;

 

 

 

V – ім’я змінної;

 

 

 

:= – символ присвоювання.

 

 

 

 

 

 

 

 

Змінна

:=

Вираз

 

 

 

 

 

Рис. 9. Синтаксична діаграма оператора присвоювання

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

Залежно від типу змінної і виразу розпізнають три типи операторів присвоювання:

1)арифметичний;

2)логічний;

3)символьний.

Арифметичний оператор присвоювання слугує для присвоєння зна-

чення змінній арифметичного типу, тобто типу INTEGER i REAL.

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

Наприклад: A:=2*B+4.5-7.49*X+4*cos(X); Y:=A*(B-1)+S*9*C-2*sin(X); Y2:=EXP(2*X)-ln(4*B); S1:=SQRT(2/3*X+ln(5.7*X)); S3:=(EXP(2*X)-EXP(-2*X))/2; N:=2+I;

K:=K+1.

Якщо змінна V має тип REAL, то арифметичний вираз може бути типу REAL або INTEGER, оскільки ціле число перетворюється на дійсне, наприклад: A, B, C, D – описані як дійсні змінні

VAR A, B, C, D, X: REAL;

48

Оператори присвоєння записані коректно:

А:=2+7; В;=3/5; С:=2.75+9;

D:=sin(2*3.14+X);

Якщо змінна V має значення типу INTEGER, то і вираз праворуч має бути типу INTEGER. Оскільки ширший тип REAL не перетворюється автоматично на вужчий цілий тип.

Описано змінні:

VAR I, K, M, N: INTEGER; S: REAL;

Оператори присвоєння записані коректно:

К:=К+1; N:=2+K; M:=2+7;

Оператори присвоювання записані не коректно:

M:=2/5;

- результат ділення дійсного типу.

N:=S+2;

- S – дійсного типу.

K:=2.7*I;

- 2.7 – дійсного типу.

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

M:=ROUND(K/3);

буде записаний коректно.

Логічний оператор присвоювання. Якщо в лівій частині оператора вказана змінна типу BOOLEAN, то в правій частині повинен бути вираз, який дає результат TRUE або FALSE. У логічному операторі присвоювання фігурують операції порівняння і логічні операції, хоча можуть вживатися і арифметичні операції і стандартні функції.

Приклад логічних операторів, записаних коректно при описі змінних

VAR A, B, C, X, Y: REAL; K, L, I: INTEGER;

L1, L2, L3: BOOLEAN; SYM: CHAR;

BEGIN L1:=SQRT(A*A+B*B)>7; L2:=(2*Pi*X<1)AND(X>0); L3:=(X<0)AND(Y>0); L2:=TRUE;

49

Логічні оператори присвоювання, записані не коректно

L1:=X<0 AND Y>0; відсутні дужки, а операція AND має вищий пріоритет ніж операції порівняння.

L2:=(X<0)AND(SYM=5); змінна SYM описана як символ, а 5 –

це ціле число.

L3:=NOT B OR (X>Y); змінна В описана як дійсна, тому операція NOT до неї не може бути застосована.

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

Змінні, описанні як

VAR S1, S2, SYM: CHAR;

Символьні оператори записані коректно: S1:=SUCC(‘B’);

SYM:=’*’;

S2:=SYM;

Символьні оператори записані не коректно:

S1:=ORD(‘B’); стандартна функція ORD повертає ціле число – код символу ‘B’ в табл. 2.1.

S2:=PRED(5); 5 – ціле число, результат функції буде цілого типу. SYM:= S1+S2; операція ‘+’ не може використовуватись.

2.9. ПРИКЛАД ПРОГРАМИ МОВОЮ ПАСКАЛЬ

Написати програму для обчислення виразу:

Y=sin( 2x -lg (4x))3.

Значення X ввести з клавіатури, результат Y вивести на екран. Підготуємо вираз до запису алгоритмічною мовою Паскаль:

1. У мові Паскаль немає стандартної функції lg – десяткового логарифма. Тому перетворюємо десятковий логарифм на натуральний за формулою

loga x =

ln x

,

ln a

 

 

тобто lg x = ln10ln x .

У мові Паскаль немає стандартної функції піднесення до степеня, є тільки піднесення до квадрата. Тому піднесення до куба подамо через експоненту і логарифм:

50

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