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

15.11.2021-21.11.2021 Алгоритми з числовими даними та їх властивостями

  

15.11.2021-21.11.2021

 

Тема: Алгоритми з числовими даними та їх властивостями

 

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

 

Створення математичної моделі до алгоритму з числовими даними

 Зразки задач комбінаторики

Задача 1. З Києва до Чернігова можна дістатися пароплавом, поїздом, автобусом, літаком; з Чернігова до Новгород-Сіверська – пароплавом і автобусом. Cкількома способами можна здійснити подорож за маршрутом Київ – Чернігів – Новгород-Сіверськ?

Розв’язання. Очевидно, число різних шляхів з Києва до Новгород-Сіверська дорівнює 4∙2 = 8, бо, обравши один з чотирьох можливих способів подорожі від Києва до Чернігова, маємо два можливих способи подорожування від Чернігова до Новгород-Сіверська.

Такі міркування, які були проведені при розв'язуванні задачі 1, доводять справедливість такого простого тверджен­ня, яке будемо називати основним правилом комбінаторики.

 

Якщо деякий вибір А можна здійснити m різними спосо­бами, а для кожного з цих способів деякий другий вибір В можна здійснити n способами, то вибір А і В (у вказаному порядку) можна здійснити mn способами.

 

Інакше кажучи, якщо певну дію (наприклад, вибір шля­ху від Києва до Чернігова) можна здійснити m різними спо­собами, після чого другу дію (вибір шляху від Чернігова до Новгород-Сіверська) можна здійснити n способами, то дві дії разом (вибір шляху від Києва до Чернігова, вибір шляху від Чернігова до Новгород-Сіверська) можна здійснити mn способами.

 

Задача 2. У розиграші першості країни з футбола бере участь 16 команд. Скількома способами можуть бути розподілені золота і срібна медалі?

Розв’язання. Золоту медаль може одержати одна з 16 команд. Після того, як визначено володаря золотої медалі, срібну медаль може мати одна з 15 команд. Отже, загальне число способів, якими може бути розподілена золота і срібна медалі, до­рівнює 16∙15 = 240.

 

Сформулюємо тепер основне правило комбінаторики (правило множення) в загальному вигляді.

Нехай треба виконати одну за одною k дій. Якщо першу дію можна виконати n1 способами, другу дію – n2 способами, третю дію – n3 способами і так до k-ї дії, яку можна вико­нати nk способами, то всі k дії разом можуть бути виконані n1∙ n2∙ n3∙…∙ nk-1 nk способами.

 

Задача 3. Скільки чотиризначних чисел можна склас­ти з цифр 0, 1,2, 3,4, 5, якщо:

а)         жодна цифра не повторюється більше одного разу;

б)        цифри можуть повторюватись;

в)         числа повинні бути непарними?
Розв'язання.  а) Першою цифрою числа може бути одна з 5 цифр 1, 2, 3, 4, 5 (0 не може бути, бо тоді число не чотиризначне); якщо перша цифра обрана, то друга може бути обрана 5 способами, третя – 4, четверта – 3. Згідно з правилом множення загальне число способів дорівнює 5∙5∙4∙3 = 300.

б)        Першою цифрою може бути одна з цифр 1, 2, 3, 4, 5 (5 можливостей), для кожної з наступних цифр маємо 6 мож­ливостей (0, 1,2,3, 4, 5). Отже, число шуканих чисел дорів­нює 5∙6∙6∙6=5∙ 63 = 1080.

в)         Першою цифрою може бути одна з цифр 1, 2, 3, 4, 5, а останньою – одна з цифр 1,3,5, (числа повинні бути не­парними). Отже, загальна кількість чисел дорівнює 5663 = 540.

 

Для того щоб добре засвоїти основне правило комбінато­рики, обов'язково треба розв'язати подані нижче вправи.

 

Вправи

4. Скільки існує п’ятицифрових чисел, для запису яких використовуються тільки цифри: а) 1, 2, 3, 4  б) 0, 1, 2, 3?( Кожна цифра може бути використана декілька разів). Відповідь: а)45 , б) 3∙44.

 5.На вершину гори веде 7 доріг. Скількома способами турист може піднятись на гору і спуститись з неї? Дайте відповідь на те ж саме запи­тання, якщо підняття і спуск відбуваються різними шляхами. Відповідь: 49 способи, 42 способи.

 6.В наряд можна послати трьох чоловік, одного із п’яти офіцерів, одного із семи сержантів і одного із 20 солдат. Скількома способами можна скласти наряд?

Відповідь: 20∙7∙5.

 7. а)Скільки тризначних чисел можна утворити з цифр 1, 2, 3, 4, 5? Відповідь: 35.

В наряд можна послати двох чоловік, одного із трьох сержантів і одного із 6 солдат. б)Скількома способами можна скласти наряд? Відповідь: 3∙6 =18.

 8.Скільки різних дільників має число 35∙54? Відповідь: (5+1)∙(4+1) = 30. Скласти таблицю всіх дільників.

 9. Скільки тризначних чисел можна утворити з цифр 1, 2, 3, 4, 5, якщо кожну з цих цифр можна використовувати не більше одного разу? Відповідь: 5∙4∙3.

 10. Скількома способами 7 осіб можуть розташуватись в чергу до каси? Відповідь: 7∙6∙8∙5∙4∙3∙2∙1.

 11. В класі вивчають 14 предметів. В понеділок 7 уроків, причому всі уроки різні. Скількома способами можна скласти розклад на понеділок?

