Початкові
відомості про програмування на мові Pascal h2>
Робота з
величинами. Введення-виведення. Вирази. Лінійні алгоритми h2>
Для програмної
обробки в ЕОМ дані представляються у вигляді величин і їх сукупностей.
Величина - це елемент даних з точки зору їх семантичного (смислового)
змісту або обробки. Значеннєве (семантичне) розбиття даних
проводиться під час постановки задачі і розробки алгоритму її рішення
(вхідні, вихідні та проміжні). Вихідні (вхідні) - це дані, відомі
перед виконанням завдання, з умови. Вихідні дані - результат рішення
завдання. Змінні, які не є ані аргументом, ні результатом
алгоритму, а використовуються тільки для позначення обчислюваного проміжного
значення, називаються проміжними. Разом з тим, архітектура ЕОМ,
використовуване програмне забезпечення вимагають вказати імена і типи даних --
цілий, дійсний, логічний і символьний. p>
Отже, з
поняттям величини пов'язані наступні характеристики (атрибути): p>
ім'я - це її
позначення і місце в пам'яті; p>
тип - безліч
допустимих значень і безліч застосовних операцій до неї; p>
значення --
динамічна характеристика, може змінюватися багаторазово в ході виконання
алгоритму. Під час виконання алгоритму в кожен конкретний момент величина
має якесь значення або не визначена. p>
Постійної
називається величина, значення якої не змінюється в процесі виконання
алгоритму, а залишається одним і тим же, зазначеним у тексті алгоритму. Змінній
називається величина, значення якої змінюється в процесі виконання алгоритму. p>
Тип вираження
визначається типами що входять до нього величин, а також виконуваними операціями. У
мовою Pascal тип величини задають заздалегідь, тому що всі змінні, що використовуються в
програмі, повинні бути оголошені в розділі опису із зазначенням їх типу. p>
Розрізняють
змінні наступних простих типів: цілі (Integer, Byte, ShortInt, Word,
LongInt), речові (Real, Comp, Double, Single, Extended), логічний
(Boolean), символьний (Char), що перераховуються, діапазонний. P>
Взагалі,
ієрархія типів у мові Pascal наступна: p>
p>
Оголошення
служать для компілятора джерелом інформації про властивості величин, які використовуються
в програмі, і встановлення зв'язку між цими величина і їх ідентифікатори,
фіксуючи тим самим конкретний зміст, запропонований різних ідентифікаторів в
програмі. Згідно з оголошеним змінним та їх кількості компілятор резервує
необхідний обсяг пам'яті для зберігання значень величин, над якими
виконуються необхідні операції. p>
Опис
змінної: ім'я змінної (ідентифікатор): тип; p>
Приклад
опису: p>
Var D, C, N: Integer; p>
LogPer
: Boolean; p>
A,
B: Real; p>
K: Char; p>
Тип змінної
визначає діапазон допустимих значень, прийнятих величинами цього типу;
набір операцій, допустимих над даною величиною і об'єм пам'яті, що відводиться під
цю змінну. p>
Кожен тип
має свій ідентифікатор. p>
Ідентифікатор p>
Довжина,
байт p>
Діапазон
(безліч) значень p>
Операції p>
Цілі
типи p>
integer p>
2 p>
-32768 .. 32767 p>
+, -, /, *, Div, Mod,> =, <=, =,
<>, <,> p>
byte p>
1 p>
0 .. 255 p>
+, -, /, *, Div, Mod,> =, <=, =,
<>, <,> p>
word p>
2 p>
0 .. 65535 p>
+, -, /, *, Div, Mod,> =, <=, =,
<>, <,> p>
shortint p>
1 p>
-128 .. 127 p>
+, -, /, *, Div, Mod,> =, <=, =,
<>, <,> p>
longint p>
4 p>
-2147483648 .. 2147483647 p>
+, -, /, *, Div, Mod,> =, <=, =,
<>, <,> p>
Речові
типи p>
real p>
6 p>
2,9 Ч10-39 - 1,7 Ч1038 p>
+, -, /, *,> =, <=, =, <>,
<,> p>
single p>
4 p>
1,5 Ч10-45 - 3,4 Ч1038 p>
+, -, /, *,> =, <=, =, <>,
<,> p>
double p>
8 p>
5Ч10-324 - 1,7 Ч10308 p>
+, -, /, *,> =, <=, =, <>,
<,> p>
extended p>
10 p>
3,4 Ч10-4932
- 1,1 Ч104932 p>
+, -,
/, *,> =, <=, =, <>, <,> P>
Логічний
тип p>
Boolean p>
1 p>
true, false p>
Not, And, Or, Xor,> =, <=, =,
<>, <,> p>
символьний
тип p>
char p>
1 p>
все
символи коду ASCII p>
+,
> =, <=, =, <>, <,> P>
Обмін
інформацією з ЕОМ передбачає використання певних засобів вводу-виводу.
У ЕОМ основним засобом введення є клавіатура, висновку - дисплея. P>
Процедура,
яка в режимі діалогу з клавіатури присвоює значення для змінної
величини, називається процедурою введення. p>
У мові Pascal
ця команда виглядає таким чином: p>
Read (список змінних); p>
Наприклад, p>
Var p>
A
: Real; B: Integer; C: Char; p>
Begin p>
Read (A,
B, C) p>
End. p>
Читається:
"Ввести речовинну А, В і цілу символьну С". P>
Як тільки в
програмі зустрічається виклик процедури Read, ЕОМ призупиняє виконання
цієї програми і чекає, поки користувач введе з клавіатури відповідні
значення, які по черзі будуть привласнюватися змінним, перелічених у
списку вводу. Значення даних, що вводяться одночасно відображаються на екрані
дисплея. Після натискання клавіші enter, коли всі змінні візьмуть свої значення
з вхідного набору даних, визначеного користувачем, виконання програми
триває з оператора, наступного за Read. p>
У списку вводу
значення розділяються між собою пробілом. Присвоєння значень з вхідного
потоку виконується зліва направо відповідно до порядку проходження
змінних у процедурі Read. Процедура ReadLn схожа на Read. Різниця лише в
те, що ReadLn реагує на кінець рядка, і у разі його виявлення
відбувається відразу перехід до наступного рядка. p>
Приклади введення
даних за допомогою процедури ReadLn: p>
ReadLn (A, B, C); p>
ReadLn (X); p>
ReadLn (LogPer); p>
Процедура,
яка виводить зміст змінних на екран, називається процедурою виведення на
екран. p>
У Pascal ця
команда виглядає наступним чином p>
Write (список
констант і/або змінних, розділених комою) p>
Наприклад Write
( 'Вихідна значення:', C). P>
У списку виводу
цих операторів може бути або один вислів, або послідовність таких
виразів, розділених між собою комами. p>
Процедура Write
здійснює висновок значень виразів, наведених в його списку, на поточну
рядок до її заповнення. За допомогою процедури WriteLn реалізується висновок значень
виразів, наведених в його списку, на один рядок дисплея і перехід до початку
наступний рядок. p>
Приклади виводу
даних: p>
Write (A, B, C); p>
WriteLn ( 'Коренем рівняння є', X); p>
WriteLn (LogPer); p>
Для управління
розміщенням виведених значень процедури Write і WriteLn використовуються з
форматами. Під форматом даних розуміється розташування і порядок кодування
окремих полів елементів даних. p>
Процедура
виведення з форматом для цілого типу має вигляд: p>
WriteLn (A: N, B:
M, C: L); p>
Тут N, M, L --
вираження цілого типу, що задають ширину поля виведення значень. p>
При виведенні
речових значень оператор Write (R) без зазначення формату виводить
речовий R в поле шириною 18 символів у формі з плаваючою комою в
нормалізованому вигляді. Для десяткового подання значення R застосовується
оператор з форматами виду WriteLn (R: N: M). У десяткового запису числа R
виводиться M (0 Ј M Ј 24) знаків після коми, всього виводиться N знаків. p>
Приклади: p>
WriteLn (N: 4); p>
WriteLn (K: 10:
5, S: 7: 3); p>
Загальна структура
програми на Pascal така: p>
Program ім'я програми; (заголовок) p>
Const Константа1
= Значення; (оголошення констант) (розділ описів) p>
Константа2 = значення; p>
... p>
КонстантаN = значення; p>
Type ...; (оголошення типів) p>
Var СпісокПеременних1
: Тип; (опис змінних) p>
СпісокПеременних2: Тип; p>
... p>
СпісокПеременнихN: Тип; p>
Label СпісокМеток; p>
Function ... p>
Procedure ... p>
Begin p>
(розділ операторів) p>
End. p>
Оператор
присвоювання - один з найбільш простих і найбільш часто використовуваних операторів у
будь-якій мові програмування, у тому числі і в Pascal. Він призначений для
обчислення нового значення деякої змінної, а також для визначення
значення, що повертається функцією. У загальному вигляді оператор присвоювання можна записати
так: p>
мінлива: =
вираження; p>
Оператор
виконується таким чином. Обчислюється значення виразу в правій частині
привласнення. Після цього змінна, зазначена в лівій частині, отримує
обчислена значення. При цьому тип виразу має бути сумісним з
присвоювання з типом змінної. Тип виразу визначається типом операндів,
що входять до нього, і залежить від операцій, які виконуються над ними. p>
Приклади
присвоювання: p>
X: = (Y + Z)/(2 + Z * 10) --
1/3; p>
LogPer: = (A>
B) And (C <= D); p>
Для операцій
додавання, віднімання та множення тип результату в залежності від типу операнда
буде таким: p>
Операнд
1 p>
Операнд
2 p>
Результат p>
Integer p>
Integer p>
Integer p>
Integer p>
Real p>
Real p>
Real p>
Integer p>
Real p>
Real p>
Real p>
Real p>
Для операції
поділу тип результату в залежності від типу операнда буде таким: p>
Операнд
1 p>
Операнд
2 p>
Результат p>
Integer p>
Integer p>
Real p>
Integer p>
Real p>
Real p>
Real p>
Integer p>
Real p>
Real p>
Real p>
Real p>
У Pascal є
операції цілочисельного поділу і знаходження залишку від ділення. При виконанні
цілочисельного поділу (операція DIV) залишок від ділення відкидається. p>
Наприклад, 15
div 3 = 5; 18 div 5 = 3; 123 div 10 = 12, 7 div 10 = 0. p>
За допомогою
операції MOD можна знайти залишок від ділення одного цілого числа на інше. p>
Наприклад, 15
mod 3 = 0; 18 mod 5 = 3; 123 mod 10 = 3, 7 mod 10 = 7. p>
При записі
алгебраїчних виразів використовують арифметичні операції (додавання,
множення, віднімання, ділення), функції Pascal, круглі дужки. p>
Порядок
дій при обчисленні значення виразу:
1) обчислюються значення в дужках;
2) обчислюються значення функцій;
3) виконується унарні операції (унарний мінус - зміна знака);
4) виконуються операції множення і ділення (у тому числі цілочисельного ділення
і знаходження залишку від ділення);
5) виконуються операції додавання і віднімання. P>
Вбудовані
математичні функції мови Pascal p>
Математична
запис p>
Запис
на Pascal p>
Призначення p>
cos x p>
cos (x) p>
Косинус
x радіан p>
sin x p>
sin (x) p>
Синус x
радіан p>
ex p>
exp (x) p>
Значення
e в ступені x p>
[x] p>
trunc (x) p>
Ціла
частина числа x p>
| x | p>
abs (x) p>
Модуль
числа x p>
x2 p>
sqr (x) p>
Квадрат
числа x p>
p>
sqrt (x) p>
Квадратний
корінь з x p>
(x) p>
frac (x) p>
Дробная
частину x p>
arctg x p>
arctan (x) p>
Арктангенс
числа x p>
ln x p>
ln (x) p>
Натуральний
логарифм x p>
p p>
Pi p>
Число p p>
Піднесення до
ступінь (крім зведення в квадрат і піднесення до степеня числа e)
відсутня. Для зведення в довільну ступінь можна скористатися
очевидним рівністю: xy = ey ln x. Для зведення числа в натуральну ступінь
можна написати власну функцію. Наприклад, p>
(Функція зведення числа X в
натуральну ступінь N) p>
Function Stepen (X
: Real; N: Integer): Real; p>
Var
I: Integer; St: Real; p>
Begin p>
St
: = 1; p>
For
I: = 1 To N Do St: = St * X; p>
Stepen
: = St; p>
End; p>
Інший спосіб
отримати натуральне значення z = xy, де x, y - натуральні, це зробити так: Z
: = Round (Exp (Y * Ln (X ))). p>
Примітка.
Цікавою є завдання одержання ступеня будь-якого цілого числа (за
винятком нуля), якщо основа ступеня - невід'ємне ціле, без
використання розвилки. Одне з можливих рішень: (-1) * Ord (Odd (Y)) * Exp (Y *
Ln (X)) + Ord (Odd (Y +1)) * Exp (Y * Ln (X)). Тут Ord (K) - функція, що повертає
порядковий номер величини K в тому чи іншому порядковому тип (у прикладі
використано властивість, що порядковий номер False дорівнює 0, а порядковий номер
True - 1). P>
Приклади запису
математичних виразів: p>
Математична
запис p>
Запис
на Pascal p>
1. x2 - 7x + 6 p>
Sqr (x) - 7 * x + 6 p>
2. p>
(Abs (x) - Abs (y))/(1 + Abs (x * y)) p>
3. p>
Ln (Abs ((y - Sqrt (Abs (x))) * (x - y/(z
+ Sqr (x)/4 )))) p>
Логічний
операнд - це конструкція відповідної мови програмування, яка
задає правило для обчислення одного з двох можливих значень: True або
False. P>
Найчастіше
логічні вираження використовують в операторах привласнення або для запису того
або іншої умови. Складовими частинами логічних виразів можуть бути:
логічні значення (True, False); логічні змінні; відносини. p>
Наприклад, 1)
Y: = True; 2) Z: = False; 3) LogPer: = A> B; 4) Log1: = (A = B) And (C <= D). P>
Як видно з
прикладів, ставлення - це два вирази, розділених між собою знаком
операції відносини (>, <, =, <>, <=,> =). Ставлення є
найпростішою конструкцією логічного виразу. Воно обчислює результат True,
якщо виконується задане співвідношення, і False - інакше. p>
Прімечаніе.Несмотря
на те, що операції відносини =, <>,> =, <= визначені для
речових типів, реально вони в більшості випадків коректно не працюють в
Внаслідок того, що безліч речових величин, представимо в пам'яті ЕОМ,
дискретно. Тому їх слід, якщо це можливо, уникати. У тому випадку, коли
все-таки для речових виникає необхідність обчислення зазначених
відносин, розумно перевіряти речові величини не на рівність, а на
близькість розташування один до одного, тобто замінювати відносини виду A = B
відносинами виду | AB |
У мові Pascal
операції відносини визначені для величин порядкового будь-якого типу (цілі,
символьний, логічний, перечіслімий, діапазон). Операції відносини можуть бути
виконані також над рядковими виразами. Порівняння двох рядків виконується
посимвольний зліва направо відповідно до їх лексикографічної
упорядкованістю в таблиці кодів ASCII. Ця впорядкованість припускає, що
"1" < "2", "a" < "b",
"B" < "C" і т.д. Як тільки в процесі попарних порівнянь
символів з однаковою порядкової позицією виявляється більший за кодом ASCII
символ, даний процес припиняється, і вважається, що рядок з цим символом
відповідно більше іншого рядка. Якщо рядки мають різну довжину і їх
символи збігаються до останнього знаку, то вважається, що більш короткий рядок
менше. p>
Логическое
вираз - це логічний операнд або послідовність логічних операндів,
розділених між собою знаками логічних операцій (NOT, AND, OR, XOR). p>
Порядок
дій при обчисленні значення логічного виразу:
1) обчислюються значення в дужках;
2) обчислюються значення функцій;
3) виконується унарні операції (операція NOT);
4) виконується операція AND;
5) виконуються операції OR, XOR;
6) виконуються операції відносини. P>
Дії
виконуються зліва направо з урахуванням їх старшинства. Бажана послідовність
операцій забезпечується шляхом розстановки дужок у відповідних місцях
вирази. p>
При реалізації
деяких програм зручно використовувати функції, які мають логічне
значення. Зазвичай вони використовуються для того, щоб на деякий питання одержати
відповідь "ТАК" або "НІ". p>
Наприклад,
наступна функція повертає True, якщо її аргумент - просте число, і False --
в іншому випадку: p>
Function Simple (Pr: Integer):
Boolean; p>
Var I:
Integer; LogPer: Boolean; p>
Begin I: = 2;
(лічильник) p>
Repeat p>
LogPer: = (Pr Mod I =
0); (логічна змінна, що приймає значення TRUE, p>
якщо число Pr
складене) p>
I: = I
+ 1 p>
Until
(I> Pr Div 2 + 1) Or (LogPer); p>
(цикл завершуємо в тому випадку, коли
лічильник стає більше половини p>
даного числа або виявляємо, що число
складене) p>
Simple: = Not LogPer p>
(значення функції одно TRUE, якщо число
просте, і FALSE - інакше) p>
End; p>
Розглянемо
приклади задач, де алгоритм рішення є лінійним. p>
Завдання 1.
Швидкість першого автомобіля v1 км/год, другий - v2 км/год, відстань між ними s
км. Яку відстань буде між ними через t ч, якщо автомобілі рухаються в
різні сторони? p>
Згідно
умові задачі шукане відстань s1 = s + (v1 + v2) t (якщо автомобілі спочатку
рухалися в протилежних сторін) або s2 = | (v1 + v2) ts | (якщо автомобілі
спочатку рухалися назустріч один одному). p>
Щоб отримати
це рішення, необхідно ввести вихідні дані, привласнити змінним шукане
значення і вивести його на друк. p>
Program Car; p>
Var
V1, V2, T, S, S1, S2: Real; p>
Begin p>
Write ( 'Введіть
швидкості автомобілів, відстань між ними і час руху :'); p>
ReadLn (V1,
V2, S, T); p>
S1
: = S + (V1 + V2) * T; p>
S2
: = Abs ((V1 + V2) * T - S); p>
WriteLn ( 'Відстань дорівнюватиме', S1: 7:4,
'Км або', S2: 7:4, 'км') p>
End. p>
Зауважимо, що
ідентифікатор повинен починатися з літери, крім латинських букв може
містити цифри, знак підкреслення (_). p>
Розумно, щоб
програма вела діалог з користувачем, тобто необхідно передбачити в ній
висновок деяких пояснювальних повідомлень. В іншому випадку навіть сам
програміст може через деякий час забути, що необхідно вводити і що
є результатом. p>
Для всіх
величин у програмі оголошений тип Real, що пов'язано з прагненням зробити
програму більш універсальною і працює з якомога більшими наборами
даних. p>
Завдання 2.
Записати логічне вираження, що приймає значення TRUE, якщо точка лежить
усередині заштріхованной області, інакше - FALSE. p>
p>
Перш за все
звернемо увагу на те, що цю складну фігуру доцільно розбити на
трохи більш прості: трикутник, що лежить в I і IV координатних чвертях і
трикутник, що лежить в II і III чверті. Таким чином, точка може потрапити
всередину однієї з цих фігур, або на лінію, що обмежує їх. Кількість
відносин, що описують будь-яку область, зазвичай збігається з кількістю
ліній, цю область обмежують. Щоб точка потрапила всередину області, необхідна
істинність кожного з відносин, тому над ними виконується операція AND. Так
вся область була розбита на декілька, то між відносинами, що описують
кожну з них, використовується операція OR. p>
Враховуючи
наведені тут міркування і записавши рівняння всіх обмежують фігуру
ліній, отримуємо шукане логічне вираження: p>
(X> = 0) And (Y> = 1.5 * X --
1) And (Y <= X) OR (X <= 0) And (Y> = -1.5 * X - 1) And (Y <=-X) p>
Завдання 3.
Обчислити значення виразу p>
p>
Для вирішення
завдання достатньо ввести всі дані, безпомилково записати вираз і вивести
результат. Примітка. При вирішенні цього завдання не враховується область
визначення вираження, вважається, що вводяться тільки допустимі дані. p>
Program Expression; p>
Var X, Z:
Real; p>
Begin p>
Write ( 'Введіть значення
змінної X: '); ReadLn (X); p>
Z: = 6 *
ln (sqrt (exp (x +1) +2 * exp (x) * cos (x)))/ p>
ln (x - exp (x +3) * sin (x)) + abs (cos (x)
/ Exp (sin (x ))); p>
WriteLn ( 'Значення виразу:', Z: 12:
6) p>
End. p>
Контрольні
питання і завдання p>
1. Що таке
величина? p>
2. Які
величини називають аргументами? результатами? проміжними величинами?
Наведіть прмери. P>
3. Які
атрибути величини? p>
4. Які
величини називають постійними? змінними? Наведіть прмери. P>
5. Які
прості типи величин існують в мові Pascal? p>
6. Що
визначає тип величини? p>
7. Розкажіть про
простих типи даних та їх атрибути. p>
8. Як
здійснюється введення даних в мові Pascal? Наведіть прмери. P>
9. Як
здійснюється виведення даних в мові Pascal? Наведіть прмери. P>
10. Яка
загальна структура програми в мові Pascal? p>
11. Розкажіть
про оператора присвоювання та сумісності типів. p>
12. Що таке
формат виводу? p>
13. Розкажіть
про правила обчислення алгебраїчного вирази. Наведіть прмери. P>
14. Розкажіть
про правила обчислення логічного виразу. Наведіть прмери. P>
15. Розкажіть
про логічних операціях. Наведіть прмери. P>
16. Наведіть
приклади завдань, що мають лінійний алгоритм рішення. p>
17. Визначте,
який сумарний обсяг пам'яті потрібно під змінні в кожному з прикладів 1-3. p>
18. Яке
призначення наступної програми? p>
Program Example; p>
Var N:
100 .. 999; p>
Begin Write ( 'Введіть
натуральне тризначне число: '); ReadLn (N); p>
WriteLn ( 'Бажаєма величина:', N
Div 100 + N Div 10 Mod 10 + N Mod 10); p>
End. p>
19. Поставте на
координатної площини деяку область, яку можна описати математичними
рівняннями і заштрихуйте її. Запишіть логічне вираження, що приймає
значення TRUE, якщо точка (x, y) лежить всередині заштріхованной області, інакше --
FALSE. P>
20. Випишіть
кілька алгебраїчних виразів і запишіть їх на мові Pascal. p>
21. Запишіть
алгебраїчні вирази, що відповідають наступним записів на мові Pascal: p>
а) (a +
b)/c; б) a + b
/ C; в) a/b
/ C; г) a /
(b * c); p>
д) (a +
b)/(d + c); е) a + b
/ (D + c); p>
е) a + b
/ D + c; ж) (a +
b)/d + c. p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.comp-science.narod.ru/
p>