четвер, 21 січня 2021 р.

Дистанційна освіта з інформатики 25.01.2021 - 31.01.2021

 

Дистанційна освіта з інформатики в період січня 2021 року

25.01.2021 - 31.01.2021

Тема: Створення та реалізація об’єктів в середовищі опису та виконання алгоритмів Thonny.

Теоретична частина

Зразки алгоритмів:  https://pythontask.pp.ua/


















Осмислюємо властивості алгоритмів на текстовому матеріалі різнорівневих компететнісних завдань:

Зразок 1.

Створити алгоритм для виконавця розстановки 10 стільців у квадратній кімнаті так, щоб біля кожної стінки стояло порівну крісел.

Реалізація.
Система команд для виконавця буде такою:
1. Поставити 1-ий стілець в північно-західний куток.
2. Поставити 2-ий стілець в південно-східний куток.
3. Поставити 3-ій, і 4-ий стільці до західної стіни, не ставлячи їх в куток.
4. Поставити 5-ий, і 6-ий стільці до східної стіни, не ставлячи їх в кутки.
5. Поставити 7-ий, і 8-ий стільці до північної стіни, не ставлячи їх у кутки.
6. Поставити 9-ий, і 10-й стільці до південної стіни, не ставлячи їх у кутки.
Результат. Біля кожної стіни по три стільці.

Зразок 2.
Створити алгоритм для виконавця розстановки 8 стільців у квадратній кімнаті так, щоб біля кожної стінки  стояла різна кількість крісел.

Реалізація.
Система команд для виконавця буде такою:
1. Поставити 1-ий стілець в північно-західний куток.
2. Поставити 2-ий стілець в південно-східний куток.
3. Поставити 3-ій,  4-ий стільці до західної стіни, не ставлячи їх в куток.
4. Поставити 5-ий, і 6-ий, 7-ий стільці до східної стіни, не ставлячи їх в кутки.
5. Поставити 8-ий стілець до до північної стіни, не ставлячи його у куток.
Результат: південна стіна має один стілець; північна стіна має два стільці; західна стіна має три стільці; східна стіна має чотири стільці.

Зразок 3. 
Створити алгоритм для виконавця "дід Макар", котрий зможе перевезти на човні через річку три об'єкти: вовка, козу, капусту без втрат. Якщо відомо, що в човні може поміститися лише двоє об'єкти: чоловік або з капустою, або з вовком, або з козою. При цьому відома система команд:
1. Якщо лишити без нагляду вовка з козою , то він з'їсть козу.
2. Якщо лишити без нагляду козу з капустою, то зникне капуста.
3. У присутності діда Макара ніхто нічого не з'їдає.

Реалізація.
Система команд для діда Макара буде такою:
1. Перевезти козу на протилежний берег.
2. Повернутися назад лише діду на човні.
3. Перевезти капусту на протилежний берег.
4. Залишити капусту на березі і перевезти назад козу на човні.
5. Залишити козу і перевезти на протилежний берег лише вовка.
6. Повернутися назад лише діду на човні.
7. Перевезти козу на протилежний берег.

Зразок 4.
Створити алгоритм для з'єднання ланцюжка із 15 кілець для виконавця "коваль". При цьому в коваля є заготовлені 5 ланцюжків. У кожного із п'яти ланцюжків лише по три кільця. Вважати вірною таку систему команд:

1. Якщо розкувати кільце - це одна операція,

2. Якщо з'єднати два кільця - це ще одна операція.


Чи зможе коваль за шість операцій створити один ланцюжок із 15 кілець?

Реалізація.
Система команд для виконавця коваля.
1. Розібрати на три окремі кільця один триланковий ланцюжок. Це три операції.
2. Першим кільцем з'єднати 2-ий і 3-ій ланцюжки.
3. Другий кільцем з'єднати 4-ий і 5-ий ланцюжки.
4. Третім кільцем з'єднати два ланцюжки, що мають по сім кілець.
Результат. За шість операцій отримано ланцюжок на 15 кілець.