12. Скільки є п'ятицифрових чисел, які діляться на 5?

 13. П'ять хлопчиків і 5 дівчаток сідають в ряд на 10 розташованих поруч стільців, причому хлопчики сідають на місця з непарними номера­ми, а дівчатка – на місця з парними номерами. Скількома способами це можна  зробити? Відповідь: (5!)∙(5!)

 14. Скільки різних слів можна утворити переставлянням букв у слові «математика»? Відповідь: 10!/(3!∙2!∙2!)

15.Автомобільні номери складаються з однієї, двох або трьох букв і чотирьох цифр. Знайти число таких номерів, використовуючи 33 букви алфавіту.

 16. В селищі мешкає 1500 жителів. Довести, що принаймні два з них мають однакові  ініціали.

 17. Скільки різних дільників має число 66∙74?

18. Скільки тризначних чисел можна утворити з цифр 1, 2, 3, 4, 5, якщо кожну з цих цифр можна використовувати не більше одного разу? Відповідь: 5∙4∙3.

Скількома способами 7 осіб можуть розташуватись в чергу до каси? Відповідь: 7∙6∙8∙5∙4∙3∙2∙1.

 19. В класі вивчають 10 предметів. В понеділок 6 уроків, причому всі

уроки різні. Скількома способами можна скласти розклад на понеділок?

Скільки є п'ятизначних чисел, які діляться на 5? Відповідь: 10∙9∙8∙7∙6∙5= 151200

 20. П'ять хлопчиків і 5 дівчаток сідають в ряд не 10 розташованих поруч стільців, причому хлопчики сідають на місця з непарними номера­ми, а дівчатка – на місця з парними номерами. Скількома способами це можна  зробити? Відповідь: (5!)∙(5!)

 21. Скільки різних слів можна утворити переставлянням букв у слові «арифметика»?

 22. Автомобільні номери складаються з однієї, двох або трьох букв і чотирьох цифр. Знайти число таких номерів, використовуючи 30 букви алфавіту.

 23. Скільки різних дільників має число 83∙94? Скласти таблицю всіх дільників цього числа.

 24. Від А до В 999 км. Вздовж дороги стоять стовпи, на яких вказано відстані до А і до В | 0.999 | ; | 1.998| ; | 2.997] ; . . . ; | 999.0 |. Скільки серед них таких, на яких є тільки дві різні цифри? Відповідь: 40.

 25. Пасажир залишив речі в автоматичній камері схову, а коли при­йшов одержувати речі, то виявилось, що він забув номер. Він лише па­м'ятає, що в номері були цифри 23 і 37. Щоб відкрити камеру, треба пра­вильно набрати п'ятизначний номер. Яку найбільшу кількість номерів треба перебрати, щоб відкрити камеру?

 25. В прямокутній таблиці з m рядків і n стовпців записані числа +1 і -1 так, що добуток чисел в кожному рядку і кожному стовпці дорівнює 1. Скількома способами це можна зробити?

Відповідь: Всі таблиці, які мають вказану в умові задачі властивість, можна скласти так. Всюди, крім останнього рядка і останнього стовпця, до­вільно виписуємо +1 і –1. Це можна зробити 2(n-1)(m-1) способами. Нехай р – добуток всіх виписаних чисел. Тепер в кожному з перших m -1  рядів на перетині з n-м стовпцем виписуємо +1 або –1 так, щоб добуток чисел в усьому рядку дорівнював 1. Позначимо добуток чисел, які будуть виписані в n-му рядку, через x. Тепер в кожному з перших n-1 стовпців на перетині з m-м рядком випишемо теж +1 або –1 тaк, щоб добуток в стовпці дорівнював 1. Добуток чисел, які будуть виписані в m-му рядку, позначимо через у. Зауважимо, що х і у мають однаковий знак. Справді, рх = 1, ру = 1. і тому р2ху = 1, і, значить, ху > 0. Випишемо на перетині т-го рядка і л-го стовпця 1 з тим знаком, який мають х і у. Тоді добуток чисел в n-му стовпці і m-му рядку також до­рівнюватиме 1. Склали таблицю, яка має вказану властивість. Число всіх  таких   таблиць   дорівнює  2(n-1)(m-1).

26. На залізниці є десять семафорів, кожний з яких може передати три сигнали: червоний, жовтий, зелений. Скільки різних сигналів можна передати за допомогою усіх семафорів. Відповідь: 310.

27. Існує десять ліхтариків, кожен з яких може бути або включений, або виключений.Скільки різних сигналів можна передати за допомогою усіх ліхтарів? Відповідь: 210.

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

Відповідь: На другу горизонталь шашка може перейти одним способом, на третю – двома, на четверту – трьома, на п’яту – шістьма, на шосту – дев’ятьма, на сьому горизонталь – двадцятьма способами, а пройти в дамки шашка може 35 способами.

 29. У квадраті 3х3 клітинки верхня ліва точка позначена літерою А. Скільки можна побудувати трикутників, одною з вершин яких є точка А, а дві інші вершини – будь-які вершини квадратиків 1х1 даного квадрата? Відповідь: 25 трикутників.

 

 

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

 

Завдання 1. Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження кількості натуральних чисел, які не діляться на n, на m, на p на проміжку (q, h)') в залежності від введених натуральних чисел  km, n, p, h, q.

