Робота з величинами. Введення-виведення виразів. Лінійні алгоритми



Сторінка2/8
Дата конвертації04.12.2016
Розмір1,28 Mb.
1   2   3   4   5   6   7   8

Цілі типи

integer

2

–32768..32767

+, –, /, *, Div, Mod, >=, <=, =, <>, <, >

byte

1

0..255

+, –, /, *, Div, Mod, >=, <=, =, <>, <, >

word

2

0..65535

+, –, /, *, Div, Mod, >=, <=, =, <>, <, >

shortint

1

–128..127

+, –, /, *, Div, Mod, >=, <=, =, <>, <, >

longint

4

–2147483648..2147483647

+, –, /, *, Div, Mod, >=, <=, =, <>, <, >

Дійсні типи

real

6

2,910–39 — 1,71038

+, –, /, *, >=, <=, =, <>, <, >

single

4

1,510–45 — 3,41038

+, –, /, *, >=, <=, =, <>, <, >

double

8

510–324 — 1,710308

+, –, /, *, >=, <=, =, <>, <, >

extended

10

3,410–4932 — 1,1104932

+, –, /, *, >=, <=, =, <>, <, >

Логічний тип

Boolean 1 true, false Not, And, Or, Xor, >=, <=, =, <>, <, >



Символьний тип

char 1 всі символи коду ASCII +, >=, <=, =, <>, <, >



Введення-виведення даних

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

У мові Pascal ця команда виглядає в такий спосіб:

Read(список змінних);

Наприклад,

Var


A : Real; B : Integer; C : Char;

Begin


Read(A, B, C)

End.


Читається: “Ввести дійсну А, цілу В и символьну С”.

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

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

Приклади уведення даних за допомогою процедури ReadLn:

ReadLn(A, B, C);

ReadLn(X);

ReadLn(LogPer);

Процедура, що виводить уміст змінних на екран, називається процедурою висновку на екран.

В Pascal ця команда виглядає в такий спосіб

Write (список констант й/або змінній, розділеній комі)

Наприклад Write ('Вихідне значення: ', C).

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

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

Приклади висновку даних:

Write(A, B, C);

WriteLn('Коренем рівняння є ', X);

WriteLn(LogPer);

Для керування розміщенням виведених значень процедури Write й WriteLn використаються з форматами. Під форматом даних розуміється розташування й порядок кодування окремих полів елементів даних.

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

WriteLn(A : N, B : M, C : L);

Тут N, M, L — вираження цілого типу, що задають ширину поля висновку значень.

При висновку речовинних значень оператор Write(R) без вказівки формату виводить речовинне R у поле шириною 18 символів у формі із плаваючої коми в нормалізованому виді. Для десяткового подання значення R застосовується оператор з форматами виду WriteLn(R : N : M). У десятковому записі числа R виводиться M (0  M  24) знаків після коми, усього виводиться N знаків.

Приклади:

WriteLn(N : 4);

WriteLn(K : 10:5, S : 7:3);

Загальна структура програми на Pascal така:

Program ім'я програми; {заголовок}

Const Константа1 = значення; {оголошення констант} {розділ описів}

Константа2 = значення;

...

Константа = значення;



Type ...; {оголошення типів}

Var Список змінних1 : Тип; {опис змінних}

Список змінних2 : Тип;

...


Список змінних : Тип;

Label Список міток;

Function ...

Procedure ...

Begin

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



End.

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



змінна := вираз;

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

Приклади присвоювання:

X := (Y + Z) / (2 + Z * 10) - 1/3;

LogPer := (A > B) And (C <= D);

В Pascal є операції цілочисленого ділення й знаходження залишку від ділення. При виконанні цілочисленого ділення (операція DIV) залишок від ділення відкидається.

Наприклад, 15 div 3 = 5; 18 div 5 = 3; 123 div 10 = 12, 7 div 10 = 0.

За допомогою операції MOD можна знайти залишок від ділення одного цілого числа на інше.

Наприклад, 15 mod 3 = 0; 18 mod 5 = 3; 123 mod 10 = 3, 7 mod 10 = 7.

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

Порядок дій при обчисленні значення вираження:
1)обчислюються значення в дужках;
2)обчислюються значення функцій;
3) виконується унарні операції (унарний мінус — зміна знака);
4) виконуються операції множення й ділення (у тому числі цілочисленого ділення й знаходження залишку від ділення);
5) виконуються операції додавання й віднімання.
Вбудовані математичні функції мови Pascal

