4.9. Цикли з передумовою

Назад до змісту

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

1. Який вигляд має блок-схема циклу з передумовою? Поясніть виконання цього циклу

Блок-схема виглядає так: спочатку йде перевірка логічного виразу, і якщо він істинний (True), виконуються команди тіла циклу, після чого стрілка повертається назад до перевірки умови. Якщо вираз хибний (False), команди не виконуються, і цикл завершується. Виконання відбувається по колу: перевірка умови -> виконання команд -> знову перевірка.

2. Який вигляд має команда циклу з передумовою в мові програмування Python? Як вона виконується?

Команда має такий вигляд: while <логічний вираз>: , а нижче з відступом записуються <команди тіла циклу>. Виконується вона так: поки логічний вираз дорівнює True, команди повторюються; як тільки значення стає False, виконання припиняється і йде перехід до наступної команди програми.

3. Чи можуть команди тіла циклу з передумовою не виконуватися жодного разу? Поясніть свою відповідь. Наведіть приклади.

Так, можуть. Це відбувається, якщо під час першої ж перевірки значення логічного виразу дорівнює False — тоді програма одразу переходить до команди, наступної за циклом. Приклад: якщо x = 10, а цикл while x < 5:, то тіло циклу не виконається жодного разу.

4. Чи може виконання циклу з передумовою ніколи не закінчитися? Поясніть свою відповідь.

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

Обговоріть і зробіть висновки

1. Що спільного і що відмінного у циклів з лічильником і з передумовою?

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

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

2. Чи можна команду циклу з лічильником замінити командою циклу з передумовою? Якщо так, наведіть приклад.

Так, можна. Будь-який цикл з лічильником можна записати через while. Для цього треба створити власну змінну-лічильник перед циклом і збільшувати її в тілі циклу. Приклад: замість for i in range(5): print(i) можна написати:

# Цикл з лічильником
for i in range(1, 6):
    print(i)

# Те саме циклом з передумовою
i = 1
while i <= 5:
    print(i)
    i += 1

3. Чи можна команду циклу з передумовою замінити командою циклу з лічильником? Якщо так, наведіть приклад.

Ні, не завжди. Якщо перед початком циклу невідомо, скільки разів треба виконати команди, то цикл з лічильником використовувати не можна.

4. У чому полягають відмінності у виконанні основних алгоритмічних структур: слідування, розгалуження, циклу з лічильником і циклу з передумовою?

  • Слідування: команди виконуються послідовно, одна за одною, без пропусків і повторень.
  • Розгалуження: перевіряється умова, і залежно від її істинності виконується або одна серія команд, або інша (або нічого).
  • Цикл з лічильником: команди повторюються чітко визначену кількість разів.
  • Цикл з передумовою: спочатку визначається значення логічного виразу; якщо воно True, команди виконуються, а потім знову йде перевірка. Якщо умова стає False, виконання припиняється.

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

1. Виконайте в зошиті алгоритми:

1.а) (схема а)

Якщо задане початкове значення $x<30$, то в циклі значення $x$ буде множитися на 3, доки не стане $x \ge 30$, після чого алгоритм виведе (повідомить) це кінцеве значення $x$.

Наприклад: якщо $x=2$, то $2 \to 6 \to 18 \to 54$, і буде виведено $54$ (бо $54 \not< 30$).

1.б) (схема б)

Тут спочатку задається $x=5$, далі поки $x<25$, додається 4, а коли стане $x \ge 25$, алгоритм виведе значення $x$.

Послідовність: $5 \to 9 \to 13 \to 17 \to 21 \to 25$, тому буде виведено $25$.

2. Виконайте в зошиті фрагменти проєктів (трасування):

а)

  • Початкові дані: k = 1, a = 12.
  • Умова a < 100.
  • 1-й прохід: a = 20 (12*2-4), k = 2.
  • 2-й прохід: a = 36 (20*2-4), k = 3.
  • 3-й прохід: a = 68 (36*2-4), k = 4.
  • 4-й прохід: a = 132 (68*2-4), k = 5.
  • 5-й прохід: Умова 132 < 100 — хибна (False).
  • Результат: a = 132, k = 5.

б)

  • Початкові дані: s = 0, a = 1, k = 1.
  • Умова a < 50.
  • Виконуємо додавання s = s + a та обчислення нового квадрата a = k * k.
  • Останній доданок, який додасться до суми — 49. Наступне a стане 64, і цикл зупиниться.
  • Результат: s = 140 (сума квадратів: 1+4+9+16+25+36+49), a = 64, k = 8.
  1. Виконайте в зошиті фрагменти проєктів (трасування):

а)

  • Початкові дані: k = 1, a = 100.
  • Умова a > 10. Ділимо a на 2.
  • Значення a: 100 -> 50 -> 25 -> 12.5 -> 6.25.
  • При a = 6.25 умова 6.25 > 10 стає хибною.
  • Результат: a = 6.25, k = 5.

б)

  • Початкові дані: s = 0, a = 5.
  • Умова a <= 100.
  • Значення a подвоюється: 5 -> 10 -> 20 -> 40 -> 80 -> 160.
  • Сума s накопичується: 5 + 10 + 20 + 40 + 80 = 155.
  • Результат: s = 155, a = 160.

