четвер, 9 грудня 2021 р.

13.12.2021-19.12.2021 Нелінійні алгоритми для списків

  

 

13.12.2021-19.12.2021

 

Тема: Нелінійні алгоритми для списків із числовими типами даних мовою Python3

 

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

 

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

Реалізація

print('Алгоритм 1 знаходження НСД для багатьох чисел')

import random

a1=[72+1152*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==2]

a=[144,1152,864,2016,66912,4704]; nsd=0; nsk=0; k=0; m=0;

def nsd(k,m):

    if k==0:

        nsd=m

        return nsd

    while m!=0:

        if k>m:

            k=k-m

        else:

            m=m-k

    nsd=k 

    return nsd

x=nsd(a[0],a[1])

print(1,'-ий krok  nsd=',x)

for n in range(2,6,1):

    y=x

    x=nsd(a[n],x)

    print(n,'-ий krok  nsd=',x)

print('Масив натуральних a=',a); print('НСД масиву чисел=',x)

 

Завдання 2. Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для поділу випадкового двоцифрового числа на дві частини у відношенні m:n, де m частин і n частин – це випадкові числа в межах від 3 до 23.

Реалізація

print('Алгоритм 2 знаходження поділу кожного числа масиву на частини у відношенні m:n')

import random

a1=[72+1152*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==2]

a=[144,1152,864,2016,66912,4704];

m=random.randint(3,23); n=24-m; ZAST1=0;ZAST2=0;

print('Масив натуральних a=',a) 

for j in range(0,6,1):

    ZAST1=a[j]*m/(m+n)

    ZAST2=a[j]*n/(m+n)

    print(n,'-ий krok Число a[',j,']=',a[j], 'поділено у відношенні',m,':',n,'отримаємо',ZAST1,':',ZAST2)

Завдання 3. Створити, реалізувати, протестувати алгоритм мовою програмування Python3 в середовищі програмування Thonny  для поділу випадкового трицифрового числа на три частини у відношенні k:m:n, де km і n  - випадкові числа в межах від 2 до 10.

Реалізація

print('Алгоритм 3 знаходження поділу кожного числа масиву на частини у відношенні k:m:n')

import random

a1=[72+1152*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==2]

a2=[k for k in range(100, -28,-1) if k%2==0] 

a=[144,1152,864,2016,66912,4704];

m=random.randint(2,10);   k=random.randint(2,10); n=11-m-k; ZAST1=0; ZAST2=0; ZAST3=0;

print('Масив натуральних a=',a) 

for j in range(0,6,1):

    ZAST1=a[j]*k/(m+n+k)

    ZAST2=a[j]*m/(m+n+k)

    ZAST3=a[j]*n/(m+n+k)

    print(j,'-ий krok Число a[',j,']=',a[j], 'поділено у відношенні',k,':',m,':',n)

    print('отримаємо',round(ZAST1,6),':',round(ZAST2,6),':',round(ZAST3,6))

    print('*************')

Завдання 4. Створити, реалізувати, протестувати алгоритм для пошуку випадкового двоцифрового числа х,  яке було поділено на дві частини у відношенні m:n, де k і m  - випадкові числа в межах від 3 до 20, якщо відомо:  k частин становить а одиниць.

Реалізація

print('Алгоритм 4 знаходження пошуку кожного числа масиву за його частинами у відношенні k:m')

import random

a1=[72+1152*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==2]

a2=[k for k in range(100, -28,-1) if k%2==0] 

a=[144,1152,864,2016,6912,4704];

m=random.randint(1,5);   k=random.randint(2,5);  ZAST1=0;  ZAST2=0;

print('Масив натуральних чисел a=',a) 

for j in range(0,6,1):

    Zuslo=a[j]*(m+k)/(k)

    ZAST2=a[j]*(m)/(k)

    ZAST1=a[j]

    print(j,'-ий krok . Число a[',j,']=',Zuslo, 'поділено у відношенні',k,':',m)

    print('отримаємо',round(ZAST1,3),':',round(ZAST2,3))

    print('*************')

Завдання 5. Створити, реалізувати, протестувати алгоритм для пошуку кількості  спільних дільників для  m та n, де n і m  - випадкові числа/

Реалізація

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

import random; m=6912*random.randint(10,200); n=4704*random.randint(10,200);

m=6912;  n=4704; a=[]

print('Число m=',m); print('Число n=',n)  

max1=max(m,n)

for j in range(1,max1,1):

    if m%j==0:

       if n%j==0:

           h=j

           a.append(h)

           print('Для двох чисел n=',n,'m=',m,' cпільний дільник k=',j)

