Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

6.5.2. Дерево розв’язувань задачі вибору

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

 

Задача 7. Вибір середнього з трьох елементів. Дано попарно нерівні елементи a, b, c. Вибрати з них середній за величиною.

Розв’язання. Розглянемо всі можливі варіанти розташування цих елементів у порядку зростання:

1. a < b < c, 2. a < c < b, 3. b < a < c, 4. b < c < a, 5. c < a < b, 6. c < b < a

Логічний аналіз задачі зручно зобразити у виді графічної схеми (рис 6.1)

Якщо в нашому алгоритмі використовувати порівняння a < b, у випадках 1, 2, 5 виконання піде по гілці «так», у випадках 2., 3., 6. – по гілці «ні». Використовуємо тепер у нашому алгоритмі порівняння a < c як по гілці «так», так і по гілці «ні».

a < b Гілка «так»

a < c гілка “так” (1. a < b < c, 2. a < c < b), a < c гілка “ні” 5. c < a < b

a < b Гілка «ні»

a < c гілка “так” ( 3. b < a < c, ) a < c гілка “ні” ( 4. b < c < a,) 6. c < b < a)

Тепер ясно, що для того, щоб зробити остаточний вибір, необхідно в алгоритм включити і третє порівняння b < c.

 

 

 

 

 

 

 

 

 

 

 

 

Рис 6.1. Дерево рішень задачі вибору середнього з трьох елементів.

 

Такі схеми називають деревом рішень задачі вибору. Графічними елементами дерева рішень є вершини і дуги. Для кожної вершини дерева зазначені:

  • сукупність варіантів, що можливі в даній вершині;

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

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

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

Задача вибору розв’язана, якщо всі сукупності варіантів містять рівно один варіант.

Аналіз розв’язування задачі про середній із трьох елементів дозволяє зробити висновок: Будь-який алгоритм її розв’язування в гіршому випадку повинен виконати три порівняння.

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

Текст процедури мовою Паскаль:

Procedure Middle(a, b, c : Real; Var Mid : Real);

Begin

If a < b

Then If a < c

Then If b < c

Then Mid := b {варіант 1}

Else Mid := c {варіант 2}

Else Mid := a {варіант 5}

Else If a < c

Then Mid := a {варіант 3}

Else If b < c

Then Mid := c {варіант 4}

Else Mid := b {варіант 6}

End;

6.5.3. Задачі на зважування

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

Чашкові терези, що порівнюють два предмети – елемента можна запрограмувати за допомогою наступної функції:

Function Compare(A, B : Real):Integer;

Begin

If A < B

Then Compare := -1

Else If A = B

Then Compare := 0

Else Compare := 1

End;

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

Розв’язання. Будуємо дерево розв’язків, вершини якого мають три розгалуження (Рис.6.2).

 

 

 

 

 

 

 

Задачі для самостійного розв’язування.

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

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

відомо, що вона легше, ніж справжні.

невідомо, легше вона, ніж справжні, або важче.

Задача 11. Дано 8 однакових на зовнішній вигляд монет. Відомо, що серед них є одна фальшива, яка легше, ніж справжні. Знайти за допомогою чашкових терезів фальшиву монету.

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