Розв’язування задач перебору за допомогою вкладених циклів
Нова українська школа
Урок 43
Інформатика 6
teach-inf.com.ua
за підручником
Бондаренко О.О. та ін.
Розв’язування задач перебору�за допомогою вкладених циклів
Вкладення циклів широко використовують під час
складання алгоритмів розв’язування арифметичних задач методом перебору можливих значень.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
На уроках математики корінь рівняння 3x + 4 = 15 знаходять у такий спосіб: x = (15 – 4)/3.
У програмуванні інший спосіб пошуку невідомої величини — метод перебору значень.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
Розглянемо, як застосовується метод перебору значень.
При цьому перебираються можливі цілі значення х із обмеженого діапазону і підставляються в рівняння. Відповіддю є таке значення х, за якого рівняння перетворюється на рівність.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
Розгляньте приклад 1
Складемо програму для знаходження сторін прямокутника:
Позначимо сторони прямокутника змінними а і b. Тоді b = а+4, а периметр дорівнює 2*(а+b) = 2*(2а+4).
периметр прямокутника становить
20
одна зі сторін
більша від іншої
на 4 см
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
(Продовження…) Розгляньте приклад 1
Зрозуміло, що значення а може бути більше за 0, але менше від 10 (половини периметра).
а = 3 b = 7
for а in range(10):
if 2*(2*а+4) == 20:
print('а =', а, 'b =', а+4)
У циклі переберемо значення а зі вказаного діапазону. Відповіддю буде таке значення а, за якого 2*(2а+4) = 20
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
Розгляньте приклад 2
Складемо програму для розв’язування задачі.
Визначимо, скільки в клітці фазанів і кролів, якщо всього в ній 35 голів і 94 ноги.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
Нехай,
кількість фазанів
х
кількість кролів
у
Тоді х + у = 35. Відомо, що,
у фазанів
у кролів
2 ноги
4 ноги
Тому 2x + 4y = 94. Зверніть увагу на те, що ці дві умови мають виконуватись одночасно, тобто утворюють складену умову.
Фазанів може бути
від 0 до 35
Кролів теж може бути
від 0 до 35
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
(Продовження…) Розгляньте приклад 2
Організуємо перебір варіантів:
x = 23
y = 12
for x in range(0, 36):
for y in range(0, 36):
if (2*x+4*y == 94) and (x+y == 35):
print('x =', x, 'y =', y)
Програмний код
Отримуємо єдину відповідь:
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
Розгляньте приклад 3
Знайдемо всі трицифрові натуральні числа, сума цифр яких дорівнює їхньому добутку, та визначимо кількість таких чисел.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
Для розв’язування задачі можна перебрати всі можливі сполучення цифр, з яких утворюється десятковий запис трицифрового числа, і перевіряти для кожного сполучення умову задачі.
123
132
213
231
312
321
k = 6
k = 0
for a in range(1, 10): # Першою може бути цифра від 1 до 9
for b in range(10): # На другому й третьому місцях
for c in range(10): # можуть стояти цифри від 0 до 9
if a+b+c == a*b*c:
k = k+1
print(100*a+10*b+c)
print('k =', k)
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Метод перебору варіантів
У цьому коді цикл із параметром с є тілом
k = 0
for a in range(1, 10):
for b in range(10):
for c in range(10):
if a+b+c == a*b*c:
k = k+1
print(100*a+10*b+c)
print('k =', k)
циклу з параметром b, а той, у свою чергу, є тілом
циклу з параметром а
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Пошук простих чисел у заданому діапазоні
Розгляньте приклад 4
Знайдемо прості числа в діапазоні від 2 до 30. (Простими є числа, крім 1, які діляться без остачі тільки на 1 і на самого себе.)
2 просте число
3 просте число
5 просте число
7 просте число
11 просте число
13 просте число
17 просте число
19 просте число
23 просте число
29 просте число
Щасти Вам!
for i in range(2, 30):
j = 2
prap = 0
while(j <= (i/2)):
if i%j == 0: prap = 1
j = j+1
if prap == 0: print(i, 'просте число')
print('Щасти Вам!')
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Пошук простих чисел у заданому діапазоні
Проаналізуємо програмний код.
for i in range(2, 30):
j = 2
prap = 0
while(j <= (i/2)):
if i%j == 0: prap = 1
j = j+1
if prap == 0: print(i, 'просте число')
print('Щасти Вам!')
У зовнішньому циклі параметр і послідовно набуває значень від 2 до 30.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Пошук простих чисел у заданому діапазоні
for i in range(2, 30):
j = 2
prap = 0
while(j <= (i/2)):
if i%j == 0: prap = 1
j = j+1
if prap == 0: print(i, 'просте число')
print('Щасти Вам!')
Прапорцева змінна prap отримує значення 0 перед початком опрацювання чергового числа і із заданого діапазону.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Пошук простих чисел у заданому діапазоні
for i in range(2, 30):
j = 2
prap = 0
while(j <= (i/2)):
if i%j == 0: prap = 1
j = j+1
if prap == 0: print(i, 'просте число')
print('Щасти Вам!')
У тілі внутрішнього циклу змінна j послідовно набуває значень від 2 до і//2 і перевіряється, чи є число j дільником числа і.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Пошук простих чисел у заданому діапазоні
for i in range(2, 30):
j = 2
prap = 0
while(j <= (i/2)):
if i%j == 0: prap = 1
j = j+1
if prap == 0: print(i, 'просте число')
print('Щасти Вам!')
Якщо хоча б раз виконалась умова i%j == 0, тобто знайшовся хоча б один дільник числа і, змінна ргар набуває значення 1.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Пошук простих чисел у заданому діапазоні
for i in range(2, 30):
j = 2
prap = 0
while(j <= (i/2)):
if i%j == 0: prap = 1
j = j+1
if prap == 0: print(i, 'просте число')
print('Щасти Вам!')
Якщо після закінчення роботи внутрішнього циклу ргар = 0, це означає, що жодного дільника для числа і не виявилося.
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Питання для самоперевірки
for i in range(1, 10):
for j in range(1, 10):
print(i, '*', j, ' = ', i*j)
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Домашнє завдання
Проаналізувати
с. 235-240
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Працюємо за комп’ютером
Сторінка
239-240
© Вивчаємо інформатику teach-inf.com.ua
Розділ 6
§ 37
Дякую за увагу!
Нова українська школа
Урок 43
Інформатика 6
teach-inf.com.ua
за підручником
Бондаренко О.О. та ін.