Розробка уроку

Тема: мова програмування Ruby і середовище програмування.

Мета: ознайомити з основами мови Ruby та її можливостями.

По завершенню вивчення учень:

Обладнання: комп’ютери зі встановленими ОС та інтепретатором Ruby чи доступом до інтернету, (дана) інструкція.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Вивчення нового матеріалу.
  4. Закріплення вивченого матеріалу.
  5. Підведення підсумків уроку.
  6. Домашнє завдання.

Хід уроку
1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.

2. Актуалізація опорних знань
Дати означення понять, виділені жирним шрифтом. Порівняти з очікуваними відповідями.

Алгоритмце запис скінченої послідовності вказівок, виконання яких призводить до розв'язання певної задачі.

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

Виконавець (алгоритму) — це жива істота (людина або тварина) або автоматичний пристрій (робот, електронна обчислювальна машина тощо), спроможна діяти відповідно з алгоритмом.

Система вказівок виконавцяце множина (сукупність) всіх вказівок, які може виконувати даний виконавець.

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

Властивості алгоритму: дискретність, визначеність, виконуваність, скінченність, результативність, масовість, ефективність.

Дискретність (латинською discretus — розділений, розривний) алгоритму означає, що виконання алгоритму зводиться до виконання окремих дій (кроків) у певній послідовності. Причому, кожну вказівку алгоритму виконують за скінченний проміжок часу.

Визначеність (однозначність) означає, що алгоритм однозначно визначає порядок дій виконавця, результат цих дій і не потребує додаткового тлумачення..

Виконуваність означає, що алгоритм, призначений для певного виконавця, може містити лише вказівки, які входять до системи вказівок цього виконавця.

Скінченність означає, що виконання алгоритму закінчиться після скінченної (можливо, досить великої) кількості кроків і за скінченний час для довільних вхідних даних.

Результативність алгоритму означає, що після закінчення виконання алгоритму обов’язково:

Масовість алгоритму означає, що алгоритм можна застосувати до цілого класу однотипних задач, для яких спільними є умова та хід розв’язування та які відрізняються лише початковими (вхідними) даними. Наприклад, алгоритмом дій, складеним для одного касира, можуть успішно скористатися всі касири супермаркету. А програмою пошуку коду і підрахунку суми вартостей товарів, придбаних покупцем, — усі комп'ютери супермаркету

Ефективність алгоритму описує час виконання і об'єм ресурсів, необхідних для виконання алгоритму: чим менше часу (часова ефективність) і ресурсів (просторова ефективність), тим ефективність вища.

3. Вивчення нового матеріалу

У театрі хід подій на сцені попередньо визначено у найдрібніших деталях:

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

Робота комп'ютера полягає у виконанні програми — опису набору певних дій у певному порядку. Програма є алгоритмом дій комп’ютера, записаним зрозумілою для нього мовою.

Щоб задати комп'ютеру послідовність дій, потрібно задати послідовність двійкових кодів відповідних вказівок. Писати такі програми — дуже складна й марудна справа.

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

Мова програмування (англійською programming language) — це система позначень для опису алгоритмів та структур даних.

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

Інтерпретована мова програмуваннямова програмування, в якій початковий (сирцевий) код програми не перетворюють попередньо повністю у машинний код для виконання, на відміну від компільованих мов, а виконують рядок за рядком з допомогою спеціальної програми-інтерпретатора.

Rubyце інтерпретована мова високого рівня для швидкого і зручного об’єктно-орієнтованого програмування.

Мова Ruby має незалежну від операційної системи реалізацію багатопоточності, сувору динамічну типізацію, «збирач сміття» і багато інших можливостей. Ruby близький за особливостями синтаксису до мов Перл і Ейфель, за об’єктно-орієнтованим підходом до Smalltalk. Також деякі риси мови взяті з Python, Lisp, Dylan і CLU.

