Інформатика 5-11

скоро...
http://sbs2014.blogspot.com/?view=classic



Загальні відомості
Перші відомості про мову Паскаль було надруковано у 1971 році. Його автор — професор Інституту інформатики Швейцарської вищої політехничної школи Ніклаус Вірт. Мову названо на честь видатного французького фізика, математика та філософа Блеза Паскаля. Своїй величезній популярності у наші часи Паскаль зобов'язаний американській фірмі BORLAND, яка розробила діалект мови Турбо Паскаль, додавши до стандартного Паскаля додаткові можливості і розробивши дуже зручну та швидку програму-транслятор. Оскільки мікропроцесор сприймає команди, що надходять на його вхід, виключно у цифровому вигляді, а алгоритм вирішення будь-якої задачі записується мовою програмування у вигляді команд зі звичайних слів "людською" мовою, необхідно мати перекладач (транслятор) з такої мови на мову машинних цифрових кодів. Таку роботу й виконує програма-транслятор, яка здійснює, окрім цього, ще й перевірку правильності написання програми.

Абетка (алфавіт)
Абетка (алфавіт) — це набір символів, які використовуються для написання програм.
Абетку мови Паскаль складають:
1) Літери A..Z, a..z та символ підкреслювання "_".
2) Цифри від 0 до 9.
3) Спеціальні символи + -*/ = <>(){}[].,:;#$'".
4) Службові слова:
and - і, та
array - масив
begin - початок
case - варіант
const - константа
div - ділення
do - виконати
downto-зменшуючи до
else - інакше
end - кінець
file - файл
for-для

function - функція
goto -перейтидо
if-якщо
in-в
label - мітка
mod - мод, остача
nil - нуль, нічого
not - не
of-з
or - або, чи
packed - упакований
procedure - процедура

program - програма
record - запис
repeat - повторювати
set - множина
then - то
to - до (збільшуючи до)
type-тип
until - доти поки
var - змінна
while - поки
with - з


5) Деякі послідовності з двох спеціальних символів:
: =           надати значення
>=           більше або дорівнює
<=           менше або дорівнює
<>           не дорівнює
..          роздільник діапазонів
(* або {   початок коментарію
*) або}   кінець коментарію

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

Правильно
Неправильно
SQUARE
Persons_Counted
_number_box
3RDROOT 
Two words
-Massa

Великі та малі літери в іменах транслятор не відрізняє. Сполучення цих літер використовується для того, аби зручніше було читати інформацію. Числа можуть бути цілими (тип integer) та дійсними (тип real). Дійсні числа записуються у 2-х формах: натуральній (з фіксованою крапкою) та експоненціальній (з плаваючою крапкою).

Приклади:
1) 0; 12; 6; -146                                 - цілі;
2) 1.2; -0.4; 5.13                                                - дійсні з фіксованою крапкою;
3) 10.43Е-02; 1е20                            - дійсні з плаваючою крапкою.

Записи останнього прикладу відповідають науковій формі запису чисел. Літера Е (чи е) означає "помножити на 10 в степені". Тому число 1е20 читається так: "одиниця, помножена на 10 в степені 20".

               
 Структура програм
Програма мовою Паскаль складається з заголовка, опису даних та тіла програми, що являє собою блок команд обробки даних, обмежений словами BEGIN (початок) та END (кінець). Закінчується програма крапкою.
PROGRAM ім'я;
Var  опис даних;
    BEGIN
          оператор;       { тіло програми   }
          ……………
          оператор;
    END.

Приклад програми, що обчислює площу круга та довжину кола:

Program circle;                                                                 {заголовок}                               
const pi=3.141593;                                                          {константа}
var r ,len,s : real;                                                               {змінні}
    BEGIN
          readln(r);                                                                   {ввести радіус}
          len:=2 * pi * r;                                         {обчислити довжину кола}
          s:=p * r * r;                                              {обчислити площу}
          writeln(s)                                                  {вивести результати}
   END.

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

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

