Народна Освіта » Інформатика » Алгоритми з розгалуженнями

НАРОДНА ОСВІТА

Алгоритми з розгалуженнями

1. Які вирази називають логічними? Яких значень вони можуть набувати?

2. Назвіть логічні операції. Наведіть таблицю істинності для кожної з них.

3. Що таке розгалуження? Які види розгалуження ви знаєте? Чим вони різняться між собою?

АЛГОРИТМИ З РОЗГАЛУЖЕННЯМ

Ви вже знаєте, що алгоритми можуть містити розгалуження. Ви також знаєте, що розгалуження як фрагмент алгоритму починається з команди перевірки умови і результатом виконання цієї команди може бути або істина (Так, true), або хиба (Ні, false). І залежно від результату виконання цієї команди будуть виконуватися ті чи інші команди.

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

У загальному випадку блок-схеми розгалужень мають такий вигляд (мал. 6.18 і 6.19):

РОЗГАЛУЖЕННЯ В OBJECT PASCAL

Команда повного розгалуження в мові програмування Object Pascal має такий загальний вигляд:

Іллогічний вираз>

Then begin

<послідовність команд 1> end

Else begin

<послідовність команд 2> end;

(англ. if - якщо, then - тоді, else - інакше).

Виконання цієї команди відбувається так: обчислюється значення логічного виразу; якщо це значення true, то виконується послідовність команд 1 і після цього виконується команда, наступна за розгалуженням; якщо це значення false, то виконується послідовність команд 2 і після цього виконується команда, наступна за розгалуженням.

Є в Object Pascal і команда неповного розгалуження:

Іллогічний вираз>

Then begin

<послідовність команд> end;

Виконання цієї команди відбувається так: обчислюється значення логічного виразу; якщо це значення true, то виконується послідовність команд і після цього виконується команда, наступна за розгалуженням; якщо це значення false, одразу виконується команда, наступна за розгалуженням.

Звертаємо вашу увагу:

• якщо після ключових слів Then і Else слідує тільки по одній команді, то операторні дужки begin і end можна не ставити;

•    перед Else ставити крапку з комою не можна.

Розглянемо задачу, алгоритм розв’язування якої містить розгалуження.

Задача 1. Обчислити значення виразу (a + 2b) / (a - 3b), де a, b - дійсні числа.

Оскільки вираз містить дію ділення на вираз, який може дорівнювати нулю (наприклад, при a = 3 і b = 1), алгоритм розв’язування цієї задачі

повинен містити розгалуження, у якому буде ураховано два можливих випадки: значення виразу а - 3Ь дорівнює 0 і значення виразу а - 3Ь не дорівнює 0.

Блок-схема алгоритму розв’язування цієї задачі матиме такий вигляд (мал. 6.20):

Якщо записати мовою Object Pascal алгоритм, наведений на малюнку 6.20, то він матиме такий вигляд: a := StrToFloat(Editl.Text); b := StrToFloat(Edit2.Text); x := a—3*b;

If x = 0

Then Labell.Caption := ’Вираз значення не має: ділення на нуль’

Else begin

y := a+2*b; z := y/x;

Labell.Caption := FloatToStr(z); end;

Звертаємо вашу увагу, що обчислення значення виразу a - 3b можна було б не здійснювати в окремій команді і не запам’ятовувати як значення

змінної х, а здійснити безпосередньо в команді розгалуження. Також можна обчислення значення виразу (a + 2 b) / (a - 3b) записати не двома командами, а однією. Тоді цей фрагмент проекту матиме такий вигляд: a := StrToFloat(Editl.Text); b := StrToFloat(Edit2.Text);

If a—3*b = 0

Then Labell.Caption := ’Вираз значення не має: ділення на нуль’

Else begin

z := (a+2*b) /(a-3*b);

Labell.Caption := FloatToStr(z); end;

Розглянемо задачу, під час розв’язування якої в команді розгалуження використовується кон’юнкція.

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

 

Фрагмент проекту для розв’язування цієї задачі матиме такий вигляд: x := StrToFloat(Editl.Text);

If (x > —3) and (x < 5)

Then y := 2*x - 12 Else y := 7-8*x;

Labell.Caption := FloatToStr(y);

Розглянемо, нарешті, задачу, під час розв’язування якої використовується дещо складніше розгалуження.

Задача 3. Дано два числа. Визначити, чи рівні вони. Якщо ні, то яке з них більше?

 

Блок-схема алгоритму розв’язування цієї задачі матиме вигляд як на малюнку 6.21.

У цьому алгоритмі всередині одного розгалуження використовується інше розгалуження. Ось який вигляд має фрагмент відповідного проекту: If x = y

Then Labell.Caption := ’Числа рівні’

Else If x>y

Then Labell.Caption := ’Перше число більше’

