Однією з основних алгоритмічних структур є розгалуження (альтернатива). p> Якщо умова виконується, то буде виконана інструкція "1", якщо ні, то - інструкція "2". Незважаючи на те, що в схемі присутні два дії, виконано буде тільки одне, так як умова або хибно, або істинно. Третього не дано. Така схема дозволяє вирішувати завдання, в яких в Залежно від обставин, що склалися потрібно здійснити те чи інше дію. Немає жодного сумніву, що число завдань такого роду величезне. Більш того, дуже складно придумати реально значуще завдання, алгоритм виконання якого містив би в собі просте пряме проходження команд. Навіть примітивний приклад, взятий з курсу математики, як ви побачите, не може бути вирішене без використання розгалуження. Отже, необхідно обчислити значення виразу y = 1/x. Вам відомо, що дана функція не завжди має значення, тобто не для всіх значень аргументу існує значення результату. Наше завдання так скласти алгоритм, щоб виконавець ні в якому разі не встав в глухий кут, навіть при отриманні нуля в якості аргументу. Сформулювати це на природній мові неважко:
1. Отримати значення x.
2. Якщо x = 0, то повідомити, що вираз значення не має, інакше - обчислити y як 1/x.
Таким чином використовується наведена вище алгоритмічна структура. Вона може бути виражена простими словами:
Якщо <Ум.> {Якщо виконується умова}
то <Дію 1> {то виконати дію № 1}
інакше <Дію 2> {інакше - виконати дію № 2}
всі
Як це записати на Паскалі? Та так само, тільки по-англійськи. p> Формат умовного оператора на мові Паскаль:
If <Умова>
Then <Оператор 1>
Else <Оператор 2>;
Зверніть увагу на те, що в Then-і Else-частини стоїть тільки один оператор. Але що робити, щоб вирішити завдання, в якій з виконання чи невиконання умови потрібно здійснити не одне, а кілька дій? Тут приходить на допомогу вже відомий вам складений оператор. У операторні дужки можна укласти будь кількість операторів.
Варіант умовного оператора в цьому випадку:
If <Умова>
Then Begin <Група операторів 1> end
Else Begin <Група операторів 2> end;
Знак "Крапка з комою" не ставиться перед службовим словом Else, але оператори в групах, природно, відокремлюються один від одного цим знаком.
Тепер поговоримо про умови. У програмах мовою Паскаль умови являють собою вираження, значенням яких є величина логічного (Boolean) типу. Це може бути як просто мінлива зазначеного типу, так і складна послідовність висловлювань, пов'язаних логічними операціями.
У простих умовах можуть застосовуватися знаки операцій порівняння:> (більше), <(Менше), = (дорівнює), <> (не дорівнює),> = (більше або дорівнює), <= (Менше або дорівнює). p> Приклади простих умов:
A = 5 {Значення змінної А дорівнює 5}
(C + D3)> = (D1 * (45-2)) {Значення виразу в лівій частині більше або дорівнює значенню виразу з правій частині}
S <> 'ABC' {Значення змінної S не дорівнює строковой константі 'ABC'}
Наведемо приклад вирішення ще одного завдання: "З двох чисел вибрати найбільше".
На перший погляд рішення очевидно, але воно не настільки тривіально, як здається.
Program Example;
Var A, B, C: Real; {A, B - для зберігання аргументів, C - результат}
Begin
Writeln ('Введіть два числа ');
Readln (A, B); {Вводимо аргументи з клавіатури}
If A> B Then C: = A Else C: = B; {Якщо A> B, то результат - A, інакше результат - B}
Writeln (C); {Виводимо результат на екран}
End. br/>
Ще один класичний приклад: "За заданими коефіцієнтами вирішити квадратне рівняння ". Це завдання складніше, тому перед тим як писати програму складемо алгоритм, записавши його у вигляді блок-схеми.Сначала вводимо коефіцієнти, потім обчислюємо дискримінант. Тепер виникає дві можливості: або відсутність дійсних коренів у разі негативного дискриминанта, або ці коріння можна все-таки обчислити і вивести на екран в разі ненегативного дискриминанта (випадок рівності дискриминанта нулю входить сюди ж, коренів - два, тільки вони однакові J).
При записі алгоритму мовою програмування слід врахувати, що в гілці "ні" не одне дію, а три, тому слід застосувати складений оператор. Арифметичні вирази не забувайте записувати відповідно до правил мови Паскаль. В іншому, ця програма не складніше попередньої. br/>
Program Sq1;
Var A, B, C, D, X1, X2: Real;
Begin
Writeln ('Введіть коефіцієнти квадратного рівняння');
Readln (A, B, C);
D: = B * B-4 * A * C;
If D <0 Then Writeln ('Корній немає!') p> Else
Begin
X1: = (-B + SQRT (D))/2/A;
X2: = (-B-SQRT (D))/2/A;
Writeln ('X1 =', X1: 8:3, 'X2 =', X2: 8:3)
End
End.
Цікаво, ...