пʼятниця, 1 жовтня 2021 р.

04.10.2021-10.10.2021 Структуровані типи даних.

 

04.10.2021-10.10.2021

"Тестування учасника  ІКТ-олімпіади"



Структуровані типи даних.

Двовимірні числові масиви ( або числові матриці розміром mxn)

 














Зразок кодування алгоритму створення числового масиву 3х3 на випадкових числах та його аналізу деяких його властивостей мовою програмування Python3 

Завдання 0. Створити та реалізувати, протестувати за різними типами числових даних алгоритм досліження властивостей масиву розміром 3х3 мовою програмування Python3 в середовищі програмування Thonny.

Реалізація.

print('Алгоритм для аналізу масиву gX+qY для двох масивів X[][] та Y[][] розмірами 3хЗ')

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

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

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

Z=[[0,0,0],[0,0,0],[0,0,0]]          # створюємо нульові списки для  масиву суми

g=int((-1)**(random.randint(-1,1))*round(random.randint(1,4), 0))

q=int((-1)**(random.randint(-1,1))*round(random.randint(1,4), 0))

print('Випадкова лінійна комбінація має вигляд Z= ',g,'*X+',q,'*Y')

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

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

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

           X.append(int((-1)**(m-k)*round(random.randint(1,6), 0)))

      MASSIV5.append(X[-3:])                       # вкладаємо список А  у  MASSIV1

      for m in range(3):

          Y.append(int((-1)**(m-k)*round(random.randint(-6,-1), 0)))

      MASSIV6.append(Y[-3:])                      # вкладаємо список В у  MASSIV2

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

print('Елементи масиву Y розміром 3х3 =',MASSIV6); s=0; p=0; r=0; t=1; e=0; u=0;

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

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

           Z[m][k]=g*MASSIV5[m][k]+q*MASSIV6[m][k]   # лін. комб. двох масивів

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

               s=s+Z[m][k]  #додаємо лише  елементи другого рядка масиву Z

           if Z[m][k]%2==1:   # перевірка умови непарності елемента

               p=p+Z[m][k]  #додаємо лише непарні елементи масиву Z

           if k==0:       # перевірка умови для елементів першого стовпчика

               r=r+Z[m][k]  #додаємо  лише елементи першого стовпчика масиву Z

           if (m!=1)or(k!=1):    # перевірка умови для кутових елементів

               t=t*Z[m][k]  #множимо лише кутові елементи масиву Z.

           if m+k<2:   # перевірка умови для елементів верхнього числового 3-кутн-а

               e=e+Z[m][k]/6  #середнє арифм.  елементів верхнього числового 3-кутн-а відносно головної діагоналі

           if m+k>2:   # перевірка умови для елементів  нижнього числового 3-кутн-а

               u=u+Z[m][k]/6  #середнє арифм.  елементів нижнього числового 3-кутн-а відносно головної діагоналі

               print(u)

print('Елементи  масиву Z= ',g,'*X+',q,'*Y розміром 3х3 мають вигляд',Z)

print('Сума лише непарних елементів   масиву Z=',g,'*X+',q,'*Y розміром 3х3',p)

print('Сума лише елементів  першого стовпчика масиву Z=',g,'*X+',q,'*Y розміром 3х3',r)

print('Добуток лише кутових елементів  масиву Z= ',g,'*X+',q,'*Y розміром 3х3',t)

print('Середнє арифм. елементів  верхнього трикутника відносно головної діагоналі масиву ',g,'*X+',q,'*Y розміром 3х3',e)

print('Середнє арифм. елементів  нижнього трикутника відносно головної діагоналі масиву ',g,'*X+',q,'*Y розміром 3х3',u)

print('Сума лише елементів другого рядка  масиву Z=',g,'*X+',q,'*Y  розміром 3х3=',s)


Результати тестування алгоритму