print('Cпільні дільники у вигляді списку a=',a)

print('Кiлькість спільних дільників k=',len(a))

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

Математична модель завдання 5 abc=100*a+10*b+c   i перевiрити умови a+b+c=14=5+9+0=4+1+9=3+2+9=2+3+9=…=7+6+1 та врахувати перестановки

Реалізація.

print('Алгоритм пошуку кількості  3-цифрових чисел з сумою цифр 14')

k=0

for a in range(1,10):

      for b in range(0,10):

          for c in range(0,10):

              if a+b+c==14:

                  k=k+1

                  print('Шукане 3-цифрове число з сумою цифр 14 =', 100*a+10*b+c) 

print('Kількість  3-цифрових чисел з сумою цифр 14 =', k) 

 

Завдання 7. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  складаються з: 1)парних чисел.

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

import random

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

print('***Простий спосіб, що є функцією списку list(range(k,m,n)) з лічильником')

Numer=list(range(-32, 32, 2))

print('Простенький список 3n-чисел in Numer=', Numer, type(Numer))

print('Перший спосіб, що використовує цикл з лічильником')

lst2n1=[m for m in range(-49, 102,2)]    # циклічний генератор для парних чисел

print('Перший список парних чисел у порядку зростання lst2n1=', lst2n1, type(lst2n1))

print('Другий спосіб, що використовує цикл з лічильником і розгалуження')

lst2n2=[k for k in range(100, -28,-1) if k%2==0]  # генератор для парних чисел

print('другий список парних чисел у порядку спадання lst2n2=', lst2n2, type(lst2n2))

print('Третій спосіб, що використовує  генератор випадкових цілих чисел')

lst2n3=[2*n*random.randint(22, 222)  for n in range(10, 0,-1) if n%2==0]

print('Третій список випадкових парних чисел  lst2n3=', lst2n3, type(lst2n3))

lst2n3.reverse()         зміна порядку чисел на протилежний

print('Змінений список у протилежному порядку  lst2n3=', lst2n3, type(lst2n3))

lst2n3.sort(reverse=True)   #  упорядкування  чисел  у порядку спадання

print('Змінений список  у порядку спадання lst2n3=', lst2n3, type(lst2n3))

lst2n3.sort()       упорядкування  чисел  у порядку зростання

print('Змінений список чисел у порядку зростання lst2n3=', lst2n3, type(lst2n3))

 

Протестуйте даний алгоритм декілька разів для: 1) lst2n1=[m for m in range(2, 102,2)];

2) lst2n2=[k for k in range(100, -28,-1) if k%4==2]

3) lst2n3=[6*n*random.randint(22, 222)  for n in range(30, -28,-1) if n%10==2]

 

Завдання 8. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  складаються з: 1)непарних чисел; 3) чисел кратних 3; 4) чисел, що є степенями 2; 5) чисел, що степенями 3. 6) чисел, що утворені формулою х(n)=5*n+9.

 

Реалізація. Статистичні характеристики  списків  непарних чисел

import random

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

print('Перший спосіб, що використовує цикл з лічильником')

lst3n1=[2*m -1 for m in range(-8, 12,1)]

print('Перший список непарних чисел у порядку зростання lst3n1=', lst3n1, type(lst3n1))

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

print('Кількість елемента "23" у списку lst3n1=', lst3n1.count(23))

print('Індекс елемента "21" у списку lst3n1=', lst3n1.index(21))

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

print('Максимум усіх елементів  у списку lst3n1=', max(lst3n1))

print('Мінімум усіх елементів  у списку lst3n1=', min(lst3n1))

print('Cереднє арифметичне списку lst3n1=', sum(lst3n1)/len(lst3n1))

print('Другий спосіб, що використовує цикл з лічильником і розгалуження')

lst3n2=[2*k+1 for k in range(100, -28,-1) if k%2==0]

print('Другий список непарних чисел у порядку спадання lst3n2=', lst3n2, type(lst3n2))

print('Третій спосіб, що використовує цикл з лічильником і розгалуження')

lst3n3=[1+6*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==2]

print('Третій список чисел у довільному порядку  lst3n3=', lst3n3, type(lst3n3))

lst3n3.remove(lst3n3[1])  # видаляємо із списку елемент  lst3n[1]

print('Змінений список випадкових непарних чисел без 1-го елементу: lst3n3=', lst3n3, type(lst3n3))

lst3n3.sort(reverse=True)

print('Змінений список випадкових непарних чисел у порядку спадання lst3n3=', lst3n3, type(lst3n3))

