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

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

Розділ 13. Алгоритми з розгалуженнями

Мітки та оператор безумовного переходу, оператори умовного І переходу.

13.1. Мітки. Оператор безумовного переходу

Оператори програми виконуються послідовно в тому порядку, в якому воі-ш записані в тексті програми. Але цей порядок може бути змінений різними методами, зокрема, за допомогою оператора безумовного переходу. У цьому операторі використовується мітка — ідентифікатор, який найчастіше записується перед іншим оператором і відокремлюється від нього символом двокрапки, наприклад: М: х:=х+1; {М — мітка}.

Оператор безумовного переходу мас такий вигляд: goto М;. У результаті виконання цього оператора керування передається оператору, позначеному міткою М.

Будь-яка мітка, що використовується в програмі, має бути описана в розділі описань міток. Цей розділ розпочинається зі службового слова label (мітка) і розмішується перед розділами описань констант і змінних.

Приклад. У наведеній нижче програмі оголошується мітка МА. Після виконання операторів х:=15, у:=4 і z:=2 керування передасться оператору, позначеному міткою МА, тобто y:=y*x*z. Таким чином, у цій програмі оператор y:=y+x+z не виконається, а отже, буде виведено повідомлення у=120.

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

Перевіряємо себе

1. З якою метою у програмах використовуються мітки?

2. Як записується опеїзатор безумовного переход}' в мові Pascal?

3. У якому міспі ошшатопа вказується мітка?

4. Чому намагаються уникати використання команди безумовного переходу?

13.2. Оператори умовного переходу

Оператор if...then...else

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

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

Виконання скороченої форми оператора умовного переходу

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

Наприклад, розглянемо такий фрагмент програми тестування учня, в якій змінна vidpovid призначена для введення учнем відповіді на чергове запитання, змінна prav містить правильну відповідь, а змінна ocinka містить накопичену оцінку до відповіді на запитання:

При виконанні вказаної команди спочатку буде перевірена умова vidpovid = prav, яка буде істинною, якщо учень дасть правильну відповідь, і в цьому випадку виконається оператор ocinka := ocinka + 1,

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

Оператор умовного переходу, записаний у повній формі,

виконується так. Спочатку оочислюється значення оулевого виразу <умова>. Якщо умова істинна, то виконується <оператор 1> і керування передасться наступному за умовним оператору (<оператор 2> пропускається). Якщо ж умова хибна, то <опсратор 1> пропускається, а виконується лише <оператор 2>, і на цьому дія умовного оператора завершується.

Звернімо увагу на таку синтаксичну деталь. Символ "

відокремлює оператори. Оскільки умовний оператор завершується діями, які записані після слова else, то запис крапки з комою перед else с синтаксичною поліилкою.

Після ключових слів then та else можуть бути розташовані інші

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

Розглянемо програму, в якій один оператор умовного переходу вкладено в іншій.

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

Блок-схема алгоритму обчислення значення функції представлена па рис. 13.1.

Рис. 13.1. Блок-схема алгоритму обчислення значення функції

 

За цією блок-схемою складемо програму. Гілка "ні" першого розгалуження, якій відповідає фраза else оператора if, містить друге розгалуження. Том}' після слова else першого оператора if слід записати дрзтий оператор умовного переходу.

Зазначимо, що в логічних виразах, які використовуються в операторах умовного переходу, інколи доцільно застосовувати логічні операції (not, or, and). Використання цих операцій дає змогу скоротити кількість операторів умовного переход}'.

Пииклал. Наведемо поогоаму. піо обчислює значення функції

У мові Pascal дія ключових слів then та else поширюється лише па один, наступний, оператор. Якщо в разі істинності або хибності певного логічного твердження потрібно виконати декілька операторів, то їх слід оточити операторними дужками, роль яких відіграють ключові слова begin та end: if

Якщо логічний вираз <умова> істинний, виконуватимуться оператори <оператор 1>, <оператор N>, якщо хибний — оператори <оператор К>, <оператор М>. Групу операторів, що розпочинається зі слова begin, а завершується словом end, можна розглядати як один складений оператор. Розглянемо приклад використання складеного оператора.

Приклад. Наведемо програму, яка обчислює значення функцій

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

Оператор багатоваріантного вибору мас таку структуру: case <вираз> of <константа 1>: <оператор 1>;

 

Тут <константа 1>,..., <константа N> — це константи або діапазони значень того ж типу, що й <вираз>.

