Алгоритми з розгалуженнями, вкладеними в цикл
Нова українська школа
Урок 40
Інформатика 6
teach-inf.com.ua
за підручником
Бондаренко О.О. та ін.
Алгоритми з розгалуженнями,�вкладеними в цикл
У програмах можна поєднувати команди розгалуження та повторення.
Ми вже складали алгоритми, у яких команди розгалуження та повторення слідували одна за одною.
Але команди можуть також міститися одна в одній: розгалуження можуть бути вкладені:
як у цикл
із лічильником
так і в цикл
із передумовою
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Ви знаєте, що цикл for перебирає елементи деякої послідовності значень. Якщо при цьому потрібно перевірити, чи відповідає кожний елемент послідовності певній умові, в тіло циклу слід вкласти команду розгалуження.
Розгалуження, вкладене в цикл, може бути:
повним
неповним
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Розгляньте приклад
На квітнику 7 квіток.
Підрахуємо кількість червоних і кількість синіх квіток. Розглянемо фрагмент блок-схеми оператора циклу, який виконує такий підрахунок.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Як бачимо, в цикл вкладено повне розгалуження.
Цикл for дозволяє повторити перевірку умови розгалуження для кожного елемента послідовності.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Розгляньте приклад
Знайдемо кількість слів red у заданій послідовності
kred = kblue = 0
# Задання початкових значень лічильника
for word in ['blue', 'red', 'red', 'blue', 'red', 'blue', 'red’]:
# Послідовність задана списком
if word == 'red': # Якщо змінна циклу набуває
# значення 'red'
kred = kred+1
else: kblue = kblue+1 # Якщо word == 'blue'
print('kred = ', kred, 'kblue = ', kblue)
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Розгляньте приклад
Введемо з клавіатури 8 довільних чисел і серед введених чисел підрахуємо кількість парних
k = 0 # Задання початкового значення лічильника
for і in range(8): # Цикл for дозволяє повторити команди
# тіла циклу для всіх чисел від 0 до 7
а = int(input('Наступне число '))
if а%2 == 0:
# Вкладене неповне розгалуження перевіряє,
k = k+1 # чи дорівнює нулю остача від ділення
print('Кількість парних дорівнює ', k) # числа а на 2
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Розгляньте приклад
Серед восьми додатних чисел, які вводяться з клавіатури, визначимо найбільше
m = -1 # Задавання початкового значення змінної,
for і in range(8):
# у якій зберігатиметься найбільше значення
a = int(input('Наступне число ')) # Уведення і-го числа
if a>m: # Якщо введене число більше поточного
m = a # значення m, замінити m уведеним числом
print('Найбільше число', m)
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із параметром
Розгляньте приклад
Знайдемо всі дільники натурального числа к. Число 1 і саме число к не включаємо до переліку дільників.
Алгоритм розв'язування задачі: перебрати всі значення числа і від 2 до к//2; якщо і є дільником числа k (k%i == 0), вивести значення і.
Результат
k = ? 45
3 5 9 15
k = int(input('k = ? '))
for i in range(2, k//2+1):
if k%i == 0:
print(i, '', end = '')
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із передумовою
У циклах із умовою також можна керувати виконанням команд тіла циклу за допомогою вкладених розгалужень.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із передумовою
Алгоритм знаходження НСД(а, b) — найбільшого спільного дільника двох чисел а і b — називають алгоритмом Евкліда, давньогрецького математика.
Маємо:
поки А ≠ В,
від більшого числа віднімати менше.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із передумовою
Під час кожної ітерації циклу більше з чисел А і В заміняється їх різницею. Цикл припиняється, коли значення змінних А і В стають рівними — це НСД початкових значень.
Результат
A = 12; b = 18
12 6
6 6
НСД = 6
Виконаємо алгоритм
для чисел 12 і 18.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із передумовою
Розгляньте приклад
Черепашка переміщується в точку з випадковими координатами, поки одна з координат не стане такою, що дорівнює 0. Якщо згенероване випадкове значення х є додатним, то Черепашка залишає червоний слід, а якщо від’ємним — синій.
from turtle import*
from random import*
width(3)
x = y = 200
while x != 0 and y != 0:
x = randint(-100, 100)
y = randint(-100, 100)
if x>0: color('red')
else: color('blue')
goto(x, y)
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгалуження, вкладене в цикл із передумовою
Результат виконання
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Питання для самоперевірки
for і in range(2, 10):
if 12%i == 0:
print(i)
for і in range(20):
if i%3 == 0:
print(i)
for і in[2, 5, 8, 10, 21]:
if i<10:
print(i)
for і in[2, 5, 8, 10, 21]: if i%2 == 0:
print(i)
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Розгадайте ребус
«Ребуси українською» © rebus1.com
Вкладені
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Домашнє завдання
Проаналізувати
с. 217-223
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Працюємо за комп’ютером
Сторінка
222-223
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 34
Дякую за увагу!
Нова українська школа
Урок 40
Інформатика 6
teach-inf.com.ua
за підручником
Бондаренко О.О. та ін.