lst3n3.sort()

print('Змінений список випадкових непарних чисел у порядку зростання lst3n3=', lst3n3, type(lst3n3))

 

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

1) lst3n1=[4*m -1 for m in range(-8, 12,1)]

2) lst3n2=[6*k-1 for k in range(40, -28,-1) if k%3==0]

3 lst3n3=[1+2*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==7]

 

Завдання 9. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  складаються з: 1) чисел кратних 3.

 

Реалізація. Видалення та вставлення елементів у списки

import random

print('Алгоритм 9 автоматичного створення 3n-чисел у масиві або списку')

print('***Перший спосіб, що використовує функцію списку list(range(k,m,n)) з лічильником')

Numer=list(range(-33,10,3))

print('Простенький список 3n-чисел in Numer=', Numer, type(Numer))

print('***Другий спосіб, що використовує порожній список та циклом із лічильником приєднує елементи')

n=10; S1=[]

for i in range(10):

    S1.append(random.randint(-50,50)) # приєднується випадкове число у список

    S1[i]=3*(2*S1[i]-1)     # елемент перетворюється в непарне 3n-число, що кратне 3

print('Початковий список непарних 3n-чисел S1=', S1, type(S1))

print('***Третій спосіб, що використовує у списку формулу та цикл з лічильником для неї')

lst4=[6*m for m in range(-9, 9,1)]

print('Новий список парних 3n-чисел у порядку зростання lst4=', lst4, type(lst4))

print('***Четвертий спосіб, що використовує цикл з лічильником і розгалуження')

lst3n2=[k for k in range(100, -28,-1) if k%3==0]

print('Четвертий список 3n-чисел у порядку спадання lst3n2=', lst3n2, type(lst3n2))

print('***П’ятий спосіб, що використовує генератор випадкових чисел)

lst3n3=[3+6*n*random.randint(22, 222)  for n in range(40, -38,-1) if n%10==2]

print('Пятий список у довільному порядку  lst3n3=', lst3n3, type(lst3n3))

lst3n3.remove(lst3n3[1])  # видаляємо із списку елемент  lst3n[1]

print('Змінений список чисел без 1-го елементу: lst3n3=', lst3n3, type(lst3n3))

lst3n3.sort(reverse=True)

print('Змінений список чисел у порядку спадання lst3n3=', lst3n3, type(lst3n3))

lst3n3.sort()

print('Змінений список чисел у порядку зростання lst3n3=', lst3n3, type(lst3n3))

lst3n3[1:3]=[]     #зрізу списку присвоюється порожній список, ці елементи видалені

print('Змінений список чисел після видалення елементів із списку', lst3n3)

lst3n3[1:3]=[3, 33, 333, 3333]     #зрізу списку присвоюється список  елементів

print('Змінений список чисел після вставлення елементів до списку', lst3n3)

 

Завдання 10. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  виконує сортування елементів списку у порядку спадання та у порядку зростання.

Реалізація . Сортування елементів у списку

 

import random

print(' Algorytm 10  сортування елементів у списках lst1 ')

print('***Оригінальний спосіб створення списку, що використовує генератор випадкових чисел')

lst1=[3+3*random.randint(5, 55)  for n in range(20, -18,-1) if n%2==1]

print('Це  список  3n-чисел у довільному порядку  lst1=', lst1, type(lst1))

lst1.remove(lst1[1])     # видаляємо із списку елемент  lst3n[1]

print('Змінений список чисел без 2-го елементу: lst1=', lst1, type(lst1))

lst1.sort(reverse=True)    # сортування у порядку спадання  lst1

print('Змінений список чисел у порядку спадання lst1=', lst1, type(lst1))

lst1.sort()      # сортування у порядку зростання  lst1

print('Змінений список чисел у порядку зростання lst1=', lst1, type(lst1))

 

Протестуйте  даний алгоритм декілька разів, якщо:

1)      lst1=[1+2*random.randint(7, 57)  for n in range(40, -10,-2) if n%4==1]

2)      lst1=[3+8*random.randint(1, 99)  for n in range(90, 60,-3) if n%5==2]

3)      lst1=[4+7*random.randint(90, 180)  for n in range(1, 60,4) if n%6==3]

 

 

Завдання 11. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  виконує видалення та вставлення  елементів у списку.

 

Реалізація. Видалення та вставлення  елементів у списку

import random

print(' Algorytm  11 видалення та вставлення над елементами в списках lst ')

print('***Оригінальний спосіб створення списку, що використовує генератор випадкових чисел')

