Цей урок буде про цикл for та while у Ruby. Цикли потрібні, щоб програма могла повторювати дії автоматично й працювати розумніше, а не довше.
Сьогодні ми поговоримо про футбол і різноманітні чемпіонати з футболу. Невже футбол може допомогти у вивченні циклів? Цікаво, як. То давайте стартувати матч…
Цикл for та while у Ruby
Цикли в програмуванні використовують для повторення певних дій. У реальному житті прикладами циклів є різні повтори: тиждень, рік або день, а в програмуванні за допомогою циклу можна перебрати всі числа й вибрати, наприклад, ті, що діляться на 3. Всі роки 20 століття і знати ті, в які проводився чемпіонат світу з Футболу. Також у циклі можна перебирати елементи масиву та виконувати з ними потрібні операції. Цикли допомагають уникнути дублювання коду і роблять програми коротшими та зрозумілішими. Без циклів більшість програм були б набагато складнішими та менш зручними для підтримки.

While and For
В Ruby, як і в більшості мов програмування існують різні види циклів. Ми сконцентруємося на while та for, бо вони є чи не в кожній мові програмування і вивчивши їх раз ви зрозумієте механіку у всіх мовах. Про інші види циклів у ruby можна почитати тут.
Як правило немає різниці, використовувати for чи while, вони досить універсальні, але в складніших програмах ви стикнетеся з обома циклами. Тож давайте розглянемо найпростіші приклади:


While виконує код (тіло циклу), поки справджується умова. Оператор має такий вигляд:
while умова [do]
код (тіло циклу)
end
i=0
while i<10
puts "#{i} I must not write all over the walls!"
i+=1
end
For виконує код (тіло циклу) для кожного значення з заданого діапазону або колекції. Оператор має такий вигляд:
for змінна in діапазон [do]
код (тіло циклу)
end
for i in 1..10
puts "#{i} I must not write all over the walls!"
endУ циклах змінна i зазвичай використовується як лічильник — вона показує, на якому кроці цикл зараз. Після кожного проходу i += 1 означає, що значення i збільшується на один. Так цикл рухається вперед і не повторюється вічно.
Тіло циклу відділяють від оголошення циклу за допомогою службового слова do, ознаки кінця рядка, зворотньої косої риски \ або крапки з комою.
Практика. Цикл for та while у Ruby
While
1: Напишемо рекламку такого спорту, як футбол за допомогою while. Виведемо слово ФУТБОЛ 10 разів. Але літери “о” замінимо на ⚽ м’ячики. З кожним разом літер “о” ставатиме все більше:
змінна i дорівнює 0
змінна o дорівнює "⚽️"
while i менше або = 10
puts "#{i} ФУТБ#{o*i}Л"
збільшити i на 1
end Можна додати .center(40) до виводу, тоді він буде виглядати красивіше

Яке число треба змінити, щоб програма виводила 24 рядки ?
2: Тепер створімо зворотний таймер, який відраховуватиме час назад. Наприклад, залишилося 10 секунд до старту відкриття Чемпіонату світу.
time=10
while time>0
puts "#{time} sec"
sleep(1)
time-=1
end
puts "Чемпіонат світу з футболу почався!!"
Спробуйте переробити програму, так, щоб вона відраховувала 5 секунд, 30 секунд.
For
3: Переробіть програму з таймером так, щоб вона використовувала цикл for.
Використайте for i in 10.downto(1)
4: Тепер черга за циклом for. Наша програма визначатиме ціну квитків на білети. Білети на перший і останній ряд будуть найдешевшими й складатимуть 100 доларів. Передостанній і другий ряд – 200 і так далі. Ряди з 8 до 12 найдорожчі, ціна складатиме 1000 доларів. Наша задача, створити програму, в якій ми опишемо, скільки коштуватиме білет на кожен ряд

