Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R4_КП_12.doc
Скачиваний:
8
Добавлен:
23.11.2018
Размер:
605.18 Кб
Скачать

Оператори розгалуження

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

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

Формат оператора для мови Pascal:

if умова then оператор_1 [else оператор_2].

тут if (якщо), then (то) і else (інакше) є службовими словами.

Механізм реалізації: якщо задана умова істинна, то виконується оператор_1, якщо ж умова хибна, то виконується або оператор_2 (якщо він є), або керування передається на наступний за if оператор програми.

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

Формалізація повного умовного оператора в термінах РБНФ:

повний умовний оператор::= if умова then оператор else оператор

умова ::= логічний вираз.

Наприклад,

if y>=x then max:=y

else max:=x.

Формалізація скороченого умовного оператора в термінах РБНФ:

скорочений умовний оператор ::= if умова then оператор.

Наприклад,

if y<>0 then f:=5*(y+3)/y.

У мові С умовний оператор має наступний формат:

if (вираз) оператор1;

[else оператор2;]

Як видно із формату оператора, синтаксис мови допускає наявність лише одного оператора після ключових слів then і else, тому групу інструкцій обов'язково треба об'єднувати в складений оператор. Інакше виникає семантична (логічна) помилка програми, коли компілятор мови помилок не видає, але програма працює неправильно. Наприклад,

if x<y then { Pascal }

begin

r:=x;

x:=y;

y:=r

end.

if (i<j) i++; // C

else {j=i-3; i++;}

Допускається вкладеність оператора IF. Наприклад,

if x>5

then

if y<>0

then f:=x/sin(y)

else WriteLn('Неприпустиме значення параметра Y')

else f:=x*y;

При цьому діє правило: кожне else відповідає тому then, що безпосередньо передує йому .

 Варто уникати конструкцій оператора IF з великим ступенем вкладеності.

Приклад, визначити, чи є введене число парним

// Мова С

#include <stdio.h>

#include <conio.h>

main ()

{ int num;

printf ("\n Input number:");

scanf ("%d", &num);

if (num % 2 == 0) printf ("\n even");

else printf ("\n not even");

getch();

}

Умовний вираз. Деякі мови програмування, зокрема, С++ і Java, дозволяють використовувати умовний вираз наступного формату:

умова ? вираз_1 : вираз_2;

Механізм його реалізації : якщо умова істинна, то виконується вираз_1, інакше - вираз_2.

Наприклад,

cout << (grade >= 60 ? “Зачет” : “Незачет”) << endl;

grade >= 60 ? cout <<“Зачет \n” : cout <<“Незачет \n”;

x>y ? max=x : max=y

Умовний вираз можна використовувати і для умовного присвоєння. Наприклад,

max = x>y ? x : y

Оператор багатоваріантного вибору. Часто виникають ситуації, коли доводиться здійснювати вибір одного із декількох альтернативних шляхів виконання програми. Не дивлячись на те, що такий вибір можна організувати за допомогою оператора if, зручніше скористатися спеціальним оператором багатоваріантного вибору, який передбачає вибір напрямку подальших дій визначається в залежності від значення певної змінної (селектора вибору).

В разі мови Pascal  - це оператор CASE. Його формат:

case селектор of

список значень варіанту 1 : оператор_1;

. . .

список значень варіанту n : оператор_n

[ else оператори ]

end;

де селектор - вираз будь-якого порядкового типу;

список значень варіанту - конкретні можливі значення селектора.

Механізм реалізації: в залежності від поточного значення селектора, керування передається на відповідний варіант дій; якщо це значення не співпало з жодним із значень у варіантах, то виконується дія, задана в гілці else (за її наявності).

Формалізація оператора багатоваріантного вибору для Pascal  в термінах РБНФ:

оператор вибору::= case селектор of список значень: оператор

{; список значень : оператор}[else оператор {; оператор}] end

селектор> ::= вираз

список значень ::= константа {, константа} | iнтервал

iнтервал ::= константа .. константа.

Як видно із описів, списки значень для різних варіантів роботи оператора CASE можуть складатися з довільного числа окремих значень і/або діапазонів значень, розділених комами. Вони повинні належати до того ж типу даних, що і селектор. Усі значення при цьому повинні бути унікальними, діапазони не повинні перетинатися і містити вже зазначених констант. Наприклад,

case sym of

'0'..'9' : WriteLn('Это цифра');

'а'..'z' : WriteLn('Это строчная буква');

'А'..'Z' : WriteLn('Это прописна буква');

#10,#13,#26 : WriteLn('Это управляющий символ')

else WriteLn('Это другой символ')

end;

WriteLn(‘Введите месяц’); ReadLn(m);

case m of

12,1,2: WriteLn (‘Зима’);

3..5 : WriteLn (‘Весна’);

6..8 : WriteLn (‘Лето’);

9..11 : WriteLn (‘Осень’);

end;

Для задання у варіантах декількох дій використовується складений оператор. Наприклад,

case symbol of

‘A’ .. ‘z’ : WriteLn ('символ');

‘+’ : begin

r := a + b;

WriteLn ('r =', r);

end;

end;

У мові С оператор вибору має формат:

switch ( вираз )

{ case мітка_1 : оператор_1;

...

case мітка_n : оператор_n;

[ default : оператори; ]

};

Особливості реалізації:

  • значення виразу в switch повинно бути цілим; цілими або символьними константами повинні бути і мітки (не можуть містити змінні або виклики функцій);

  • усі мітки повинні бути унікальними;

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

Наприклад,

switch (ch) // вибір елемента меню

{ case 'A':{Add(); break;}

case 'D':{Delete(); break;}

case 'Q':{q= true; break;}

default:{cout <<"error"<< endl;}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]