Зразок 5.
У одній із стародавніх країн засуджені на смертну кару, мали право на помилування через процедуру витягування жеребу. Процедура витягування жеребу відбувалася відкрито і публічно. У посудині знаходилися дві кулі, а в кожній кулі схована записка. Одна  записка містила слово: помилувати. Друга записка містила слово: покарати.
Друзі засудженого повідомили йому, що судді вирішили його покарати у будь-якому випадку, тому записку "помилувати" замінили на записку "покарати". Отже і посудині є дві кульки, і в кожній кульці записка "покарати".
Створити алгоритм дій засудженого під час витягування жеребу так, щоб засуджений залишився живим.
Реалізація.
Система команд для засудженого:
1. Витягнути довільну кульку із посудини.
2. Відкрити кульку.
3. Не читаючи, швидко проковтнути записку.
4. Повідомити суддям, що треба подивитися, що записано у другій кульці.
5. Відкрити другу кульку.
6. Прочитати записку другої кульки.
7. Повідомити усім, що засуджений проковтнув записку "помилувати".

Зразок 6.
Відома така система команд для видудлювання діжки квасу для діда та баби.
1. Випити діжку квасу за 10 днів разом діду і бабі.
2. Випити діжку квасу за 14 днів тільки діду.
3. Випити діжку квасу за х днів тільки бабі.
Знайти значення х, враховучи дію 1. та дію 2.

Реалізація.
Шукаємо таке число, яке ділиться націло на 10 і 14 одночасно. Це число 70.  Якщо 70 днів питимуть квас разом дід і баба, то вони вип'ють аж 70:10= 7 діжок квасу. Якщо 70 днів питиме тільки дід, то він подужає 70:14=5 діжок квасу. Тому х=7-5=2 дні.
Результат. Третя дія звучить так: "випити діжку квасу за 2 дні тільки бабі".

Зразок 7.

Учитель інформатики склав собі систему команд для цільової мотивації досягнення власного успіху:
1. Якщо мені ще прожити половину років від тих, які я уже прожив, то мені буде 72 роки.
2. Якщо мені ще прожити третину років від тих, які я уже прожив, то мені буде 64 роки.
3. Якщо мені ще прожити чверть років від тих, які я уже прожив, то мені буде 60 років.
4. Якщо мені ще прожити половину та ще третину та ще чверть років від тих, які я прожив, то мені буде аж 100 років.
Як за даною системою команд дізнатися, скільки зараз років учителю інформатики.

Реалізація.
1 спосіб. Спочатку використовуємо лише умову команди 4.
Уявіть, що уже 100 років учителю інформатики. Тоді ці роки складаються із таких доданків: х +0,5х+х/3+0,25х. Зведемо до спільного знаменника. Отримаємо 25х/12=100. Звідси х = 48.
Результат . 48 років - це вік учителя інформатики. Цей результат легко перевірити виконання умов команди 1. 2. 3.
1)48 +24=72
2)48+16=64
3)48+12=60.


Зразок 8.

Менеджер малого підприємства "Цейлон-чай" для продавщиць бутику "Чай" створила систему команд:
1. Закупити 1т цейлонського чаю за 12 000  грн.
2. Закупити 1 т. індійського чаю за 8 000 грн
3. Закупити 8 т. китайського чаю за 5 000 грн.
4. Змішати усі три сорти чаю у пропорції х:у:z так, щоб 1т. замішаного чаю стала коштувала 6 000 грн. І назвати його "чай-купаж".
5. Продавати 1т. чаю-купаж за 10 000 грн.

Запитання. Як знайти  величини: х, у та z?
Який прибуток від такої системи команд?
Чи варто працювати за таким алгоритмом?

Реалізація.
По суті, сума х+у+z - це кількість частин, які становлять 1т чаю-купаж вартістю 6 000 грн. Складаємо рівняння

5x+8y+12z=6(x+y+z),
звідси отримаємо один із розв'язків:
х= 8;  у=1;  z=1. 

Як це знайдено?

Ліва і права частина  рівняння може поділитися на 10.

Тому усього маємо десять частин.

Їх розподіляємо на три сорти так,

щоб 5*8=40, 8*1=8; 12*1 = 12; 

отже, 40+8+12= 60=6*10=6(8+1+1).

 

Перевіряємо: 5*8+8*1+12*1=6(8+1+1).

Отже, увесь чай-купаж  має масу 8+1+1=10 т. ,

 який коштує згідно закупки: 5+8+12=25 тис. грн
10*10=100 тис. грн коштуватиме виручка після продажу 10 тон чаю-купажу. 

Знаходимо прибуток: 100-25= 75  тис.грн  - це грязного прибутку, тобто, це не врахуючи податки на продаж та підприємницьку діяльність і так далі.