Будь-яка мова програмування має такі 3 основні складові: алфавіт, синтаксис (правила написання) і семантику (правила тлумачення й виконання).

Алфавіт мови Ruby включає:

Синтаксис мови програмуванняправила, що визначають, як має виглядати програма цією мовою. Зокрема, як писати вказівки (оператори), опис типів даних, сталих і змінних та інші мовні конструкції. Наприклад, мовою Ruby назви сталих записують великими літерами.

Коментарце частина тексту програми для пояснення програми чи окремих вказівок, що не впливає на виконання програми.

Коментар мовою Ruby у рядку починають символом
# (дієз):

# текст коментаря


Багаторядковий коментар:

Лексеманеподільний елемент мови: слово, число, символи операцій.

Основним елементом синтаксису мови Ruby є вираз. Інтерпретатор Ruby обчислює вираз і повертає його значення. Найпростішим виразом є початковий вираз, що є записом значення.

Тип данихце деякий клас об`єктів даних разом з набором операцій для створення і роботи з ними і діапазоном допустимих значень.

В кожній мові програмування є певний набір вбудованих типів даних. Зазвичай передбачено засоби визначення інших (невбудованих) типів даних. В мові Ruby розрізнять прості та складні типи даних. До простих відносять числові, логічні та символьні типи даних.

Ієрархія класів Ruby:

Проілюструємо кодом з результатом виконання цю ієрархію:

str = "Рядок"        # => "Рядок"
str.class            # => String
str.class.superclass # => Object

Класи можно визначати (створювати) й створювати за ними об'єкти. Зауважимо: опис класу в Ruby не просто описова конструкція без типу (як, наприклад, у C++), а це об'єкт (!) класу Class, доповнений користувацькими методами.

Крім звичного десяткового запису чисел з використанням десяткової крапки для дробів інтепретатор Ruby сприймає і такі записи:

Семантика мови Ruby — це семантика повністю об'єктно-орієнтованої мови. Інакше кажучи:

Покажемо дію останнього правила на такі послідовності виразів та результатів обчислення відповідно ліворуч і праворуч від вертикальної риски:

a = "abcdefg" | "abcdefg"
b = a         | "abcdefg"
b             | "abcdefg"
a[3] = 'R'    | "R"
b             | "abcRefg"

Тут при зміні значення змінної а неявно змінили значення b, бо вони містять посилання на один об'єкт.

Надати значення змінним можна «гуртом» — див. приклад:


a, b, c, d = 5333, 0xFE, 45, "Текст"
e, f = a+b, c
a = b = c = 22

Збільшення значення: a = a + 23 можна записати скорочено: a+=23

Ruby не підтримує множинне наслідування. Але замість нього має потужний механізм домішок. Усі класи (напряму або через інші класи) виведено (отримано) з класу Object. Тому будь-який об`єкт може використовувати наявні для Object методи (class, to_s, nil? тощо). Є підтримка процедурного стилю запису, але усі глобальні процедури неявно є закритими методами класу Object.

Мова Ruby є мовою багатьох парадигм — систем понять і уявлень:

Мова Ruby підтримує відображення, метапрограмування, інформацію про типи змінних на стадії виконання.

Мова Ruby має лаконічний та простий синтаксис, частково розроблений під впливом Ада, Ейфель і Python. Дозволяє обробляти виключення у стилі Java чи Python. Дозволяє перевизначати оператори, які насправді є методами. Усі дані в Ruby є об`єктами у понятті Smalltalk. Єдиний виняток — конструкції керування. Також підтримано додавання методів у клас і навіть у конкретний екземпляр під час виконання програми. Містить автоматичний збирач сміття. Він працює для всіх об`єктів Ruby, в тому числі для зовнішніх бібліотек. Створювати розширення для Ruby на С дуже просто частково через збирача сміття, частково через нескладний і зручний API (англійською Application Programming Interface — набір визначень взаємодії різнотипного програмного забезпечення).