4. Складіть текстові задачі за алгоритмами їх розв’язування із завдання № 1.

а) Алгоритм: задане число $x$; поки $x < 30$, замінюємо його на $x = x * 3$; потім повідомляємо значення $x$. Сформулюй задачу, наприклад так:

«У банку на рахунку було $x$ гривень. Щороку сума на рахунку потроюється. За скільки років сума на рахунку стане не меншою ніж 30 гривень і якою вона буде, якщо початкова сума дорівнює … гривень?»[^1]

б) Алгоритм: спочатку $x = 5$; поки $x < 25$, замінюємо його на $x = x + 4$; потім повідомляємо значення $x$. Можлива задача:

«Учень першого дня прочитав 5 сторінок книжки, а кожного наступного дня читав на 4 сторінки більше, ніж попереднього. Яку кількість сторінок він читатиме в день, коли вперше кількість сторінок стане не меншою ніж 25?»

5. Складіть текстові задачі за алгоритмами їх розв’язування із завдання № 2.

2.а) $k = 1, a = 12;$ поки $a < 100$: $a = 2a – 4, k += 1$.

Задача: «Довжина металевої деталі спочатку дорівнює 12 см. Після кожної обробки її подвоюють і відрізають 4 см. Після якої за рахунком обробки довжина деталі стане не меншою ніж 100 см і якою вона буде?»

2.б) $s = 0, a = 1, k = 1;$ поки $a < 50$: $s = s + a, k += 1, a = k^2$.

Задача: «Учень виконує серію вправ: у перший день робить 1 вправу, у другий день — стільки вправ, скільки дорівнює квадрату номера дня (4, 9, 16, …), поки кількість вправ за день менше 50. Скільки всього вправ він виконає за всі ці дні?»

6. Проєкт “Робітник і деталі”

x = int(input("Введіть план (кількість деталей x): "))
y = int(input("Деталей за першу годину (y): "))

total_details = 0 # Загальна кількість
current_hour_production = y # Продуктивність поточної години
hours = 0 # Лічильник годин

while total_details < x:
    hours += 1
    total_details += current_hour_production
    current_hour_production += 1 # Наступної години на 1 більше

print("Робітник виконає план за", hours, "год.")

7. Проєкт “Туристка”

x = float(input("Введіть відстань x (км): "))
dist_per_hour = 6 # За першу годину
total_dist = 0
hours = 0

while total_dist < x and dist_per_hour > 0:
    hours += 1
    total_dist += dist_per_hour
    dist_per_hour -= 1 # Наступної години на 1 км менше

if total_dist < x:
    print("Туристка зупинилася, не дійшовши до цілі.")
else:
    print("Туристка подолає відстань за", hours, "год.")

8. Проєкт “Середнє арифметичне”

step = int(input("Введіть число зменшення (крок): "))
number = 100
sum_numbers = 0
count = 0

while number > 0:
    sum_numbers += number
    count += 1
    number -= step # Зменшуємо число

if count > 0:
    average = sum_numbers / count
    print("Середнє арифметичне:", average)
else:
    print("Немає додатних чисел для обчислення")

9. Проєкт “Банківський вклад”

x = float(input("Початковий вклад (x): "))
a = float(input("Бажаний прибуток більше за (a): "))
p = float(input("Відсоток річних (p): "))

current_money = x
years = 0

# Працюємо, поки прибуток (current_money - x) менший або рівний a
while (current_money - x) <= a:
    current_money = current_money + (current_money * p / 100)
    years += 1

print("Потрібно років:", years)

10. Проєкт “НСД (Алгоритм Евкліда)”

a = int(input("Введіть перше число: "))
b = int(input("Введіть друге число: "))

while a != b:
    if a > b:
        a = a - b
    else:
        b = b - a

print("Найбільший спільний дільник:", a)

11. Проєкт “Марафон”

s = float(input("Дистанція у перший день (км): "))
p = float(input("Відсоток збільшення (p): "))
s1 = float(input("Цільова дистанція (s1): "))
s2 = float(input("Цільовий приріст (s2): "))

# Частина 1: Коли дистанція перевищить s1
day = 1
current_dist = s
while current_dist <= s1:
    current_dist = current_dist + (current_dist * p / 100)
    day += 1
print(f"Дистанцію {s1} км спортсменка подолає на {day}-й день.")

# Частина 2: Коли приріст стане більше s2
day = 1
current_dist = s
delta = 0 # Приріст
# Приріст першого дня вважаємо 0 або рахуємо з 2-го дня. 
# Логічно шукати приріст наступного дня.
while True:
    next_dist = current_dist + (current_dist * p / 100)
    delta = next_dist - current_dist
    if delta > s2:
        print(f"Приріст більше {s2} км буде на {day + 1}-й день.")
        break
    current_dist = next_dist
    day += 1

Практична робота № 6. «Проєкти із циклами»

1. Математична модель