Нехай усі податки та відкати становлять 40 відсотків від прибутку.

Тому
75*0,4=30 тис. грн це йде на оплату податків і відкати.

Отже, 75-30=45 тис.  грн чистий дохід у фірми.

Далі. 20 тис. грн на оплату праці продавцям та менеджерам. 

 

Результат. Так, фірма  "Цейлон-чай" має ще 25 тис. грн,

щоб продовжувати і далі таку схему  "ботяжити" чай-купаж

 і продавати його 1тонну вже не 10 тис. грн, а за 11 тис. грн.

 

Підручник. Для підтримки процесу необхідний підручник Інформатика 8 клас (авторів МорзеБарна) за 2020 рік. В більшості учнів підручник 2015 року, він не підходить. Як бути? В кого немає нового підручника, його можна завантажити в електронному варіанті ( в мене такий). Посилання для завантаження https://pidruchnyk.com.ua/uploads/book/7-klas-informatyka-morze-2020.pdf (не забуваємо про авторське право)

2.     Середовище програмування. Основна мова програмування, яка використовується при вивченні даної теми Python гілки 3, або його ще називають Python3. В залежності від наявних у вас пристроїв, можна обрати своє середовище (програму для написання програм). Налаштувати ваші пристрої для роботи допоможе підручник (опрацюйте п.7 підручника ст.61 -65 до вправи 3). Для користувачів OS Windows, бажано встановити Середовище Thonny, оскільки робота в ньому непогано описана в нашому підручнику.

Середовище Thonny Python IDE for beginners https://thonny.org/

Для завантаження можна прямо перейти за посиланням

Для Windows: https://github.com/thonny/thonny/releases/download/v3.3.2/thonny-3.3.2.exe

 Зразки алгоритмів:  https://pythontask.pp.ua/


Практична частина.

Практично осмислюємо найпростіші зразки кодування

алгоритмів в середовищі Thonny

 

Навчальна вправа 1. Обчислювальння з дробовими числами

Створити та реалізувати в середовищі Thonny подану нижче програму мовою Python, зберегти, як файл  та протестувати для трьох таких числових пар: 1) (a;b)=(2.75; 3.25);  2) (a;b)=(-4.57; -3.198); 3) (a;b)=(83.423;-41.598).

Реалізація.

import math    # виклик математичного модуля функцій  у Python3.

a = float(input("Введіть число a="))    # виклик  для введення числа а.

b = float(input("Введіть число b="))  # виклик  для введення числа а.

x = math.sqrt(a*b)      # виклик функції квадратного кореня у Python3.

y = math.exp(a)*b      # виклик функції експоненти  (ex=2.7319281928x)у Python3.

z = a*math.exp(2*a/b)

u = math.sqrt(a*b)/(math.exp(a)*b)-a*math.exp(2*a/b)

print("x=", x)

print("y=", y)

print("z=", z)

print("u=", u)

 

Навчальна вправа 2. Обчислення  зі списками

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

Реалізація.

T1=[4, 5, 6]         # оголошується список Т1, який має посилання на список із трьох чисел

T2=[1, 2, 3]            # оголошується список Т2, який має посилання на список із трьох чисел

T=2*T1+3*T2      # оголошується новий список Т, який утвориться із двох різних списків  (Т має 15 елементів)

M=[0]*3                        # оголошується  список М, який посилається на список [0,0,0]      

for i in range(len(M)):           # оголошується цикл, який має лічильник, що не перевищує довжину  списка М.

  if i!=2:                                  #перевіряється   номер елемента списку на наявність в ньому номера  2.

      M[i]=2*T1[i]+3*T2[i]     #виконуються арифметичні дії над    елемент списків T1=[і]  і   T2=[і]          

      print("M[",i,"]=", M[i])           #виводиться на екран   елемент списку

  continue                               # арифметичне множення і додавання відповідних елементів із 2 різних списків.

print("T=", T)                                                 #виводиться на екран   список T на 15 елементів

print("M=", M)              #виводиться на екран   список М на 3 елементи

 

Протестуйте алгоритм для:  1) T1=[‘(2-f)’, ‘(7-5n)’, ‘-(2+s)’ T2=[‘7’, ‘-3’, ‘2’]  2) T1=[-564, -155, -136] T2=[7.7, -3.5, 6.8]                                                                                  

 