Виконання оператора багатоваріантного вибору розпочинається з обчислення виразу, записаного після слова case. Якщо обчислене значення дорівнює одній із констант набору сконстанта 1>,...,сконстанта N>, то виконується оператор, який відповідає цій константі. Такий оператор може бути складеним. Ключове слово else використовувати пе обов’язково. Оператор, який розташований після слова else, використовується тоді, коли значення виразу, записаного після слова case, не збігається з жодною з перелічених констант. Якщо ключове слово else відсутнє, а значення згаданого виразу не збігається з жодною константою, оператор case ніяких дій не виконує. У будь-якому випадку після виконання оператора case керування передається

оператору, що розташований за словом end, яким завершується даний оператор.

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

Перевіряємо себе

1. Яку структуру має оператор умовного переходу?

2. Як виконуються оператори умовного перехода'?

3. Яку структуру мас оператор Case?

4. У яких із наведених нижче операторів умовного переходу є помилки?

Виконуємо

1. Визначте, яких значень набудуть змінні а і b після виконання наведеного фрагмента програми за умови, що введено значення а=0,6 і Ь= -2,3.

end.

2. Складіть програму обчислення значення функції

3. Цукор розфасували в два пакети. Маса першого — m кг, другого — n кг. Складіть програму, що визначає який пакет важчий - перший чи другий.

4. Тіло має масу M г і об’єм V см3. Чи плаватиме воно в рідині, об’єм якої V1 см3, а маса М1 г?

Підказка. Знайдіть густину тіла та рідини, а потім порівняєте їх.

13.3. Програми для алгоритмів із розгалуженням

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

1. Дано два числа. Розробити програму, що виводить на екран більше число.

Позначимо перше число змінною а, друге — змінною b. Першим із клавіатури вводиться значення змінної а. Програмна реалізації цього завдання може мати такий вигляд:

2. Розробити програму для визначення, чи можна в квадрат зі стороною а вписати коло радіусом г.

Значення сторони квадрата і радіуса кола вводяться з клавіатури. Програма з іменем п13_7, що виконує завдання визначення відповіді, наведена нижче.

 

3. Двоє учнів змагаються у влучності кидання м’яча. Розробити програму, яка виводить на екран результати лише тих кидків, у результаті яких м'яч падає на землю на віддалі 15-20 м від точки кидання.

Позначимо змінною а результат кидка першого учня, змінною b — другого учня. Значення змінних уводитимемо за допомогою клавіатури. Уважатимемо, що у випадку, якщо м’яч потрапляє на лінію відмітки 15 або 20 м, то вважається, що учень потрапив у ціль. Один із можливих варіантів програми наведено нижче

Виконайте і доведіть, що програма функціонує правильно.

4. Батько і мати поклали в банк різні суми грошей. Якщо гроші зберігаються у банку 4 роки, то сума внеску збільшується вдвічі, інакше сума залишається незмінною. Розробити програму, що визначає суму внеску батька і матері.

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

Виконайте програму і доведіть, що вона функціонує правильно.

5. Василь і Микола збирали гриби. Василь запропонував: "Якщо я назбираю грибів більше ніж ти, то віддаси мені половину своїх грибів, у іншому випадку я віддаю тобі половину своїх". Микола погодився з такою пропозицією. Необхідно розробити програму, за допомогою якої визначається, скільки грибів дістанеться кожному.

Позначимо змінною а масу грибів, зібраних Василем, а змінною b — масу грибів, зібраних Миколою. Ці самі змінні використовуються й для визначення маси грибів, що дістанеться кожному учню

Виконайте програму й доведіть, що вона функціонує правильно.

6. Сва, Аліна та Олеся кидають кубик, на гранях якого е цифри від 1 до 6. Кожна з них називає цифру від 1 до 6, а потім кидає кубик. Переможе та дівчинка, яка вгадає цифру, що випала.

Нехай змінна р - це реальне значення цифри, змінна а — значення цифри Єви, b — Аліни й с — Олесі. Необхідно послідовно порівнювати значення змінної р зі змінними а, b і с. Переможців може бути кілька. Ознакою того, що переможців нема, є нуль у змінній к. Програма, що реалізує завдання, може бути такою

Уведіть, виконайте програму і доведіть, що вона функціонує правильно.

Перевіряємо себе

1. Дано два цілих числа. Розробіть програму заміни додатігіх чисел одиницею, а від’ємних — нулем.

2. Дано три дійсних числа а, Ь, с. Розробіть програму, що збільшує удвічі кожне з них, якщо а>Ь>с, у протилежному випадку — кожне число зменшується на одиницю.'

Розробіть програму для визначення, чи є трикутник зі сторонами о, Ь, с прямокутним трикутником

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

Розробіть програму , що визначає, чи можна в рівносторонній трикутник зі стороною а вписати коло з радіусом г.

Розробіть програму, що визначає чи є в прямокутному трикутнику з катетами а, Ь і гіпотенузою с кут ЗО градусів.

Виконуємо

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