Вхідні дані:

  • $H$ — початковий рівень води (см).
  • $P$ — погодинне зростання рівня води (см).
  • $N$ — час, через який треба дізнатися рівень (год).
  • $K$ — критичний рівень води (см).

Результати:

  • $Level$ — рівень води через $N$ годин.
  • $T$ — кількість годин, через які рівень сягне $K$ см.

Формули та алгоритм:

  1. Для першого питання: Використовуємо лінійну формулу:$$Level = H + (P \cdot N)$$
  2. Для другого питання (використовуємо цикл з передумовою):Поки поточний рівень води менший за $K$, додаємо до рівня $P$ і збільшуємо лічильник годин на 1.
    • Умова циклу: while current_level < K:

2-4. Проєкт (Програмний код)

import tkinter as tk
from tkinter import messagebox

# Обробник події Click для першої кнопки (Рівень через N годин)
def calculate_level_click():
    try:
        # Отримуємо дані з полів
        h = float(entry_h.get())
        p = float(entry_p.get())
        n = float(entry_n.get())
        
        # Обчислення за формулою
        result_level = h + (p * n)
        
        # Виведення результату в поле
        entry_res1.delete(0, tk.END)  # Очистити поле
        entry_res1.insert(0, str(result_level))
    except ValueError:
        messagebox.showerror("Помилка", "Будь ласка, введіть коректні числа!")

# Обробник події Click для другої кнопки (Через скільки годин буде K см)
def calculate_hours_click():
    try:
        # Отримуємо дані
        h = float(entry_h.get())
        p = float(entry_p.get())
        k = float(entry_k.get())
        
        # Алгоритм з циклом з передумовою (while)
        current_level = h
        hours = 0
        
        # Поки рівень менший за K, вода прибуває
        while current_level < k:
            current_level = current_level + p
            hours = hours + 1
            
        # Виведення у вікно повідомлень
        messagebox.showinfo("Результат", f"Рівень води досягне {k} см через {hours} год.")
    except ValueError:
        messagebox.showerror("Помилка", "Перевірте введені дані!")

# --- Створення графічного інтерфейсу ---
root = tk.Tk()
root.title("Задача про повінь")
root.geometry("400x350")

# Поля для введення H і P (спільні дані)
tk.Label(root, text="Початковий рівень H (см):").pack()
entry_h = tk.Entry(root)
entry_h.pack()

tk.Label(root, text="Зростання за годину P (см):").pack()
entry_p = tk.Entry(root)
entry_p.pack()

tk.Label(root, text="--------------------------------").pack()

# Частина 1: Рівень через N годин
tk.Label(root, text="Введіть час N (год):").pack()
entry_n = tk.Entry(root)
entry_n.pack()

# Кнопка 1
btn1 = tk.Button(root, text="Обчислити рівень (Завдання 1)", command=calculate_level_click)
btn1.pack(pady=5)

# Поле для виведення відповіді
tk.Label(root, text="Рівень води буде (см):").pack()
entry_res1 = tk.Entry(root)
entry_res1.pack()

tk.Label(root, text="--------------------------------").pack()

# Частина 2: Коли рівень буде K
tk.Label(root, text="Введіть критичний рівень K (см):").pack()
entry_k = tk.Entry(root)
entry_k.pack()

# Кнопка 2
btn2 = tk.Button(root, text="Знайти час (Завдання 2)", command=calculate_hours_click)
btn2.pack(pady=5)

# Запуск вікна
root.mainloop()

Пояснення до виконання:

  1. Поля введення: Ми створили поля Entry для змінних $H, P, N$ та $K$.
  2. Кнопка 1: При натисканні спрацьовує функція calculate_level_click. Вона бере числа, рахує за простою формулою і записує результат у поле entry_res1.
  3. Кнопка 2: При натисканні спрацьовує функція calculate_hours_click. Вона використовує цикл while, який крутиться, поки вода не досягне рівня $K$. Результат показується окремим віконцем (messagebox).

Готуємось до вивчення нового матеріалу

1. Що таке дизайн? Які види дизайну вам відомі?

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

Основні види дизайну:

  • Графічний дизайн (створення логотипів, плакатів).
  • Вебдизайн (оформлення вебсайтів).
  • Промисловий дизайн (зовнішній вигляд техніки, автомобілів).
  • Дизайн інтер’єру (оформлення приміщень).
  • Ландшафтний дизайн (оформлення парків, садів).
  • Дизайн одягу.

2. Які ви знаєте вимоги до дизайну слайдів комп’ютерної презентації?

Основні вимоги (правила композиції та колористики):

  • Вміст: Один слайд — одна ідея. Тексту має бути мало, краще використовувати схеми та зображення.
  • Шрифти: Використовувати шрифти без засічок (наприклад, Arial, Verdana). Розмір для заголовків — не менше 32–36 пт, для основного тексту — не менше 24 пт.
  • Колір: Забезпечити контраст (темний текст на світлому фоні або навпаки). Не використовувати понад 2–3 основних кольорів на одному слайді.
  • Єдиний стиль: Усі слайди презентації мають бути оформлені в одному стилі (однакові шрифти, колірна гама, розташування заголовків).

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Прокрутка до верху