Лекції >> Програмування, комп’ютери і кібернетика >> Програми з розгалуженнями

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

Багато задач вимагає від виконавця змінити послідовність виконання дій у залежності від певних умов. Під вказаними умовами будемо розуміти логічні вирази, кожен з ких може набувати двох значень: “так” (true) – якщо умова істинна і “ні” (false) – якщо умова хибна. Нагадаємо, що умови можуть бути складними, тобто використовувати логічні операції[1]. Прості умови обмежуються дужками, якщо вони є частинами складної умови. Істинність складних умов визначається за таблицею істинності.

Наприклад, на деякому етапі розв’язку певної задачі виконавцю потрібно послідовно виконати дві дії: обчислити значення виразу x-1, а потім і значення кореня квадратного цього виразу. У цьому випадку необхідно передбачити ність складних умов визначається за таблицею істинності.

Наприклад, на деякому етапі розв’язку певної задачі виконавцю потрібно послідовно виконати дві дії: обчислити значення виразу x-1, а потім і значення кореня квадратного цього виразу. У цьому випадку необхідно передбачити виконання таких дій:

1. обчислити значення виразу x-1;

2. у залежності від результатів перевірки умови змінити послідовність виконання дій, тобто, якщо  умова 0 є істинною, то обчислювати значення , інакше – умова є хибною – виконати інші дії (наприклад, запропонувати користувачу ввести правильні дані).

Алгоритми та відповідні програми, які вимагають від виконавця перевірки деяких умов і зміни послідовності виконання дій у залежності від результатів перевірки, будемо називати алгоритмами (програмами) з розгалуженнями.

1. обчислити значення виразу x-1;

2. у залежності від результатів перевірки умови змінити послідовність виконання дій, тобто, якщо  умова 0 є істинною, то обчислювати значення , інакше – умова є хибною – виконати інші дії (наприклад, запропонувати користувачу ввести правильні дані).

Алгоритми та відповідні програми, які вимагають від виконавця перевірки деяких умов і зміни послідовності виконання дій у залежності від результатів перевірки, будемо називати алгоритмами (програмами) з розгалуженнями.

Розв’язуючи задачі з розгалуженнями, при описанні алгоритмів  обов’язково використовують базову структуру “розгалуження” (див. стор. 8), а у програмах – оператор (вказівку) розгалуження або, як його ще називають, оператор умовного переходу.

Для організації зміни послідовності виконання дій при розв’язу­ван­ні задачі іноді використовують (Basic, Pascal) оператор безумовного переходу GOTO. Зауважимо, що його використання може порушити структурний підхід до розв’язування задачі і призвести до логічних помилок, які важко шукати у текс дії (наприклад, запропонувати користувачу ввести правильні дані).

Алгоритми та відповідні програми, які вимагають від виконавця перевірки деяких умов і зміни послідовності виконання дій у залежності від результатів перевірки, будемо називати алгоритмами (програмами) з розгалуженнями.

Розв’язуючи задачі з розгалуженнями, при описанні алгоритмів  обов’язково використовують базову структуру “розгалуження” (див. стор. 8), а у програмах – оператор (вказівку) розгалуження або, як його ще називають, оператор умовного переходу.

Для організації зміни послідовності виконання дій при розв’язу­ван­ні задачі іноді використовують (Basic, Pascal) оператор безумовного переходу GOTO. Зауважимо, що його використання може порушити структурний підхід до розв’язування задачі і призвести до логічних помилок, які важко шукати у тексті програми. 

Навчальна алгоритмічна мова.

Вказівка розгалуження у НАМ має такий вигляд:

если <умова>

      то <1-ша послідовність дій>

      иначе <2-га послідовність дій>

все 

Якщо умова істинна, то виконується 1-ша послідовність дій, інакше (умова хибна) то виконується 2-га послідовність дій.

Іноді вказівка розгалуження використовується у неповній формі:

если <умова>

      то <послідовність дій>

все 

Узагальненням вказівки розгалуження є вказівка вибору, за допомогою якої ефективно описуються розгалуження, що мають більше як три напрями:

выбор

      при <умова 1>

                         <1-ша послідовність дій>

      при <умова 2>

                         <2-га послідовність дій>

      . . .

      при <умова N>

 

      иначе <серія інших команд>

все

У неповній формі оператора вибору конструкція иначе відсутня.

Basic.