Зараз ми розглянемо лише чотири стандартних типи даних:
1) INTEGER (цілий). Діапазон значень даних цього типу, що можуть прийматися, зазвичай від -32768 до +32767. Граничні значення діапазону записано в стандартних константах, які мають імена MAXINT та MININT,  тобто MININT -32768 та MAXINT=32767. Спроба отримати значення, що виходить за межі діапазону, призводить до помилки транслятора.

Об'єкти даних — учасники операцій — називаються операндами. Над операндами цілого типу можливі такі операції: + (додавання), - (віднімання), * (множення), DIV (цілочисельне ділення з відсіченням залишку), MOD (залишок від цілочисельного ділення). Ці операції виконуються точно. Порядок виконання звичайний: спочатку множення, ділення та отримання залишку, потім додавання та віднімання. Службові слова DIV і MOD з двох сторін повинні відокремлюватися пробілами.

Приклади:
5 djv 2 = 2
5 mod 2 = 1
5 div 6 = 0
5 mod 6 = 5

2) REAL (дійсний). Дані цього типу зберігають цілу, дробову частини та порядок (степінь числа 10). Цілі числа в операціях із дійсними даними автоматично приводяться до REAL-формату. Абсолютна величина (модуль) дійсних чисел зазвичай знаходиться в діапазоні від  1Е-38 до 1Е+38. Якщо число по модулю менше, ніж 1Е-38, відбувається втрата значущості   (перетворення на нуль), а якщо більше 1Е+38, то виникає помилка (переповнення). До дійсних операндів можна застосовувати операції +  (додавання),   - (віднімання),  *  множення),  / (ділення).   В результаті операції також виходить об'єкт дійсного типу. Якщо один із операндів типу REAL, то й результат також типу REAL, навіть якщо інші операнди типу INTEGER.

Приклад:
24.865
-0.36
0.2485Е+2
- 0.36Е0

3) CHAR (символьний тип). Значенням символьної величини є один символ (літера, цифра і т.ін.). Всі символи занесено в спеціальну таблицю у певному порядку. Порядковий номер символу є кодом цього символу. Всього в таблиці 256 символів (порядкові номери від 0 до 255). Значення символьного типу записується у вигляді символу, взятого в одинарні лапки (апострофи). Для того, щоб представити сам апостроф, його потрібно повторити два рази.

Приклади:
А
Ь
7
;
‘’’’ – так може бути представлений сам апостроф
Коди великих та малих літер — різні. Оскільки символи мають порядкові номери (коди), то до них можна застосовувати лише операції порівняння одного з іншим. Наприклад, латинські літери розташовано в таблиці кодів в алфавітному порядку, тобто символ А має мінімальний код, a Z — максимальний (в ланцюжку великих латинських літер). Тому можна записати:

‘А’ < ‘F
‘Y’ >  ‘C’
‘E’ < > ‘G’ 

4) BOOLEAN (булевий або логічний тип). Величини цього типу приймають одне з двох значень: TRUE (істина) чи FALSE (хибність). Слова TRUE і FALSE є булеві константи. До булевих операндів можна застосовувати такі операції: AND (логічне І), OR (логічне АБО), NOT (логічне НЕ). Якщо А, В, С — булеві змінні, то мовою Паскаль булевими виразами будутьнаприклад:
A and В
В and (C or A) and A
Результатом операції AND буде істина (TRUE) тільки у тому випадку, коли обидва операнди мають значення TRUE, інакше результатом буде хибність (FALSE). Результатом операції OR буде Істина (TRUE), якщо хоча б один із операндів мас значення TRUE (АБО один, АБО інший, АБО разом), інакше результатом буде хибність (FALSE). Результатом операції NOT (HE) завжди є протилежна величина (якщо А є TRUE, то NOT А є FALSE). Якщо вираз не має дужок, порядок виконання операцій такий: спочатку NOT, потім AND і, наприкінці, OR. Крім булевих операцій, булеві значення мають операції відношення: =, <>, >, <, >=, <=