Реалізація.

import random

print('Алгоритм пошуку кількості натуральних чисел, які не діляться на n, на m, на p на проміжку (q, h)')

h=random.randint(2,500); print(' Нижня межа для проміжку чисел h=',h)

q=random.randint(500,1000); print('Верхня межа для проміжку чисел q=',q)

n=random.randint(2,9); print(' Перший дільник n=',n)

m=random.randint(10,19); print('Другий дільник m=',m)

p=random.randint(20,30); print(' Третій дільник p=',p)

w=0

for k in range(h,q):

    if not((k%n==0)or(k%m==0)or(k%p==0)):

        w+=1

print('Кількість чисел із ',q-h,' натуральних чисел на проміжку (',h,'; ', q,')')

print('які не діляться або на ',n,' або на ',m, ' або на ',p,' дорівнює', w)

v=0

for k in range(h,q):

    if (k%n==0)or(k%m==0)or(k%p==0):

        v+=1

print('Кількість чисел із ',q-h,' натуральних чисел на проміжку (',h,'; ', q,')')

print('які  діляться або на ',n,' або на ',m, ' або на ',p,' дорівнює', v)

a=[s for s in range(h,q) if ((s%n==0)or(s%m==0)or(s%p==0))]

print('Перелік натуральних чисел, які  діляться або на ',n,' або на ',m, ' або на ',p,' дорівнює',a)

 

Завдання 2. Якщо б школяр купив  k зошитів, то в нього залишилось  р гривень.  Якщо б школяр купив  k+4 зошитів, то в нього  не вистачило   q гривень.  Скільки грошей було у школяра?  Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження кількості грошей у школяра, в залежності від введених натуральних чисел  kpq.

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

X= 0,25*k*(p+q)+ p  гривень  у школяра

Реалізація.

import random

k=random.randint(1,999)

p=random.randint(1,25)

q=random.randint(1,50)

print('Кількість куплених зошитів k=',k, ' тоді залишок гривень', p)

print('Кількість куплених зошитів k+4=',k+4,'тоді недостаток гривень', q)

X=0.25*k*(p+q)+p

print('Вартість одного зошита ', (X-p)/k, 'гривень')

print('Кількість наявних гривень у хлопчика:', X)

 

Завдання 3.  Два рябих поросят та три полосатих  просят разом важать m  кг. А різниця у вазі між такою  ж кількістю поросят   k кг. Скільки важить окремо  рябе поросятко та окремо полосате порося, якщо два рябих поросят мають однакову вагу, і троє полосатих поросят мають однакову вагу?  Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження ваги чорного та білого поросят, в залежності від введених натуральних чисел  km.

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

X= 0,25*(m-k) кг – вага рябого  порося

