пʼятниця, 3 грудня 2021 р.

06.12.2021-12.12.2021 Нелінійні алгоритми з масивами.

  

06.12.2021-12.12.2021

 

Тема: Нелінійні алгоритми з масивами.

 

 

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

 

Інформаційна частина заняття.

Учень розповідає про українського математика Михайла Кравчука

"Михайло Кравчук - математик широкого масштабу. Його ім'я добре відоме у світовій математичній науці. Світ не знав лише, що він - українець." Довго не знали про цю надзвичайно талановиту людину і його земляки. Про це з болем пише у своїй статті його син О.М. Кравчук, доцент Волинського державного університету. Адже ім'я М. Кравчука було занесено до списку "ворогів народу", а сам він, повний енергії і творчих задумів, був засланий на Колиму і пішов з життя у неповних п'ятдесят років.

Лише 1992 року, після довгих літ забуття, наукова громадськість України та світу широко відзначила 100-річчя від дня народження видатного вченого. Його ім'я було занесено по лінії ЮНЕСКО до Міжнародного календаря визначних наукових діячів. Для цього були поважні підстави, адже праці М.П. Кравчука становлять фундаментальне надбання кількох галузей математичної науки.

З наведених нарисів та статей ти довідаєшся, що народився М. Кравчук 1892 року у селі Човниці на Волині в сім'ї інженера-землеміра. Початкову освіту він здобув удома. Його мати була освіченою жінкою, знала кілька іноземних мов і добре виховувала чотирьох дітей. 1901 року сім'я переїхала до Луцька, де в 1910 році Михайло Кравчук закінчив гімназію із золотою медаллю. Цього ж року він вступив на математичне відділення фізико-математичного факультету університету Св. Володимира в Києві, закінчив його у 1914 р. з дипломом 1-го ступеня і залишився в ньому працювати.
Відтоді й почалася його титанічна творча наукова і педагогічна праця. Він викладав різні математичні курси у багатьох вищих та середніх закладах м. Києва.

У роки громадянської війни М. Кравчук виїжджає на село. У 1919-21 рр. він був викладачем і директором школи в селі Саварці на Богуславщині. Його колишні учні, які вступали до технікумів та вузів, вражали викладачів своїми знаннями з математики. У цій школі під опікою М.П. Кравчука розпочав свій шлях у велику науку сільський хлопець Архип Люлька, пізніше - відомий український вчений, творець реактивних авіадвигунів. До речі, у Київському політехнічному інституті лекції М. Кравчука слухав і майбутній славетний конструктор космічних кораблів Сергій Корольов.

Михайло Пилипович був людиною неабиякої ерудиції та культури. У 25 років він став приватдоцентом кафедри математики, у 33 - доктором наук, у 37 - дійсним членом Всеукраїнської академії наук. Вільно володіючи кількома мовами, він підтримував наукові й особисті дружні стосунки з відомими математиками світу - Адамаром, Гільбертом, Курантом та ін. Свої наукові праці писав різними мовами, але найбільше - рідною. Академік М. П. Кравчук брав найактивнішу участь у творенні української наукової термінології та у запровадженні наукової мови в математичну галузь.
М. П. Кравчук належав до тих учених, чиї праці відкривають нові шляхи у розвитку науки і передбачають напрямки її розвитку в майбутньому.

"Моя любов - Україна і математика", - ці слова Михайла Пилиповича Кравчука викарбовано на гранітному постаменті пам'ятника, який встановлено йому в 2003 році перед корпусом музею Національного технічного університету України "Київський "Київський політехнічний інститут". У селі, де він народився, в 1979 році відкрито музей та встановлено погруддя великого патріота і математика.

 

 

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

Завдання 1. Створити алгоритм для виведення таблиці 5х7 випадкових цілих чисел на Python3 у середовищі Thonny.

Реалізація.

import random

print(" Алгоритм 1 ")

def rand_matrix(n,m):
    A=[[random.randint(-9,9) for j in range(m)] for i in range(n)]
    return A
def show_matrix(A):
    for a in A:
        for b in a:

            print(b, end="   ")
        print()
A=rand_matrix(5,7)
show_matrix(A)
print(A)

 

 

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

Реалізація.

import random

print(" Алгоритм 2 ")

def rand_matrix(n,m):

    A=[[random.randint(0,9) for j in range(m)] for i in range(n)]

    return A

def show_matrix(A):

    for a in A:

        for b in a:

            print(b, end="   ")

        print()

def suma_matrix(n,m):

    C=[[A[i][j]+B[i][j] for j in range(m)] for i in range(n)]

    return C

def dobutok_matrix(n,m,k, t):

    D=[[(A[i][j])*k for j in range(m)] for i in range(n)]

    F=[[(B[i][j])*t for j in range(m)] for i in range(n)]

    S=[[D[i][j]+F[i][j] for j in range(m)] for i in range(n)]

    return S

print("Перша таблиця випадкових цілих чисел або матриця А(4,4): ")

A=rand_matrix(4,4); show_matrix(A)

print("Друга таблиця випадкових цілих чисел або матриця B(4,4): ")

B=rand_matrix(4,4); show_matrix(B)

print("Третя таблиця випадкових цілих чисел або матриця С(4,4): ")

C=rand_matrix(4,4); show_matrix(C)

print("Четверта таблиця випадкових цілих чисел або матриця D(4,4): ")

D=rand_matrix(4,4); show_matrix(D)

print("Пята таблиця випадкових цілих чисел або матриця F(4,4): ")

F=rand_matrix(4,4); show_matrix(F)

print("Шоста таблиця випадкових цілих чисел або матриця S(4,4): ")

S=rand_matrix(4,4); show_matrix(S)

print("Таблиця чисел або матриця C(4,4)=A(4,4))+B(4,4): ")

print("Додавання двох таблиць чисел або матриць A(4,4)+B(4,4): ")

suma_matrix(4,4); show_matrix(C)

print("Множення двох таблиць на число і сума матриць -8*A(4,4)+9*B(4,4): ")