Наприклад:
3.2<5.1  є TRUE
7=8   є  FALSE
‘D’ >‘A’ є TRUE

Стандартні функції
Більшість інших операцій по обробці величин виконують стандартні функції. Функція має ім'я (ідентифікатор), за яким вказано один чи більше аргументів. При зверненні до функції викликається готова вбудована в транслятор програма обробки, якій, в якості вхідних величин, передаються аргументи функції. Результат повертається в головну програму через ім'я функції.
Ось список основних функцій:
abs(x)  — абсолютна величина (модуль) х. Аргумент х — цілий або дійсний. Результат — відповідно цілий або дійсний.

Приклад:

Математика
Pascal
a+b
------
|c-d|
(a+b)abs(c-d)

sqr(x) — число в квадраті. Аргумент х — цілий або дійсний. Результат — відповідно цілий або дійсний.

Приклад:
Математика
Pascal
ах2+b

a*sqr(x)+b



sqrt(x) - обчислення кореня квадратного. Аргумент і результат – дійсні; х>=0

Приклад:
Математика
Pascal
sqrt(sqr(x)+1)

trunc(x) — відкидає дробову частину х. Аргумент — дійсний, результат — цілий.
Якщо y:=trunc(3.5) то значення змінної y буде дорівнювати 3.
round(x) — округлення х до найближчого цілого. Аргумент — дійсний, результат — цілий.
Якщо y:=round(3.5) то значення змінної y буде дорівнювати 4.
ord(x) — дає код символьної величини х.

Приклад:
ord(B= 66

chr(x) - дає символ, код якого дорівнює цілому х.

Приклад:
chr(66)=B

Вирази
Вирази  складаються  з  операцій,   припустимих  для   величин,   що використовуються. Послідовність виконання операцій така:
1) операції в круглих дужках;
2) функції;
3) not;
4) *, /, div, mod, and (операції типу множення);
5) +, -, or (операції типу додавання);
6) =, >, <, <=,  >= (операції типу відношення).
Операції одного старшинства виконуються послідовно зліва направо. Згідно з цим, вираз (a=b) or (c=d) не еквівалентний a=b or c=d.
                Тому дуже уважно стежте за старшинством операцій і необхідним порядком їх виконання. Особливість складається в тому, що всі вирази записуються одним рядком. Таким чином, складні дроби потрібно записувати так: спочатку обчислюється чисельник, потім — знаменник і, нарешті, сам дріб.

Оператор присвоювання
В математиці часто доводиться мати справу з абстрактними змінними, тобто рахується, що в деякому виразі змінні не мають якогось конкретного значення або ж можуть мати будь-які значення. В програмуванні це зовсім інакше.
При об'яві змінної певного типу на початку програми ЕОМ відводить відповідну ділянку пам'яті, в якій може розміститися значення вказаного типу. Цій ділянці пам'яті надається ім'я, однакове з іменем змінної. Надалі в ці комірки пам'яті може бути розташовано будь-яке допустиме значення. Якщо далі транслятор зустрічає в програмі ім'я вже об'явленої змінної, він автоматично звертається до ділянки пам'яті з цим самим іменем для того, щоб або розмістити там, або взяти звідти потрібне значення.
Один з основних засобів для того щоб розмістити в комірці змінної якесь значення — це використати оператор присвоювання:
                                   змінна := вираз
Тут символи ":=" — знаки оператора присвоювання. Послідовність виконання така: спочатку обчислюється значення виразу в правій частині оператора; це значення розміщується потім в комірку пам'яті змінної, ім'я якої вказано зліва. Як частковий випадок, виразом може бути одна константа чи змінна.

Приклади:
а:=3                                       -  а присвоїти 3, тобто в а розмістити значення 3;
y:=cos(x)+sin(x)                  - у присвоїти значення виразу;
b:=с                                       - в комірку b копіюється значення з с;
х:=х+1                                  - до значення х додається 1, отриманий результат знову розміщується в комірку х.