Навчальна вправа 3. Обчислення  зі списками на випадкових об’єктах

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

Зразок алгоритму, що використовує генерування випадкових об’єктів  мовою Python3:

import random                                                    # виклuкається модуль, що генерує  випадкові об’єкти

M1=['analysis',  'synthesis', 'studying', 'research']         # список M1 із невипадкових символьних рядків

K=['None']*4                             # оголошується список K= ['None', 'None', 'None', 'None']                         

N=['None']*4                              # оголошується список N= ['None', 'None', 'None', 'None']                         

for i in range(len(M1)):                # оголошується цикл з лічильником , що не перевищує довжину М1

  N[i]= random.choice(M1)                           # присвоює будь-яке(випадкове) значення із списку М1

  K[i]= random.choice(M1)                              # присвоює ,будь-яке(випадкове) значення із списку М1

K11= random.randint(0,10)                             #оголошується число к11  з посиланням на випадковy цифру.

P=random.gauss(1,10)                           #оголошується число P  з посиланням на випадкове дробове число.

print ('M1=',M1)          

print('N=', N)                                       #виводиться на екран  вміст  списків з випадковими елементами

print('K=',K)                                        #виводиться на екран  вміст  списків з випадковими елементами

print('K11=',K11,  'P=',P,  ' K11-P*random number(10, 100)=', K11-P*random.randint(10,100))       #виводиться результат обчислення «замороченого»  тобтообрахованого  випадкового цілого числа

print('2**K11-4*K11+random.randint(100,1000)=', 2**K11-4*K11+random.randint(100,1000))

 

Протестуйте алгоритм  5 разів.

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

Результат виконаної практичної роботи це тритекстові файла( три-проекти) надіслати вашому учителю на електронну скриньку: 
vinnser@gmail.com (Сергій Петрович)
ktdfz@i.ua (Юрій Васильович)


Довідник для учнів, що цікавляться програмуванням


Python

·         Теорія

·         I. Інтерпретатор Python

·         Робота з редактором Python. Загальні питання. Інтерактивний та програмний режими роботи. Набір тексту програми

·         II. Основи Python

·         1. Типи, числа, операції

·         1.1. Представлення даних в Python. Поняття об’єкту. Ідентичність, тип, значення об’єкту. Функції id()type(). Оператори isis not

·         1.2. Літерали. Створення (генерування) об’єкту. Базові типи об’єктів

·         1.3. Числа

·         1.3.1. Представлення чисел різних типів. Базові числові типи. Функції перетворення чисел

·         1.3.2. Числа з фіксованою точністю. Клас Decimal

·         1.3.3. Раціональні числа. Клас Fraction

·         1.4. Оператори (операції)

·         1.4.1. Оператори (операції) для роботи з числовими об’єктами. Таблиця пріоритетності операцій

·         1.4.2. Змішування типів. Перетворення типів в операторах

·         1.4.3. Математичні (арифметичні) оператори. Приклади

·         1.4.4. Оператори порівняння

·         1.4.5. Бітові оператори

·         2. Рядки

·         2.1. Рядки. Загальні поняття. Оголошення рядка. Операції над рядками. Приклади

·         2.2. Екрановані послідовності. Неформатовані рядки. Багаторядкові блоки тексту

·         2.3. Доступ за індексами. Зрізи. Отримання фрагменту рядка. Приклади

·         2.4. Вбудовані функції для роботи з рядками

·         2.4.1. Засоби перетворення рядків та одиночних символів. Функції int()str()repr()float()ord()chr()

·         2.4.2. Функції len()max()min()

·         2.5. Клас str. Функції роботи з рядками

·         2.5.1. Функції для роботи з рядками, що визначають особливості рядка

·         2.5.2. Функції пошуку та заміни підрядка в рядку

·         2.5.3. Функції що визначають та обробляють початок та кінець рядка

·         2.5.4. Функції обробки рядка згідно з форматом чи правилом кодування. Стилі форматування

·         2.5.5. Функції вирівнювання рядків

·         2.5.6. Функції які змінюють регістр символів у рядку

·         2.5.7. Функції розбиття рядків на частини та утворення нових рядків з допомогою кортежів та списків

·         3. Списки

·         3.1. СпискиВластивості списків. Приклади, що демонструють властивості списків

·         3.2. Операції над списками: конкатенація (+), дублювання (*), видалення, зріз, доступ за індексом