Else Labell.Caption := ’Перше число менше’;

У загальному випадку блок-схеми розгалужень матимуть такий вигляд (мал. 6.22 і 6.23):

Команда повного розгалуження в мові програмування Object Pascal має такий загальний вигляд:

If <логічний вираз>

Then begin

<послідовність команд 1> end

Else begin

<послідовність команд 2> end;

Виконання цієї команди відбувається так: обчислюється значення логічного виразу; якщо це значення true, то виконується послідовність команд 1 і після цього виконується команда, наступна за розгалуженням; якщо це значення false, то виконується послідовність команд 2 і після цього виконується команда, наступна за розгалуженням.

Є в Object Pascal і команда неповного розгалуження:

If <логічний вираз>

Then begin

<послідовність команд> end;

Виконання цієї команди відбувається так: обчислюється значення логічного виразу; якщо це значення true, то виконується послідовність команд і після цього виконується команда, наступна за розгалуженням; якщо це значення false, одразу виконується команда, наступна за розгалуженням.

Дайте відповіді на запитання

1*. Який вигляд має блок-схема повного розгалуження? Опишіть особливості її виконання.

2*. Який вигляд має блок-схема неповного розгалуження? Опишіть особливості її виконання.

3*. У чому полягають відмінності у виконанні повного і неповного розгалуження?

4°. Який вигляд має команда повного розгалуження в Object Pascal?

5°. Який вигляд має команда неповного розгалуження в Object Pascal?

6*. У чому полягають відмінності виконання команд повного і неповного розгалуження в Object Pascal?

Виконайте завдання

1*. Поясніть хід виконання команди:

Я<логічний вираз 1>

Then begin

<команди 1> end

Else If <логічний вираз 2>

Then begin

<команди 2> end

Else begin

<команди 3> end;

2*. Поясніть хід виконання послідовності команд: Я<логічний вираз 1>

Then begin

<команди 1> end;

К<логічний вираз 2>

Then begin

<команди 2> end;

3*. Поясніть, чим виконання команди в завданні N° 1 відрізняється від виконання послідовності команд у завданні N 2.

4*. Складіть проект для обчислення значення виразу (a + b) - c : (a - b). Збережіть проект у папці з іменем Завдання 6.4.4, створеній у вашій папці.

5*. Складіть проект для обчислення значення виразу a + b - c : (a - 2b). Збережіть проект у папці з іменем Завдання 6.4.5, створеній у вашій папці.

6*. Створіть проект, який визначає менше з двох довільних дійсних чисел або виводить повідомлення, що числа рівні. Збережіть проект у папці з іменем Завдання 6.4.6, створеній у власній папці.

7*. Створіть проект, який визначає більше з двох нерівних дійсних чисел. Збережіть проект у папці з іменем Завдання 6.4.7, створеній у вашій папці.

8°. Створіть проект, який обчислює модуль довільного дійсного числа. Збережіть проект у папці з іменем Завдання 6.4.8, створеній у вашій папці.

9*. Створіть проект, який визначає найменше число серед трьох нерівних чисел. Збережіть проект у папці з іменем Завдання 6.4.9, створеній у вашій папці.

10*. Наведіть приклади правил з української мови, математики, інших предметів, що містять розгалуження.

11*. Наведіть приклади життєвих ситуацій, які можна описати алгоритмом з розгалуженням.

12*. Створіть проект, у якому кнопка буде переміщуватися на 20 пікселів праворуч під час наведення на неї вказівника. Після того як кнопка зникне за правою межею вікна, вона повинна з’явитися біля лівої її межі. Збережіть проект у папці з іменем Завдання 6.4.12, створеній у вашій папці.

13*. Створіть проект для знаходження x з рівняння ax = b. Збережіть проект у папці з іменем Завдання 6.4.13, створеній у вашій папці.

14*. Створіть проект для знаходження x з рівняння ax + b = c. Виконайте його при: 1) a = 2; b = -8; c = 18; 2) a = 20; b = 5; c = 5; 3) a = 0; b = 12; c = 3; 4) a = 0; b = 10; c = 10. Збережіть проект у папці з іменем Завдання 6.4.14, створеній у вашій папці.

15*. Створіть проект для визначення, чи можна з трьох відрізків із заданими довжинами утворити трикутник. Збережіть проект у папці з іменем Завдання 6.4.15, створеній у вашій папці.

16*. Створіть проект, у якому можна обчислити значення функції

Гі5 - Зх, якщо -1 < х < 4,

^ [б + Ах, для всіх інших X.

Збережіть проект у папці з іменем Завдання 6.4.16, створеній у вашій папці.

 

Це матеріал з підручника Інформатика 8 клас Ривкінд

 

Категорія: Інформатика

Автор: admin от 16-10-2016, 16:05, Переглядів: 23616