dobutok_matrix(4,4,-8, 9); show_matrix(S);

 

 

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

Реалізація.


import random

print(" Алгоритм 3 ")

print("пошук властивостей числа: abc")

k=random.randint(100,998)

print("трицифрове число:",k)

a=k//100; print("цифра розряду сотень:",a)

b=(k-a*100)//10; print("цифра розряду десятків:",b)

c=k%10; print("цифра розряду одиниць:",c)

if (a!=b)and (a!=c)and (b!=c):

     print("немає рівних цифр")

if (a==b) or (b==c) or (a==c):

     print("має однакові цифри")

if (a==c):

    print("це число паліндромне")

g=max([a,b,c]); q=min([a,b,c])

p=a+b+c-g-q

if q+p>g:

     print("це трикутне число")

if g==p+q:

     print("це дивакувате число")

if g==p*q:

    print("це добуткове число")

if (g==p**2)or(g==q**2)or(p**2==q):

     print('це квадратоване число')

if (g==c)and(a==q)and(p==b):

     print('це неспадний порядок цифр числа')

if (g==a)and(q==c)and(p==b):

     print('це незростаючий порядок цифр числа')

if (c%2==0)and((a+b+c)%3==0)and((a+b+c)%9==0):

     print('це парне число, що ділиться на 3, на 6, на 9, на 18')

if (c%2==0)and(c%5==0)and((a+b+c)%3==0):

     print('це парне число, що ділиться на 3, на 6, на 10, на 15')

h=[2,3,5,7,11,13,17,19,23,29,31]

v=['None']*11

z=0

m=0

