суботу, 6 листопада 2021 р.

08.11.2021-15.11.2021 Створення математичної моделі до алгоритмів

 08.11.2021-15.11.2021

Тема: Створення математичної моделі до алгоритмів

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

Чому у даній таблиці пофарбували числа? 

Якою властивістю володіють однокольорові числа?

Як створити алгоритм для підрахунку однокольорових чисел?



Чому у даній таблиці пофарбували  числа? 

Якою властивістю володіють однокольорові числа?




Завдання 1.   На складі m діжок олії, ємністю по n відер кожна. Усі ці діжки продали заводу та їдальні у відношенні k:p. Скільки відер олії купив завод та їдальня?  Створити, реалізувати, протестувати алгоритм в середовищі Thonny для знаходження кількості двомовних туристів, в залежності від введених натуральних чисел  p, k, n, m.

Математична модель завдання 1:   

1)Х=m*n*k/(p+k) відер олії купив завод.  2) У=m*n*p/(p+k) відер олії купила їдальня.

Завдання 2.   Якби бабуся захотіла дати кожному своєму внукові по m цукерок, то  один внук не отримав би жодної цукерки. А коли бабуся захотіла дати кожному своєму внукові по k цукерок, то  n цукерок залишились би у неї. Скільки внуків у бабусі? Створити, реалізувати, протестувати алгоритм в середовищі Thonny для знаходження кількості внуків, в залежності від введених натуральних чисел   k, n, m.

Математична модель завдання 2:

R=(m+n)/(m-k) внуків у бабусі.

 

Завдання 3.   Щодня від мотка дроту довжиною m метрів відрізають кусок довжиною k метрів. Скільки залишолось днів для відрізання дроту, якщо вже n днів відрізався дріт. Створити, реалізувати, протестувати алгоритм в середовищі Thonny для знаходження кількості днів для відрізання дроту, що залишилися, в залежності від введених натуральних чисел   k, n, m.

Математична модель завдання 4:

A=(m-k*n)/k   днів залишилось для відрізання дроту.

 

Завдання 4.   Трицифрове число має х сотень, у десятків, і z одиниць. Яка різниця між цим числом та сумою цифр цього числа?  Створити, реалізувати, протестувати алгоритм в середовищі Thonny для знаходження різниці між числом та сумою цифр, в залежності від введених натуральних чисел   x, y, z

Математична модель завдання 4:

A= 99*x+9*y  - різниці між числом та сумою цифр числа xyz

.

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

Створення списків різними способами мовою Python3.

Завдання 0. Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі прогамування Thonny для креслення на основі  полігонів авангардного малюнку  "автобуса " на канвасі. Зверніть увагу, що в алгоритмі використовують списки координат (х,у) вершин ломаної, що обмежує полігон(багатокутник).

Реалізація

from tkinter import*

print('Алгоритм малювання полігонів та декількох кіл на канвасі')

A=['None']*8; B=['None']*8;

tk=Tk();  #rk=Tk();  pk=Tk();

canvas=Canvas(tk, width=900, height=600)

canvas.pack()

points1=[25, 300, 25, 100, 50, 50, 700, 50, 725, 100, 725, 300,620,300,580,225,500,225,450,275,420,225, 325,225,290,300,210,300,175,225,75,225,50,300,25,300]

tk=canvas.create_polygon(points1, outline='gold', fill='orange', width=2)

tk=canvas.create_oval(60, 390, 195,240, fill="black", outline="black")

tk=canvas.create_oval(80, 370, 168,270, fill="#002211", outline="black")

tk=canvas.create_oval(310, 390, 445,240, fill="black", outline="black")

tk=canvas.create_oval(328, 370, 420,260, fill="#002211", outline="black")

tk=canvas.create_oval(460, 390, 595,240, fill="black", outline="black")

tk=canvas.create_oval(575, 370, 478,265, fill="#002211", outline="black")

points2=[50, 200, 50, 100, 200, 100, 200, 200, 50, 200]

tk=canvas.create_polygon(points2, outline='gold', fill='purple', width=4)

points3=[220, 75, 295, 75, 295, 300, 220, 300, 220, 75]

tk=canvas.create_polygon(points3, outline='gold', fill='violet', width=4)

points4=[325, 100, 525, 100, 525, 200, 325, 200, 325, 100]

tk=canvas.create_polygon(points4, outline='gold', fill='purple', width=4)

points5=[550, 75, 650, 75, 650, 300, 608, 300, 550, 225, 550, 75]