У= 0,5*(m+k/3 кг – вага  полосатого порося

Реалізація.

import random

k=random.randint(35,48)

m=random.randint(2,6)

print('Разом вага 2х +3у  для 5-ти  поросят ', k)

print('Різниця |2х -3у | у вазі поросят ', m)

print('X= 0,5*(k-m) кг – вага рябого порося =', 0.25*(k-m))

print('У= 0,5*(m+k) кг – вага полосатого порося=', 0.5*(m+k)//3 )

 

Завдання 4. За один і той самий час велосипедист долає 1/частину шляху, а другий велосипедист долає  1/k  частину того самого шляху.  Різниця між пройденими відстанями дорівює n км.  Який шлях повинен проїхати  велосипедист?  Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження довжини  усього шляху, в залежності від введених натуральних чисел  km, n.

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

Sn*m*k/(m-k) км – весь шлях велосипедиста

Реалізація.

import random

k=random.randint(4,7)

m=random.randint(7,9)

n=random.randint(3,5)

print('Частина шляху 1-ого велосипедиста =', k)

print('Частина шляху 2-ого велосипедиста = ', m)

print('Різниця пройденого шляху між 1-им та 2-им велосипедистами = ', n)

print('S= n*m*k/(m-k) км – весь шлях велосипедиста =', n*m*k//abs(m-k))

print('Швидкість 1-го велосипедиста =', (n*m*k//abs(m-k))/k)

print('Швидкість 2-го велосипедиста =', (n*m*k//abs(m-k))/m)

 

Завдання 5. За 4 смартфони бізнесмен заплатив  електронною карткою. Усі чотири смартфони без першого  коштують тис. гривень.  Усі чотири смартфони без другого  коштують  n тис. гривень.

Усі чотири смартфони без третього  коштують  k тис. гривень.  Усі чотири смартфони без четвертого  коштують  р тис. гривень.  Скільки коштували всі чотири смартфони. Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження вартості усіх чотирьох смартфонів разом, в залежності від введених натуральних чисел  km, n, p.

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

S=(m+n+k+p)/3  тис. грн вартість усіх чотирьох смартфонів разом

Реалізація.

import random

k=random.randint(36,57)

m=random.randint(37,58)

n=random.randint(39,59)

p=random.randint(34,54)

print('S=(m+n+k+p)/3  тис. грн вартість усіх чотирьох смартфонів разом=', (m+n+k+p)//3,'тис. грн ' )

print('Вартість 1-го смартфона =', ((m+n+k+p)//3)-k,'тис. грн ' )

print('Вартість 2-го смартфона =', ((m+n+k+p)//3)-m,'тис. грн ' )

print('Вартість 3-го смартфона =', ((m+n+k+p)//3)-n,'тис. грн ' )

print('Вартість 4-го смартфона =', ((m+n+k+p)//3)-p,'тис. грн ' )

 

Завдання 6. У шаховому турнірі приймають участь k осіб. Кожний з кожним зіграв по  n партії. Скільки усіх зіграних шахових партій на турнірі? Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження кількості усіх зігранних шахових партій, в залежності від введених натуральних чисел  k.

 

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

M=0,5*n*k(k-1)  шахових партій,

Реалізація.

import random

k=random.randint(10,15)

n=random.randint(1,3)

print('Кількість шахматистів =',  k,'осіб' )

print('Кількість партій між двома шахматистами =',  n,'партій  гри в шахи' )

print('Кількість усіх шахових партій, зіграних усіма учасниками в турнірі=', n*k*(k-1)//2 ,'шахових партій' )

print('Кількість усіх шахових партій, зіграних одним учасником в турнірі=', n*(k-1) ,'шахових партій' )

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

Математична модель. Використаємо попарне  множення списків простих чисел  A=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]    та  B=[2, 3, 5, 7, 11,]

Реалізація.

print('Алгоритм пошуку кількості двоцифрових чисел, які записуються добутком двох простих чисел')

A=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

B=[2, 3, 5, 7, 11,13]

C=[]

w=0

for k in range(len(A)):

    for m in range(len(B)):

        d=A[k]*B[m]

        if d<100:

            w+=1

            C.append(d)

print('Кількість 1-цифрових та 2-цифрових чисел, що є добутком двох простих чисел w=', w)

print('Список таких чисел С=',C)         

C.sort()

print('Список таких чисел з повтореннями С=',C)

for k in range(len(A)):

    if C[k]==C[k+1]:

        del C[k+1]

print('Список таких чисел  без повторень С=',C)

print('Кількість двоцифрових чисел, які записуються добутком двох простих чисел w=', len(C)-3)

 

Завдання 8. Уявіть собі, що ви купили 44 зошити, серед цих зошитів деякі кошутують по 4 грн, деякі коштують по 5 грн, а деякі коштують по 10 грн. Відомо, що ви заплатили за зошити кожного виду однакову суму грошей. Скільки зошитів кожного виду ви купили. Скласти алгоритм пошуку. Створити, реалізувати, протестувати мовою програмування Python3  в середовищі програмування Thonny алгоритм для знаходження кількості зошитів кожного виду, якщо вхідні дані генеруються випадковим чином.

Математична модель. Якщо скласти рівняння x+y+z=44, тоді  виконуються такі три умови 4х=5у=10z Якщо х=1,25у; z= 0,5y, тоді рівняння x+y+z=44  матиме такий вигляд:  1,25у+у+ 0,5y =44; або 2,75у=44; або у=44:2,75; у=16. Отже зошитів, що коштують по 5 грн 16 штук.  16*5=80 грн вартість усіх зошитів одного виду. Таким чином 80:4=20 зошитів вартістю по 4 грн,  80:10=8 зошитів вартістю по 10 грн.

Реалізація.

import random

a=4*random.randint(3,6); print('Вартість 1-ого виду зошита a=',a,'гривень')

b=5*random.randint(6,10); print('Вартість 2-ого виду зошита b=',b, 'гривень')

c=10*random.randint(11,20); print('Вартість 3-ого виду зошита с=',c,'гривень')

w=random.randint(100,800);  print('Кількість усіх зошитів  w=x+y+z=',w)

k=b/a; m=b/c;

y=float(w/((b/a)+(b/c)+1));

v=float(y*b); x=float(v/a); z=float(v/c)

print('Кількість зошитів вартістю',a,'  грн це число:  x=',int(x));

print('Кількість зошитів вартістю',b,'  грн це число: y=',int(y));

print('Кількість зошитів вартістю',c,'  грн це число: z=',int(z))

print('Вартість усіх зошитів  одного виду це число: v=',int(v))

print('Вартість',w,' зошитів  усіх видів це число: s=',int(v*3))

print('Кількість  усіх зошитів це число: x+y+z=',x+y+z)

print('перевірка на правильність для знайденого числа x+y+z=',x+y+z)

p=x+y+z;     print('Порівняння цін за 1-ий вид зошитів m1=', a*x, 'гривень')

print('Порівняння цін за 2-ий вид зошитів m2=', b*y, 'гривень')

print('Порівняння цін за 3-ий вид зошитів m3=', c*z, 'гривень')

if w==int(p):

    print('отже, правильна відповідь')

else:

    print('отже, це неправильна відповідь')

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

Математична модель. Якщо скласти рівняння (С//k)-m=n , тоді  число С має вигляд С=(n+m)/k .  Це зроблено для того, щоб отримати натуральне задумане число, а не дробове задумане число.

Реалізація.

import random

a=random.randint(20,400);     m=random.randint(402,1000);    k=random.randint(600,999);

m=k*a;     print(' k=',k);     print(' m=',m);     n=(a-20)*m;      print(' n=',n)

print('алгоритм пошуку задуманого натурального числа с, якщо відомо, що (c//',k,')-',m,'=',n)

y=n+m;  print('результат оберненої дії до дії  множення на',m,' тоді y=',n,'+',m,'=',y)

c=y*k;  print('результат оберненої дії до дії віднімання',k,' тоді с=',y,'*',k,'=',c)

print('задумане число с=',c);

print('перевірка на правильність для знайденого числа',c)

z=(c//k)-m

if n==z:

    print('отже, правильна відповідь',c)

else:

    print('отже  ',c,'- це неправильна відповідь')

 

 

Завдання 10. Закодувати двовимірний масив  розміром 4х4 на дробових випадкових різнознакових числах  мовою програмування Python3  у середовищі програмування Thonny  у вигляді вкладених чотирьох списків в один список і знайти суму усіх додатних елементів для створеного масиву.

Реалізація.

import random      # імпорт модуля генерування випадкових чисел

a = []               # створюємо порожній списки для утворення  списку

b = []             # створюємо порожній списки для утворення  списку

for i in range(4):         #цикл з лічильником по кількості рядків, їх 4

      for j in range(4):         #цикл з лічильником по кількості стовпців, їх 4

            # додаємо згенеровані випадковим чином елементи до списку a

            a.append(round(random.uniform(-10, 10), 1))

      b.append(a[-4:])      # формуємо масив, вкладаємо список а у список b

s = 0        # вводимо змінну s для обчислення суми додатних елементів

for i in range(4):                #цикл з лічильником по кількості рядків, їх 4

      for j in range(4):         #цикл з лічильником по кількості стовпців, їх 4

            if b[i][j] > 0:          #перевірка умови додатности елемента масиву

                s += b[i][j]         # знаходимо суми відібраних елементів

print(b)                        # виводимо масив розміром 4х4, як списки у списку

print(round(s, 1))               # виводимо результат суми

 

Протестувати даний алгоритм, якщо генератор випадкових чисел  має вигляд:

1)a.append(round(random.gauss(-100, 100), 2))

2)a.append(round((i-j)*random.betavariate(2, 3), 3))

3) a.append(((-1)**(i+j))*round(random.gammavariate(6, 3), 4))

 

 

 

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

Реалізація.

import random      # імпорт модуля генерування випадкових чисел

z = []               # створюємо порожній списки для утворення  списку

w = []             # створюємо порожній списки для утворення  списку

for k in range(3):         #цикл з лічильником по кількості рядків, їх 3

      for m in range(3):         #цикл з лічильником по кількості стовпців, їх 3

            # додаємо згенеровані випадковим чином елементи до списку z

           z.append(int((-100)**(m-k)*round(random.weibullvariate(-7,8), 0)))

      w.append(z[-3:])      # формуємо, тобто вкладаємо список z у список  w

s = 0;n=0        # вводимо змінну s для обчислення суми  недодатних елементів

for k in range(3):                #цикл з лічильником по кількості рядків, їх 3

      for m in range(3):         #цикл з лічильником по кількості стовпців, їх 3

            if (w[k][m]<=0)and(w[k][m]%2==0):  #перевірка умови парності елемента

                   n+=1       #знаходимо кількість парних елементів       

            if k==m:         #перевірка умови діагональності елемента

                 s+=w[k][m];         # знаходимо суми відібраних елементів

print('Елементи масиву розміром 3х3 =',w);            

print('Сума діагональних елементів у масиві',s);

print('Кількість парних недодатних елементів у масиві',n)

 

Протестувати даний алгоритм, якщо генератор випадкових чисел має вигляд:

1) z.append(int((-1000)**(m-k)*round(random.lognormvariate(5, 3), 0)))

2) z.append(int((-1000)**(m-k)*round(random.randint(-5, 3), 0)))

3) z.append(int((-1000)**(m-k)*round(random.weibullvariate(-9,10), 0)))

4) z.append(int((-1000)**(m-k)*round(random.paretovariate(20), 0)))

 

 

Завдання 12. Закодувати двовимірний масив  розміром 3х4 на  цілих випадкових різнознакових числах мовою програмування Python3  у середовищі програмування Thonny  у вигляді вкладених трьох списків, що мають 4 елементи, в один список, що має 3 елементи і  замінити кожний елемент у створеному масиві  на два числа у вигляді (m, n), де m - перше число, - це ціла частина від ділення цього елемента на 3, а n- друге число, - це відповідно остача від ділення цього елемента на 3.

 

Реалізація.

 

import random      # імпорт модуля генерування випадкових чисел

p=[]               # створюємо порожній списки для утворення  списку

h=[]             # створюємо порожній списки для утворення  списку

g=[]

for k in range(3):         #цикл з лічильником по кількості рядків, їх 3

      for m in range(4):         #цикл з лічильником по кількості стовпців, їх 5

            # додаємо згенеровані випадковим чином елементи до списку a

           p.append(int((-1000)**(m-k)*round(random.paretovariate(10), 0)))

      h.append(p[-4:])

      g.append(p[-4:])    # формуємо, тобто вкладаємо список а у списку b

print('Елементи масиву розміром 3х4 =',h);

for m in range(3):                #цикл з лічильником по кількості рядків, їх 3

      for k in range(4):         #цикл з лічильником по кількості стовпців, їх 5

            g[m][k]=divmod(h[m][k],3)

print('Елементи зміненого масиву розміром 3х4 за критерієм парності=',g)

 

Протестувати даний алгоритм, якщо генератор випадкових чисел має вигляд:

1)p.append(int((-1000)**(m-k)*round(random.lognormvariate(5, 3), 0)))

2) p.append(int((-1000)**(m-k)*round(random.randint(-5, 3), 0)))

3) p.append(int((-1000)**(m-k)*round(random.weibullvariate(-9,10), 0)))

4) p.append(int((-1000)**(m-k)*round(random.paretovariate(10), 0)))

 

Завдання 13.  Разом вага чотирьох заповнених контейнерів складає  m тон.  Вантаж для чотирьох контейнерів розподіляються у відношенні  p:g:k:n. Яка вага  кожного  заповненого контейнера? Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження ваги кожного контейнера, в залежності від введених натуральних чисел  p, g, k, n, m.

Математична модель завдання 12: Маємо формули для знаходження ваги кожного контейнера

1)p*m/(p+g+n+k) тонн вага 1-ого контейнера

2)g*m/(p+g+n+k) тонн вага 2-oго контейнера

3)m*k/(p+g+n+k) тонн вага 3-ого контейнера

4)m*n/(p+g+n+k) тонн вага  4-oго контейнера

Реалізація.

Маючи математичну модель  створити алгоритм самостійно.

 

Завдання 14.   У Вінницю приїхало  m туристів. З них  k туристів не знають жодної іноземної мови,окрім англійської.  Розмовляють німецькою мовою n туристів. Розмовляють французькою мовою p туристів. Скільки серед туристів осіб, що знають дві мови: німецьку та французьку? Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для знаходження кількості двомовних туристів, в залежності від введених натуральних чисел  p, k, n, m.

Математична модель завдання 13: Для  знаходжекння кількості двомовних туристів маємо формулу: Х=n+p-m+k.

Реалізація.

Маючи математичну модель  створити алгоритм самостійно.

 

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

                            ***********

Практична робота для другого уроку


Алгоритми мовою Python  для знаходження розв’язків нелінійних рівнянь з двома змінними в цілих числах.

 

 

 

 

Завдання 1. Створити та реалізувати мовою програмування Python  в середовищі програмування Thonny алгоритм для знаходження двійок цілих чисел, що задовольняють нелінійне рівняння з двома змінними: 6x2-23xy+20y2+43x-83y +77=0.

Моделювання алгоритму.

Проаналізуємо математичну модель даного рівняння для  створення алгоритму.

Знайдемо аналітично розв’язки даного рівняння в цілих числах

6x2-23xy+20y2+43x-83y +77=0

Розкладаємо на множники способом групування:

(2x-5y+7)(3x-4y+11)=0

Таким чином, прирівнявши кожний множник до нуля,

отримуємо два лінійних рівняння в цілих числах:

2x-5y+7=0

3x-4y+11=0.

Отже, для рівняння 2x-5y+7=0 маємо такі цілі розв’язки:

х1=14-5k,  у1=7-2k,   де k, - цілі числа. 

для рівняння 3x-4y+11=0  маємо такі цілі розв’язки:

х2=11-4m,  у2= 11-3m,   де m, - цілі числа.

  Тобто цілі розв’язки рівняння - це пара двійок цілих чисел:

(х1; у1) =(14-5k,  7-2k),  де k, - цілі числа 

(х2; у2) =(11-4m ; 11-3m),   де m - цілі числа 

 

Реалізація алгоритму.

 

print('Алгоритм пошуку цілих pозвязків нелінійного рівняння 6x^2-23xy+20y^2+43x-83y +77=0')

p=4; t=8;

w=['None']*p; v=['None']*p; f=['None']*p; h=['None']*p;

n=0

for i in range(p):

    for k in range(1,t):

        for m in range(1,t):

            n=n+1

            v[i]=14-5*k    #x1

            f[i]=7-2*k    #y1

            w[i]=11-4*m  #x2

            h[i]=11-3*m    #y2

            print(n,' -a 1-двійка чисел, що є розвязком рівняння 6x^2-23xy+20y^2+43x-83y +77=0, (x1,y1)=(', v[i],'; ',f[i], ')')

            print(n,' -a 2-двійка чисел, що є розвязком рівняння 6x^2-23xy+20y^2+43x-83y +77=0, (x2,y2)=(',w[i],'; ',h[i],')')

 

Протестувати програму декілька разів:

Тест1. Якщо t=5; p=5;  

Тест2. Якщо t=7; p=7;  

Тест3. Якщо t=6; p=9 

 

 

Завдання 2. Створити та реалізувати мовою програмування Python  в середовищі програмування Thonny алгоритм для знаходження двійок цілих чисел, що задовольняють нелінійне рівняння з двома змінними: 6x2-51xy+108y2+27x-111y +21=0

 

Моделювання алгоритму.

Проаналізуємо математичну модель даного рівняння для  створення алгоритму.

Знайдемо аналітично розв’язки даного рівняння в цілих числах

6x2-51xy+108y2+27x-111y +21=0

Розкладаємо на множники способом групування:

 (2x-9y+7)(3x-12y+3)=0.

Отримуємо два лінійних рівняння в цілих числах:

2x-9y+7=0

3x-12y+3=0

Отже, прирівнявши кожний множник до нуля,

для рівняння 2x-9y+7=0 маємо такі цілі розв’язки:

тоді х1=28-9k,  у1=7-2k,   де k, - цілі числа;

для рівняння 3x-12y+3=0 маємо такі цілі розв’язки:

х2=-1-4m,  у2= -m,   де m, - цілі числа.

  Тобто цілі розв’язки рівняння - це пара двійок цілих чисел:

(х1; у1) =(28-9k,  7-2k),  де k, - цілі числа 

(х2; у2) =(-1-4m, - m),   де m - цілі числа 

 

Реалізація алгоритму.

 

print('Алгоритм пошуку цілих pозвязків нелінійного рівняння 6x^2-51xy+108y^2+27x-111y +21=0')

p=4; t=4;

w=['None']*p; v=['None']*p; f=['None']*p; h=['None']*p;

n=0

for i in range(p):

    for k in range(1,t):

        for m in range(1,t):

            n=n+1

            v[i]=28-9*k   #x1

            f[i]=7-2*k    #y1

            w[i]=-1-4*m  #x2

            h[i]=-m    #y2

            print(n,' -a 1-двійка чисел, що є розвязком рівняння 6x^2-51xy+108y^2+27x-111y +21=0, (x1,y1)=(', v[i],'; ',f[i], ')')

            print(n,' -a 2-двійка чисел, що є розвязком рівняння 6x^2-51xy+108y^2+27x-111y +21=0, (x2,y2)=(',w[i],'; ',h[i],')')

 

Протестувати програму декілька разів:

Тест1. Якщо t=5; k=6;  

Тест2. Якщо t=7; k=9;  

Тест3. Якщо t=8; k=7  

 

 

Завдання 3. Створити та реалізувати мовою програмування Python  в середовищі програмування Thonny алгоритм для знаходження двійок цілих чисел, що задовольняють нелінійне рівняння з двома змінними: 28x2 -140yх + 168y2 =0.

 

Моделювання алгоритму.

Проаналізуємо математичну модель даного рівняння для  створення алгоритму.

Знайдемо аналітично розв’язки даного рівняння в цілих числах

А)28x2 -140yх + 168y2 =0

Розкладаємо на множники способом групування:

28(x-2y)(x-3y)=0;

(x-2y)(x-3y)=0.

Отже, прирівнявши кожний множник до нуля,

 отримаємо такі два цілі розв’язки:  х1= 3у1,    х2=2у2   

Тобто розв’язки рівняння - це пара двійок цілих чисел:

1; у1) =(3k,  k),  де k, - цілі числа 

2; у2) =(2m,  m),   де m - цілі числа 

 Узагальнення:

Знайти розв’язки рівняння в цілих числах

ax2 + byх + cy2 = 0

а(х ‒ k1y) (х ‒ k2y)=0

Якщо b2 ‒ 4acневід’ємний,  то ax2 + byх + cy2 = а(х ‒ k1y) (х ‒ k2y),

де k1, k2 ‒ корені квадратного рівняння  ak2 + bk + c = 0.

 

Тобто цілі розв’язки рівняння 

ax2 + byх + cy2 = а(х ‒ k1y) (х ‒ k2y)=0, -

 це пара двійок цілих чисел:

 (k1т,  m),   (k2n,  n),   

де k1, k2 ‒ цілі корені квадратного рівняння  ak2 + bk + c = 0.

n, m - цілі числа 

 

Реалізація алгоритму.

 

print('Алгоритм пошуку цілих pозвязків нелінійного рівняння 28x^2-140yх+168y^2=0')

p=4; t=4;

w=['None']*p; v=['None']*p; f=['None']*p; h=['None']*p;

n=0

for i in range(p):

    for k in range(1,t):

        for m in range(1,t):

            n=n+1

            v[i]=3*k   #x1

            f[i]=k    #y1

            w[i]=2*m  #x2

            h[i]=m    #y2

            print(n,' -a 1-двійка чисел, що є розвязком рівняння 28x^2-140yх+168y^2=0, (x1,y1)=(', v[i],'; ',f[i], ')')

            print(n,' -a 2-двійка чисел, що є розвязком рівняння 28x^2-140yх+168y^2=0, (x2,y2)=(',w[i],'; ',h[i],')')

 

 