2. Сторони одного прямокутника дорівнюють А і В. Сторони другого дорівнюють X і У. Складіть алгоритм і програму перевірки прямокутників на рівність їх площ.

Підказка. Знайти різницю площ і порівняти її з наперед заданим значенням похибки.

3. Дано сторону одного квадрата і площу іншого. Чи рівні ці квадрати?

4. Дано сторону квадрата і дві суміжні сторони прямокутника. Чи є ці фігури рівновеликими?

5. Дано чотири натуральні числа. Чи можуть ці числа бути членами арифметичної прогресії?

Дано довжини відрізків АВ, ВС і АС. Чи можуть ці відрізки бути сторонами трикутника?

Дано координати трьох точок на числовій осі. Яка з цих точок найближча до початку відліку?

Дано градусні міри двох кутів. Чи можуть ці кути бути

суміжними?

У стіні є квадратний отвір зі стороною а. Чи пройде в цей отвір труба радіусом і??

Завдання

У табл. 13.4 і 13.5 подано варіанти завдань для виконання практичної роботи. У табл. 13.1 подано завдання з використанням стандартних математичних функцій. Складніші завдання з використанням логічних операцій подано у табл. 13.2.

Таблиця 13.1

Для отриманого завдання треба розробити програму розв'язування задачі, розрахувати контрольний варіант і вивчити порядок роботи в середовищі програмування.

Слід увести програму і налагодити її. Контрольний варіант має збігатися з результатом виконання програми.

Таблиця 13.2

Відомі координати трьох точок па площині. Чи розміщені ці точки на одній прямій? Відомі довжини трьох відрізків а, b, с. Чи можна з них побудувати рівиосторониій трикутник? Відомі довжини трьох відрізків а, b, с. Чи можна побудувати з них прямокутний трикутник?

 

Нижче подано зразок оформлення програми для першого варіанта табл. 13.1.

1. Завантажити систему Turbo Pascal. Якщо не відкритий порожній файл NonameOO.pas, відкрити його, виконавши команди F10 → File → Enter → New → Enter.

2. Увести програму. Умисно зробити помилку в слові var.

3. Порівняти введену програму з розробленою. Виправити всі помилки, крім помилки у слові var.

4. Зберегти програму в робочому каталозі (F10 → File → Enter → Save as → ім’я файла → Enter).

5. Виконати програму.

6. Буде видано повідомлення про помилку: Error 36: BEGIN expexted. Виправити помилку й викопати програму.

7. За наявності в програмі інших синтаксичних помилок на екран видаватимуться певні повідомлення. Виправити помилку й виконати програму.

8. На екрані з’явиться повідомлення. Увести дані першого варіанта, наприклад, 3 4 2 — Enter.

9. Викликати результат на екран (Alt+F5).

10. Порівняти отриманий результат із контрольним. Якщо результат правильний, увести дані другого варіанта й виконати програм}'.

11. Якщо результат неправильний, проаналізувати програму, знайти помилку, виправити її і виконати програму. Ці дії виконувати доти, доки не буде отримано правильний результат.

12. Зберегти працездатну програму (F10 → File → Enter → Save → Enter).

13. Для використання засобів налагодження програми необхідно

включити опції компілятора Debug information і Local symbols в меню Option\Compiler. Для цього виконати команди: F10 → Options → Enter → Compiler → Enter. Якщо опції не включені, включити їх.

14. Виконати програму' в покроковому режимі, послідовно натискаючи клавішу F7. Переконатися, що вона функціонує правильно.

15. Вийти із середовища Turbo Pascal

(F10 → File → Enter → Exit → Enter).

Завдання

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

За обсяг, спожитий до 100 кВтгод електроенергії на місяць (включно)

36,02

За обсяг, спожитий понад 100 кВтгод до 800 кВтгод електроенергії на місяць (включно)

75,48

За обсяг, спожитий понад 800 кВт год електроенергії на місяць

145,76

Створити програму, за допомогою якої нараховуєтьс

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

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

у встановленому порядку кухонними електроплитами і мають однозонний лічильник, застосовуються такі тарифи (в копійках за 1 кВттод).

За обсяг, спожитий до 250 кВтгод електроенергії на місяць (включно)

21,54

За обсяг, спожитий понад 250 кВтгод до 800 кВтгод електроенергії на місяць (включно)

28,02

За обсяг, спожитий понад 800 кВт год електроенергії на місяць

95,76

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

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

 

Словничок

 

Ідентифікатор

— мітка, яка записується перед оператором і відокремлюється від нього символом двокрапки.

Оператор Case

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

Оператор

безумовного

переходу

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

Оператор замовного переходу

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

 

Це матеріал з підручника Інформатика 8 клас (поглиблений рівень) Гуржій

 

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

Автор: admin от 15-12-2016, 13:25, Переглядів: 4640