Тип змінної зліва повинний бути таким самим, як і тип значення виразу справа, за винятком, коли змінна може бути REAL, а вираз — INTEGER.

Оператор введення
Якщо програміст бажає записати значення в комірку змінної не під час написання програми, а в процесі її виконання в режимі діалогу (тобто та людина, що працює з програмою, сама може ввести те значення змінної, яке забажає), потрібно користуватися оператором read (читати): read (список змінних);

Наприклад:
read(x)
read(a,b,c)
При цьому виконання програми призупиняється й ЕОМ очікує, поки користувач не введе з клавіатури відповідне значення. При натисканні на клавішу "Enter" значення розташовується в комірці змінної, вказаної в дужках оператора read. Якщо в операторі read указано декілька змінних, потрібно при введенні значень або після набору кожного значення натискати "Enter", або набрати всі значення відразу, розділюючи їх пробілами, після чого натиснути клавішу "Enter". Якщо потрібно, щоб після введення останнього значення зі списку змінних оператора read курсор перейшов на початок наступного рядка (для зручності подальшого діалога), використовують різновид оператора read у вигляді:

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


Оператор виведення
Для виведення значень змінних на екран монітора користуються оператором write (писати) та його різновидом writeln у такому самому форматі:

write(cписок змінних);
writeln (список змінних);

Аналогічно, після закінчення роботи оператора writeln, курсор переводиться на початок наступного рядка.

Наприклад, якщо а=5, b=7,с=1.4Е-19, d=106, 
то оператори write(a); writeln(b,c); write(d);
виведуть на екран значення в такому вигляді:
571.4E-19
106
причому курсор залишається відразу за числом 106 і наступний оператор write або writeln буде продовжувати виведення в цьому самому рядку.
Звертаю увагу на те, що значення змінних abc злилися і однозначно визначити що, і кому належить досить проблематично. Щоб такого не відбувалося можна виводити між змінними пропуски.

Наприклад для нашого випадку 
оператори write(a,’ ‘); writeln(b,’ ‘,c); write(d);
виведуть на екран значення в такому вигляді:
7 1.4E-19
106

Виводити можна не тільки значення змінних, а й значення виразів:
write(sin(2*a*b));

Для величин, що виводяться оператором write (writeln), можна зазначати формат виведення:
1) для не REAL величин у вигляді:
Writeln(величина:n)
2) для REAL величин у вигляді:
Writeln(величина:n:m)

Тут ціле число n визначає кількість позицій для виведення величини. Якщо величина не вміщується у вказаний формат, цей формат ігнорується; якщо ж величина коротша від формату, то символи, що виводяться, зсуваються вправо, а зайві позиції зліва заповнюються пропусками. Це дозволяє роздруковувати на екрані значення у вигляді таблиць рівними стовбчиками. Для REAL-величин другий параметр (ціле число m) зазначає кількість десяткових знаків після десяткової крапки, що виводяться. Число виводиться в форматі з фіксованою крапкою з автоматичним округленням. Якщо m=0, то REAL-число виводиться як ціле (без крапки).
Приклади:
i:=25;
a:=3.48;
write (Результат :’і:5,а:9:3)
write (x:7:0);
Результат виведення:
Результат:   25        3.480
Перед числом 25 виведено 3 пропуски, а перед  3.480 – 8 пропусків.
Без зазначення формату REAL-величини виводяться у форматі з плаваючою крапкою (в Е-формі). Зазначення формату впливає лише на виведення і не впливає на самі значення змінних.
Як вже відмічалось, на початку програми треба описати всі змінні, що використовуються в тілі програми. Робиться це після службового слова VAR у такому вигляді:

VAR    список змінних: тип;
……………
список змінних: тип;