Протестувати програму декілька разів:

Тест1. Якщо t=5; k=5;  

Тест2. Якщо t=7; k=8;  

Тест3. Якщо t=6; k=10  

 

Завдання 4. Створити та реалізувати мовою програмування Python  в середовищі програмування Thonny алгоритм для знаходження двійок цілих чисел, що задовольняють нелінійне рівняння з двома змінними: 6x2 -51yх + 108y2 =0.

Моделювання алгоритму.

Проаналізуємо математичну модель даного рівняння для  створення алгоритму.

Знайдемо аналітично розв’язки даного рівняння в цілих числах

6x2 -51yх + 108y2 =0

Розкладаємо на множники способом групування:

(2x-9y)(3x-12y)=0

Отже, прирівнявши кожний множник до нуля,

отримаємо такі два цілі розв’язки:

 х1= 9ny1=2n, n - цілі числа

 та

х2=4у2.

Тобто цілі розв’язки рівняння - це пара двійок цілих чисел:

(х1; у1) = (9k,  2k),  k,  - цілі числа 

(х2; у2) = (4mm),   m - цілі числа 

 

Реалізація алгоритму.

 

print('Алгоритм пошуку цілих pозвязків нелінійного рівняння 6x^2 -51yх + 108y^2 =0')

p=4; t=10;

