Міні-курс «Python з нуля» · Урок 1

Алгоритм і блок-схеми: лінійні, розгалужені й циклічні

Перш ніж писати код, треба чітко знати, що саме має робити програма. Розбираємося, що таке алгоритм, які властивості відрізняють його від «інструкції на око», як його записують і малюють — і як кожна з трьох базових структур виглядає в Python.

Крок 1 з 4·Авторка: Марина Мальцева·9 хв читання
Алгоритм і блок-схеми — урок 1 міні-курсу «Python з нуля»

Що таке алгоритм

Алгоритм — це скінченна послідовність точних і зрозумілих дій, яка перетворює вхідні дані на результат. Слово «точних» тут головне: інструкцію «посоліть за смаком» людина виконає, а комп’ютер — ні, бо не знає, скільки це.

Будь-який алгоритм працює з даними трьох видів:

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

Коли алгоритм записаний мовою програмування, його називають програмою. Тобто програма — не щось принципово інше, а той самий алгоритм, записаний так, щоб його міг виконати комп’ютер.

Сім властивостей, без яких це не алгоритм

Кожну властивість найпростіше зрозуміти через те, що ламається, коли її немає.

ВластивістьЩо означаєЩо буває без неї
СкінченністьАлгоритм завершується за скінченну кількість кроківЦикл без умови виходу — програма «зависає» назавжди
Елементарність (зрозумілість)Кожен крок виконавець уміє виконатиКрок «розв’яжи рівняння» без пояснення, як саме
ДискретністьПроцес поділено на окремі послідовні крокиНеможливо сказати, який крок виконується зараз
ДетермінованістьОднакові вхідні дані — завжди однаковий результат«Візьміть кілька чисел» — у кожного вийде своє
РезультативністьЄ результат або повідомлення, що розв’язку немаєПрограма завершилась, але невідомо, чим
МасовістьПрацює для класу задач, а не одного набору чиселПлоща лише для прямокутника 3 × 5
ЕфективністьРезультат за розумну кількість кроків і ресурсівПеребір, який закінчиться через тисячу років

Способи запису: словами, символами, схемою

Один і той самий алгоритм можна записати трьома способами. Візьмемо переведення швидкості з кілометрів за годину в метри за секунду:

СпосібЯк виглядаєКоли зручний
Вербальний«Візьміть швидкість у км/год, помножте на 1000 і поділіть на 3600»Пояснити ідею людині
Символьнийv_ms = v_kmh * 1000 / 3600Точний запис: псевдокод або мова програмування
ГрафічнийБлок-схема з фігур і стрілокПобачити структуру: де розгалуження, де цикл

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

Базові блоки блок-схем

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

Шість базових блоків блок-схемПочатокТермінаторВвести a, bДані: введення/виведенняS = a * bПроцесb = 0 ?Рішенняi від 1 до nМежа циклуhypot(a, b)Визначений процес
Базові блоки блок-схем за ISO 5807
  • Термінатор (овал) — початок і кінець алгоритму.
  • Дані (паралелограм) — введення вхідних даних або виведення результату.
  • Процес (прямокутник) — обчислення чи присвоєння, наприклад S = a * b.
  • Рішення (ромб) — перевірка умови; у навчальних схемах з нього виходять два шляхи: «так» і «ні».
  • Межа циклу (прямокутник зі зрізаними кутами) — пара блоків, що відкриває і закриває цикл.
  • Визначений процес (прямокутник із подвійними бічними лініями) — виклик окремої підпрограми чи функції.
Правило стрілок. Основний потік іде згори вниз і зліва направо; де напрямок інший — обов’язково ставлять стрілку. Лінії не перетинають блоки, а кожен шлях зрештою приходить до термінатора «Кінець».

Лінійна структура: крок за кроком

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

Блок-схема лінійного алгоритму: периметр прямокутникаПочатокВвести a, bP = 2 * (a + b)Вивести PКінець
Лінійний алгоритм: периметр прямокутника

Той самий алгоритм у Python — рядок коду на кожен блок схеми:

a = float(input("Довжина a: "))
b = float(input("Ширина b: "))
p = 2 * (a + b)
print("Периметр:", p)

Функції input, float і print детально розберемо в третьому уроці; зараз важливо помітити відповідність: введення → обчислення → виведення.

Розгалужена структура: вибір шляху

Часто наступна дія залежить від даних. Алгоритм, у якому залежно від умови виконується одна чи інша послідовність дій, називають розгалуженим, а кожну таку послідовність — гілкою. Розрізняють дві форми:

  • Повна — у кожної гілки свої дії: якщо умова істинна, робимо одне, інакше — інше. У Python це if … else.
  • Неповна — дії є лише в одній гілці, друга просто обходить їх. У Python — if без else.