Якщо деякі об'єкти програми не передбачено змінювати в  процесі обробки даних, їх краще об'явити на початку програми у вигляді проіменованих констант після слова CONST:

CONST ім'я = значення;
 ім'я = значення;
………….
ім'я = значення;
Тип константи транслятор визначає автоматично по її значенню. Причому значенням константи можуть бути не тільки символи типу char, а й рядки символів, взятих в апострофи.            

Наприклад, якщо об'явлено:
const mess='значення a=';
то в тілі програми оператор
write(mess,a);
чи безпосередньо
write ('значення a=');
призведе до того самого результату — виведе на екран повідомлення (при  а=5):
значення а=5      

А тепер давайте спробуємо написати програму.
Задача 1. Знайти довжину кола, якщо відомий її радіус.
PROGRAM N1;
Const pi=3.1415926;
var r,l:real;
     BEGIN
          rеаdln (r);
          l:=2*pi*r;
          writetn(l:0:2);
    END.

{цей рядок може бути і відсутнім }



{введення радіуса}
{обчислення довжини кола}
{виведення результату}

Результат роботи програми.

75.40
* Службове слово PROGRAM  на початку програми не є обов’язковим і я не завжди буду починати програму іменно так.


  
Задача 2. Знайти площу трикутника за формулою Герона
(де р=(а+b+с)/2 - півпериметр).

PROGRAM 2;
Var a,b,c: real;                                   {сторони трикутника}
            preal;                                     {допоміжна змінна}                        
             sreal;                     {площа}
       BEGIN
             Readln (а,b,c);
             p:=(а+b+c)/2;
             s:= sqrt(p*(p-a)*(p-b)*(p-c));
             writeln(s:7:3);
      END.

Результат роботи програми.
2 3 4
2.905

Якщо в цій програмі Ви введете сторони неіснуючого трикутника (сума двох сторін менша за третю), то ЕОМ видасть помилку, аварійно завершивши програму.


Задачі
Якщо в умові задачі нічого не сказано про тип змінних, то ці змінні можуть бути як цілі, так і дійсні. Отже описувати їх слід REAL. Після кожної задачі буде міститися контрольний приклад вхідних та вихідних даних. Це означає те, що коли ви введете при запуску програми  вхідні дані, то ваша програма має вивести результат, який співпаде із вихідними даними. Увага! Правильний вивід вихідних даних не гарантує того, що ваша програма буде правильно працювати при інших вхідних даних. Перевірку треба обов’язково продовжити самостійно.
 
Задача 1-1.
Дано цілі числа ab, що ж катетами прямокутного трикутника. Скласти програму знаходження його площі. В результаті вивести два знаки після коми.
Вхідні дані
4 5
Вихідні дані
10.00

Задача 1-2.
Дано чотири дійсні числа abcd. Знайти їх суму. В результаті вивести чотири знаки після коми.
Вхідні дані
3 4 2.5 1
Вихідні дані
10.5000

Задача 1-3.
Знайти периметр прямокутника, якщо відомо дві його сторони a та b. Сторони прямокутника цілі числа.
Вхідні дані
2 6
Вихідні дані
16

Задача 1-4.
Дано цілі числа xy. В першому рядку вивести залишок від ділення першого числа на друге, а в другому залишок від ділення другого на перше.
Вхідні дані
15 16
Вихідні дані
15
1

Задача 1-5.
Дано дійсне число p. В першому рядку вивести його заокруглене ціле значення, в другому – його цілу частину, в третьому – його дробову частину (один знак після коми).
Вхідні дані.
3.5
Вихідні дані.
4
3
0.5

Задача 1-6
Дано цілі числа x та y. Знайти значення виразу: . В результаті вивести один знак після коми.
Вхідні дані.
 3 1
Вихідні дані.
29.0

Задача 1-7
Дано цілі числа xy. Знайти різницю першого та другого числа.
Вхідні дані.
10 4
Вихідні дані.
6

