розгалужуються алгоритми
До сих пір Ви використовували лінійні алгоритми, тобто алгоритми, в яких всі етапи рішення задачі виконуються строго послідовно. Сьогодні Ви познайомитеся з розгалужуються алгоритмами.
Визначення. Розгалужуються називається такий алгоритм, в якому вибирається один з декількох можливих варіантів обчислювального процесу. Кожен подібний шлях називається гілкою алгоритму.
Ознакою разветвляющегося алгоритму є наявність операцій перевірки умови. Розрізняють два види умов - прості і складні.
Простим умовою (ставленням) називається вираз, складене з двох арифметичних виразів або двох текстових величин (інакше їх ще називають операндами), пов'язаних одним із знаків:
<- меньше, чем.
> - більше, ніж.
<= - меньше, чем. или равно
> = - більше, ніж. або дорівнює
<> - не дорівнює
= - одно
Наприклад, простими відносинами є такі:
x-y> 10; k<=sqr(c)+abs(a+b); 9<>11; 'Мамо'<>'батько'.
У наведених прикладах перші два відносини включають в себе змінні, тому про вірність цих відносин можна судити тільки при підстановці деяких значень:
- якщо х = 25, у = 3, то ставлення x-y> 10 буде вірним, тому що 25-3> 10
Перевірте вірність другого відносини при підстановці наступних значень:
Визначення. Вирази, при підстановці в які деяких значень змінних, про нього можна сказати істинно (вірно) воно або помилково (невірно) називаються булеві (логічними) виразами.
Примітка. Назва "булеві" походить від імені математика Джорджа Буля, який розробив в XIX столітті Булевой логіку і алгебру логіки.
Визначення. Змінна, яка може приймати одне з двох значень: True (правда) або False (брехня), називається булевої (логічної) змінної. наприклад,
Завдання. Обчислити значення модуля і квадратного кореня з виразу (х-у).
Для вирішення цього завдання потрібні вже знайомі нам стандартні функції знаходження квадратного кореня - Sqr і модуля - Abs. Тому Ви вже можете записати такі оператори присвоювання:
У цьому випадку програма буде мати вигляд:
Program Znachenia;
Uses
Crt;
Var
x, y. integer;
Koren, Modul. real;
Begin
ClrScr;
write ( 'Введіть значення змінних х і у через пробіл');
readln (x, y);
Koren: = Sqrt (x-y);
Modul: = Abs (x-y).
write ( 'Значення квадратного кореня з виразу (х-у) дорівнює');
write ( 'Значення модуля вираження (х-у) дорівнює');
readln;
End.
Здавалося б завдання виконане. Але ми не врахували області допустимих значень для знаходження квадратного кореня і модуля. З курсу математики Ви повинні знати, що можна знайти модуль будь-якого числа, а ось значення подкоренного вираження повинно бути неотрицательно (більше або дорівнює нулю).
Тому наша програма має свою допустиму область вихідних даних. Знайдемо цю область. Для цього запишемо нерівність х-у> = 0 і вирішивши його отримаємо х> = у. Значить, якщо користувачем нашої програми будуть введені такі числа, що при підстановці значення цієї нерівності буде дорівнює True, то квадратний корінь з виразу (х-у) витягти можна. А якщо значення нерівності дорівнюватиме False, то виконання програми закінчиться аварійно.
Завдання. Наберіть текст програми. Протестуйте програму з наступними значеннями змінних і зробіть висновок.
Кожна програма, наскільки це можливо, повинна здійснювати контроль за допустимостью величин, що беруть участь в обчисленнях. Тут ми стикаємося з розгалуженням нашого алгоритму в залежності від умови. Для реалізації таких умовних переходів в мові Паскаль використовують оператори If і Else, а також оператор безумовного переходу Goto.
Розглянемо оператор If.
Для нашої задачі потрібно виконан наступний алгоритм:
якщо х> = у,
то обчислити значення квадратного кореня,
інакше видати на екран повідомлення про помилковий введенні даних.
Запишемо його за допомогою оператора If. Це буде виглядати так.
if x> = y
then
Koren: = Sqr (x-y)
else
write ( 'Введено неприпустимі значення змінних');
Тепер в залежності від введених значень змінних х і у, умови можуть виконуватися або не виконуватись.
У загальному випадку повна форма конструкції умовного оператора має вигляд:
if <логическое выражение>
then
<оператор 1>
else
<оператор 2>
Умовний оператор працює за наступним алгоритмом.
Спочатку обчислюється значення логічного виразу, розташованого за службовим словом IF. Якщо його результат істина. виконується <оператор 1>, розташований після слова THEN, а дії після ELSE пропускаються; якщо результат брехня, то, навпаки, дії після слова THEN пропускаються, а після ELSE виконується <оператор 2>.
Керуюча структура if може здатися негнучкою, так як їх дії можуть бути описані тільки одним оператором. Іноді може знадобитися виконання послідовності операторів. В цьому випадку хотілося б укласти всю послідовність в уявні дужки. У Паскалі передбачений цей випадок.
Якщо в якості оператора повинна виконатися серія операторів, то вони полягають в операторні дужки begin-end. Конструкція Begin. End називається складовим оператором.
if <логическое выражение>
then
begin
оператор 1;
оператор 2;
.
end
else
begin
оператор 1;
оператор 2;
.
end;
Визначення. Складовою оператор - об'єднання декількох операторів в одну групу. Група операторів усередині складеного оператора полягає в операторні дужки (begin-end).
begin
оператор 1;
оператор 2;
end;
З урахуванням отриманих знань перетворимо нашу програму.
Program Znachenia;
Uses
Crt;
Var
x, y. integer;
Koren, Modul. real;
Begin
ClrScr;
write ( 'Введіть значення змінних х і у через пробіл');
read (x, y);
if x> = y
then
begin
Koren: = Sqr (x-y)
Modul: = Abs (x-y)
write ( 'Значення квадратного кореня з виразу (х-у) дорівнює');
write ( 'Значення модуля вираження (х-у) дорівнює');
end
else
write ( 'Введено неприпустимі значення змінних');
readln;
End.
Складовим оператором є і такий оператор
Cимвол ";" в даному випадку розділяє оператор присвоювання S: = 0 і порожній оператор.
Порожній оператор не тягне за собою ніяких дій і в записі програми Ніяк не позначається.
Наприклад, складовою оператор
включає лише один порожній оператор.
Якщо Ви звернули увагу, програма на мові Паскаль завжди містить один складений оператор - розділ операторів програми.
Увага! Перед службовим словом Else роздільник (крапка з комою) не ставиться.
Відзначимо, що більшість операторів в програмах на мові Паскаль закінчуються крапкою з комою, але після деяких операторів крапка з комою не ставиться. Сформулюємо загальні правила вживання крапки з комою:
- Кожен опис змінної і визначення константи закінчуються крапкою з комою.
Розглянемо ще один приклад.
Завдання. Вивести на екран більше з двох даних чисел.
Можна також використовувати і скорочену (неповну) форму запису умовного оператора. Ця форма використовується тоді, коли в разі невиконання умови нічого робити не треба.
Неповна форма умовного оператора має наступний вигляд.
if <логическое выражение>
then
<оператор>
Тоді якщо вираз, розташоване за службовим словом IF. в результаті дає істину, виконуються дії після слова THEN, в іншому випадку ці дії пропускаються.
Завдання. Скласти програму, яка, якщо введене число негативне змінює його на протилежне.
- Якщо ціле число М ділиться без остачі на ціле число N, то вивести на екран частка від ділення, в іншому випадку вивести повідомлення М на N остачі не ділиться.
if a> b then c: = 1;
if a> b then d: = 2;
if a<=b then c:=3;
if a<=b then d:=4.
a: = 3;
if a<4
then
begin
Inc (a, 2);
Inc (a, 3);
end;
Y = sin (x), якщо x> = 1
Y = cos (x), якщо x <1