Оператор розгалуження на мові Basic можна подати в повній та неповній формах. Повна форма має вигляд:

If <умова> Then <1-ша серія операторів> Else <2-га серія операторів>

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

If <умова> Then <серія операторів>

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

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

1-й спосіб:

50  if a>b then y=a else y=b         {повна форма розгалуження}

60  print Y     

Спочатку виконується рядок 50: якщо умова істинна, то змінній Y присвоюється значення числа А, інакше змінній Y присвоюється значення числа В. Далі виконується наступний рядок 60.

2-й спосіб:

50  if a>b then 60 else 70             {повна форма розгалуження}

60  y=a : goto 80

70  y=b

80  print Y

Спочатку виконується рядок 50:

якщо умова істинна,

то виконання програми перейде на рядок 60, де змінній Y присвоїться значення числа А і виконання програми перейде на рядок 80,

інакше  (умова хибна) виконання програми перейде на рядок 70, де змінній Y присвоїться значення числа В і виконання програми перейде на наступний рядок.

Далі виконується рядок 80.

3-й спосіб:

50  if a>b then Y=A : goto 70    {неповна форма розгалуження}          

60  y=B

70  print Y

Спочатку виконується рядок 50:

якщо умова істинна, то змінній Y присвоїться значення числа А  і виконання програми перейде на рядок 70,

інакше (умова хибна) виконання програми перейде на наступний рядок, де змінній Y присвоїться значення числа В.

Далі виконується рядок 70.

Якщо після THEN і перед ELSE (1-ша серія операторів) записується декілька операторів, то оператори один від одного відокремлюються двокрапкою. Аналогічно поступають з 2-гою серією операторів. 

Оператор вибору у мові Basic реалізовано командою-перемикачем ON. За допомогою цієї команди можна реалізувати багаторазово розгалужений алгоритм[2]. 

Зауважимо, що доцільно оператор вибору реалізовувати за допомогою неповної форми оператора розгалуження, наприклад:

40 If <умова1>    Then <1-ша послідовність операторів> : GOTO 100

50 If <умова2>    Then <2-га послідовність операторів> : GOTO 100

      . . .

90  If <умоваN>   Then : GOTO 100

Pascal.

Оператор умовного переходу на мові Pascal можна подати в повній та неповній формах. Повна форма має вигляд:

      If <умова> Then <оператор1>

                         Else <оператор2> ;

Якщо умова істинна (True), виконується оператор1, інакше (умова хибна - False) виконується оператор2.

Неповна форма оператора умовного переходу  має вигляд:

      If <умова> Then <оператор1> ;

Якщо умова істинна, виконується оператор1, інакше – пропускається.

Для того, щоб була можливість виконати серію операторів у разі істинності чи хибності умови оператора розгалуження, у мові Pascal існує поняття та конструкція складового оператора.

Складовий оператор є групою із декількох операторів, відокремлених один від одного символами “крапка з комою”, і обмежену оператор ними дужками Begin і End. Його схема така:

Begin 

      < оператор1 ; >

      . . .

      < операторN >    

End;

Складовий оператор сприймається як єдине ціле і може знаходитися у будь-якому місці програми, де можна використовувати простий оператор[3].

Змінити послідовність виконання дій дозволяє оператор безумовного переходу Goto. Він використовується тоді, коли після виконання деякого оператора без будь-якої умови потрібно виконати не наступний, а деякий інший, позначений міткою оператор. Формат оператора безумовного переходу:

GOTO М ;

Цей оператор означає “перейти до” і перенаправляє виконання програми (здійснює перехід) до оператора з міткою М. Міткою можуть бути імена або цифри, які мають бути описані в розділі міток. Мітка ставиться зліва від оператора та відокремлюється від нього символом “двокрапка”. Одна мітка не може використовуватись двічі, але до однієї мітки можна звертатися з різних ділянок програми.

Наведемо приклад фрагмента програми з використанням оператора умовного переходу, складового оператора та оператора безумовного переходу:

M1 : Readln ( X ) ;

         If   ( Х - 1) >= 0  Then Y := Sqrt ( X – 1 )

         Else Begin

             Writeln ( ‘ Неправильні дані. Повторіть ввід Х. ’ ) ;

             Goto M1

         End ;      

Оператор вибору CASE дозволяє здійснити вибір із довільної кількості існуючих варіантів. Він складається з виразу (селектору) та списку параметрів (операторів), кожному з яких передує список констант вибору. Список констант може складатися з однієї константи). При цьому тип констант має бути сумісним з типом селектора. Для селектора заборонені типи real, string.