Задача 1-8                          
Знайти значення виразу:   . В результаті вивести два знаки після коми.
                                              
 Вхідні дані.
0
Вихідні дані.
6.00

Задача 1-9
Дано дійсне число N. Вивести подвоєну його цілу частину.
Вхідні дані.
12.958
Вихідні дані.
24

Задача 1-10
Дано дійсні числа P і К. Дробову частину Р помножити на K і вивести результат заокруглений до найближчого цілого.
Вхідні дані.
12.1257 1000
Вихідні дані.
126

Задача 1-11
На квадрат наклали  круг такої величини, що він одночасно торкається кожної сторони квадрата. Сторона квадрата є ціле число a.  Знайти найменше ціле число, що є більшим від сумарної площі  частин квадрата видимих з під круга (круг не є прозорим).
Вхідні дані.
20
Вихідні дані.
86

Задача 1-12
Дано двоцифрове ціле число, що не закінчується нулем. Вивести частку від ділення першої цифри на другу.
Вхідні дані.
72
Вихідні дані.
3

Задача1-13
Дано натуральне трьохцифрове число. Вивести суму його цифр.
Вхідні дані.
123
Вихідні дані.
6

Задача 1-14
Координати точки цілі числа X і Y, причому X>0 та Y>0. Вивести у першому рядку координати точки симетричної даній відносно осі ОХ, у другому – відносно OY, у третьому – відносно початку координат і у четвертому площу фігури з вершинами у цих точках.
Вхідні дані.
1 2
Вихідні дані.
1 -2
-1 2
-1 -2
8

Задача 1-15
Дано два числа. Знайти суму їх дробових частин. В результаті вивести два знаки після коми.
Вхідні дані.
2.5 3.7
Вихідні дані.
1.20



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

ЯКЩО логічний вираз ТО оператор1 ІНАКШЕ оператор2;

Мовою Паскаль цей оператор записується за допомогою відповідних англійських службових слів IF, THEN, ELSE. Всю конструкцію прийнято оформлювати у вигляді вже знайомої тобі структури — "сходинками":

IF логічний вираз THEN
           оператор1
      ELSE
           оператор2;

Порядок виконання дуже простий. Якщо значення "логічного виразу" — істина (TRUE), то виконується "оператор1", а "оператор2" — ні. Якщо ж значення "логічного виразу" — хибність (FALSE), то навпаки, виконується "оператор2", а "оператор1" — ні. Зверніть увагу на правила запису. Якщо після умовного оператора IF в програмі є ще й інші оператори, то позаду "оператор2" обов'язково ставиться крапка з комою. Є ще й скорочена форма умовного оператора:

IF логічний вираз THEN
оператор;

У цьому випадку, коли "логічний вираз" має значення хибність (FALSE), нічого не виконується, а відбувається перехід до наступного (після умовного) оператора. Згідно правил мови Паскаль після службових слів THEN та ELSE записується по одному оператору. Якщо ж у випадку "то" чи "інакше" потрібно виконати кілька операторів, то замість одного оператора потрібно використовувати СКЛАДЕНИЙ ОПЕРАТОР, який являє собою ланцюжок будь-яких операторів, обмежених службовими словами BEGIN та END:

begin оператор 1; оператор2;...; oneparopN end;

або краще записати:
          begіn
оператор 1;
оператор 2;
………;
оператор N
           end;

Слова BEGIN та END прийнято називати "операторними дужками", а окремі оператори всередині складеного відокремлюються один від одного крапкою з комою. Тоді у загальному вигляді умовний оператор можна записати так:

ІF логічний вираз ТНЕN
         ВEGIN
               оператор 1;
               ……;
               оператор N
                       END
             ELSE
                     ВЕGIN
оператор 1;
……;
операторМ
       END;

Весь оператор ІF зі всіма вкладеними складовими операторами прийнято рахувати одним оператором. Складові оператори можуть містити будь-яку кількість операторів — від одного й більше, рахуючи й інші умовні оператори.