Математичний запис Запис на Pascal Призначення

cos x cos(x) Косинус x радіан

sin x sin(x) Синус x радіан

ex exp(x) Значення e у ступені x

[x] trunc(x) Ціла частина числа x

|x| abs(x) Модуль числа x

x2 sqr(x) Квадрат числа x

sqrt(x) Квадратний корінь із x

{x} frac(x) Дробова частина x

arctg x arctan(x) Арктангенс числа x

ln x ln(x) Натуральний логарифм x

Pi Число π

Піднесення в ступінь (крім піднесення у квадрат і піднесення в ступінь числа e) відсутній. Для піднесення в довільний ступінь можна скористатися очевидною рівністю: xy=ey ln x. Для піднесення числа в натуральний ступінь можна написати власну функцію. Наприклад,

{Функція піднесення числа X у натуральний ступінь N}

Function Stepen(X : Real; N : Integer) : Real;

Var I : Integer; St : Real;

Begin

St := 1;


For I := 1 To N Do St := St * X;

Stepen := St;

End;

Інший спосіб одержати натуральне значення z=xy, де x, y — натуральні, це зробити так: Z := Round(Exp(Y * Ln(X))).



Примітка. Цікавим є завдання одержання ступеня будь-якого цілого числа (за винятком нуля), якщо підстава ступеня — ненегативне ціле, без використання розвилки. Одне з можливих рішень : (–1)*Ord(Odd(Y)) * Exp(Y * Ln(X)) + Ord(Odd(Y+1)) * Exp(Y * Ln(X)). Тут Ord(K) — функція, що повертає порядковий номер величини K у тім або іншому порядковому типі (у прикладі використане властивість, що порядковий номер False дорівнює 0, а порядковий номер True — 1).

Приклади запису математичних виразів:

Математичний запис Запис на Pascal

1. x2 – 7x + 6 Sqr(x) - 7 * x + 6

2. (Abs(x) - Abs(y)) / (1 + Abs(x * y))

3. Ln(Abs((y - Sqrt(Abs(x))) * (x - y / (z + Sqr(x) / 4))))

Логічні операції

Логічний операнд — це конструкція відповідної мови програмування, що задає правило для обчислення одного із двох можливих значень: True або False.

Найчастіше логічні вирази використовують в операторах присвоювання або для запису тієї або іншої умови. Складовими частинами логічних виразів можуть бути: логічні значення (True, False); логічні змінні; відносини.

Наприклад, 1) Y:=True; 2) Z:=False; 3) LogPer:=A > B; 4) Log1:=(A = B) And (C <= D).

Як видно із прикладів, відношення — це два вирази, розділених між собою знаком операції відношення (>, <, =, <>, <=, >=). Відношення є найпростішою конструкцією логічного вираження. Воно обчислює результат True, якщо виконується задане співвідношення, і False - у противному випадку.



Примітка. Незважаючи на те, що операції відношення =, <>, >=, <= визначені для дійсних типів, реально вони в більшості випадків коректно не працюють у силу того, що безліч дійсних величин, що представляються у пам'яті ЕОМ, дискретно. Тому їх треба, якщо це можливо, уникати. У тому випадку, коли все-таки для дійсних виникає необхідність обчислення зазначених відношень, розумно перевіряти дійсні величини не на рівність, а на близькість розташування друг до друга, тобто заміняти відношення виду A=B відношеннями виду |A-B|, де E — досить мале по абсолютній величині число (у загальному випадку — так називане машинне іпсилон).

У мові Pascal операції відношення визначені для величин будь-якого порядкового типу (цілі, символьний, логічний, перелічувальний, діапазон). Операції відношення можуть бути виконані також над строковими виразами. Порівняння двох рядків виконується посимвольно ліворуч праворуч відповідно до їхньої лексикографічної впорядкованості в таблиці кодів ASCII. Ця впорядкованість припускає, що "1"<"2", "a"<"b", "B"<"C" і т.д. Як тільки в процесі попарних порівнянь символів з однаковою порядковою позицією виявляється більший по коду ASCII символ, даний процес припиняється, і вважається, що рядок із цим символом відповідно більше іншого рядка. Якщо рядки мають різну довжину і їхні символи збігаються до останнього знака, то вважається, що більше короткий рядок менше.