for j in range(len(h)):

    z=z+k%int(h[j])

    print("k=",k,"=", h[j],"*",k//int(h[j]), "+", k%int(h[j]))

    if k%int(h[j])==0:

        print("це складене число")

    else:

        m=m+1

if m==11:

   print("це просте число")

else:

     print("це складене число")

 


Завдання 4. Створити алгоритм  мовою програмування Python3 для знаходження найменшого значення виразу з модулями вигляду: m*|x-a|+n*|x-b|, якщо  змінні a,b,m,n – натуральні  числа в середовищі програмування Thonny.

Реалізація.


import random


print(" Алгоритм 4 ")

print("Глобальний екстремум(MIN,MAX)")

print("Вираз з модулями: m*|x-a|+n*|x-b|=?")

q=10000

m=random.randint(-q,q)

n=random.randint(-q,q)

a=random.randint(-q,q)

b=random.randint(-q,q)

print("Вираз:",m,"*|x-",a,"|+",n,"*|x-",b,"|")

print("m=",m, "n=",n)

print("a=",a, "b=",b)

print("m+n=",m+n)

FA=n*abs(a-b)

FB=m*abs(b-a)

if m+n>=0:

    print(" MIN_F(х)= m*|x-a|+n*|x-b|=", min([FA,FB]))

else:

        print("MAX_F(х)= m*|x-a|+n*|x-b|", max([FA,FB]))

 

Завдання 5. Створити та протестувати алгоритм виведення постійного  числового масиву у вигляді  таблиці чисел, розміром 2х2.

Реалізація.

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

А=[[1,2],[3,4]]

print('Двовимірний масив А має вигляд')

for n in range(2):

      for m in range(2):

            print(А[n][m], end=' ')

      print('  ')  

Завдання 6. Створити та протестувати алгоритм виведення числового масиву у вигляді  таблиці чисел, розміром 3х3, при цьому замінити усі елементи на головній діагоналі на 0.

Реалізація.

print('Алгоритм 6 виведення масиву B на екран')

B=[[1,2,3],[4,5,1],[3,4,5]]

print('Двовимірний масив B із ненульовими діагональними елементами має вигляд')

for n in range(3):

      for m in range(3):

            if m==n:

                 B[n][m]=0

           print(B[n][m], end=' ')

      print('  ')

Завдання 7.  Створити та протестувати алгоритм виведення числового масиву у вигляді  таблиці чисел, розміром 4х4, при цьому замінити усі елементи, окрім елементів на головній діагоналі, - на 0.

Реалізація.

print('Алгоритм 7 виведення масиву C на екран')

C=[[1,2,3,4],[2,3,4,5],[3,4,5,1],[4,5,1,2]]

print('Двовимірний масив C  із ненульовими діагональними елементами має вигляд')

for n in range(4):

      for m in range(4):

            if m!=n:

                 C[n][m]=0

            print(C[n][m], end=' ')

      print('  ')

Завдання 8.  Створити та протестувати алгоритм виведення числового масиву у вигляді  таблиці чисел, розміром 5х5, при цьому замінити усі парні елементи, окрім непарних елементів, на 1000.

Реалізація.

print('Алгоритм 8 виведення масиву D на екран')

D=[[1,2,3,4,5],[2,3,4,5,1],[3,4,5,1,2],[4,5,1,2,3],[5,1,2,3,4]]

print('Двовимірний масив D має вигляд')

for n in range(5):

    for m in range(5):

        if D[n][m]%2==0:

             D[n][m]=1000

        print(D[n][m], end=' ')

    print('  ') 

Завдання 9.  Створити та протестувати алгоритм виведення числового масиву у вигляді  таблиці чисел, розміром 5х6, при цьому замінити усі непарні елементи, окрім парних елементів, на 7777.

Реалізація.

print('Алгоритм 9 виведення масиву E на екран')

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

print('Двовимірний масив E має вигляд')

for n in range(5):

      for m in range(6):

            if E[n][m]%2==1:

                E[n][m]=7777

            print(E[n][m], end='     ')

    print('  ') 

Протестувати алгоритм для двовимірного масиву розміром   7х4.

Завдання 10.  Створити та протестувати алгоритм виведення числового масиву у вигляді  таблиці чисел, розміром 5х7, при цьому замінити усі непарні елементи на 3333,  а парні елементи - на 2222.

Реалізація.

print('Алгоритм 10 виведення масиву F на екран')

F=[[1,2,3,4,5,6,7],[2,3,4,5,1,6,7],[3,4,5,1,2,7,6],[4,5,1,2,3, 7, 6],[5,1,2,3,7, 6, 4]]

print('Двовимірний масив F має вигляд')

for n in range(5):

      for m in range(7):

            if F[n][m]%2==0:

                  F[n][m]=2222

           if F[n][m]%2==1:

                 F[n][m]=3333

          print(F[n][m], end='     ')

     print('  ')    

Протестувати алгоритм для двовимірного масиву розміром   5х3.

 

  Завдання 11.  Створити та протестувати алгоритм виведення числового масиву у вигляді  таблиці чисел, розміром 5х8, при цьому замінити усі 3k-елементи на 9999,  а усі 3k+1-елементи - на 7777, тa усі усі 3k+2-елементи - на 5555,

Реалізація.

print('Алгоритм 11 виведення масиву G на екран')

G=[[1,2,3,4,5,6,7,8],[2,3,4, 6,7,8, 5,1],[3,4,5,1,6,7,8,2],[4,5,1,2,6,7,8, 3],[5,1,2,6,7,8, 3,4]]

print('Двовимірний масив G має вигляд')

for n in range(5):

    for m in range(8):

        if G[n][m]%3==0:

             G[n][m]=9999

        if G[n][m]%3==1:

             G[n][m]=7777

        if G[n][m]%3==2:

             G[n][m]=5555

        print(G[n][m], end='     ')

    print('  ')   

Протестувати алгоритм для двовимірного масиву розміром   5х2.

 

 

 

Завдання 12. Створити алгоритм  мовою програмування Python3 для знаходження найменшого значення виразу з модулями вигляду: m*|x-a|+n*|x-b|+k*|x-c|,  якщо  змінні a,b,с,m,n,k –  різні натуральні  числа в середовищі програмування Thonny.

 

import random

print(" Алгоритм 12 ")

print(" Пошук глобального  екстремуму(або MIN, або MAX)")

print("Вираз з модулями: m*|x-a|+n*|x-b|+k*|x-c|=?")

q=100

m=random.randint(-q,q)        # присвоєння випадкового цілого числа змінній m

n=random.randint(-q,q)          # присвоєння випадкового цілого числа змінній n

k=random.randint(-q,q)          # присвоєння випадкового цілого числа змінній k

a=random.randint(-q,q)        # присвоєння випадкового цілого числа змінній a

b=random.randint(-q,q)        # присвоєння випадкового цілого числа змінній b

c=random.randint(-q,q)      # присвоєння випадкового цілого числа змінній c

g=max([a,b,c]); q=min([a,b,c]); p=a+b+c-g-q; s=m+n+k

print("Точки екстремуму:","x1=",q, "x2=",p, "x3=", g)

print("Вираз з модулями:",m,"*|x-",q,"|+",n,"*|x-",p,"|+",k,"*|x-",g,"|")

print("Коефіцієнти:","m=",m, ";n=",n, ";k=", k, ";Сума: m+n+k=",m+n+k)

print("1-ий проміжок: x<",q)

if -m-n-k==0:

    F1=m*q+n*p+k*g; print("константа, якщо х<x1, F1(x)=", F1); FQ=F1  

elif -m-n-k<0:

    k1=-m-n-k; l1=m*q+n*p+k*g; FQ=k1*q+l1; X01=-l1/k1

    print("спадна, якщо х<x1, F1(x)=",k1,"*x+",l1,"FQ=",k1*q+l1,"X01=",-l1/k1)

else:

    k1=-m-n-k; l1=m*q+n*p+k*g; FQ=k1*q+l1;X01=-l1/k1

    print("зростаюча, якщо х<x1, F1(x)=",k1,"*x+",l1,"FQ=",k1*q+l1,"X01=",-l1/k1)  

print("2-ий проміжок: xє[",q, ";",p,")")

if m-n-k==0:

    F2=-m*q+n*p+k*g; print("константа, якщо х<x1, F2(x)=", F2); FP=F2 

elif m-n-k<0:

    k2=m-n-k; l2=-m*q+n*p+k*g;FP=k2*p+l2; X02=-l2/k2

    print("спадна, якщо x1 < x < x2, F2(x)=",k2,"*x+",l2, "FP=",k2*p+l2,"X02=",-l2/k2)

else:

    k2=m-n-k; l2=-m*q+n*p+k*g;   FP=k2*p+l2;X02=-l2/k2

    print("зростаюча, якщо x1 < x < x2, F2(x)=",k2,"*x+",l2,  "FP=",k2*p+l2, "X02=",-l2/k2)

print("3-iй проміжок: xє[",p, ";",g,")")

if m+n-k==0:

    F3=-m*q-n*p+k*g; print("константа, якщо x2< х <x3, F3(x)=", F3);FG=F3 

elif -m+n+k<0:

    k3=m+n-k; l3=-m*q-n*p+k*g; FG=k3*g+l3; X03=-l3/k3

    print("спадна, якщо x2 < x < x3, F3(x)=",k3,"*x+",l3,  "FG=",k3*g+l3, "X03=",-l3/k3)

else:

    k3=m+n-k; l3=-m*q-n*p+k*g; FG=k3*g+l3; X03=-l3/k3

    print("зростаюча, якщо x2 < x < x3, F3(x)=",k3,"*x+",l3,  "FG=",k3*g+l3,"X03=",-l3/k3) 

print("4-iй проміжок: xє[",g, "; +oo)")

if +m+n+k==0:

    F4=-m*q-n*p-k*g; print("константа, якщо x3< х <+oo, F4(x)=", F4); FG=F4  

elif +m+n+k<0:

    k4=m+n+k; l4=-m*q-n*p-k*g; FG= k4*g+l4; X04=-l4/k4 

    print("спадна, якщо x3 < x < +oo, F4(x)=",k4,"*x+",l4, "FG=",k4*g+l4,"X04=",-l4/k4 )

else:

    k4=m+n+k; l4=-m*q-n*p-k*g; FG= k4*g+l4

    print("зростаюча, якщо x3 < x < +oo, F4(x)=",k4,"*x+",l4, "FG=",k4*g+l4,"X04=",-l4/k4 ) 

if m+n+k==0:

    MIN=min([FQ,FP,FG]); MAX=max([FQ,FP,FG])

    print("MIN=", MIN, "MAX=",MAX)

elif m+n+k<0:

    MIN=min([FQ,FP,FG]); MAX=max([FQ,FP,FG])

    print("LOCAL_MIN=", MIN, "GLOBAL_MAX=",MAX)

else:

    MIN=min([FQ,FP,FG]); MAX=max([FQ,FP,FG])

    print("LOCAL_MAX=", MAX, "GLOBAL_MIN=",MIN)

 

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

vinnser@gmail.com

**********************

неділя, 28 листопада 2021 р.

29.11.2021-05.12.2021 Виникаючі допоміжні вікна мовою програмування Python3

 

29.11.2021-05.12.2021

 

Тема:Виникаючі допоміжні вікна мовою програмування Python3

 

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

 

Кодування виникаючих вікон

 

# для версії python 2.7 і нище

from Tkinter import *

 

# для версії python 3.0 і вище

from tkinter import *

Tk (Головне вікно)

from tkinter import *

назва_вікна = Tk()

назва_вікна.mainloop()

назва_вікна['властивість']='значення'

 

Зразок реалізації:

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

from  tkinter import*

import tkinter.messagebox

vikno1=tkinter.Tk()

vikno1.title("Вікно №1")

vikno1.config(bg="violet", width=300, height=150, relief=RAISED, bd=9)

vikno1.geometry("500x300+20+10")

label1=tkinter.Label(vikno1, text="Тут буде перший розділ", width=30, height=5, bg="indigo", fg="orange",font="Tahoma, 18", justify="center")

label1.pack()

vikno2=tkinter.Tk()

vikno2.title("Вікно №2")

vikno2.config(bg="pink", width=600, height=200, relief=GROOVE, bd=12)

vikno2.geometry("600x400+600+50")

label2=tkinter.Label(vikno2, text="Тут буде другий розділ", width=30, height=9, bg="silver", fg="yellow",font="Arial, 14", justify="right")

label2.pack()

vikno3=tkinter.Tk()

vikno3.title("Вікно №3")

vikno3.config(bg="purple", width=200, height=150, relief=RIDGE, bd=15)

vikno3.geometry("380x250+50+390")

label3=tkinter.Label(vikno3, text="Тут буде третій розділ", width=20, height=10, bg="green", fg="gold",font="Calibri, 14", justify="left")

label3.pack()

vikno3.mainloop()

vikno2.mainloop()

vikno1.mainloop()

 

·        bg - Колір фону вікна.

(white, black, red, green, blue, cyan, yellow, magenta … і кольори #rrggbb (від 0 до f)

·        bd - Ширина межі в пікселях;

·        relief - Рельєф межі.

(flat, groove, raised, ridge, solid, sunken)

·        cursor - Курсор, який з’являється, коли миша знаходиться у цьому вікні.

(arrow, circle, clock, cross, dotbox, exchange, fleur, heart, man, mouse, pirate, plus, shuttle, sizing, spider, spraycan, star, target, tcross, trek, watch)

·        width - Бажана ширина вікна.

·        height - Висота вікна.


Методи (функції) вікна (не всі - їх є багато)

 

назва_вікна.метод('значення')

 

 

·        title - заголовок вікна

window.title("завдання 1")   # назвати вікно - завдання 1

 

·        minsize і maxsize - мінімальний / максимальний розмір вікна. Методи приймають два аргументи - ширина і висота вікна. Якщо не вказано жодних аргументів - повертають поточне значення.

window.minsize("мінімальна_ширина","мінімальна_довжина")

window.maxsize("максимальна_ширина","максимальна_довжина")

 

·        resizable - чи може користувач змінювати розмір вікна. Приймає два аргументи - можливість зміни розміру по горизонталі і по вертикалі. Без аргументів повертає поточне значення.

window.resizable(False, True)     # забороняє розтягувати по ширині

                                 # але дозволяє по висоті

 

·        geometry - встановлює геометрію вікна в форматі

ширина x висота + відступ_зліва(х) + відступ_зверху(y)

window.geometry("600x400+40+80")  # помістити вікно в точку з

# координатами 40,80

# і встановити розмір в 600 на 400

Розмір або координати можуть бути опущені

window.geometry("600x400")   # тільки змінити розмір

 

window.geometry("+40+80")    # тільки перемістити вікно

Button (Кнопка)

Button (Кнопка) використовується для відображення кнопок у вашій програмі.

 

назва_кнопки = Button(назва_вікна,властивість="значення",...)

 

Властивості(не всі):

·        text - який текст буде відображений на кнопці (в прикладі - ок)

·        height, width - відповідно, довжина і ширина. Ширина мітки в символах (не пікселів!). Якщо ця опція не встановлена, мітка буде розміром відповідно до її вмісту.

·        bg - колір кнопки; fg - колір тексту на кнопці;

·        font - шрифт і його розмір (в прикладі - arial, розмір - 14)

·        activebackground - встановлення кольору фону, коли кнопка знаходиться під курсором.

·        activeforeground - встановлення кольору переднього плану, коли кнопка знаходиться під курсором.

·        command - для виклику функції.

·        image - встановлення зображення на кнопці.

·        state - Встановіть цей параметр на DISABLED, щоб кнопка сіра була відтінками та не відреагувала. Має значення ACTIVE, коли миша над ним. За замовчуванням - NORMAL.

Зразок реалізації

print('Алгоритм 5 налаштування кнопки у вікні з годинником')

import tkinter

import time

from  tkinter import*

from tkinter import Tk, BOTH

from tkinter.ttk import Frame, Button, Style

def  button_clicked():

    button['text']=time.strftime('%H:%M:%S')

window=Tk()

button1=tkinter.Button(window, text="Кнопка 1", 

                    width=15, height=1, bg="yellow", fg="black",

                    font="Times, 12", justify="center", padx=1, pady=1) # створення кнопки

button1.config(bg="pink", width=10, height=1, relief=RIDGE, bd=5)

button1.configure(text=time.strftime('%H:%M:%S'), command=button_clicked)

button1.pack() #реалізація кнопки у вікні

window.mainloop()



Messagebox (Вікно повідомлення)

messagebox (Вікно повідомлення) використовується для відображення вікон повідомлень у ваших програмах.

 

from tkinter import messagebox

 

messagebox.showinfo("Заголовок вікна""Текст всередині вікна")

 

 

Tkinter включає кілька інших вікон повідомлень:

·        showerror()

·        showwarning()

·        showinfo()

 

Label - це віджет, призначений для відображення будь-які написи без можливості редагування користувачем.

 

назва_напису = Label(назва_вікна,властивість="значення",...)

 

 

Entry (Поле вводу) використовується для відображення однорядкового текстового поля для прийому значень від користувача.

 

назва_введення = Entry(назва_вікна,властивість="значення",...)

Зразок реалізації

 from  tkinter import*

from tkinter import messagebox

import tkinter.messagebox

w1=tkinter.messagebox.showinfo("Повідомлення", "Закрийте усі вікна і перезавантажте компютер"); 

w2=tkinter.messagebox.showerror("Помилка!!!", "Невірно вказаний час");

w3=tkinter.messagebox.showwarning("Будьте обережні!!!", "Ваш компютер атакують хакери"); 

w4=tkinter.Tk()

w4.title("Попередження №1")

w4.config(bg="violet", width=300, height=150, relief=RAISED, bd=9)

w4.geometry("800x100+20+10")

new1=tkinter.Label(w4,text="Щойно Ваш компьютер атакували віруси типу Troyan",

              bg="pink", width=100, height=1, relief=RIDGE, bd=5,

              fg="black",font="Tahoma, 18", justify="center");new1.pack()

new2=tkinter.Label(w4,text="Застосуйте покращений захист операційної системи",

              bg="pink", width=100, height=1, relief=RIDGE, bd=5,

              fg="red",font="Tahoma, 18", justify="center"); new2.pack()

w4.mainloop()



Методи (функції) поля введення (не всі - їх є багато)

·          delete(firstlast=None) Видаляє символи з віджета, починаючи з першого в індексі, аж до останнього символу в останньому місці. Якщо другий аргумент опущений, видаляється лише один символ у позиції.

·          get() Повертає поточний текст запису у вигляді рядка.

·          insert ( indexs ) Вставляє рядок s перед символом у заданому індексі.

 

Text - це віджет, який дозволяє користувачеві ввести будь-яку кількість тексту. Має додаткове властивість wrap, що відповідає за перенесення (щоб, наприклад, переносити за словами, потрібно використовувати значення WORD).

 

назва_поля = Text(назва_вікна, властивість="значення",...)

 

Методи insertdelete і get додають, видаляють або витягають текcт. Перший аргумент - місце вставки у вигляді 'x.y', де x - це рядок, а y - стовпець. наприклад:

 

text1.insert(1.0, 'Додати Текст \n в початок першого рядка')

text1.get('1.0', END)        # Витягти все

text1.delete( '1.0', END)    # Видалити все

 

Checkbutton - це віджет, який дозволяє відзначити "галочкою" певний пункт у вікні. При використанні декількох пунктів потрібно кожному привласнити свою змінну.

назва_змінної = IntVar()

назва_прапорця = Checkbutton(назва_вікна, text="значення",

variable= назва_змінної,

onvalue = 1,

offvalue = 0)

Віджет Radiobutton виконує функцію, схожу з функцією віджета Checkbutton. Різниця в тому, що в міні-програмі Radiobutton користувач може вибрати лише один з пунктів. Реалізація цього віджета дещо інша, ніж віджета Checkbutton.

назва_змінної = IntVar()

назва_ перемикача1= Radiobutton(назва_вікна, text="значення1",

variable= назва_змінної, value = 1)

назва_ перемикача1= Radiobutton(назва_вікна, text="значення2",

variable= назва_змінної, value = 2)

 

Canvas (Полотно) використовується для малювання фігур, таких як лінії, овали, багатокутники та прямокутники у вашій програмі.

Властивості(не всі):

 bdbgcursorwidthheight

Віджет Canvas може підтримувати наступні стандартні елементи:

arc - Створює дуговий елемент, який може бути акордним, підвіскою або простою дугою.

coord = 10, 50, 240, 210

arc = canvas.create_arc(coord, start=0, extent=150, fill="blue")

 

image - створює елемент зображення, який може бути екземпляром або BitmapImage, або класів PhotoImage.

filename = PhotoImage(file = "sunshine.gif")

image = canvas.create_image(50, 50, anchor=NE, image=filename)

 

line - Створення рядка-позиції.

line = canvas.create_line(x0, y0, x1, y1, ..., xn, yn, options)

 

rectangle - Створення прямокутника.

rectangle = canvas.create_rectangle(50, 25, 150, 75, fill="blue")

oval - Створює коло або еліпс у заданих координатах. Вона займає дві пари координат; верхній лівий і нижній правий кути обмежувального прямокутника для овалу.

oval = canvas.create_oval(x0, y0, x1, y1, options)

polygon - Створює елемент багатокутника, який повинен мати принаймні три вершини.

polygon = canvas.create_polygon(x0, y0, x1, y1,...xn, yn, options)

 

У Tkinter є три пакувальника: packplacegrid.

·     pack ()

 

·        side ("left" / "right" / "top" / "bottom") - до якої сторони повинен примикати розміщується віджет.

·        fill (None / "x" / "y" / "both") - необхідно розширювати простір надається віджету.

·        expand (True / False) - чи потрібно розширювати сам віджет, щоб він зайняв все надане йому простір.

 

button1.pack(side='left')

button2.pack(side='top')

 

·   grid ()

Цей пакувальник є таблицею з осередками, в які поміщаються віджети.

Аргументи

·          row - номер рядка, в який поміщаємо віджет.

·          rowspan - скільки рядків займає віджет

·          column - номер стовпця, в який поміщаємо віджет.

·          columnspan - скільки стовпців займає віджет.

 

 

entry1.grid(row=0,column=0,columnspan=3)

button1.grid(row=1,column=0)

button2.grid(row=1,column=1)

button3.grid(row=1,column=2)

 

·        place ()

 

button1.place(x=0,y=0)

 

Аргументи

 

·        anchor ( "n", "s", "e", "w", "ne", "nw", "se", "sw" або "center")

який кут або сторона розміщується віджета буде вказана 

в аргументах x / y / relx / rely. За замовчуванням "nw" - лівий верхній

·        bordermode ( "inside", "outside", "ignore") - визначає в якій мірі в

раховуватимуться кордону при розміщенні віджета.

·        in_ - явне вказівку в якій батьківський віджет повинен бути поміщений.

·        x і y - абсолютні координати (в пікселях) розміщення віджета.

·        width і height - абсолютні ширина і висота віджету.

·        relx і rely - відносні координати (від 0.0 до 1.0) розміщення віджета.

·        relwidth і relheight - відносні ширина і висота віджету.

 

В Python обробником подій є функція.

 

 

def func_one():

 print('Привіт, школа!')

 

func_one()

 

button = Button(command = callback)

 

widget.bind("z", callback)

 

widget.bind("z", callback)

 

Cписок модифікаторів

 


Return - Enter

Escape - Esc

Control - Ctrl

Alt

Shift

Lock

Extended

Prior - PgUp

Next - PgDown

Button1, B1 - натиснута перша (ліва) кнопка миші

Button2, B2 - друга (середня) кнопка миші

Button3, B3 - третя (права)

Button4, B4 - четверта

Button5, B5 - п'ята

Mod1, M1, Command

Mod2, M2, Option

Mod3, M3

Mod4, M4

Mod5, M5

Meta, M

Double - подвійне клацання миші (наприклад, <Double-Button-1>)

Triple - потрійний

Quadruple - четверний



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

 

Програмування вікон із текстами мовою Python3

 

Завдання 1. Створити, реалізувати, протестувати алгортим для  одного вікна та різного дизайну для трьох  текстових повідомлень у цьому вікні

Реалізація.

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

from  tkinter import*

import tkinter.messagebox

window1=tkinter.Tk();     #створення вікна з назвою window1

window1.title("Новина №1");   #створення  заголовку або назви для вікна: Повідомлення №1

window1.config(bg="#000000", width=600, height=450, relief=RAISED, bd=12)

#задаються властивості вікна: заливка тла: чорна, ширина вікна 600, висота вікна 450,   межі вікна: RAISED,  товщина межі вікна 12

window1.geometry("700x600+20+10")

#задається розмір вікно: 700x600 та координати розташування вікна: +20+10

text1=tkinter.Label(window1, text="Учора у нашому місті  ",

                    width=40, height=3, bg="gold", fg="indigo",

                    font="Times, 16", justify="center")

text1.pack()

#задається перша частина повідомлення:  Це отут я хочу побачити

text2=tkinter.Label(window1, text=" відбулася  церемонія подяки",

                    width=50, height=4, bg="gray", fg="red",

                    font="Courier, 18", justify="left")

text2.pack()

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

text3=tkinter.Label(window1, text=" та вручення нагород волонтерам. ",

                    width=70, height=5, bg="pink", fg="black",

                    font="Tahoma, 16", justify="right")

text3.pack()

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

window1.mainpool()   #викликається метод наведення вікна на моніторі

 

Протестувати цей алгоритм для таких повідомлень:  text1="Це сьогодні ми в червоній зоні!",

text2=" Сьогодні тільки ті, хто на понтах, не носить маску",

text3="Через три дні  місто переходить в помаранчеву зону".

 

Завдання 2. Створити, реалізувати, протестувати алгортим для  двох вікон різних розмірів та різного дизайну з текстом для трьох розділів у відповідному вікні.

Реалізація.

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

from  tkinter import*;   import tkinter.messagebox; iluzion1=Tk(); 

iluzion1.title("5-КУТНИК №1")

iluzion1.config(bg="violet", width=400, height=350, relief=RAISED, bd=9)

iluzion1.geometry("600x500+20+10")

canvas1=Canvas(iluzion1, width=300, height=300); canvas1.pack()

canvas1.create_polygon(50,50,250,100,160,160, 100, 140, 80, 90, fill="red", outline="#556677")

canvas1.create_text(90,25,  text="Це  5-кутник", font=('Times',20))

canvas1.pack()

iluzion2=Tk()

iluzion2.title("6-КУТНИК №2")

iluzion2.config(bg="violet", width=500, height=550, relief=RIDGE, bd=15)

iluzion2.geometry("400x500+650+10")

canvas2=Canvas(iluzion2, width=300, height=300);  canvas2.pack()

canvas2.create_polygon(100,100,200,50,300,100, 300, 200, 200,250, 100,200, fill="green", outline="#991133")

canvas2.create_text(110,25,  text="Це  6-кутник", font=('Times',30)); canvas12.pack()

Протестувати цей алгоритм для таких повідомлень:  фігура=" 5-кутник”; фігура=" 6-кутник

 

Завдання 3. Створити, реалізувати, протестувати алгортим для  трьох вікон різних розмірів та різного дизайну з текстом для трьох розділів у відповідному вікні.

Реалізація.

print('Алгоритм 3 створення трьох різних вікон з текстом та його властивостями ')

from  tkinter import*

import tkinter.messagebox

vikno1=tkinter.Tk();   vikno1.title("Вікно №1"); vikno1.config(bg="violet", width=300, height=150, relief=RAISED, bd=9)

vikno1.geometry("500x300+20+10")

label1=tkinter.Label(vikno1, text="Тут список першої групи", width=30, height=5, bg="indigo", fg="orange",font="Tahoma, 18", justify="center");  label1.pack()

vikno2=tkinter.Tk();  vikno2.title("Вікно №2"); vikno2.config(bg="pink", width=600, height=200, relief=GROOVE, bd=12)

vikno2.geometry("600x400+600+50")

label2=tkinter.Label(vikno2, text="Тут буде  список другої групи", width=30, height=9, bg="silver", fg="yellow",font="Arial, 14", justify="right") ;  label2.pack()

vikno3=tkinter.Tk(); vikno3.title("Вікно №3"); vikno3.config(bg="purple", width=200, height=150, relief=RIDGE, bd=15)

vikno3.geometry("380x250+50+390")

label3=tkinter.Label(vikno3, text="Тут буде  список третьої групи", width=20, height=10, bg="green", fg="gold",font="Calibri, 14", justify="left");   label3.pack()

vikno3.mainloop();  vikno2.mainloop();  vikno1.mainloop()

 

Завдання 4. Створити, реалізувати, протестувати алгортим для  вікна з кнопкою різних розмірів та різного дизайну з  годинником.

Реалізація.

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

import tkinter

import time

from  tkinter import*

from tkinter import Tk, BOTH

from tkinter.ttk import Frame, Button, Style

def  button_clicked():

    button['text']=time.strftime('%H:%M:%S')

window=Tk()

button1=tkinter.Button(window, text="Електронний годинник",

                    width=15, height=1, bg="yellow", fg="black",

                    font="Times, 12", justify="center", padx=1, pady=1) # створення кнопки

button1.config(bg="pink", width=10, height=1, relief=RIDGE, bd=5)

button1.configure(text=time.strftime('%H:%M:%S'), command=button_clicked)

button1.pack() #реалізація кнопки у вікні

window.mainloop()

Завдання 5.

Реалізація.

print('Алгоритм 4 налаштування двох кнопок у вікні');  import tkinter;  from  tkinter import*

from tkinter import Tk, BOTH; from tkinter.ttk import Frame, Button;  import tkinter.messagebox

from tkinter import WORD;   root=tkinter.Tk()    #створення вікна

root.title("Вікно з кнопкою")     #створення заголовку вікна

root.config(bg="purple", width=700, height=650, relief=RIDGE, bd=15)    #створення дизайну вікна

root.geometry("380x250+50+390")    #створення розташування вікна

button1=tkinter.Button(root, text="Кнопка 1",

                    width=15, height=1, bg="gold", fg="indigo",

                    font="Times, 12", justify="center", padx=1, pady=1)     # створення кнопки 1

button1.config(bg="gray", width=10, height=1, relief=RIDGE, bd=8)

button1.pack()      #реалізація кнопки 1 у вікні

button2=tkinter.Button Створити, реалізувати, протестувати алгортим для  вікна з кнопкою різних розмірів та різного дизайну з  годинником. (root,  text="Кнопка 2",

                    width=9, height=1, bg="gold", fg="indigo",

                    font="Times, 12", justify="left", padx=7, pady=7) # створення кнопки 2

button2.config(bg="violet", width=10, height=1, relief=RIDGE, justify="right", bd=15)

button2.pack() #реалізація кнопки 2 у вікні

root.mainloop()

Завдання 6. Створити, реалізувати, протестувати алгортим для трьох  вікон з кнопкою.

Реалізація

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

from tkinter import Tk, BOTH;  from tkinter.ttk import Frame, Button, Style

class Example(Frame):

    def __init__(self, parent):

        Frame.__init__(self, parent)

        self.parent = parent

        self.initUI()

    def initUI(self):

        self.parent.title("Приклад кнопки у допоміжному вікні")

        self.style = Style()

        self.style.theme_use("default")

        self.pack(fill=BOTH, expand=1)

        quitButton = Button(self, text="Натисни на цю кнопку", command=self.quit)

        quitButton.place(x=200, y=50)

def main():

    root1 = Tk()

    root1.geometry("450x150+300+300")

    Example(root1)

    root1.mainloop()

def main1():

    root2 = Tk()

    root2.geometry("550x150+20+30")

    Example(root2)

    root2.mainloop()

def main2():

    root3 = Tk()

    root3.geometry("350x150+200+150")

    Example(root3)

    root3.mainloop()

if __name__ == '__main__':

    main()

if __name__ == '__main__':

    main1()

if __name__ == '__main__':

    main2()

Завдання 7. Створити, реалізувати, протестувати алгортим для двох  вікон з фігурами.

Реалізація

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

from  tkinter import*; import tkinter.messagebox

iluzion1=Tk(); iluzion1.title("6-КУТНИК №1")

iluzion1.config(bg="violet", width=400, height=350, relief=RAISED, bd=9)

iluzion1.geometry("600x500+20+10")

canvas1=Canvas(iluzion1, width=300, height=300); canvas1.pack()

canvas1.create_polygon(50,50,250,100,240,200, 230,260, 205,280, 100, 180, 20, 60, fill="red", outline="#556677")

canvas1.create_text(90,25,  text="Це 6-кутник", font=('Times',20));  canvas1.pack()

iluzion2=Tk()

iluzion2.title("5-КУТНИК №2")

iluzion2.config(bg="violet", width=500, height=550, relief=RIDGE, bd=15)

iluzion2.geometry("400x500+650+10")

canvas2=Canvas(iluzion2, width=300, height=300);  canvas2.pack()

canvas2.create_polygon(95,45,175,80,200,175, 125, 225, 25, 125, fill="green", outline="#991133")

canvas2.create_text(120,15,  text="Це   5-кутник", font=('Times',30));  canvas12.pack()

Алгоритми пошуку НСД та НСК, розгалуження та повторення

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

Реалізація.

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

m=int(input('Введіть півсуму з клавіатури'))

n=int(input('Введіть піврізницю з клавіатури'))

x=m+n;  y= m-n

print('Відповідь: 1-e число x=', x )

print('Відповідь: 2-e число', y)

if x>y:

    print('max=', x , 'min=', y)

elif y>x:

    print('max=',y, 'min=', x)

 

Протестувати  алгоритм для таких чисел: 1)піврізниця: -2,  півсума: 22; 

2) піврізниця: -3,  півсума:-8;    3) піврізниця: 0,  півсума:-8;   4) піврізниця: 9, півсума: 9

 

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