tk=canvas.create_polygon(points5, outline='gold', fill='violet', width=4)

points6=[700, 300, 700, 225, 727, 225, 727, 300, 700, 300]

tk=canvas.create_polygon(points6, outline='gold', fill='silver', width=4)

points7=[675, 215, 729, 215, 729, 100, 711, 75, 675, 100, 675, 215]

tk=canvas.create_polygon(points7, outline='gold', fill='#ffffff', width=4)

points8=[675, 225, 729, 175, 729, 225, 675, 225, 729, 175]

tk=canvas.create_polygon(points8, outline='gold', fill='indigo', width=4)

tk=canvas.create_text(10, 200, text="Автобус:  Вінниця - Жмеринка", fill='indigo',  width=4, font=('Helvetica',9))

Завдання 1. Реалізувати поданні нижче способи створення списків

1) Перерахуванням всіх елементів (цей спосіб був розглянутий вище):

print('Алгоритм 1 створення елементів списку перерахуванням всіх елементів ' )

a = [ "Андрій", "Віра", "Даша", "Коля", "Юра"];

print(a)

Можна створити порожній список:

print('Алгоритм 2 створення  порожнього списку, списку із нулів, списку слів ' )

n=20; a=[]*n;

print('a=',a, 'type(a)=',type(a))

m=5; b=['None']*m

print('b=',b, 'type(b)=',type(b))

m=10; c=[0]*m

print('c=',c, 'type(c)=',type(b))

a = [i for i in range (10)]; print(a)

2) За допомогою генератора списку:

print('Алгоритм 3 генерування чисел випадковим чином або формулою ' )

import random

n=20; a=[]*n; b=[]*n; c=[]*n;

a=[-3*random.randint(-20,-2) for i in range(n) if i%3==0];

b=[-3*random.randint(-10,0) +1 for i in range(n) if i%3==1];

c=[-3*i*i-6*i+2 for i in range(n) if i%3==2];

print('Генерування списку випадкових чисел -3*random.randint(-20,-2),  тому a=',a, 'type(a)=',type(a))

print('Генерування списку випадкових чисел -3*random.randint(-10,0) +1,  тому b=',b, 'type(b)=',type(b))

print('Генерування списку формулою  m[i]=3*i*i-6*i+2, тоді  c=',c, 'type(c)=',type(b))

3) Шляхом введення елементів з клавіатури (кожен елемент з нового рядка):

print('Алгоритм 4 введення чисел  з клавіатури' )

A=[0]*2; B=[[0,0]]*2

print('Уведіть числа для списку з клавіатури:')

for i in range(2):

       print("A[", i,"] =", end="    ")

       A[i]=int(input())

print('Ви створили такий список A=',A)

print('Ви створили такий одновимірний масив розміром 1х2 із цілих чисел A=',A)

B=[A,A]

print('Ви використали список А і створили новий список B=',B)

print('Ви створили такий двовимірний масив 2х2 із цілих чисел B=',B)

print('Перший спосіб виведення елементів двовимірного  масиву В')

print("B[", 0,",",0,"] =", A[0], "    B[", 0,",",1,"] =", A[1])

print("B[", 0,",",1,"] =", A[0], "    B[", 1,",",1,"] =", A[1])

print('Другий спосіб виведення елементів двовимірного  масиву В')

for i in range(2):

    for j in range(2):

       print("B[", i,",",j,"] =", B[i][j], end="    ")

Запустіть цю програму і створіть список, ввіши самостійно числа з клавіатури.

4) Шляхом введення елементів з клавіатури (всі елементи в одному рядку через пропуск). Для цього використовується метод a.split (), який повертає список рядків, які вийдуть, якщо вихідну рядок розрізати на частини по прогалин:

print('Алгоритм 5 введення трьох чисел з клавіатури в один рядок з одним пропуском ' )

S=input()     # користувач вводить в рядок  три числа із одним пропуском між ними  "1 2 3"

D=S.split()

print('Ви створили такий список D=',D, type(D))

print('Ви створили такий одновимірний масив розміром 1х2 із цілих чисел D=',D)

 

Завдання 2. Реалізувати поданні нижче способи вивеведення списків

Cпособи виведення списку

Списки можна виводити різними способами.

1) Найпростіший спосіб - просто дати команду вивести список:

print('Алгоритм 6’);  b = [17, 409, 88]print(b)

2) Виведення кожного елемента списку по-окремо:

print('Алгоритм 7’); 

a = [ "Андрій", "Віра", "Даша", "Коля", "Юра"]

for i in range (5):

        print (a [i])

3) Виведення  кожного елемента списку по-окремо в одному рядку:

print('Алгоритм 8’); 

a = [ "Андрій", "Віра", "Даша", "Коля", "Юра"]

for i in range (5):

         print (a [i], end = "      ")

4) Виведення  елементів списку без звернення до індексів елементів:

print('Алгоритм 9’); 

fruits = [ "Яблуко", "Банан", "Груша"]

for x in fruits:

           print (x, end = "    ")

 

 

Завдання 3. Реалізувати поданні нижче способи опрацювання  списків

Опрацювання списків різними способами зміни його елементів списку

Реалізація алгоритму каскадного обміну місцем розташування елементів у списку

 

print('Алгоритм 10 обміну місцями розташування між сусідніми елементами в  списку')

a=["Андрій", "Віра", "Даша", "Коля", "Юра"];

print('Початкове розташування елементів у  списку a=', a)

for i in range (0,4):

        a[i], a[i+1]=a[i+1], a[i]

        print('a[',i,']=',a[i])

        print('a[',i+1,']=',a[i+1])

print('Остаточне розташування елементів у  списку a=',a)

 

Реалізація алгоритму заміни деяких  елементів у списку

 

print('Алгоритм 11 заміни парних елементів в  списку на число нуль')

q=[1, 2, 3, 4, 5, 6]

print('Початкове розташування елементів у  списку q=', q)

for i in range (6):

       if q[i]%2==0:

          q[i]=0

print('Остаточне розташування елементів у  зміненому списку q=',q)

3) Можна додавати елементи в кінець списку. Для цього використовується метод a.append (x):

print('Алгоритм 12 дописування в кінець списку елементів в  списку')

f=[1, 2, 3, 4, 5, 6]

print('Початкове розташування елементів у  списку f=', f)

for k in range(7):

        f.append(100+k+1)

print('Остаточне розташування елементів у  зміненому списку f=',f)

4) Чи можна розширювати список, додаючи в його кінець елементи іншого списку. Для цього використовується метод a.extend(b):

print('Алгоритм 13 дописування в кінець списку елементів іншого  списку)

a=[1, 2, 3, 4, 5, 6]; b=[100, 200, 300];

print('Початкове розташування елементів у  списку a=', a)

print('Початкове розташування елементів у  списку b=', b)

for k in range(2):

      a.extend(b); print('номер ітерації в циклі k=',k,'доповнений список а=',a)

      b.extend(a); print('номер ітерації в циклі k=',k,'доповнений список b=',b)

print('Остаточне розташування елементів у  зміненому списку a=',a)

print('Остаточне розташування елементів у  зміненому списку b=',b)

5) Списки можна копіювати:

print('Алгоритм 14  копіювання списку' )

a=[1, 2, 3, 4, 5, 6]; c=b=[100, 200, 300];

print('Початкове розташування елементів у  списку a=', a)

print('Початкове розташування елементів у  списку с=b=', b)

for k in range(1):

      a1=a

      b1=c

print('Остаточне розташування елементів у  скопійованому списку a1=а=',a1)

print('Остаточне розташування елементів у  скопійованому списку b1=c=',b1)

5) Функція знаходження довжини списку len (a):

print('Алгоритм 15 пошуку кількості елементів у списку' )

a=["Яблуко", "Банан", "Груша"]

print('Початкове розташування елементів у  списку a=', a)

k=len(a)

print ('Кількість елементів списку k=len(a)=',k)

6) Заповнення списку випадковими елементами із різних числових проміжків:

print('Алгоритм 16 заповнення списку випадковими числовими елементами' )

from random import randint

x=7

a=[0]*(2*x+3);

print('Початкове розташування елементів у  списку a=', a)

for i in range(x):

     a[i]=randint(10,100)

print('Перше тимчасове розташування елементів у  списку a=', a)

for m in range(x,2*x):

     a[m]=randint(1000,100000)

print('Друге тимчасове розташування елементів у  списку a=', a)

for m in range(2*x,2*x+2):

     a[m]=randint(1,10)    

print('Остаточне розташування елементів у  списку a=', a)

k=len(a)

print ('Кількість елементів списку k=len(a)=',k)

7) Перестановка елементів списку в зворотному порядку. Метод a.reverse():