Кожний ЕND краще за все записувати суворо під відповідним йому ВЕGIN – це допоможе не зробити помилки. Після першого складового оператора перед словом ЕLSЕ крапка з комою не ставиться, бо транслятор сприйматиме це як закінчення умовного оператора (скорочена форма), а ЕLSE — як наступний оператор, який самостійно не використовується (виникає помилка).

Задача 1.
Дано два цілих числа a і b. Вивести більше з них.

var a,b : integer;
begin
            readln(a,b);
            if a>b then writeln(a)
           else writeln(b);
end.

Якщо ввести, наприклад, 5 3, то умова a>b буде TRUE і виконається writeln(a). На екран буде виведено число 5. Якщо ж ввести 2 6, то  умова a>b буде FALSE і виконається те, що стоїть після else, тобто writeln(b).
Програма виведе число 6.

Задача 2. З трьох цілих чисел визначити максимальне.
Визначимо 4 змінні: а, b, с, mах. У перші три користувач введе свої числа, а 4-ту будемо використовувати як допоміжну. Порівняємо першу пару чисел і те з них, що більше, розташуємо в max. Далі порівняємо число в max з третім числом, що залишилося, і знову те, яке буде більшим, запишемо в max. Наприкінці виведемо значення з max на екран — воно й буде максимальним.
Програма виглядає так.

var   a,b,c: real;                                               {три початкових числа}
           max: real;                                            {допоміжна змінна}
begin
readln(a,b,c);                                      {введення чисел}
if a>b                                                 {визначаємо те, що більше з двох}
then max := a
else max := b;
if max < c                                           {якщо третє число ще більше,}
then max := c;             {то розміщуємо його в max; інакше}
               writeln (mах)                                 {в max залишається колишній результат}
end.

Алгоритм розв'язання цієї задачі можна побудувати і без допоміжної змінної mах (до речі, спробуйте це зробити). Однак програма вийде більш громіздкою й заплутаною.
А тепер ще одна задача:
Задача 3. Визначити, чи є чотирикутник зі сторонами а, b, с та d  ромбом.

Для розв’язання цієї задачі головне - правильно написати умови (логічний вираз). Відповідь можна дати стверджуючу тоді, коли всі сторони будуть дорів­нювати одна одній ОДНОЧАСНО, тобто і друга сторона буде дорівню­вати першій, і третя, і четверта. Тоді логічний вираз запишеться так:
(а=b) аnd (а=c) аnd (а=d)
Дужки необхідні, бо порядок старшинства операції АND вищий за операцію =, і без дужок логічний вираз буде виконуватися в іншій послідовності, що призведе до помилки. До речі, в Паскалі не можна записувати умови (логічні вирази) у вигляді а=b=с=d) чи а<b<с<d, тому що результатом першої операції (а=b чи а<b) буде логічна величина Тгue або Fаlsе, яка буде потім порівнюватися з наступною величиною с. І якщо ця величина не логічного типу (boolean), то виникне помилка, бо величини несумісних типів не порівнюються. В складному логічному виразі головне — визначити, чи одночасно повинні виконуватися всі його складові частини чи достатньо, щоб виконувалася хоча б одна з них, і використати відповідні операції АND або OR.
Зараз програма буде будуватися елементарно:
var a,b,c,d: real;
begin
   readln(a,b,c,d);
   if (a=b) and (a=c) and (a=d)
                         then writeln ('Yes')
                        else writeln ('No')
end.
Оператор вибору
Умовний оператор використовується, коли розв'язання, в залежності від певної умови, розгалужується на дві гілки. І, хоча цей оператор можна вживати для будь-якої кількості гілок, у випадку, коли в залежності від значення деякого виразу чи змінної алгоритм роз­галужується на декілька шляхів, зручніше застосувати оператор вибору:
CASE вираз OF
список констант; оператор;
список констант:оператор
     ELSE оператор