Реалізація.

print('Алгоритм 2 пошуку  найбільшого числа та найменшого числа за півДОБУТКОМ та за півЧАСТКОЮ двох ДОДАТНИХ чисел ')

m=float(input('Введіть півДОБУТok з клавіатури'))

n=float(input('Введіть півЧАСТКy з клавіатури'))

x=2*(m*n)**0.5;  y= (m/n)**0.5

print('Відповідь: 1-e ДОДАТНЕ число x=', x )

print('Відповідь: 2-e ДОДАТНЕ число', y)

if x>y:

    print('max=', x , 'min=', y)

elif y>x:

    print('max=',y, 'min=', x)

 

Протестувати  алгоритм для таких четвірок чисел: 1) півдобуток: 2, півчастка: 22;

  2) півдобуток:36, півчастка:8;    3) півдобуток: 0,  півчастка6 8;   4) півдобуток:1, півчастка: 1.

 

 Завдання 10. Одинокий шаховий король знаходиться на шаховій дошці розміром NxN. Як і всі шахові королі він може перейти за один хід на сусідню клітинку. Скільки можливих варіантів ходу є короля? Програма  читає з пристрою стандартного введення 3 натуральних числа  N, X,Y.  Кожне з чисел не більше 50, числа розділені пропусками (N ≥X,Y) N- розмір сторони дошки, X,Y – номер стрічки та стовпця клітинки з королем. Програма виводить єдине число – шукану величину.

 