Формат оператора вибору:

CASE <вираз> OF

      <1-й список констант> : <оператор1 ;>

         . . .

      : <операторN >

   ELSE < оператор >

END ;

При виконанні оператора  <вираз> обчислюється і його значення шукається в одному із списків констант. Після цього виконується оператор, що відповідає знайденому списку.

 Приклад 1.  Знайти найбільше з трьох даних чисел.

І етап. Математична модель: спочатку знайдемо найбільше з двох перших чисел, а потім порівняємо знайдене число з третім. Таким чином знайдемо найбільше.

ІІ етап. Складемо алгоритм у вигляді блок-схеми (мал. 9).

 початок

 

A, B, C

 

 

A > B

 

Mx:= B                Mx:= A

 

 

C>Mx

 

                             Mx:= C 

 

 

Mx

 

кінець                       

мал. 9

алг БЗТ (вещ a, b, c, mx)

   арг a, b, c

   рез mx

нач

      если a > b

         то mx := a

         иначе mx := b

      все

      если c > mx

         то mx := c

      все

mx := mx

кон

НАМ-програма 3

ІІІ етап. Запишемо текст програми.

 

 

 

10 REM БЗТ

20 INPUT “Введіть три числа” ; A, B, C

30 IF A>B THEN MX=A ELSE MX=B

40 IF C>MX THEN MX=C

50 PRINT”Найбільшим є “;MX

60 END

Basic-програма 3

 

Program Max3;

   Var

      A, B, C, Mx : Real;

Begin

   Write ( ‘Введіть три числа’ ) ;

         ReadLn (A, B, C) ;

   If A > B Then Mx := A Else Mx := B;

   If C > Mx Then Mx := C ;

   WriteLn ( ‘Найбільшим є’, Mx :10 :4 )

 End.

 

 

Pascal-програма 3

ІV етап. Виконаємо повне тестування (за всіма лініями потоку).

Тест1. Вхідні дані : А=5, B=0, С= 7. Результат: 7.

Тест2. Вхідні дані: А=5, B=0, С= -1. Результат: 5.

Тест3. Вхідні дані: А=0, B=6, С= -1. Результат: 6. n

 

Приклад 2.  Обчислити значення функції .

І етап. Математична модель: значення даної функції обчислюється за формулами як значення одного із трьох виразів у залежності від значення аргумента.

ІІ етап. Складемо алгоритм у вигляді блок-схеми (мал. 10).

 початок

 

 

 х

 

 

 

X < 0

 

X > 1

 

 

 

 

 

Y

 

кінець

мал. 10

ІІІ етап. Запишемо текст програми.

 

 

 

 

алг Функц (вещ x, y)

   арг x

   рез y

нач

   если x < 0

      то y := x + cos(2*x)

      иначе

             если x > 1

               y := ln ( x -1) / ln (3)

                иначе y := ( x - 1 )**2

             все

   все

   y := y

кон

НАМ-програма 4

 

 

 

10 REM Функція

20 INPUT “Введіть значення для x=” ; X

30 IF X < 0 THEN Y=X + COS(2*X)  ELSE IF X>1 THEN Y=LOG(X-1)/LOG(3) ELSE Y=(X-1)^2

40 PRINT “При x=”;X, ”y=”;Y

50 END

Basic-програма 4

 

Program FNF;

   Var

      X, Y : Real;

Begin

   Write ( ‘Введіть значення для x=’ ) ;

         ReadLn (X) ;

   If X<0 Then Y := X + Cos(2*X)

   Else

      If X>1 Then Y := Ln(X-1)/Ln(3)

      Else Y := Sqr(X-1);      

  WriteLn ( ‘При x=’, X :10 :4, ‘ y=’,Y:10:4 )

 End.

 

 

Pascal-програма 4

ІV етап. Виконаємо повне тестування (за всіма лініями потоку).

Тест1: x=0.5, Y=0.25. Тест2: x=10, Y=2. Тест3: x= - 3.14, Y= - 2.14. n

 Приклад 3.  Обчислити значення функції:.

І етап. Математична модель. Дана функція подібна раніше розглянутій ( Приклад 4. ): вираз  замінено на .

Тоді дану функцію доцільно подати як:   

ІІ етап. Складемо алгоритм у вигляді блок-схеми (мал. 11).