Алгоритм для аналізу масиву gX+qY для двох числових масивів X[][] та Y[][] розмірами 3хЗ

Випадкова лінійна комбінація має вигляд Z=  3 *X+ 4 *Y

Елементи масиву X розміром 3х3 = [[5, -1, 6], [-3, 6, -6], [1, -2, 2]]

Елементи масиву Y розміром 3х3 = [[-6, 6, -2], [1, -3, 6], [-1, 1, -4]]

1.0

0.6666666666666667

-1.0

Елементи  масиву Z=  3 *X+ 4 *Y розміром 3х3 мають вигляд [[-9, 21, 10], [-5, 6, 6], [-1, -2, -10]]

Сума лише непарних елементів   масиву Z= 3 *X+ 4 *Y розміром 3х3 6

Сума лише елементів  першого стовпчика масиву Z= 3 *X+ 4 *Y розміром 3х3 -15

Добуток лише кутових елементів  масиву Z=  3 *X+ 4 *Y розміром 3х3 -1134000

Середнє арифм. елементів  верхнього трикутника відносно головної діагоналі масиву  3 *X+ 4 *Y розміром 3х3 1.1666666666666665

Середнє арифм. елементів  нижнього трикутника відносно головної діагоналі масиву  3 *X+ 4 *Y розміром 3х3 -1.0

Сума лише елементів другого рядка  масиву Z= 3 *X+ 4 *Y  розміром 3х3= 7


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

 

Кодування двовимірних масивів на числах(матриць) у виглядів списків вкладених у список  мовою програмування Python3

 

Завдання 1. Закодувати двовимірний масив  розміром 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))

 

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

Реалізація.

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

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

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

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

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

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

           x.append(round((-1000)**(k-m)*random.expovariate(10), 7))

      y.append(x[-2:])      # формуємо масив, тобто вкладаємо список х у список  y

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

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

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

            if y[k][m] <= 0:          #перевірка умови недодатності елемента масиву

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

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

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

print(round(s, 3))               # виводимо результат суми округлений до тисячних

 

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

1) x.append((-100)**(m-k)*round(random.lognormvariate(-2, -3), 5))

2) x.append((-10)**(m-k)*round(random.normalvariate(4, 5), 6))

3) x.append((-10)**(m-k)*round(random.weibullvariate(-7,8), 9))

4) x.append((-100)**(m-k)*round(random.paretovariate(20), 8))

 

 

Завдання 3. Закодувати двовимірний масив  розміром 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)))

 

 

 

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

Реалізація.

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

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

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

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

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

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

           p.append(int((-1000)**(m-k)*round(random.paretovariate(20), 8)))

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

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

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

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

            if ((h[k][m]%3==1))and(h[k][m]%2==0):  #перевірка умови 2m+0  та 3k+1

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

            if h[k][m]%2==1:         #перевірка умови непарності елемента

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

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

print('Сума непарних елементів у масиві',s);

print('Кількість парних  3k+1-елементів у масиві',n)

 

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

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)))

 

 

Завдання 5. Закодувати двовимірний масив  розміром 3х4 на  цілих випадкових різнознакових числах мовою програмування Python3  у середовищі програмування Thonny  у вигляді вкладених трьох списків, що мають 4 елементи, в один список, що має 3 елементи і  перетворити усі непарні елементи на логічний тип 0(=False) і перетворити парні елементи на логічний тип 1(=True)  для створеного масиву.

Реалізація.

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

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

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

g=[]

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

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

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

           p.append(int((-1000)**(m-k)*round(random.paretovariate(20)**2+3, 8)))

      h.append(p[-4:])

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

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

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

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

            if abs(h[m][k])%2==0: 

               g[m][k]=1 

            else:

               g[m][k]=0  

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)))

 

 

Завдання 6. Закодувати двовимірний масив  розміром 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)))

 

Результати виконання практичної частини надіслати на електронну алресу учителя: vinnser@gmail.com 

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

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