розгалужуються алгоритми

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

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

Ознакою разветвляющегося алгоритму є наявність операцій перевірки умови. Розрізняють два види умов - прості і складні.

Простим умовою (ставленням) називається вираз, складене з двох арифметичних виразів або двох текстових величин (інакше їх ще називають операндами), пов'язаних одним із знаків:

<- меньше, чем.
> - більше, ніж.
<= - меньше, чем. или равно
> = - більше, ніж. або дорівнює
<> - не дорівнює
= - одно

Наприклад, простими відносинами є такі:

x-y> 10; k<=sqr(c)+abs(a+b); 9<>11; 'Мамо'<>'батько'.

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

  • якщо х = 25, у = 3, то ставлення x-y> 10 буде вірним, тому що 25-3> 10
  • якщо х = 5, у = 30, то ставлення x-y> 10 буде невірним, тому що 5-30<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 роздільник (крапка з комою) не ставиться.

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

    1. Кожен опис змінної і визначення константи закінчуються крапкою з комою.
  • Кожен оператор в тілі програми завершується крапкою з комою, якщо відразу за ним не йдуть зарезервовані слова End, Else, Until.
  • Після певних зарезервованих слів, таких, як Then, Else, Var, Const, Begin, ніколи не ставиться крапка з комою.
  • Розглянемо ще один приклад.

    Завдання. Вивести на екран більше з двох даних чисел.

    Можна також використовувати і скорочену (неповну) форму запису умовного оператора. Ця форма використовується тоді, коли в разі невиконання умови нічого робити не треба.

    Неповна форма умовного оператора має наступний вигляд.

    if <логическое выражение>
    then
    <оператор>

    Тоді якщо вираз, розташоване за службовим словом IF. в результаті дає істину, виконуються дії після слова THEN, в іншому випадку ці дії пропускаються.

    Завдання. Скласти програму, яка, якщо введене число негативне змінює його на протилежне.

    1. Якщо ціле число М ділиться без остачі на ціле число N, то вивести на екран частка від ділення, в іншому випадку вивести повідомлення М на N остачі не ділиться.
  • Запишіть умовний оператор, в якому значення змінної з обчислюється за формулою a + b, якщо а - непарна і a * b, якщо а - парне.
  • Обчислити значення функції:
  • Написати програму для підрахунку суми тільки позитивних з трьох даних чисел.
  • Дано три числа. Написати програму для підрахунку кількості чисел, рівних нулю.
  • Напишіть програму, спростивши наступний фрагмент програми:
    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;
  • Знайти кількість позитивних (негативних) чисел серед чотирьох цілих чисел A, B, C, D.
  • Складіть програму, яка зменшує введене число в п'ять разів, якщо воно більше другого введеного числа за абсолютною величиною.
  • Для даного значення X обчислити значення функції, яка визначається наступним чином:
    Y = sin (x), якщо x> = 1
    Y = cos (x), якщо x <1
  • Визначити чи є введене число парних.
  • Комп'ютер запитує: "Що сьогодні потрібно всім?" і якщо отримує відповідь ЕОМ, то пише "Ну, звичайно ЕОМ!", інакше "Це теж потрібно всім, але потрібніше ЕОМ!"
  • Написати програму, за якою комп'ютер вітав би тільки свого господаря, а при спробі ввести будь-яке інше ім'я питав би: "А де (наприклад) Вася?"
  • Написати програму, що визначає, чи є в введеному числі дрібна частина.
  • Написати програму, що малює коло в разі введення користувачем числа 1 і квадрат у всіх інших випадках.