Підтримує замикання з повною прив'язкою до змінних. Підтримує блоки коду {...} або do ... end. Блоки можна використовувати у методах або перетворювати у замикання.

Цілі змінні в Ruby автоматично конвертуються між типами Fixnum (32-розрядні) і Bignum (більше 32 розрядів) залежно від їхнього значення. Це дозволяє здійснювати цілочисельні матема­тичні розрахунки з довільною точністю.

Інтерпретатор не вимагає попереднього оголошення змінних. Але бажано змінним спочатку надавати порожнє значення nil. Тоді інтерпретатор знає, що ідентифікатор позначає змінну, а не метод.

Мова використовує прості домовленості для позначення області видимості. Наприклад:
var — локальна змінна;
@var — змінна екземпляра (член або поле об'єкта класу);
@@ var — змінна класу;
$var — глобальна змінна.

Безпосередньо в Ruby реалізовано багато шаблонів проектування. Може динамічно завантажувати розширення, якщо це дозволяє операційна система. Має незалежну від ОС підтримку невитискної багатопотоковості. Перенесена на багато платформ. Ruby розробляли на GNU / Linux, але працює на багатьох версіях Unix, DOS, Microsoft Windows, Mac OS, BeOS, OS / 2 і т.д. Можна додавати методи не лише у будь-які класи, але й у будь-які об'єкти.


Приклади вказівок мовою Ruby з поясненнями


str = "Привіт"
def str.bye
  "Бувай!"
end

За назвою методу (для поданого прикладу bye) може слідувати (необов`язковий) список параметрів функції, записаних через кому у круглих дужках.


puts str.bye

Приклади методів

Останній метод ігнорує все, починаючи з першої конструкції, не розпізнаної як частина запису числа, і далі до кінця рядка.

Рядок (string) — послідовністю символів, обмежених з обох боків або подвійними лапками, або апострофами. В Ruby для опису рядків і роботи з ними використовують напрацювання мови Perl. Це дає такі можливості:

Асоціативний масив можна уявити як масив упорядкованих пар. Його запис розпочинають фігурною дужкою {, завершують фігурною дужкою }, а між ними через кому записують дві сутності, розділені символами =>, що вказують на встановлення зв'язку між цими сутностями. Наприклад, таким чином:

array={0=>"нуль","1"=>1}

з такими результатами виведення:

puts array[0]   # нуль
puts array[1]   # nil
puts array["1"] # 1

Запис діапазону містить 3 складові (вказано у порядку запису):

де початок і кінець — дані одного злічуваного типу даних одного класу. Злічимість означає наявність методу .succ (переходу до наступного елемента). Приклади діпазонів:

"a".."z"   #  всі малі літери латиниці
"a"..."z"  #  те саме, що "a".."y"
1..100     #  всі натуральні числа від 1 до 100 включно 
1...100    #  всі натуральні числа від 1 до 99  включно

Три крапки ... вказують на те, що останній елемент запису до діапазону не належить.

Масиви в Ruby можуть змінювати розмір протягом виконання програми й містити різнотипні елементи. Подамо приклади їхнього використання з останнім обчисленим результатом у коментарі після # =>.


a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3]
# => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]]

— створено масив з 6 елементів.


a[2] # => 3.14
— звернення до елемента масиву зі значенням індексу 2.


a.flatten.uniq # => [1, 'hi', 3.14, 2, 4, 5]
— «розгортання усіх внутрішніх масивів із вилученням копій однакових об`єктів.


a.flatten! # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]
— «розгортання усіх внутрішніх масивів без вилучення копій однакових об`єктів.


a.index(4) # => 5
— пошук найменшого індекса елемента зі значенням 4.


Стандартна бібліотека Ruby надає можливість працювати з різними мережевими протоколами на сторонах сервера і клієнта, засоби для роботи з різними форматами представлення даних: XML, XSLT, YAML, PDF, RSS, CSV, WSDL. Також є бібліотеки для роботи з архівами, датами, кодуваннями, матрицями, засоби для системного адміністрування, розподілених обчислень, підтримки багатопоточності і т. д.

Реалізації:

Офіційний інтерпретатор портовано під більшість платформ: включаючи Unix, Microsoft Windows, DOS, Mac OS X, OS / 2, Amiga, BeOS, Syllable, Acorn RISC OS та інші.

Ідентифікатор це назва, яку користувач надає об’єктам (змінним, методам, класам). Ідентифікатори Ruby складаються з літер, цифр і символів підкреслення, але вони не можуть починатись з цифри. Ідентифікатори не можуть містити пробіли, знаки пунктуації або символи, що не відображаються:

При написаннні ідентифікатора враховують регістр: MAX, Max і max — три різні ідентифікатори.

Ключові словаце зарезервовані ідентифікатори, які використовують для написання вказівок: _LINE_, _ENCODING_, _FILE_, BEGIN, END, alias, and, begin, break, case, class, def, defined?, do, else, elsif, end, ensure, false, for, if, in, module, next, nil, not, or, redo, rescue, retry, return, self, super, then, true, undef, unless, until, when, while, yield, break

В одному рядку програми мовою Ruby може бути довільна кількість:

Один вираз можна записати у кількох рядках, розташувавши наприкінці кожного з них, крім останнього, позначки для інтерпретатора, що вираз ще не закінчено. Таким знаком може, наприклад, бути кома в кінці рядка.

Головної програми як такої (функції main) не існує; виконання відбувається згори донизу. У складних програмах на початку тексту зазвичай розташовують численні визначення, за якими слідує головна частина програми.

Зазвичай програми мають дані (змінні та сталі), функції (стандартні та створені користувачем) тощо. Всі дані, які використовують у програмі, необхідно заздалегідь описати для розподілу оперативної пам'яті згідно з описами.

Cлушне запитання: «Як виконати написану програму?» Бо текст програми, написаний на аркуші паперу, не буде виконано.

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

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

Наразі є навіть безкоштовні online середовища програмування, що не вимагають встановлення програмного забезпечення безпосередньо на комп'ютер користувача. Наприклад, Coding Ground, яке надає можливість працювати з файлами.

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

Величинаодиниця даних, якими оперує програма. Вона має такі властивості:

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

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

a = 5
a = "Тепер це рядок тексту"
a = ["А зараз"," це "," взагалі"," список"]

Арифметичні дії у Ruby для усіх числових типів в Ruby позначають такими символами: +, -, * та / — відповідно додавання, віднімання, множення та ділення. Оператор ділення по модулю % обчислює лишок від ділення цілих чисел.

Особливість ділення цілих чисел: якщо одне (але не обидва) число є від`ємним, Ruby виконує операцію ділення інакше, ніж Java, C чи С++, але так само, як Python: із заокругленням результату з недостачею. Наприклад, при діленні –7 на 3 Ruby повертає –3 на відміну від С та С++, що повертають –2.

Особливість обчислення лишку від ділення цілих чисел: якщо одне (але не обидва) число є від`ємним, Ruby виконує операцію обчислення лишку від ділення інакше, ніж Java, C чи С++, але так само, як Python і узгоджено із знаходженням частки (див. вище). Наприклад, лишок від ділення –7 на 3 дорівнює 2, як і належить згідно з означенням чистої математики (лишок має бути невід'ємним):

– 7 = (– 3) ∙ 3 + 2.

Це суперечить правилам обчислення в С чи Java, згідно з якими цей лишок буде обчислено як –1.

Властивості піднесення до степеня ** (на прикладах):

Логічний тип bool. Змінні цього типу займають 1 байт пам'яті й можуть набувати лише два значення:

Це найпростіший тип даних з найменшим набором операцій:

Ці словесні означення можна подати такою таблицею істинності.

Значення
операндів
(аргументів)
Результат операції
XY! XX && YX || YX ^ Y
001000
011011
100011
110110

Цих операцій достатньо, щоб записати довільну залежність однієї булевої змінної від довільної скінченої кількості булевих змінних.

Традиційно назви логічних методів закінчують знаком запитання «?». За false може виступати символ порожнечі nil, за true — довільний об'єкт, відмінний від nill.

Операції порівняння

ПозначенняТлумачення
== дорівнює
!=не дорівнює
<менше
>більше
<=не перевищує
>= не більше

Розгалуження — це простий, але потужний інструмент створення нелінійних алгоритмів. Для його запису використовують оператор такого вигляду:

if умова [then]
   код…
[elsif умова [then]
   код…]…
[else
   код…]
end

Тут квадратними дужками вказано на необов'язковість відповідної складової. За умову може слугувати довільний арифметичний чи логічний, вираз (логічним виразом називають такий вираз, у результаті обчислення якого одержують логічне значення true/так, або false/ні).

Вираз if використовують для перевірки справдження умови. Значения умови false и nil вважають хибними (false), а всі решта — будуть істинними (true).

Умову в операторі if можна закрити:

Модифікований запис:

код if умова

позначає: код буде виконано при справдженні умови (true).

Є аналог оператора if з точністю до навпаки — запис:

unless умова [then]
  код
[else
  код]
end

вказує на те, що код буде виконано за умови, що умова буде хибною (false).

Модифікований запис:

код unless умова

позначає: код буде виконано при хибності умови (false).

Оператор галуження за багатьма напрямками має такий вигляд:

case вираз0
when вираз1 [, вираз2 …] [then]
  код1 ]
when вираз3 [, вираз4 …] [then]
  код2 ] …
[else
  код3 ]
end

Він позначає порівняння значень виразу, записаного після case, і виразів, записаним після when, з допомогою оператора ===. При збігу хоча б із одним із значень код буде виконано. Якщо такого не відбудеться для жодного запису when, буде виконано код, записаний після else. Інакше кажучи, записаний вище оператор еквівалентний такому:


if     вираз0 === вираз1 [|| вираз0 === вираз2 …] 
  код1
elseif вираз0 === вираз3 [|| вираз0 === вираз4 …] …
  код2 …
[else
  код3 ]
end

Замість виразу після when можна записати діапазон. У цьому випадку буде перевірено належність до цього діапазону виразу, записаного після case.

Цикли

Оператор while виконує код (тіло циклу), поки справджується умова. Тіло циклу від умови відділяють з допомогою службового слова do, ознаки кінця рядка, зворотньої косої риски\ або крапки з комою. Оператор має такий вигляд:

while умова [do]
  код (тіло циклу)
end

Модифікований запис:

код (тіло циклу) while умова

позначає виконання коду, перевірку умови і продовження виконання циклу при її справдженні.

Оператор until

until умова [do]
  код (тіло циклу)
end

виконує тіло циклу, пока умова хибна (false), яку відділяють від тіло циклу з допомогою службового слова do, ознаки кінця рядка чи крапкою з комою. У цьому випадку хибність умови перевіряють до виконання тіла циклу.

Модифікований запис:

код (тіло циклу) until умова

виконує тіло циклу до справдження умови, тобто поки вона хибна. Цей код виконують до перевірки хибності умови.

Оператор for:

for змінна in діапазон [do]
  код (тіло циклу)
end

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

Інша форма запису:

діапазон.each do |змінна| код (тіло циклу) end

Оператори керування циклом:

Наприклад, такий код:

for j in 0..5
   if j < 2 then
      puts "Value of variable j is #{j}"
      redo
   end
end

дає зациклення з таким виведенням:

Value of local j is 0
Value of local j is 0
Value of local j is 0
…

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

Створення нового файлу здійснюють за допомогою методу new класу File:

f = File.new(path; mode)

Тут (рядок тексту) path — це шлях до файлу (абсолютний чи відносний), включаючи назву файлу, mode — режим роботи з файлом (див. далі).

Відкриття наявного файлу здійснюють за допомогою методу open класу File:

f = File.open(path; mode)

(зміст параметрів — той самий).

Параметри роботи з файлами:

При використанні того чи іншого режиму потрібно, щоб програма мала право виконувати відповідні операції з файлом. Інакше буде згенеровано помилку.

Закриття файлу здійснюють за допомогою методу close з класу File:

f.close

Якщо файл не закрито програмним засобом, його однаково буде закрито по завершенню програми. Але хорошим тоном вважають закриття файлу, описане у коді програми.

Робота з файлами подібна роботі зі стандартними потоками введення-виведення. Або скажемо так: стандартні потоки введення і виведення (з клавіатури й на екран) є псевдофайлами, з яких зчитують і в які записують дані. Це означає, що працювати з файлами можна за допомогою одних і тих самих методів. Наприклад, gets і puts.

Метод введення gets має два необов'язкових аргументи:

Метод gets повертає прочитаний рядок або nil, якщо файл було прочитано до кінця. За допомогою методу gets з файлу можна прочитати і рівно один символ.

Метод введення readline відрізняється від gets тим, що генерує помилку в разі досягнення кінця файлу, а не повертає nil.

Метод введення readlines читає всі рядки файлу і повертає їх у вигляді масиву. Як і для методу gets, методу readlines можна вказати, що вважати роздільником рядків і яким числом байт обмежитися, якщо немає необхідності зчитувати весь файл.

Метод виведення puts приймає один або більше об'єктів і приводить їх вигляду рядків. Якщо передано масив, кожний елемент масиву буде виведено окремим рядком. Виклик без аргументів призводить до переходу на новий рядок.

Метод виведення print, на відміну від методу puts, не вставляє між рядковими представленнями об'єктів ознаку кінця рядка і не завершує нею виведення. Значення спеціальної змінної $, розділяє об`єкти при виведенні. Її перевизначення призводить до зміни результату виведення:

print 1, 2, 3 # => 123
$, = ", "
print 1, 2, 3 # => 1, 2, 3

Видалення файлу здійснюють за допомогою методу delete класу File:

File.delete("example.txt")

Довантаження програм здійснюють за допомогою вказівки require, якій передають назву програми, яка підключають, або шлях до неї. Якщо це назва програми, розширення .rb можна не вказувати. При цьому пошук програми буде здійснено у тих теках, де розташовано стандартні бібліотеки інтерпретатора. Розширити цей список можна за допомогою зміни ключа -I під час завантаження середовища інтерпретатора у командному рядку. Так само можна перевизначити значення змінної $: у самій програмі до того, як буде використано require. Якщо вказівці require передають відносний або абсолютний шлях, буде підключено безпосередньо ту програма, шлях до якої вказано. Пошуку не буде здійснено.

Вбудовані бібліотеки, які можна підключати за допомогою вказівки require (перелік неповний):

Примусове завершення виконання програми здійснюють за допомогою таких вказівок:

Встановлення Ruby полягає не лише у встановленні інтерпретатора, але й у встановленні бібліотек різними способами з різними параметрами та їхніми значеннями для різних операційних систем. Актуальні рецепти встановлення потрібно шукати в Інтернеті безпосередньо перед встановленням.

Як показав досвід роботи в Київському університеті імені Бориса Грінченка у 2016-2020 роках, ці вказівки встановлення можуть змінювати з плином часу. Те, що було прийнятним у 2016 році для Linux Mint 15, може виявитися неприйнятним у 2018 році для Linux Mint 18. А прийнятне у 2018 році може виявитися неприйнятним у 2020 році для Linux Mint 20.

При операційній системі Ubuntu / Linux Mint для забезпечення умов виконання Державної навчальної програми щодо програмування (станом 23 жовтня 2020 року) потрібно виконати такі вказівки Терміналу:

sudo apt install git
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
source ~/.bashrc  # or `~/.bash_profile`
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
rbenv install 2.7.2
rbenv global 2.7.2
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
sudo apt-get install tcl-dev tk-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/tcl8.6/tclConfig.sh /usr/lib/tclConfig.sh
sudo ln -s /usr/lib/x86_64-linux-gnu/tk8.6/tkConfig.sh /usr/lib/tkConfig.sh
sudo ln -s /usr/lib/x86_64-linux-gnu/libtcl8.6.so.0 /usr/lib/libtcl8.6.so.0
sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so.0 /usr/lib/libtk8.6.so.0
gem install tk -- --with-tcltkversion=8.6 \
--with-tcl-lib=/usr/lib/x86_64-linux-gnu \
--with-tk-lib=/usr/lib/x86_64-linux-gnu \
--with-tcl-include=/usr/include/tcl8.6 \
--with-tk-include=/usr/include/tcl8.6 \
--enable-pthread
gem install ruby2d
gem install rails
gem install pony
sudo apt-get install libgtk-3-dev
sudo apt-get install -y ruby-gtk3

Встановлення пакунків Ruby-gtk3 і Ruby-mysql2 й оболонки Glade можна виконати за допомогою менеджера програм після виконання вказівок Терміналу.

4. Закріплення вивченного матеріалу

Завдання 1. Створити програму, яка зчитає з клавіатури 2 цілих числа і виведе на екран їхню суму (без коментарів). Порівняти з очікуваним результатом.

Завдання 2. Змінити подану вище програму таким чином, щоб обчислювати:

Завдання 3. Розглянути й проаналізувати програму переведення кількості градусів шкали Цельсія у кількість градусів шкали Фаренгейта.

celsius = nil
while celsius == nil
  puts "Здійсніть вибір:"
  puts "1 - ввести дані з клавіатури"
  puts "2 - зчитати дані з файлу"
  value = gets.to_i
  if value == 1
    puts "Задайте кількість градусів Цельсія: "
    celsius = gets.to_i
  elsif value == 2
    celsius = File.read("input.txt").to_i
  end
end

fahrenheit = (celsius*9/5)+32
print "Результат: "
print fahrenheit
puts "."
f = File.new("output.txt","w")
f.puts(celsius.to_s+" градусів Цельсія складають "+fahrenheit.to_s+" градусів Фаренгейта.")
f.close

Завдання 4. Дати відповіді на такі запитання:

  1. З чого складається абетка мови Ruby?
  2. Що таке ідентифікатор?
  3. Які правила запису ідентифікатора?
  4. Які особливості мови записують коментарі мовою Ruby?
  5. Що таке інтерпретована мова програмування?
  6. Яка структура програми мовою Ruby?
  7. Як записують коментарі мовою Ruby?
  8. Які типи даних використовують у мові Ruby?
  9. Який обсяг пам'яті використовують названі типи змінних?
  10. Який вигляд мають оператори галуження?
  11. Який вигляд мають оператори циклу?
  12. Який вигляд мають оператори роботи з файлами?

5. Домашнє завдання

  1. Вивчити навчальний матеріал уроку.

  2. Дано натуральне число n. Скласти логічний вираз, який справджується тоді й лише тоді, коли це двозначне число.

  3. Дано порядковий номер року. Скласти логічний вираз, який справджується тоді й лише тоді, коли цей рік високосний. Врахувати, що серед років, які кратні 4 не всі роки високосні. Високосними не є роки кратні 100 крім тих, що кратні 400.

  4. Дано вік людини. Скласти логічний вираз, який справджується тоді й лише тоді, коли ця людина не шкільного віку.


Текст упорядкував Будчаний Олег Володимирович, вчитель Олімпійського коледжу імені Івана Піддубного Деснянського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 16.01.2017 по 20.01.2017.