w=['None']*p; v=['None']*p; f=['None']*p; h=['None']*p;

n=0

for i in range(p):

    for k in range(1,t):

        for m in range(1,t):

            n=n+1

            v[i]=9*k   #x1

            f[i]=2*k    #y1

            w[i]=4*m  #x2

            h[i]=m    #y2

            print(n,' -a 1-двійка чисел, що є розвязком рівняння 6x^2 -51yх + 108y^2 =0, (x1,y1)=(', v[i],'; ',f[i], ')')

            print(n,' -a 2-двійка чисел, що є розвязком рівняння 6x^2 -51yх + 108y^2 =0, (x2,y2)=(',w[i],'; ',h[i],')')

 

 

Протестувати програму декілька разів:

Тест1. Якщо t=5; k=8;  

Тест2. Якщо t=7; k=6;  

Тест3. Якщо t=6; k=5  

 

Завдання 5. Створити та реалізувати мовою програмування Python  в середовищі програмування Thonny алгоритм для знаходження двійок цілих чисел, що задовольняють нелінійне рівняння з двома змінними: 48x2-86xy+70y2+94x-88y +45=0.

 

Моделювання алгоритму.

Проаналізуємо математичну модель даного рівняння для  створення алгоритму.

Знайдемо аналітично розв’язки даного рівняння в цілих числах