END;
Оператор обчислює значення "виразу", обирає список констант, в якому міститься отримане значення, і виконує "оператор", що відповідає обраному варіанту, після чого виконання оператора САSЕ завершується. Якщо значення "виразу" не знайдено в жодному зі списків, тоді виконується "оператор", що йде після ELSE. До речі, перед ELSE крапка з комою також не ставиться. Якщо частина "ELSE оператор" відсутня, тоді для останнього випадку нічого виконуватися не буде. Значення "виразу" не може бути типу REAL. Самий "вираз" часто називають селектором. Як окремий випадок, роль селектора може відігравати одна змінна. Завершується оператор CASE службовим словом END.
 І на заключення маленький приклад з програми.
Якщо в цілій змінній Month зберігається номер місяця, то відпо­відний номер кварталу року можна визначити так:
case Month div 3 of
0: writeln ('1 квартал');
1: writeln ('2 квартал');
2: wrіteln  ('3 квартал');
3: writeln ('4 квартал')
      else writeln ('Taкoro місяця немає')
end;

або так:

case Month of
1,2,3: writeln ('1 квартал');
4,5,6: writeln ('2квартал');
7,8,9: writeln ('З квартал');
10,11,12: writeln ('4 квартал')
    else writeln ('Taкoro місяця нема')
end;
Оператор вибору застосовується не дуже часто, але в певній ситуації буває дуже зручним, тому що виглядає більш чітко, ніж численні вкладені умовні оператори. Його недолік полягає у тому, що не можна вибір варіантів здійснювати за умовами, як в операторі IF. В кожному варіанті оператора CASE застосовується лише один оператор, який, звісно, можна замінити складеним оператором.


Задача 2-1
Дано ціле число Х. Вивести Yes, якщо воно парне, або No коли Х є непарним.
Вхідні дані
56
Вихідні дані.
Yes

Задача 2-2.
Дано цілі числа a та b. Вивести подвоєне більше число.
Вхідні дані
4 6
Вихідні дані.
12

Задача 2-3
 Дано ціле числа a. Якщо воно парне – вивести його частку від ділення на 2, інакше 0.
Вхідні дані
22
Вихідні дані.
11

Задача 2-4
Дано цілі числа a та b. Вивести їх в один рядок в порядку зростання, тобто, спочатку менше, а потім більше.
Вхідні дані
6 1
Вихідні дані.
1 6

Задача 2-5
Дано дійсне число p. Вивести «Yes», якщо воно ціле і «No» в іншому випадку.
Вхідні дані
2.6
Вихідні дані.
No


Задача 2-6
Дано цілі числа abcd. В одному рядку вивести спочатку найменше з них, а потім найбільше.
Вхідні дані
2 8 1 10
Вихідні дані.
1 10

Задача 2-7

Задача 2-8

Задача 2-9
Є додатні цілі х, у та z. Потрібно з'ясувати, чи існує трикутник зі сторонами x, у, z. Вивести «Yes» або «No».
Вхідні дані
1 4 5
Вихідні дані.
No

Задача 2-10
Дано цілі числа abcd. Вивести «Yes», якщо вони є впорядковані за зростанням, інакше вивести «No».
Вхідні дані
3 4 4 6
Вихідні дані.
No

Задача 2-11
Дано натуральне число N. Вивести «Yes», якщо воно є квадратом натурального числа, інакше вивести «No».
Вхідні дані
16
Вихідні дані.
Yes

Задача 2-12
Нехай координати клітин шахової дошки задаються за допомогою чисел, тобто буквені координати «abcd» змінено на «1234…». Так клітини (1,1) та (1,2) є сусідніми в рядку, а клітини (1,1) та (2,1) – знаходяться по сусідству у стовпчику. Дано координати двох клітинок. Вивести «Yes», якщо вони одного кольору і «No» - якщо клітинки різних кольорів.
Вхідні дані
1 2 1 1
Вихідні дані.
No

Немає коментарів:

Дописати коментар