План:
1. Подумайте, за що має відповідати лічильник циклу. Створіть цикл for, які лічить і виводить на екран номер.
2. Створіть умову в середині циклу, яка буде виводити номер ряду і ціну квитка. План умови (без урахування циклу):
if i==1
price=⚽⚽⚽⚽
puts "Ряд #{i}. Ціна квитка #{price}$"
elsif i in 2..7
price=⚽⚽⚽⚽
puts "Ряд #{i}. Ціна квитка #{price}$"
❓❓❓❓
else
❓❓❓❓
end
end3. Подумайте над оптимізацією (покращенням) вашої програми:
🥅⚽ чи є рядки, які повторюються? Як уникнути цього?
🥅⚽(Ускладнене) Зараз мінімальна ціна 100 доларів і всі формули працюють від цього. Але якщо вона зміниться ? Чи зручно буде редагувати велику кількість коду? Змініть програму так, щоб мінімальна і максимальна (1000) ціна вказувалася один раз і зберігалася у змінних. Далі змініть мінімальну і максимальну ціну й перевірте, що всі ціни оновилися.
Цикли для списків
5: В цьому завданні ми подивимося, як цикли працюють зі списками. У нас є список команд-учасників ЧС 2022. Завдання два:
⚽ Вивести всі команди, розділивши їх м’ячиками.
⚽ Команди треба розділити на групи. Команди будуть змагатися у своїх групах, а потім найкращі пройдуть на наступний етап. Скопіюйте собі код нижче. В списках a,b,c,d,e,f,g,h будуть зберігатися групи, коли ми їх створимо випадковим чином.
**В реальності і команд і груп більше, як можете побачити на фото, та ми сконцентруємося на 8-х. Також в списку можливі команди, на момент написання статті остаточний список невідомий

teams = ['США', 'Канада', 'Мексика', # господарі ЧС 2026
'Бразилія', 'Аргентина', 'Уругвай', 'Франція', 'Німеччина', 'Іспанія',
'Англія', 'Португалія', 'Італія', 'Нідерланди', 'Бельгія', 'Хорватія',
'Польща', 'Україна', 'Швейцарія','Данія', 'Сербія', 'Швеція','Японія',
'Австралія', 'Іран','Південна Корея', 'Єгипет', 'Нігерія','Марокко',
'Туніс', 'Саудівська Аравія', 'Гана', 'Сенегал' ]
a=[]
b=[]
c=[]
d=[]
e=[]
f=[]
g=[]
h=[]
#### Тут буде ваш код
puts "Група A #{a} "
puts "Група B #{b} "
puts "Група C #{c} "
puts "Група D #{d} "
puts "Група E #{e} "
puts "Група F #{f} "
puts "Група G #{g} "
puts "Група H #{h} "
Спробуйте зробили завдання самостійно. Якщо не виходить, скористайтесь підказками:
#### 1 Всі рядки програми перемішані, вам треба лише змінити порядок
end
print "⚽️#{t}⚽️"
puts ""
for t in teams
#### 2. План програми розподілення по групах
лічильник і встановлюємо в початкове значення
Перемішуємо список команд і записуєно в ту ж, або нову змінну (teams.shuffle)
while доки_i_менше_дивжини списку #teams.length
#якщо і ділиться на 8 з остачею 0, то додаємо таку команду у групу А:
(i%8==0)?a.push(teams[i]):nil
#якщо і ділиться на 8 з остачею 1, то додаємо таку команду у групу B:
#і так далі...
збільшити і на1
end
shuffle – перемішує елементи в списку. Далі треба поділити на групи. Їх всього 8. В першій групі знаходяться команди, індекс яких ділиться на 8 націло. В другій – ті, індекс яких ділиться на 8 з остачею 1, і так далі.
6 (Додаткове): Виведіть на екран 13 разів правило або закон (з будь-якої науки) спочатку за допомогою циклу while, а потім за допомогою for.

7 (Додаткове): 🧩 Поки користувач не введе пароль “ruby123”, просіть ввести знову.
Порахуйте кількість спроб зламати пароль.
8 (Додаткове): Намалюйте 🏔️ ASCII-гори:
^
^^^
^^^^^
^^^^^^^
^^^^^^^^^9 (Додаткове): Невідома планета. Створи мапу невідомої планети. На початку програми задаються координати прибульця, наприклад k=2 й p=3. Програма має розташувати прибульця на мапі, а решту координат заповнити випадковими смайликами.
(смайли для зручності: 🟥🟧🟨🟩🟫⬜️⬛️🟪🟦).
🟥🟧🟨🟪🟦🟥🟧🟨🟪🟦
🟧🟨🟪🟦🟥🟧🟨🟪🟦🟥
🟨🟪🟦🟥🟧🟨🟪🟦🟥🟧
🟪🟦👾🟧🟨🟪🟦🟥🟧🟨
🟦🟥🟧🟨🟪🟦🟥🟧🟨🟪
🟥🟧🟨🟪🟦🟥🟧🟨🟪🟦
🟧🟨🟪🟦🟥🟧🟨🟪🟦🟥
🟨🟪🟦🟥🟧🟨🟪🟦🟥🟧
🟪🟦🟥🟧🟨🟪🟦🟥🟧🟨
🟦🟥🟧🟨🟪🟦🟥🟧🟨🟪10 (Додаткове): Зроби покращення до минулої програми: обери смайлик героя, який шукає прибульця. Випадковим чином програма має обрати координати героя і розмістити його на мапі.
Якщо герой знаходиться на одному рядку чи в одному стовпці з прибульцем – виведіть “Бачу прибульця”. Якщо ні: “Не можу знайти прибульця”