print('Алгоритм 17 заповнення списку випадковими відємними елементами та зворотного запису спику' )

from random import randint

y=3; a=[0]*(2*y+5);

print('Початкове розташування нульових елементів у  списку a=', a)

a=[2*randint(10,100) for n in range(0, 2*y+5,1)]

print('Початкове розташування випадкових парних елементів у  списку a=', a)

a=[2*randint(-100,-1)-1 for n in range(1, 2*y+5,3)]

print('Перше тимчасове розташування непарних відємних елементів у  списку a=', a)

a.reverse() 

print('Зворотне розташування елементів у  списку a=', a)

k=len(a)

print ('Кількість елементів списку k=len(a)=',k)

8) Сортування списку. Функція sorted(a):

print('Алгоритм 18 сортування елементів списку випадковими відємними елементами у порядку спадання та зростання' )

from random import randint

z=3; a=[0]*(7*z+5);

print('Початкове розташування нульових елементів у  списку a=', a)

a=[2*randint(1,10) for n in range(0, 4*z+1,1)]

print('Початкове розташування випадкових парних елементів у  списку a=', a)

a=[2*randint(-10,-1)-1 for n in range(1, 5*z+3, 3)]

print('Перше тимчасове розташування непарних відємних елементів у  списку a=', a)

sorted(a)

print('Упорядковане розташування елементів у  списку  за ознакою зростання a=', a)

a.reverse() 

print('Упорядковане розташування елементів у  списку  за ознакою  спадання a=', a)

k=len(a)

print ('Кількість елементів списку k=len(a)=',k)

print ('Максимальний елемент у списку v= max(a)=',max(a))

print ('Мінімальний елемент у списку w= min(a)=',min(a))

print ('Сума усіх елементів у списку h= sum(a)=',sum(a))

print ('Середнє арифметичне елементів у списку p= sum(a)/k=',sum(a)/k)

 

Результати виконаної практичної роботи надіслати вашому учителю на електронну скриньку:  vinnser@gmail.com (Сергій Петрович

Додаткові завдання 

для самостійного кодування 

алгоритмів в online-Python

 

Завдання 1. Створити, реалізувати, протестувати алгоритм в середовищі програмування для знаходження результатів арифметичних дій додавання, множення, віднімання двох випадкових парних чисел: 2*n, 2*m. Перевірити результати цих дій на властивість парності. Чому результати завжди парні числа?

Завдання 2. Створити, реалізувати, протестувати алгоритм в середовищі програмування для знаходження результатів арифметичних дій додавання,  віднімання двох випадкових непарних чисел: 2n+1, 2m-1. Перевірити результати цих дій на властивість парності. Чому результати завжди парні числа?

Завдання 3. Створити, реалізувати, протестувати алгоритм в середовищі програмування для знаходження результатів арифметичних дій множення,  двох випадкових непарних чисел: 2n+1, 2m+1. Перевірити результати цих дій на властивість парності. Чому результати завжди непарні числа?

Завдання 4. Створити, реалізувати, протестувати алгоритм в середовищі програмування  для знаходження результатів арифметичних дій додавання,  віднімання двох випадкових непарного та парного чисел: 2n-1, 2m. Перевірити результати цих дій на властивість парності. Чому результати завжди непарні числа?

Завдання 5. Створити, реалізувати, протестувати алгоритм в середовищі програмування  для знаходження результатів арифметичних дій множення двох випадкових непарного та парного чисел: 2n-1, 2m. Перевірити результати цих дій на властивість парності. Чому результати завжди парні числа?


Завдання 6. Створити, реалізувати, протестувати алгоритм в середовищі програмування для знаходження результатів арифметичних дій додавання,  двох випадкових парних та одного випадкового непарного чисел: 2n-1, 2m, 2k Перевірити результати цих дій на властивість парності. Чому результати завжди непарні числа?

Завдання 7. Створити, реалізувати, протестувати алгоритм в середовищі програмування  для знаходження результатів арифметичних дій додавання трьох випадкових непарних та одного парного чисел: 2n-1, 2m-1, 2k-1, 2p. Перевірити результати цих дій на властивість парності. Чому результати завжди непарні числа?


Завдання 8. Створити, реалізувати, протестувати алгоритм в середовищі програмування для знаходження результатів арифметичних дій множення трьох випадкових парних та одного непарного чисел: 2n-1, 2m, 2k, 2p. Перевірити результати цих дій на властивість парності. Чому результати завжди парні числа?


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

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