48x2-86xy+35y2+94x-88y +45=0.

Розкладаємо на множники способом групування:

(6x-7y+5)(8x-5y+9)=0

Таким чином, прирівнявши кожний множник до нуля,

отримуємо два лінійних рівняння в цілих числах:

6x-7y+5=0

8x-5y+9=0

Отже, для рівняння 6x-7y+5=0 маємо такі цілі розв’язки:

х1=5-7k,  у1=5-6k,   де k, - цілі числа. 

для рівняння 8x-5y+9=0  маємо такі цілі розв’язки:

х2=-18-5m,  у2= -27-8m,   де m, - цілі числа.

  Тобто цілі розв’язки рівняння - це пара двійок цілих чисел:

(х1; у1) =(5-7k,  5-6k),  де k, - цілі числа 

(х2; у2) =(-18-5m; -27-8m ),  де m - цілі числа 

 

Реалізація алгоритму.

 

print('Алгоритм пошуку цілих pозвязків нелінійного рівняння 48x^2-86xy+35y^2+94x-88y +45=0.')

p=4; t=3;

w=['None']*p; v=['None']*p; f=['None']*p; h=['None']*p;

n=0

for i in range(p):

    for k in range(1,t):

        for m in range(1,t):

            n=n+1

            v[i]=5-7*k   #x1

            f[i]=5-6*k    #y1

            w[i]=-18-5*m   #x2

            h[i]=-27-8*m    #y2

            print(n,' -a 1-двійка чисел, що є розвязком рівняння 48x^2-86xy+35y^2+94x-88y +45=0., (x1,y1)=(', v[i],'; ',f[i], ')')

            print(n,' -a 2-двійка чисел, що є розвязком рівняння 48x^2-86xy+35y^2+94x-88y +45=0., (x2,y2)=(',w[i],'; ',h[i],')')

 

Протестувати програму декілька разів:

Тест1. Якщо t=5; k=8;  

Тест2. Якщо t=7; k=6;  

Тест3. Якщо t=6; k=11  

 

 

Завдання 6. Створити та реалізувати мовою програмування Python  в середовищі програмування Thonny алгоритм для знаходження двійок цілих чисел, що задовольняють нелінійне рівняння з двома змінними: 8x2+2xy-15y2+50x-24y +63=0.

 

Моделювання алгоритму.

Проаналізуємо математичну модель даного рівняння для  створення алгоритму.

Знайдемо аналітично розв’язки даного рівняння в цілих числах

8x2+2xy-15y2+50x-24y +63=0.

Розкладаємо на множники способом групування:

(-2x-3y-9)(-4x+5y-7)=0

Таким чином, прирівнявши кожний множник до нуля,

отримуємо два лінійних рівняння в цілих числах:

-2x-3y-9=0

-4x+5y-7=0

Отже, для рівняння -2x-3y-9=0 маємо такі цілі розв’язки:

х1=3k,  у1=-3-2k,   де k, - цілі числа. 

A для рівняння -4x+5y-7=0  маємо такі цілі розв’язки:

х2=2+5m,  у2=3+4m,   де m, - цілі числа.

  Тобто цілі розв’язки рівняння - це пара двійок цілих чисел:

(х1; у1) =(3k-3-2k),  де k, - цілі числа 

(х2; у2) =(2+5m; 3+4m),  де m - цілі числа. 

 

Реалізація алгоритму.

 

print('Алгоритм пошуку цілих pозвязків нелінійного рівняння 8x^2+2xy-15y^2+50x-24y+63=0.')

p=4; t=3;

w=['None']*p; v=['None']*p; f=['None']*p; h=['None']*p;

n=0

for i in range(p):

    for k in range(1,t):

        for m in range(1,t):

            n=n+1

            v[i]=3*k   #x1

            f[i]=-3-2*k    #y1

            w[i]=2+5*m   #x2

            h[i]=3+4*m    #y2

            print(n,' -a 1-двійка чисел, що є розвязком рівняння 8x^2+2xy-15y^2+50x-24y+63=0, (x1,y1)=(', v[i],'; ',f[i], ')')

            print(n,' -a 2-двійка чисел, що є розвязком рівняння 8x^2+2xy-15y^2+50x-24y+63=0, (x2,y2)=(',w[i],'; ',h[i],')')

 

Протестувати програму декілька разів:

Тест1. Якщо t=5; k=9;  

Тест2. Якщо t=7; k=10;  

Тест3. Якщо t=6; k=12. 

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

*****

Додаткові завдання на розвиток кмітливості






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

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