Реалізація.

 

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

n=int(input('Введіть 1-е додатне число з клавіатури n='))

x=int(input('Введіть 2-е додатне число з клавіатури x='))

y=int(input('Введіть 3-е додатне число з клавіатури y='))

if (((x==1) and (y==1)) or ((x==n) and (y==1)) or ((x==1) and (y==n)) or ((x==n) and (y==n))):

      print(' Кількість ходів фігури король на шахівниці r:=',3)

elif ((x==1) or (x==n) or (y==n) or (y==1)):

      print(' Кількість ходів фігури король на шахівниці r:=',5)

else:

     print(' Кількість ходів фігури король на шахівниці r:=',8)

if n==1:

    print(' Кількість ходів фігури король на шахівниці r:=',0)

 

Завдання 11. Створити, реалізувати, протестувати алгоритм знаходження пошуку півтретини різниці та півчверті суми найбільшого числа та найменшого  числа із чотирьох введених з клавіатури цілих чисел.

Реалізація.

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

v1=int(input('Введіть 1-е число з клавіатури'));    v2=int(input('Введіть 2-е число з клавіатури'))

v3=int(input('Введіть 3-е число з клавіатури'));   v4=int(input('Введіть 4-е число з клавіатури'))

print('Відповідь: найбільше число')