lst2=[1+2*n*random.randint(0, 10)  for n in range(40, -38,-1) if n%10==2]

print('Початковий список чисел після видалення елементів із списку', lst2)

lst2[2:5]=[]     #зрізу списку присвоюється порожній список, ці елементи видалені

print('Змінений список чисел після видалення двох елементів із списку', lst2)

lst2[0:3]=[0, 0, 0, 0]     #зріз  списку видаляється і присвоюється список нових  0-елементів

print('Змінений список чисел після видалення і вставлення чотирьох елементів до списку', lst2)

 

Протестуйте  даний алгоритм декілька разів, якщо:

1)      lst1=[1+2*random.randint(7, 57)  for n in range(40, -20,-2) if n%11==0]

2)      lst1=[3+8*random.randint(1, 99)  for n in range(90, 60,-3) if n%3==2]

3)      lst1=[4+7*random.randint(90, 180)  for n in range(1, 60,4) if n%4==1]

 

Завдання 12. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  виконує вставлення  елементів у списку без видалення між іншими елементами.

 

Реалізація.  Вставлення  елементів у списку без видалення

import random

print(' Algorytm 12  вставлення числових елементів у список lst1 ')

list1 = [1, 1, 1]

print(' початковий список list1=', list1)

list1.extend([0, 0, 0])            # вставлення елементів в кінець списку

print('Змінений список після вставлення чисел в кінець ', list1)

list2 = [2, 2, 2]

print(' початковий список list2=', list2)

list2.insert(1, 5)          # вставлення елемента між існуючими елементами

print ('Змінений список після вставлення елемента 5 ', list2)

list3 = [3, 3, 3]

print(' початковий список list3=', list3)

list3.insert(1, [0,0,0])          # вставлення елемента між існуючими елементами

print ('Змінений список після вставлення елемента [0,0,0]  =', list3)

for k in range(0,len(list1)):      # цикл для вставлення елемента між існуючими елементами

    list3.insert(k, list1[k])          # вставлення елемента між існуючими елементами

    list3.extend([k-1, k, k+1])           # вставлення елемента в кінець списку

print ('Змінений список після циклу вставлення елемента  =', list3)

print('Виявлення 8-го елемента у списку - це ', list3.pop(7))

 

Протестуйте  даний алгоритм декілька разів, якщо:

1)    list3 = list[range(0, 9,2]

2)    list3 = [3+8*n  for n in range(90, 60,-3) if n%3==2]

3)    list3=[5+9*random.randint(90, 180)  for n in range(1, 70,7) if n%2==1]

 

 

Завдання 13. Створити, реалізувати, протестувати алгоритми створення списків мовою програмування Python у середовищі програмування Thonny, що  виконує вставлення  елементів у порожній список.

import random

print(' Algorytm 13  вставлення і видалення  числових елементів у список lst1 ')

list2 = [4, 4, 4, 4]

print(' початковий список list2=', list2)

list2.extend([400, 4000, 40000])   # вставлення елементів в кінець списку

print('Змінений список після вставлення list2.extend([400, 4000, 40000])=', list2)

list1 = [2, 2, 2,2,2,2]

print(' Початковий список list1=', list1)

list1.insert(3,7000)     # вставлення елемента між існуючими елементами

print ('Змінений список  після вставлення list1.insert(3,7000)=', list1)

print('Показ елемента за його індексом list1.pop(3)=', list1.pop(3))  # показ індексу за відомим елементом списку

list3 = [2, 9, 8]

print('Початковий список list3=', list3)

list3.clear()                  # очищення списку чисел до порожнього

print ('Змінений список, тобто list3.clear() повне очищення списку : ', list3)

my_list = []

for k in range(0, 50, 8):        #цикл для вставлення елемента у порожній список елемента

          my_list.append(k)      #вставлення елемента у порожній список елемента

print (' Наповнений список після циклу my_list=', my_list)

my_list.append(3)       #вставлення праворуч у список елемента

print ('Змінений список вставлення елемента my_list=', my_list)  # [1, 3]

my_list.remove(32)     # видалення елемента 1 за першим індексом 0

print (' Змінений список після видалення елемента  my_list.remove(32)=', my_list)

 

Протестуйте  даний алгоритм декілька разів, якщо:

1)    list1 = list[range(90, -9,-10]

2)    list1 = [6-7*n  for n in range(7040,-5) if n%4==2]

3)    list1=[7+8*random.randint(95, 185)  for n in range(4270,2) if n%3==0]

 Результати виконання практичної частини надіслати не eлектронну адресу учителя:

vinnser@gmail.com


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

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