алг Функц (вещ x, y)

   арг x

   рез y

нач

      если x<0 или x>1

         то y := x + cos(2*x)

         иначе y := (x-1)**2

      все

кон

НАМ-програма 5

ІІІ етап. Запишемо текст програми.

 початок

 

X

 

 

x<0 або x>1

 

 

 

 

Y

 

кінець                       

мал. 11

 

 

 

 

 

10 REM Функція

20 INPUT “Введіть значення для x=” ; X

30 IF X<0 OR X>1 THEN Y=X+COS(2*X)

ELSE Y=(X-1)^2

40 PRINT “При x=”;X, ”y=”;Y

50 END

Basic-програма 5

 

Program FNF ;

   Var

      X, Y : Real ;

Begin

   Write ( ‘Введіть значення для x=’ ) ;

         ReadLn (X) ;

   If (X<0) Or (X>1) Then Y := X + Cos(2*X)

   Else Y := Sqr(X-1) ;  

   WriteLn ( ‘При x=’, X :10 :4, ‘ y=’,Y:10:4 )

 End.

 

 

Pascal-програма 5

ІV етап. Виконаємо повне тестування.

Тест1: x=0.5, Y=0.25.

Тест2: x= - 3.14, Y= - 2.14. n



[1] див. порівняльну таблицю логічних операцій  у п. 1.3.

[2] Ця команда може бути також використана для обробки переривань, викликаних натисканням функціональної клавіші, “пропуск”, одночасним натискан­ням клавіш Сtrl+Stop, вичерпанням заданого інтервалу часу тощо. При цьому команда ON має інший синтаксис.

[3] Оператори, що не містять ніяких інших операторів, називають простими. До них відносяться оператори присвоєння, безумовного переходу, порожній оператор тощо.

Схожі матеріали
05.10.2012 Введення та виведення даних, розробки та опису лінійних програм.
20.12.2011 Pascal - лабораторні роботи - для студентів III-го курсу (лекції Ляшенко Б.М.)
12.12.2010 Робота з підпрограмами
12.12.2010 Робота з рядковими та символьними величинами.
12.12.2010 Робота з циклічними програмами
12.12.2010 Робота з масивами даних.
12.12.2010 Розробка та описання програм з розгалуженнями
12.12.2010 Початки програмування
12.12.2010 Етапи розв’язання задач з використанням ЕОМ
12.12.2010 Поняття про алгоритм

Тести даної категорії
12.12.2010 ПОЧАТКИ АЛГОРИТМІЗАЦІЇ. ВСТУП ДО ПРОГРАМУВАННЯ

Останні створені тести
17.04.2020 Методика проведення природознавчої розповіді з дітьми дошкільного віку
08.04.2019 Нова історія країн Азії та Африки
16.11.2015 Олімпійські ігри Стародавньої Греції. Відродження олімпійських ігор. Олімпійський рух сучасності.
28.10.2015 British Writers. Тест для студентів 4 курсу ННІ педагогіки
27.10.2015 The Passive Voice. Тест для студентів 2 курсу ННІ педагогіки
27.10.2015 Articles. Тест для студентів 1 курсу неспеціальних факультетів
27.10.2015 The Active Voice. Тест для студентів 2 курсу ННІ педагогіки
08.10.2014 INTEL
22.10.2012 Цивільний захист
26.09.2012 Мовнокомунікативна компетентність. Орфографічна складова
Рекомендовані лекції
28.09.2014 Лекції з курсу "Сучасні підходи у психології особистості" для студентів VІ курсу спеціальностей 8.03010201 Психологія та 8.03010301 Практична психологія
12.12.2010 ЕОМ як виконавець алгоритму. Мови програмування
24.04.2020 Еколого-розвивальне середовище в ЗДО. Куточок живої пирироди
24.04.2020 Практичні методи ознайомлення дітей з природою (праця дітей у природі)
13.11.2014 MICROSOFT OFFICE. СКЛАД, ПРИЗНАЧЕННЯ, ОСНОВНІ ПРОГРАМИ-ДОДАТКА
28.03.2016 ОС та СП. Тема 6. Планування. Тези
06.05.2020 Форми ознайомлення дітей з природним довкіллям (методика ведення природознавчого заняття) презентація
28.03.2016 ОС та СП. Тема 6. Планування. Слайди
12.12.2010 Алфавіт
12.12.2010 Рядки символів