if ((v1>v2) and (v1>v3) and  (v1>v4)):

    print('max=', v1)

elif ((v2>v3) and (v2>v4)):

    print('max=',v2)

elif v3>v4:

    print('max=',v3)

else:

    print('max=', v4)

print('Відповідь: найменше число')

if ((v1<v2) and (v1<v3) and  (v1<v4)):

    print('min=', v1)

elif ((v2<v3) and (v2<v4)):

    print('min=',v2)

elif v3<v4:

    print('min=',v3)

else:

    print('min=', v4)

m=max(v1,v2,v3,v4); n=min(v1,v2,v3,v4);

print('Відповідь: піврізниця найбільшого та найменшого чисел с= (max-min)/6=', (m-n)/6)

print('Відповідь: півcума найбільшого та найменшого чисел с= (max+min)/8=', (m+n)/8)

 

Протестувати  алгоритм для таких четвірок чисел: 1) 2, 2, 2, 2   2) -3,8, -1, 9    3)-9, -8, 7, 7  4) -3, -5, -8, -1.

 

   Завдання 12. В цукерню  «Солодка мрія» завезли  цукерок і тістечок. Продавці бажають продати всі свої товари без залишку. Прийшов оптовий покупець, який закуповує подарунки для дітей на свято. Але, щоб нікому з дітей не було образливо, подарунки мають бути однаковими, тобто в кожному подарунку має бути однакова кількість цукерок і однакова кількість тістечок. Скільки цукерок і скільки тістечок  повинен покласти продавець в кожен подарунок, щоб кількість подарунків була максимальною? Програма читає з пристрою стандартного введення  числа m та n  кожне з яких не перевищує 50000. Програма виводить через пропуск   кількість цукерок і тістечок в кожному подарунку.