Розгалужений алгоритм: захист від ділення на нульПочатокВвести a, bb = 0 ?такВивести:«ділити на нуль»ніc = a / bВивести cКінець
Повна форма розгалуження: захист від ділення на нуль
a = float(input("a = "))
b = float(input("b = "))
if b == 0:
    print("Ділити на нуль не можна")
else:
    c = a / b
    print("c =", c)
Відступи — це синтаксис. Які рядки належать гілці, Python визначає лише за відступом (стандарт — 4 пробіли). І порівняння пишуть двома знаками: ==. Один знак = — це присвоєння, і рядок if b = 0: Python відхилить як синтаксичну помилку.

Циклічна структура: повторення

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

Цикл із лічильником

Кількість повторень відома наперед: задано початкове й кінцеве значення лічильника та крок. Такі цикли ще називають регулярними або арифметичними. Приклад — сума чисел від 1 до n:

Блок-схема циклу з лічильником: сума чисел від 1 до nПочатокВвести ns = 0i від 1 до ns = s + iiВивести sКінець
Цикл із лічильником: сума 1 + 2 + … + n
n = int(input("n = "))
s = 0
for i in range(1, n + 1):   # i = 1, 2, …, n
    s = s + i
print("Сума:", s)            # для n = 5: Сума: 15

range(1, n + 1) не включає праву межу, тому до n додаємо 1 — це одна з найчастіших помилок на старті.

Ітераційний цикл

Кількість повторень наперед невідома: цикл триває, доки виконується умова, і вона залежить від проміжного результату. Типовий приклад — обчислення із заданою точністю: додаємо члени ряду 1 + 1/2 + 1/4 + …, поки черговий член не стане меншим за ε.

eps = 0.001
term = 1.0      # поточний член ряду
total = 0.0
while term > eps:
    total = total + term
    term = term / 2
print(total)     # 1.998046875 — сума наближається до 2
Умова виходу обов’язкова. Якщо тіло циклу ніколи не робить умову хибною (наприклад, забули рядок term = term / 2), цикл не завершиться — пряме порушення скінченності. Зупинити таку програму можна клавішами Ctrl+C.

Вкладені цикли

Цикл може стояти всередині тіла іншого циклу. Зовнішній охоплює внутрішній повністю — межі внутрішнього не виходять за межі зовнішнього. На кожну ітерацію зовнішнього циклу внутрішній проходить усі свої значення від початку до кінця:

for row in range(1, 4):          # зовнішній: 1, 2, 3
    for col in range(1, 4):      # внутрішній: 1, 2, 3 для кожного row
        print(row * col, end=" ")
    print()                      # новий рядок
1 2 3
2 4 6
3 6 9

Внутрішній лічильник змінюється швидше: поки row робить один крок, col проходить повне коло. Так улаштована робота з таблицями, матрицями й більшістю двовимірних даних.

Реальні програми майже завжди поєднують усі три структури й вкладають їх одна в одну. Але будь-яку, навіть дуже складну логіку можна скласти з цих трьох «цеглин» — лінійної, розгалуженої та циклічної.

Міні-курс Python з нуля

Усі матеріали курсу по порядку. Програма, завдання лабораторної та інформація про авторку — на головній сторінці курсу.

  1. Урок 1 · 9 хв · ви тутАлгоритм і блок-схемиВластивості алгоритму, способи запису, базові блоки й три структури — лінійна, розгалужена, циклічна — з кодом Python.
  2. Урок 2 · 8 хвЯк Python виконує кодКомпілятор проти інтерпретатора, байткод, встановлення Python 3.12+, REPL, «Дзен Python» і перша програма в IDLE.
  3. Урок 3 · 9 хвPython як калькуляторСім арифметичних операторів і пріоритети, модуль math, змінні, типи даних і перетворення введення.
  4. Практика · 10 хвЛабораторна робота №1 покроковоОбидва завдання на прикладах, переклад формул у Python, перевірка ОДЗ, чекліст звіту й контрольні запитання.

Перевір себе

Нічим принципово: програма — це алгоритм, записаний мовою програмування так, щоб його міг виконати комп’ютер.

Скінченність: алгоритм мусить завершуватися за скінченну кількість кроків.

У повній формі дії є в обох гілках (if … else), у неповній — лише в одній (if без else).

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

Далі: як Python виконує код

У другому уроці — інтерпретатор, встановлення Python і перша програма. Перейти до уроку 2

Сподобалось? Поділіться — це найкраща підтримка

Розбори кіберзагроз від SEOWORK

Одна практична стаття на тиждень — як не купитися на фішинг, захистити акаунти й дані. У подарунок одразу памʼятка у PDF.