Логічний вираз — це логічний операнд або послідовність логічних операндів, розділених між собою знаками логічних операцій (NOT, AND, OR, XOR).

Порядок дій при обчисленні значення логічного виразу:


1) обчислюються значення в дужках;
2) обчислюються значення функцій;
3) виконується унарні операції (операція NOT);
4) виконується операція AND;
5) виконуються операції OR, XOR;
6) виконуються операції відношень.

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

При реалізації деяких програм зручно використати функції, які мають логічне значення. Звичайно вони використаються для того, щоб на деяке питання одержати відповідь “ТАК” або “НІ”.

Наприклад, що випливає функція повертає True, якщо її аргумент - просте число, і False - у противному випадку:

Function Simple (Pr : Integer) : Boolean;

Var I : Integer; LogPer : Boolean;

Begin I := 2; {лічильник}

Repeat


LogPer := (Pr Mod I = 0); {логічна змінна, приймаюча значення TRUE, якщо число Pr складене}

I := I + 1

Until (I > Pr Div 2 + 1) Or (LogPer);

{цикл завершуємо в тому випадку, коли лічильник стає більше половини даного числа або виявляємо, що число складене}

Simple := Not LogPer

{значення функції дорівнює TRUE, якщо число просте, і FALSE - у противному випадку}

End;

Розглянемо приклади завдань, де алгоритм рішення є лінійним.



Завдання 1. Швидкість першого автомобіля v1 км/ч, другого — v2 км/ч, відстань між ними s км. Яка відстань буде між ними через t ч, якщо автомобілі рухаються в різні сторони?

Відповідно до умови завдання шукана відстань s1=s+(v1+v2)t (якщо автомобілі споконвічно рухалися в протилежні сторони) або s2=|(v1+v2)t-s| (якщо автомобілі спочатку рухалися назустріч один одному).

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

Program Car;

Var V1, V2, T, S, S1, S2 : Real;

Begin


Write ('Введіть швидкості автомобілів, відстань між ними й час руху:');

ReadLn(V1, V2, S, T);

S1 := S + (V1 + V2) * T;

S2 := Abs((V1 + V2) * T - S);

WriteLn('Відстань буде дорівнює ', S1:7:4, ' км або ', S2:7:4, ' км')

End.


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

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

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

Завдання 2. Записати логічний вираз, що приймає значення TRUE, якщо крапка лежить усередині заштрихованої області, інакше - FALSE.

Насамперед звертаємо увагу на те, що цю складну фігуру доцільно розбити на трохи більше прості: трикутник, що лежить в I й IV координатних чвертях і трикутник, що лежить в II й III чвертях. Таким чином, крапка може потрапити усередину однієї із цих фігур, або на лінію, їх обмежуючу. Кількість відношень, що описують деяку область, звичайно збігається з кількістю ліній, цю область обмежуючих. Щоб крапка потрапила усередину області, необхідна істинність кожного з відношень, тому над ними виконується операція AND. Так вся область була розбита на частини, тому між відношеннями, що описують кожну з них, використається операція OR.

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

(X >= 0) And (Y >= 1.5 * X - 1) And (Y <= X) OR (X <= 0) And (Y >= -1.5 * X - 1) And (Y <= -X)



Завдання 3. Обчислити значення виразу

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

Program Expression;

Var X, Z : Real;

Begin

Write('Уведіть значення змінної X: '); ReadLn(X);



Z := 6 * ln(sqrt(exp(x+1)+2*exp(x)*cos(x))) /

ln(x - exp(x+3) * sin(x)) + abs(cos(x) / xp(sin(x)));

WriteLn('Значення вираження: ', Z : 12:6)

End.


УМОВНИЙ ОПЕРАТОР
ПОВНА Й НЕПОВНА РОЗВИЛКА
ОПЕРАТОР ВИБОРУ

Оператор IF

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

IF <логічний вираз> THEN серія1 ELSE серія2;

Якщо логічний вираз, що виступає як умова, приймає значення False, то виконуються оператори, розташовані після else (серія2), якщо True, — оператори, що йдуть за then. При запису логічного виразу варто уникати знака = (дорівнює) для дійсних змінних, тому що вони представляються неточно, а тому може не відбутися збігів значень виразів, що стоять ліворуч і праворуч від знака дорівнює. Для усунення зазначеного недоліку варто вимагати виконання умови із заданою точністю, тобто замість відношення X = Y рекомендується, наприклад,