Реалізація.

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

m=int(input('Введіть  з клавіатури число цукерок '))

n=int(input('Введіть з клавіатури число тістечок')) 

a=n; b=m;

print('Пошук найбільшого спільного дільника для двох чисел ',a,' i ',b)

while a*b>0:

      if a>b:

          a=(a%b); print('остача a%b=',a,'%',b,'=', a);

      else:

          b=(b%a); print('остача b%a= ',b,'%',a,'=', b);

d=a+b;  

print('Найбільший спільний дільник = НСД(',n,';',m,')=d=',a,'+',b,'=d=', d);

print('Найменше спільне кратне= НСK(',n,';',m,')=n*m//d=k=',a,'*',b,'=', n*m//d);

print('Пошук двох часток від ділення даних чисел n i m  на їхнє  НСД'  )

kn=(n//d); km=(m//d)

print('Кількість цукерок у одному подарунку kn=',n,'//',d,'=',kn)

print('Кількість тістечок у одному подарунку: km=',m,'//',d,'=',km)

 

Протестувати  алгоритм для таких четвірок чисел: 1) цукерок: 2, тістечок: 22;

  2)цукерок:36, тістечок: 8;    3) цукерок: 0,  тістечок 8;   4) цукерок:1, тістечок: 1.  

 

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