·         3.3. Обробка списків у циклах. Створення списків з допомогою генераторів списківІтерації по списках. Представлення та обробка матриць з допомогою списків. Операція in

·         3.4. Методи роботи зі списками. Приклади

·         3.5. Об’єкти-ітератори. Використання ітераторів та генераторів для списків. Функції range()next()iter()

·         4. Словники

·         4.1. Словники. Основні поняття. Характеристики. Створення словників. Доступ до значень у словнику

·         4.2. Вбудовані функції та операції обробки словників

·         4.3. Методи роботи зі словниками

·         4.4. Робота зі словниками. Вбудовані функції list()zip(). Обхід словника. Генератори словників. Сортування. Поєднання словників з множинами

·         5. Кортежі

·         5.1. Кортежі. Основні поняття. Властивості кортежів

·         5.2. Операції над кортежами. Обхід кортежу. Методи роботи з кортежами

·         6. Файли

·         6.1. Загальні поняття. Відкриття/закриття файлу. Функції open()close()

·         6.2. Приклади роботи з текстовими файлами

·         6.3. Приклади роботи з бінарними файлами

·         6.4. Модуль struct. Робота з бінарними файлами. Приклади збереження/читання упакованих двійкових даних

·         6.5. Модуль pickle. Серіалізація об’єктів. Приклади використання для запису/читання інформації з бінарних файлів

·         6.6. Приклади розв’язку задач на модифікацію текстових файлів

·         7. Множини

·         7.1. Основні поняття. Створення множини. Операція in. Операції над множинами, які утворюють нову множину

·         7.2. Операції та функції для визначення надмножин та підмножин. Порівняння множин

·         7.3. Класи setfrozensetФункції для роботи з множинами. Приклади

·         7.4. Обмеження на застосування множин. Застосування класу frozenset. Генератори множин

·         9. Керуючі інструкції

·         9.1. Оператор присвоєння. Форми присвоювання. Приклади. Позиційне присвоювання кортежів, списків

·         9.2. Інструкція (оператор) if. Визначення. Приклади

·         9.3. Оператор whileПриклади

·         9.4. Оператор forПриклади

·         10. Функції. Видимість імен

·         10.1. Поняття функції. Загальна форма. Приклади оголошення та використання функцій

·         10.2. Області видимості імен в Python. Локальні та глобальні імена. Правила видимості імен. Правило LEGB. Ключове слово global. Перевизначення імен в функціях

·         10.3. Вкладені функції. Вкладені області видимості. Правила пошуку імен у випадку вкладених функцій. Фабричні функції. Передача значень у вкладену функцію

·         10.4. Ключове слово nonlocal. Особливості використання. Приклади

·         10.5. Аргументи в функціях

·         10.5.1. Передача аргументів у функцію. Зміна аргументів у тілі функції

·         10.5.2. Режими співставлення аргументів. Класифікація. Співставлення за позицією. Співставлення за іменами. Аргументи за замовчуванням

·         10.5.3. Режими співставлення аргументів. Аргументи змінної довжини. Комбінування різних способів співставлення аргументів. Приклади

·         12. Класи

·         12.1. Класи в Python. Загальні поняття. Ключове слово class. Об’єкти класів. Об’єкти екземплярів

·         12.2. Спадковість у класах. Правила застосування спадковості. Приклади

·         12.3. Класи і модулі. Звертання до класів інших модулів

·         12.4. Перевантаження операторів у класах

·         12.4.1. Перевантаження операторів. Загальні відомості. Методи, що перевантажують оператори. Приклади

·         ІІІ. Стандартна бібліотека Python

·         1. Модуль io. Ієрархія класів. Клас IOBase. Методи роботи з файлами

·         2. Модуль math

·         2.1. Теоретико-числові функції та функції представлення

·         2.2. Степеневі та логарифмічні функції

·         2.3. Тригонометричні функції

·         2.4. Гіперболічні функції

·         2.5. Спеціальні функції та константи

·         3. Модуль random

·         3.1. Генерування випадкових чисел. Класи RandomSystemRandom. Функції рахівництва. Функції для цілих чисел

·         3.2. Функції для послідовностей

·         3.3. Функції генерування випадкових чисел з плаваючою комою

·         4. Модуль struct. Упакування/розпакування даних. Базові методи модуля

 




Немає коментарів:

Дописати коментар