Abs(X - Y) < 1E-8.

Оскільки розвилка може бути неповною, то можлива й неповна форма запису умовного оператора:

IF <логічне вираження> THEN серія;

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



Завдання 1. Дано дійсні числа x, y. Якщо x й y від’ємні, то кожне значення замінити модулем; якщо від’ємне тільки одне з них, те обоє значення збільшити на 0,5; якщо обоє значення додатні й жодне з них не належить відрізку [0,5; 2,0], те обоє значення зменшити в 10 разів; в інших випадках x й y залишити без зміни.

Розробимо алгоритм рішення завдання, після чого напишемо програму.

Алгоритм запишемо словесно:

1) ввести значення x, y;

2) якщо x<0 й y<0, знайти їхні модулі й перейти до п. 5, інакше перейти до наступного пункту;

3) якщо x<0 або y<0, збільшити кожну величину на 0,5 і перейти до п. 5,

інакше перейти до наступного пункту;

4) якщо ні x, ні y не належать відрізку [0,5; 2,0], зменшити їх в 10 разів;

5) вивести значення x й y;

6) кінець.

 

Program Usl;



Var X, Y : Real;

Begin


Write('Введіть два дійсних числа '); ReadLn(X, Y);

If (X < 0) AND (Y < 0) THEN

Begin

X = ABS(X);



Y = ABS(Y)

End


ELSE

IF (X < 0) OR (Y < 0) THEN

Begin

X = X + 0.5;



Y = Y + 0.5

End


ELSE

IF NOT (((X >= 0.5) AND (X <= 2))

OR ((Y >= 0.5) AND (Y <= 2)))

THEN


Begin

X = X / 10;

Y = Y / 10

End;


WriteLn('Результат:'); WriteLn('X= ', X:10:6); WriteLn('Y= ', Y:10:6)

END.


Завдання 2. Дано дійсне число a. Обчислити f(a), якщо

Program Usl1;

Var A, F : Real;

Begin


WriteLn('Введіть дійсне число: '); ReadLn(A);

IF A <= 0 THEN

F = 0

ELSE


IF A <= 1 THEN

F = Sqr(A) - A

ELSE

F = Sqr(A) - SIN(Pi * Sqr(A));



WriteLn('Значення функції F(x) при x = ', A:10:6, ' дорівнює ', F:10:6);

END.


Оператор CASE

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

У конструкції CASE обчислюється вираження K і вибирається галузь, значення мітки якої збігається зі значенням K. Після виконання обраної галузі відбувається вихід з конструкції CASE. Якщо в послідовності немає мітки зі значенням, рівним K, то керування передається зовнішньому операторові, що випливає за конструкцією CASE (у випадку відсутності альтернативи ELSE; якщо вона є, то виконується наступний за нею оператор, а вже потім керування передається зовнішньому оператору).

Запис оператора вибору

CASE K OF

A1 : серія 1;

A2 : серія 2;

...


AN : серія N

ELSE серія N + 1

END;

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



Вираз K тут може бути будь-якого порядкового типу (нагадаємо, що до таких типів ставляться всі цілі типи, Boolean, Char, перелічувальний тип, діапазонний тип, що базується на кожному із зазначених вище типів).


Каталог: Documenty
Documenty -> Мета. Формувати розуміння того, що українська мова наш скарб, без якого не може існувати ні народ, ні Україна як держава. Розширювати знання про красу і багатство української мови. Ознайомити дітей з українськими обрядами і звичаями
Documenty -> Виступ на науково-пошуковій конференції “Типи учнівських проектів” заступника директора з нвр бойко Тетяни Петрівни
Documenty -> Урок №1 Растрова, векторна і фрактальна графіка. Історія анімації. Формати графічних і анімаційних файлів
Documenty -> Відомість про наукову, науково-методичну, дослідницьку роботу педагогічних працівників Вишнівської загальноосвітньої школи І-ІІІ ступенів №2
Documenty -> Затверджую: погоджено


Поділіться з Вашими друзьями:
1   2   3   4   5   6   7   8


База даних захищена авторським правом ©refos.in.ua 2019
звернутися до адміністрації

увійти | реєстрація
    Головна сторінка


завантажити матеріал