Домашня робота
1: Матвій і Соломійка зустрілися у дворі перед тренуванням з футболу та зрозуміли, що забули вдома кросівки. Матвій живе на 13 поверсі, а Соломійка на 7-му, світла немає 🔦, тож треба буде пробігтися сходами (Ми їх так розуміємо…😅).
Створіть цикли, які покажуть, які поверхи пробіжить Матвій.
Створіть цикли, які покажуть, які поверхи пробіжить Соломія.
Підказка для циклу for назад: for i in 7.step(1, -1)

# Схема програми:
puts "🏃♀️ Соломійка на вулиці"
# Цикл для підняття нагору
puts "👟 Соломійка взяла кросівки й біжить вниз!"
# Цикл для спускання сходами
puts "✅ Соломійка дійшла до вулиці"Приклад роботи (Соломійка):
🏃♀️ Соломійка на вулиці
Соломійка на 1-му поверсі
Соломійка на 2-му поверсі
Соломійка на 3-му поверсі
Соломійка на 4-му поверсі
Соломійка на 5-му поверсі
Соломійка на 6-му поверсі
Соломійка на 7-му поверсі
👟 Соломійка взяла кросівки й біжить вниз!
Соломійка на 7-му поверсі
Соломійка на 6-му поверсі
Соломійка на 5-му поверсі
Соломійка на 4-му поверсі
Соломійка на 3-му поверсі
Соломійка на 2-му поверсі
Соломійка на 1-му поверсі
✅ Соломійка дійшла до вулиці2: Створімо футбольну табличку додавання для числа 2 (Див. нижче). Все як і підручнику, але замість чисел – м’ячі ⚽️. Використайте цикл.
Підказка : (i+2) – саме якщо в дужках, буде гарно працювати.
⚽️⚽️+⚽️=⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️=⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️
⚽️⚽️+⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️=⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️⚽️
3: Виведіть ось такий кораблик з чисел (Підказка: i.to_s):
1
22
333
4444
55555
666666
7777777
88888888
999999999
10101010101010101010
4: Серед глядачів на стадіоні вирішили влаштувати футбольну лотерею. Квитки мають номер від 1 до 1000. Кожен 33-й квиток виграшний (якщо номер квитка ділиться на 33)! Виведіть всі виграшні квитки на екран.

Level Up!
Цикл for та while у Ruby
1: Ось фото того, як на стадіони вболівальники підтримують Україну. Для цього вони піднімають листи відповідного кольору, щоб сформувати прапор. Нижче я навела код, як за допомогою вкладених циклів можна намалювати наш прапор. Ваша задача схожим чином намалювати інші картинки нижче.

n=12
m=18
for i in 0..n
print "\n"
for j in 0..m
(i in 0..6)? (print "🟦"):(print "🟨")
end
end 
Пояснення коду :
Вкладені цикли — це коли один цикл знаходиться всередині іншого:
зовнішній цикл (з лічильником “і”) відповідає за рядки,
а внутрішній цикл (з лічильником “j”) — за символи в кожному рядку.
У цій програмі зовнішній цикл багато разів переходить на новий рядок, а внутрішній у кожному рядку друкує символи зліва направо; умова всередині вирішує, який смайлик показати. У результаті програма крок за кроком малює фігуру: спочатку рядок, потім символи в ньому, і так багато разів.
А це малюнки, які треба відтворити. Кольори та емоджі можете змінити, ось приклад для використання: 🟥🟧🟨🟩🟫⬜️⬛️🟪🟦).

2: За допомогою вкладених циклів виведіть табличку множення в форматі, як на картинці.


Підказка: щоб табличка не з’їжджала і виходила рівною, застосуйте .center(3) до змінної, яку виводите. Наприклад у вас змінна “а”, буде: a.center(3)
Мемчики на завершення 😎:



Не зупиняйтесь у вивченні Ruby! До зустрічі на наступних уроках!
