мұндағы F12 − 1 зарядтың 2 зарядқа әсер ететін күші; q1, q2 − зарядтар
шамасы; r12 − радиус-вектор, r12 − ге тең 1 зарядтан 2 зарядқа бағытталған
вектор); k −пропорционалдық коэффициенті. Осылайша, заңға сәйкес
біртекті зарядтар бір-бірін итереді (ал әртекті — тартады).
Python тіліндегі программасы
###экранды дайындау
#Кітапханаларды орнату
import tkinter as tk
from tkinter import *
root=tk.Tk()
canv = Canvas(root, width=700, height=700, bg="white")
ball1=canv.create_oval(50,150,200,300, width=2, fill='red')
ball2=canv.create_oval(500, 150, 650, 300, width=2, fill='blue')
canv.create_line(125,300, 125, 450 , width=2, fill='brown')
canv.create_line(575,300, 575, 450 , width=2, fill='brown')
canv.create_line(125,375, 575, 375 , width=3, fill='magenta',
arrow=BOTH)# r
canv.create_line(200,225,300,225,width=3, fill='magenta',
arrow=LAST)#F1
canv.create_line(500,225, 400, 225,width=3, fill='magenta',
arrow=LAST)#F2
canv.create_text(125, 130, text=' Q1 ', font=('Times',
20),width=5, fill='blue')#Q1
canv.create_text(575, 130, text='Q2', font=('Times',
20),width=5, fill='blue')#Q2
canv.create_text(250, 210, text='F', font=('Times', 20),width=5,
fill='blue')#F2
canv.create_text(450, 210, text='F', font=('Times', 20),width=5,
fill='blue')#F2
canv.create_text(350, 390, text='r', font=('Times',
20),width=10, fill='blue')#r
t1=canv.create_text(100, 250, text='+', fill='green',
font=('Times', 20))#+
t2=canv.create_text(130, 170, text='+', font=('Times', 20),
fill='white')#+
t3=canv.create_text(80, 180, text='+', font=('Times', 20),
fill='white')#+
t4=canv.create_text(110, 260, text='+', font=('Times', 20),
fill='white')#+
t5=canv.create_text(170, 240, text='+', font=('Times', 20),
fill='white')#+
t6=canv.create_text(150, 180, text='+', font=('Times', 20),
fill='white')#+
t7=canv.create_text(160, 250, text='+', font=('Times', 20),
fill='white')#+
q1=canv.create_text(100+450, 250, text='-',font=('Times', 20),
fill='white')#-
q2=canv.create_text(130+450, 170, text='-', font=('Times', 20),
fill='white')#-
100
q3=canv.create_text(80+450, 180, text='-', font=('Times', 20),
fill='white')#-
q4=canv.create_text(110+450, 260, text='-', font=('Times', 20),
fill='white')#-
q5=canv.create_text(170+450, 240, text='-', font=('Times', 20),
fill='white')#-
q6=canv.create_text(150+450, 180, text='-', font=('Times', 20),
fill='white')#-
q7=canv.create_text(160+450, 250, text='-', font=('Times', 20),
fill='white')#-
canv.pack()
root.mainloop()
Программалау нәтижесі:
Зертханалық сабақ №7. Электромагниттік индукция құбылысын
түсіндіруге арналған эксперименттік тізбектің суретін Tkinter модулінің
көмегімен салу
Бізге белгілі электр тогы өзінің айналасында магнит өрісін тудырады.
Магнит өрісі мен электр тоғының арасындағы байланыс осы магнит өрісінің
көмегімен контурда ток пайда бола ма деген сұрақтың шешімін 1831 жылы
ағылшын физигі Фарадей шешті.
Электромагниттік индукция 1831 жылы 29 тамызда Майкл Фарадеймен
ашылған, оның зерттеулері бойынша тұйық жүйедегі магнитті толқынның
өзгеру жылдамдығы, осы жүйеде пайда болған электр қозғаушы күшке тура
пропорционал екенін ашты. Оның тәжірибесінде гальванометрге жалғанған
катушканың (соленоид) ішіне, тұрақты магнит салсақ, гальванометр
стрелкасының (1-сурет) қозғалысын байқаймыз. Магнитті қайтадан суырып
алсақ, стрелка басқа бағытқа ауытқиды. Магнитті неғұрлым тезірек
қозғалтса, стрелка соғұрлым көбірек ауытқиды. Демек, магнит өрісінің күш
сызықтары тұйық контурды қиып өткенде ток пайда болады, ол токты
индукциялық ток деп атайды.
101
Сурет 1. Электромагниттік индукция құбылысын бақылауға арналған
тәжірибе
Магниттің полюсін өзгертсек, стрелканың бұрылу бағыты өзгереді.
Магнитті тұрақты қойып, соленоидты қозғауға да болады. Әрі осы пайда
болған индукциялық ток, магнит ағынының өзгеру түріне байланыссыз, ол
тек өзгеріс жылдамдығына байланысты (2-сурет).
Сурет 2. Магнит полюсінің өзгеруінің әсері
Майкл Фарадей екі жақын орналасқан катушкамен тәжірибе жасап
көреді: егер бір катушканы айнымалы ток көзіне қосып, екінші катушкада да
айнымалы ток пайда болады (3-сурет). Бұл жағдайларда пайда болатын
электр токтары индукциялық токтар деп аталады, ал осы индукциялық
токтардың тууына әкелетін себепкер құбылыс — индукцияның электр
қозғаушы күші деп аталады. Өткізгіштердегі бұл электр қозғаушы күші
(ЭҚК) осы өткізгіштер ішінде тұратын, өзгеріп отыратын магнит өрістерін ің
әрекетінен пайда болады.
102
Сурет 3. Майкл Фарадейдің екі жақын орналасқан катушкамен тәжірибесі
Магнит өрісі арқылы өндіріліп алған индукциялық ток осы тізбекте
ЭҚК бар екенін көрсетеді. Бұл электромагниттік индукцияның электр
қозғаушы күші деп аталады. Яғни магнит өрісі арқылы индукциялық ток
өндіріп алу құбылысын электромагниттік индукция құбылысы деп атайды.
Индукциялық токтың мәні және электромагиттік индукцияның ЭҚК-і тек
қана магнит ағының өзгеру жылдамдығымен анықталады:
= − dФ .
dt
Енді электромагниттік индукция құбылысын түсіндіруге арналған
эксперименттік тізбектің суретін Tkinter модулінің көмегімен салайық.
Python тіліндегі программасы
from tkinter import *
###экранды дайындау
root=Tk()
canv = Canvas(root, width=450, height=400, bg="white")
canv.create_text(180,15, text="N", font="Times 14")#N
canv.create_rectangle(135,0,160,45,fill='red')#магнит
canv.create_text(180,55, text="S", font="Times 14")#S
canv.create_rectangle(135,45,160,90,fill='blue')#магнит
canv.create_oval(100,100,200,110,fill='white')#катушкабасы
canv.create_rectangle(115,110,185,250)#катушкаденеси
canv.create_oval(115,110,185,120)#катушканынорамы
canv.create_oval(115,120,185,130)#катушканынорамы
canv.create_oval(115,130,185,140)#катушканынорамы
canv.create_oval(115,140,185,150)#катушканынорамы
canv.create_oval(115,150,185,160)#катушканынорамы
canv.create_oval(115,160,185,170)#катушканынорамы
canv.create_oval(115,170,185,180)#катушканынорамы
canv.create_oval(115,180,185,190)#катушканынорамы
canv.create_oval(115,190,185,200)#катушканынорамы
canv.create_oval(115,200,185,210)#катушканынорамы
canv.create_oval(115,210,185,220)#катушканынорамы
canv.create_oval(115,220,185,230)#катушканынорамы
canv.create_oval(115,230,185,240)#катушканынорамы
canv.create_oval(115,240,185,250)#катушканынорамы
canv.create_oval(115,250,185,260)#катушканынорамы
canv.create_line(185,110,210,110)#1 шнур
canv.create_line(210,110,230,90)#кілт
canv.create_line(240,110,300,110)#1 шнурдынжалгасы
canv.create_line(185,250,300,250)#2 шнур
103
canv.create_line(300,110,300,180)#1 шнурдынжалгасы
canv.create_line(300,220,300,250)#2 шнурдынжалгасы
canv.create_text(380,200, text="Гальванометр", font="Times
14")#гальванометр
canv.create_oval(300+20,200+20,300-20,200-20)
canv.create_line(300,190,300,200)#стрелка
canv.create_text(284,200, text="-2", font="Times
6")#гальванометр
canv.create_text(294,190, text="-1", font="Times
6")#гальванометр
canv.create_text(300,184, text="0", font="Times 6")
canv.create_text(307,190, text="1", font="Times 6")
canv.create_text(317,200, text="2", font="Times 6")
canv.pack()
root.mainloop()
Программалау нәтижесі:
104
Дәріс № 8. Функция графиктерін тұрғызуды Pyhton тілінде
программалау. Tkinter модулінің Canvas классын график тұрғызуға
қолдану.
График салуға қажетті бірнеше әдістерді қарастырайық:
Сызық – қарапайым геометриялық элемент. Canvas класында
create_line () әдісін қолдана отырып сызық құруға болады.
Мысалы:
line1=canv.create_line(x1,y1,x2,y2,fill='red',width=2)
x1,y1-сызықтың басты координатасы, x2,y2-соңғы траекториясы
fill- сызықтың түсі, width-сызықтың көлемін білдіреді.
Python-ның негізгі түстері
black – қара aqua –көкшіл
purple – күлгін olive – қою сары
white – ақ fuchsia – қанық күлгін
maroon – қою көк teal – қою жасыл
red – қызыл gray – қара сұр
navy -қою көк lime –ашық жасыл
brown – қоңыр moneygreen – ақша түстес
blue – көк ltgray – ашық сұр
skyblue – көгілдір dkgray – қою сұр
yellow – сары medgray – сұр
cream – ашық сары silver – күміс түсті
Сонымен, функция графигі тұрғызу қалай жүзеге асады?
Айталық, [-3,3] кесіндісі аралығында у = х2 − 3 функциясының графигін
тұрғызу қажет болсын. Осы функцияның графигін бейнелейтін қисықтан
басқа экранда Ох және Оу координаталық өстері сызылу қажет. Оху
координаталар жүйесінің басын экранның ортасында (яғни 250, 250 жұп
санымен анықталған нүктеде) орналастыруға келісейік. Және де Оху
координаталар жүйесіндегі өлшем бірлікке сәйкес келетін экрандағы
нүктелер саны, яғни масштабты көбейткіш туралы келісу қажет. Айталық,
оның мәні 10-ға тең болсын. Бұл жағдайда графиктің (х, у) координатасы бар
нүктесінің экрандағы орны 250+20*х, 250-20*у жұп мәндерімен анықталады.
Графикті тұрғызу программасын жазайық:
Python тіліндегі программасы
from math import *
from tkinter import *
# окно создается по имени ТК
root = Tk()
#Koopдинаттық остер
canv = Canvas(root, width = 400, height = 400, bg =
"white")
105
canv.create_line(0,200, 400,200,width=2,arrow=LAST)
canv.create_line(200,0,200,400,width=2,arrow=BOTH)
for i in range(-15000,15000):
x=0.02*i
y=x**2-3
canv.create_line(round(200-30*x),round(200-
30*y),round(200-30*x+1), round(200-30*y+1),fill='red')
canv.pack()
root.mainloop()
Осы программа орындалғанда экранда әуелі
экранның ортасынан өтетін горизонталь және
вертикаль кесінділер сызылады. Содан кейін i
параметрлі циклде у = х2 − 3 функциясының
графигін тұрғызу орындалады.
Сонымен, масштабты көбейткішке кері
шама аргументі өсімшесі ретінде дәл 0,03
санын таңдау есебінен аргументтің өсімшесін
арттыруға болады. Графикті тезірек тұрғызуға
болады, бірақ ол кезде график нүктелерінің
арасы ашылып қалады.
Әртүрлі функциялардың графиктерін тұрғызып көрейік.
Python тіліндегі программасы
from math import *
from tkinter import *
# окно создается по имени ТК
root = Tk()
#Koopдинаттық остер
canv = Canvas(root, width = 500, height = 500, bg =
"white")
canv.create_line(0,250, 500,250,width=2,arrow=BOTH)
canv.create_line(250,0,250,500,width=2,arrow=BOTH)
for i in range(-15000,15000):
x=0.01*i
y=x**2-3
canv.create_line(round(250-30*x),round(250-
30*y),round(250-30*x+1), round(250-30*y+1),fill='red')
106
for i in range(-5000,5000):
x = 0.03 * i
y=sin(x)
canv.create_line(round(250 - 20*x), round(250 -20* y),
round(250 - 20*x + 1), round(250 - 20*y + 1),fill='blue')
for i in range(-5000,5000):
x = 0.03 * i
y=cos(x)
canv.create_line(round(250 - 20*x), round(250 -20* y),
round(250 - 20*x + 1), round(250 - 20*y + 1), fill='green')
for i in range(-15000,15000):
x = 0.01 * i
y=exp(x)
canv.create_line(round(250 - 20*x), round(250 -20* y),
round(250 - 20*x + 1), round(250 - 20*y + 1), fill='brown')
for i in range(-10000,10000):
x = 0.01 * i
y=x**3
canv.create_line(round(250 - 20*x), round(250 -20* y),
round(250 - 20*x + 1), round(250 - 20*y + 1),
fill='purple')
canv.pack()
root.mainloop()
Программалау нәтижесі:
107
Практикалық сабақ №8. Горизонтқа бұрыш жасай лақтырылған
дененің қозғалысына график тұрғызу
2.3.3. есеп. (Бурсиан Э.В., 8-бет) Горизонтқа бұрыш жасай
лақтырылған дененің қозғалысы. Бастапқы жылдамдығы 30 м/с
горизонтқа бұрыш жасай лақтырылған дененің траекториясын (әрбір 200
сайын 100 − тан 700 − қа дейін) сызыңдар. Ауаның кедергісі ескерілмейді.
Есептің аналитикалық шешімі:
Берілгені: Шешуі: Берілген есеп қозғалыстарды қосуға арналған.
0 = 20 м / с
( ) = 100 − 700
= 200
y( x ) − ?
Ең алдымен дененің жылдамдықтарының проекциясын жазамыз:
1. Дене жылдамдығының горизонталь бойынша проекциясы, яғни
Ох : х = 0х = 0соs , x = 0x t.
2. Дене жылдамдығының вертикаль бойынша проекциясы, яғни
Оу : у = 0у = 0 sin , y = 0y − gt.
3. Жүрілген жол:
( )s t t gt2
= y = = 0 y − gt dt = 0yt − 2 ;
ydt
0 0
4. Дененің көтерілу уақыты: t1 = 0 y ;
g
5. Дененің толық қозғалыс уақыты: t2 = 2t1;
6. Дененің көтерілу (траекторияның) биіктігі:
h = ymax = 02y 0 y − g 0 y 2 = 02y ;
g 2 g 2g
7. Дененің ұшу қашықтығы:
L = хmax = 0x t2 = 20 xt1 = 20x0 y ;
g
108
8. Дененің траекториясы квадраттық парабола болып табылады.
y = 0 yt − gt2 = 0 y x − g x2 = 0 y x− g x2.
2 0 x 2 02х 0 x 202х
Енді берілген есептің программасын құрайық. Программа жазу үшін
белгілеулер енгізейік:
Бастапқы жылдамдық 0 = v0 = 20 м/с ;
Лақтыру бұрышы = a ; радианда өрнектелуі b:=p*a/180;
Ох өсіндегі жылдамдық 0х = 0соs = u ,
Оу өсіндегі жылдамдық 0у = 0 sin = w .
Тұрақтылар: P=3,14; g=9,8.
Есептеу формуласы: y = 0y x − g x2 = w x − g 2 x2.
0 x 202х u 2u
2.3.3 eсептің Python тіліндегі программасы:
import math
from tkinter import *
root =Tk()
canv = Canvas(root, width = 500, height = 500, bg =
"white")
canv.create_line(0,270, 500,270,width=2,arrow=BOTH)#x
canv.create_line(100,0,100,500,width=2,arrow=BOTH)#y
canv.create_text(450,250,text="x",fill='black',
font=('Times', 14))
canv.create_text(80,10,text="y",fill='black',
font=('Times', 14))
g=9.8
v0=20
p=3.14
a=10
while a<=75 :
b=p*a/180
u=v0*math.cos(b)
w=v0*math.sin(b)
a += 20
for i in range(0, 7000):
x = 0.03 * i
y = w * x / u - g * x ** 2 / (2 * u ** 2)
canv.create_line(100 + 10 * x, 270 - 10 * y, 100 +
10 * x + 1, 270 - 10 * y + 1, fill='red')
canv.create_text(160,250,text="a=10",fill='black',
font=('Times', 14))
canv.create_text(230,200,text="a=30",fill='black',
font=('Times', 14))
canv.create_text(240,140,text="a=50",fill='black',
109
font=('Times', 14))
canv.create_text(200,80,text="a=70",fill='black',
font=('Times', 14))
canv.pack()
root.mainloop()
Осы программаны Python программасына енгізіп, жасыл орындау
батырмасын басып, есептеу нәтижесін алайық:
Бұрыштарды 200 градус сайын есептеу программада шарты алдын ала
белгілі While циклімен ұйымдастырылды.
While циклінің жазылу құрылымы мынадай:
While Шарт : While одан кейін шарт тексеріледі. Егер
1оператор немесе шарт ақиқат болса, онда нұсқау
өрнек орындалады. While циклі шарт ақиқат
........... болып тұрғанша орындалады, ал шарт
n оператор немесе жалған болған кезде while циклі өз
өрнек жұмысын тоқтатады.
Траекторияның нүктелерін сызуға айнымалысы өсіп отыратын FOR
санағышы қолданылды.
for одан кейін санағыш айнымалысына 1
for i in range(1, 10): санын, алғашқы мәнін меншіктейміз. Oдан
1оператор немесе кейін айнымалының соңғы мәні 10,
өрнек арасындағы нұсқау орындалады. Нұсқау
........... i:=10 болғанша орындалады. Есте
n оператор немесе сақтаңыз! Санағыш айнымалысының түрі
өрнек барлық кезде int!!!
110
Траекторияның тіктелу бұрышын зерттейік. Ол үшін 300 пен 600-қа
дейінгі бұрыштарды алып, әрбір 150 сайын траектория тұрғызайық.
Python тіліндегі программасы
import math
from tkinter import *
root =Tk()
canv = Canvas(root, width = 500, height = 550, bg = "white")
canv.create_line(0,240, 500,240,width=2,arrow=BOTH)#x
canv.create_line(100,0,100,500,width=2,arrow=BOTH)#y
canv.create_text(450,250,text="x",fill='black', font=('Times',
14))
canv.create_text(80,10,text="y",fill='black', font=('Times',
14))
g=9.8
v0=20
p=3.14
a=30
while a<=60 :
b=p*a/180
u=v0*math.cos(b)
w=v0*math.sin(b)
a += 15
for i in range(0, 7000):
x = 0.03 * i
y = w * x / u - g * x ** 2 / (2 * u ** 2)
canv.create_line(100 + 10 * x, 240 - 10 * y, 100 + 10 *
x + 1, 240 - 10 * y + 1, fill='red')
canv.create_text(220,180, text="a=30",fill='black',
font=('Times', 14))
canv.create_text(250,135,text="a=45",fill='black',
font=('Times', 14))
canv.create_text(270,80,text="a=60",fill='black', font=('Times',
14))
canv.pack()
root.mainloop()
111
Графиктен көрініп тұрғандай 300 пен 600-та ұшу қашықтығы тең, ал 450
–та ұшу қашықтығы ең үлкен мәнге ие.
Зертханалық сабақ №8. Горизонтқа бұрыш жасай лақтырылған
дененің қозғалысын сипаттау.
2.3.4 есеп. (Бурсиан Э.В. 8-бет) Горизонтқа бұрыш жасай
лақтырылған дененің қозғалысын сипаттау. Бастапқы жылдамдығы 20
м/с горизонтқа 300 бұрыш жасай лақтырылған дененің 1) жүрген жолын; 2)
көтерілу уақытын; 3) толық қозғалыс уақытын; 4) көтерілу биіктігін; 5) ұшу
қашықтығын есептеңіздер.
Берілгені: Шешуі: Есепке 2.3.3 есебінің аналитикалық шешімін
және қабылданған белгілеулерді қолданайық.
0 = 20м / с
= 300
1) s − ?
2) t1 − ?
3) t2 − ?
4) H − ?
5) L −?
Олай болса, қозғалыс параметрлерін қабылданған белгілеулер бойынша
жазайық:
1. Жүрілген жол:
s = 0 yt − gt2 = wt − gt2 ;
2 2
2. Дененің көтерілу уақыты:
t1 = 0 y = w;
g g
3. Дененің толық қозғалыс уақыты:
t2 = 2t1;
4. Дененің көтерілу (траекторияның) биіктігі:
H = 02y = w 2 ;
2g 2g
5. Дененің ұшу қашықтығы:
L = 20x0 y = 2u w .
gg
2.3.4 eсептің Python тіліндегі программасы:
112
import math
g=9.8; v0=20; p=3.14
a=15
while a<=75:
b=p*a/180
u=v0*math.cos(b)
w=v0*math.sin(b)
t1=w/g
t2=2*t1
s=w*t1-g*t1**2/2
H=w*w /(2*g)
L=2*u*w/g
print ('a= ', a,' ','s=', round(s,5),'м', ' ',
'H=', round(H, 5),'м' ' ', 'L=', round(L, 5),'м',' ' ,
't1=', round(t1,5),'c', ' ', 't2=', round(t2,5),'c')
a=a+15
Программаны Python программасына енгізіп,орындау батырмасын
басып, есептеу нәтижесін алайық:
Талдау жасауға горизонтқа бұрыш жасай лақтырылған дененің әрбір 150
сайын 750 − қа дейінгі қозғалыс параметрлерінің есептеу нәтижелерін
алайық:
Типтік есептерде қандай лақтыру бұрышында траекторияның көтерілу
биіктігі ұшу ұзақтығына тең болатынын қарастыратын есептер бар (1.1) есеп.
Программалап есептеу нәтижесінен α=750 болғанда көтерілу биіктігі ұшу
ұзақтығына тең екенін көруге болады.
113
Әрі қарай траекторияның тіктелуін, яғни ұшу қашықтығының азаятынын
зерттейік. Ол үшін алдыңғы нәтижеден 450-та ұшу қашықтығы ең үлкен
мәнге ие болатыны көрініп тұр. Олай болса, 420-тан 480-қа дейін әрбір градус
сайын есептейік:
Есептеулерге талдау жасай отырып, лақтыру бұрышы 440 -тан бастап
болғанда ұшу қашықтығы азая бастайтынын анықтадық.
Қорытындылай келе, қарастырылған екі есептің нәтижелері бойынша
горизонтқа бұрышпен лақтырылған дененің қозғалысын толық зерттеуге
мүмкіндік бар: 2.3.3 есепте жазықтықтағы траекторияның графигі арқылы
талдау жасауға, ал 2.3.4 есеп бойынша қозғалыс параметрлеріне есептеу
жүргізуге болады.
114
Дәріс № 9. Python программасындағы анимация
Сабақтың мақсаты: Python программасының анимация жасау бойынша
графикалық мүмкіндіктерін таныстыру.
Анимация– экрандағы объектіні жандандыру
Программалау арқылы анимация жасау үшін әуелі фигура түсті суретпен
салынады, содан кейін сол координаталармен фигура ақ түспен салынады.
Әрі қарай фигура ығысады және іс-әрекет қайталанады.
Мысалы: Горизонталь бойымен дөңгелектің қозғалысы. Программалау
цикл арқылы ұйымдастырылады. Цикл – бірдей іс-әрекеттің көп рет
қайталануы.
Python тіліндегі программасы
from tkinter import*
import time
root = Tk()
x=100
canv = Canvas(root, width = 500, height = 500, bg = "white")
def фунция_кург():
global x
while x < 350:
canv.create_oval(x, 100, x + 100, 200, fill='green',
width=2)
canv.pack()
x = x + 0.5
root.update()
time.sleep(0.01)
canv.pack()
root.after(2000, фунция_кург)
root.mainloop()
Программалау нәтижесі:
115
Python 3.8 – дің программалау ортасы:
Бұл сабақта Тkinter модулінің көмегімен бейнені анимациялауға
болатынын көрсетеміз. Мысал ретінде берілген траектория бойынша
бірнеше фигуралардың қозғалысын жасайық.
retrurn()- Python қайтару операторы, функцияда қайта шақырушы
программаны қайтару үшін қолданылады. Біз return мәлімдемесін тек
функцияның ішінде қолдана аламыз.
Кодтағы кез-келген жерден қол жеткізуге болатын айнымалы
глобальды деп аталады. Оны блоктан тыс анықтауға болады. Басқаша
айтқанда, функциядан тыс жарияланған глобальды айнымалы оның ішінде
қол жетімді болады.
coords()-фигураның қай координаталық нүкте бойынша
орналасқанын көрсетеді.
random модулі ()-кездейсоқ сандарды, әріптерді, реттілік
элементтерін кездейсоқ таңдауға мүмкіндік береді.
(https://pythonru.com/osnovy/globalnye-peremennye-python)
global-Python глобальды айнымалы мәнін функцияға өзгерту үшін
қолданылатын кілт сөзін ұсынады. Бұл мәнді өзгерту үшін қажет болып
табылады.
https://habr.com/ru/post/268531/
canvas.pack () — кеңестіктің терезенің ішіне орналастыру туралы
нұсқау береді.
root.update() — update () - кезекте тұрған барлық
тапсырмаларды өңдейді. Әдетте бұл функция "қиын" есептеулер кезінде,
пайдаланушының әрекеттеріне жауап беруі тиіс болған кезде қолданылады.
https://python-scripts.com/sleep
time.sleep()-Python-да программаны ұйқыға батыруға арналған
команда бар. Time модулінде sleep () функциясы бар, бұл шақырылған
ағынның орындалуын белгілі бір секундқа кешіктіруге мүмкіндік береді.
after()- екі аргумент бойынша қарастырылады: миллисекундтағы
уақыт және көрсетілген уақыттан кейін орындалуы керек функция.
After_cancel - де пайдалануға болатын идентификаторды қайтарады
move () файлды немесе каталогты (көзді) басқа жерге (тағайындалған
жерге) рекурсивті түрде жылжытады және тағайындалған орынға қайтарады
lambda операторы немесе Lambda функциясы Python-да анонимді
функцияны, яғни атауы жоқ функцияны құру әдісі. Мұндай функцияларды
бір реттік деп атауға болады, олар тек құру кезінде қолданылады. Әдетте,
lambda функциялары filter, map, reduce функцияларымен бірге қолданылады
116
Python тілінде программалау
from tkinter import*
import time
tk=Tk()
canvas=Canvas(tk,width=500, height=500)
tk.title ('Тікбұрыш бойымен қозғалыс')
canvas.create_oval(50, 50, 150, 150, fill='yellow', width=2)
canvas.create_oval(50, 350, 150, 450, fill='yellow', width=2)
canvas.create_oval(350, 50, 450, 150, fill='yellow', width=2)
canvas.create_oval(350, 350, 450, 450, fill='yellow', width=2)
tk.mainloop()
canvas.pack()
Программалау нәтижесі:
Келесі қадам бесінші шеңберді жоғарыда айтылған процедуралар мен
циклдер арқылы салып, оны берілген траектория бойынша қозғалуға мәжбүр
етеміз.
Python тілінде программалау
from tkinter import*
import time
tk=Tk()
canvas=Canvas(tk,width=500, height=500)
tk.title ('Тікбұрыш бойымен қозғалыс')
canvas.create_oval(50, 50, 150, 150, fill='yellow', width=2)
canvas.create_oval(50, 350, 150, 450, fill='yellow', width=2)
canvas.create_oval(350, 50, 450, 150, fill='yellow', width=2)
canvas.create_oval(350, 350, 450, 450, fill='yellow', width=2)
ball1 = canvas.create_oval(50, 50, 150, 150, fill='red')
print (ball1)
canvas.pack()
for i in range (50,110):
canvas.move(ball1, 5, 0)
117
tk.update()
time.sleep(0.01)
ball1 = canvas.create_oval(350,50, 450, 150, fill='yellow')
ball2 = canvas.create_oval(350,40, 450, 140, fill='red',
width=2)
for i in range (-10,68):
canvas.move(ball2, 0,4)
tk.update()
time.sleep(0.01)
ball2 = canvas.create_oval(350,350, 450, 450, fill='yellow',
width=2)
ball3 = canvas.create_oval(350, 350, 450, 450, fill='red')
for i in range (-10,50):
canvas.move(ball3, -5,0)
tk.update()
time.sleep(0.01)
ball3 = canvas.create_oval(50, 350, 150, 450, fill='yellow')
ball4=canvas.create_oval(50, 350, 150, 450, fill='red')
for i in range (-10,50):
canvas.move(ball4,0,-5)
tk.update()
time.sleep(0.01)
ball1 = canvas.create_oval(50, 50, 150, 150, fill='yellow')
tk.mainloop()
canvas.pack()
Программалаудың нәтижесі
Тапсырма №1. Горизонтқа бұрышпен лақтырылған дене қозғалысының
анимациясын жасаңыздар.
118
Python тіліндегі программасы
from tkinter import *
import math
import time
TIMEOUT = 100
LIMIT = 1910
#ЕСЕПТІҢ ШАРТЫ
g = 9.8
v0 = 24
p = 3.14
a = 50
b = p * a / 180
u = v0 * math.cos(b)
w = v0 * math.sin(b)
#ЕСЕПТІҢ АНИМАЦИЯСЫ
def coord(i):
x = float(0.03 * i)
y = w * x / u - g * x ** 2 / (2 * u ** 2)
x = 60 + 10 * x
y = 350 - 10 * y
return x, y
def move(i):
i = i + 10
x, y = coord(i)
canv.coords(ball1, x - 8, y - 8, x + 8, y + 8)
if i <= LIMIT:
root.after(TIMEOUT, lambda: move(i))
#ЕССЕПТІҢ СЫЗБАСЫ
root = Tk()
canv = Canvas(root, width=750, height=450, bg="white")
canv.create_line(20, 350, 700, 350, width=2, arrow=LAST) # x
canv.create_text(50,50,text="y", width=3,
fill='red',font=('Times', 14))#y
canv.create_line(60, 60, 60, 500, width=2, arrow=BOTH) # y
canv.create_text(710,350,text="x",
width=4,fill='red',font=('Times', 14))#x
ball4 = canv.create_oval(470, 205,470 +15, 205 +15, fill='pink',
width=1)
119
canv.create_line(20, 178, 350,178, width=2, fill='green')#h_max
canv.create_text(40,250,text="h_max", width=2,font=('Times',
14))#h_max
canv.create_line(30, 178, 30,351, width=2,
fill='green',arrow=BOTH)#h_max
canv.create_line(60, 360, 60,420, width=3,
fill='green',arrow=LAST)#g
canv.create_text(80,390,text="g", width=2,font=('Times', 14))#g
#L
canv.create_line(60, 350, 60,440, width=3, fill='green')#L
canv.create_line(630, 350, 630,440, width=3, fill='green')#L
canv.create_line(60, 420, 630,420, width=3,
fill='green',arrow=BOTH)#L
canv.create_text(300,430,text="L", width=2,font=('Times', 14))
#v
canv.create_line(477, 212, 520,212, width=2,
fill='red',arrow=LAST)#vx
canv.create_line(477, 212, 477,250, width=2,
fill='red',arrow=LAST)#vy
canv.create_line(477, 212, 520,240, width=2,
fill='green',arrow=LAST)#v
canv.create_line(520, 212, 520,245, width=2,
fill='blue',arrow=LAST)#v
canv.create_line(477, 245, 520,245, width=2,
fill='blue',arrow=LAST)#v
canv.create_text(530,212,text="vx", width=2,font=('Times', 14))
canv.create_text(477,260,text="vy", width=2,font=('Times', 14))
# Траекториясы сызу
for i in range(0, LIMIT):
x, y = coord(i)
canv.create_line(x, y, x + 1, y + 1, fill='red')
# Доптың қозғалсы
x, y = coord(0)
ball1 = canv.create_oval(x - 8, y - 8, x + 8, y + 8,
fill='green', width=1)
canv.pack()
root.after(TIMEOUT, lambda: move(0))
root.mainloop()
Программалау нәтижесі:
120
Есеп: Балконнан бастапқы жылдамдығы 0 = 5 м/с болатын доп тiк
жоғары лақтырылды. t = 2 с-тан соң доп жерге түстi. Балконның жерден
биiктiгiн және жерге соғылған кездегi доптың жылдамдығын анықтаңыздар.
Берілгені: Допты жоғары лақтырған кездегi уақыт пен биiктiк:
0 = 5м / с
t=2 с = 0 − gt1 = 0 0 − g 02 2
g 2 g2 0
H-? gt12 0 = gt1 h1 = 0 =
h1 = 0t1 − 2 2g
−? 0
t1 = g
t1 = 0 = 5м / с = 0,51с h1 = 02 = (5м / с)2 = 1,27м .
g 9.8м / с2 2g 2 9,8
Доп төмен түскен кездегi уақыт пен биiктiк :
t2 = t − t1 = 2с − 0,51с = 1, 49с, h2 = g t22 = 9,8 (1, 49)2 = 10,87м .
Балконның жерден биiктiгi: 2 2
H = h2 − h1 = 10,87м −1,27 = 9,6м ;
= 2 g h2 = 29,810,87 = 14,6 м/с.
Python тіліндегі программасы
import math
from tkinter import *
import time
TIMEOUT = 1000
from tkinter import Tk
#окно создавать
root = Tk()
canv = Canvas(root, width=620, height=620, bg="white")
#есептің сызбасын салу
canv.create_line(30, 0, 30, 550, width=2) #y
canv.create_rectangle(30,140,100,200,width=2, fill='yellow' ) #
балкон
canv.create_rectangle(30, 525, 450,550, width=3, fill='green')
#жер
canv.create_line(7, 140, 7, 525, width=2,fill='red',arrow=BOTH)
#H
canv.create_line(0, 140, 30, 140, width=2,fill='green') #H
canv.create_line(0, 525, 30, 525, width=2,fill='green') #H
canv.create_line(152, 0, 152, 140,
width=2,fill='green',arrow=BOTH) #h1
canv.create_line(100, 140, 170, 140, width=2,fill='green') #h1
canv.create_line(130, 5, 325, 5, width=2,fill='green') #h2
canv.create_line(300, 5, 300, 525,
width=2,fill='green',arrow=BOTH) #h2
canv.create_text(15,300,text="H", width=2,fill='purple')#H
canv.create_text(157,70,text="h1", width=2)#h1
canv.create_text(305,250,text="h2", width=3)#h2
canv.create_text(250,300,text="g", width=2)#g
121
canv.create_line(260, 280, 260, 320, width=2,arrow=LAST) #g
# Есептің шарты
v0=5
t=2
g=9.8
#Допты жоғары лақтырған кездегi уақыт пен биiктiк
t1=v0/g
h1=v0**2/(2*g)
print('Допты жоғары лақтырған кездегi уақыт
t1=',round(t1,2),'с')
print('Допты жоғары лақтырған кездегi биiктiк
h1=',round(h1,2),'м')
#Dоп төмен түскен кездегi уақыт пен биiктiк
t2=t-t1
print('Доп жоғары лақтырған кездегi уақыт t2=',round(t2,2),'с')
h2=g*t2**2/2
print('Доп төмен түскен кездегі биiктiк h2=',round(h2,2),'м')
#Балконның жерден биiктiгi
H=h2-h1
print('Балконның жерден биiктiгi H=',round(H,2),'м')
# Жерге соғылған кездегі доптың жылдамдығы
v=math.sqrt(2*g*h2)
vtext="v="+str(round (v,2))
zhyldamdyk=canv.create_text(200, 510, text=vtext,
fill='black', anchor="w")
#Есептің анимациясын жасау
def coord (i):
x=float(0.03*i)
y1=v0*x-g*x**2/(2*v0*2)
x=100+10*x
y1=130-10*y1
return x, y1
def move (i):
i=i+40
x,y1=coord (i)
canv.coords(ball1, x-10, y1-10, x+10, y1+10)
if i<80:
root.after (TIMEOUT, lambda : move (i))
# Доптың қозғалысы
x,y1= coord(0)
ball1=canv.create_oval(x-10, y1-10, x+10, y1+10, fill='blue',
width=1)
canv.pack()
print ('Доптың соғылған кездегі жылдамдығы v=',round(v,
2),'м/с')
canv.pack()
# Траекториясы сызу
for i in range(0,515):
x, y1 = coord(i)
canv.create_line(x, y1, x + 2, y1 + 2, fill='blue',width=1)
#жоғарыдан төмен қарай доптың қозғалысы
def coord1 (i):
x2=float(0.03*i)
122
y2=-(g*x2**2)/2-v0*t2
x2=100+10*x2
y2=40+10*y2
return x2, y2
def move1 (i):
i=i+30
x2,y2=coord (i)
canv.coords(ball1, x2-10, y2-10, x2+10, y2+10)
if i<=780:
root.after(TIMEOUT, lambda : move1 (i))
# Доптың қозғалысы
x2,y2= coord1(0)
canv.pack()
root.after (TIMEOUT, lambda: move1 (0))
root.after (TIMEOUT, lambda: move (0))
root.mainloop()
Программалау нәтижесі
Допты жоғары лақтырған кездегi уақыт t1= 0.51 с
Допты жоғары лақтырған кездегi биiктiк h1= 1.28 м
Доп жоғары лақтырған кездегi уақыт t2= 1.49 с
Доп төмен түскен кездегі биiктiк h2= 10.88 м
Балконның жерден биiктiгi H= 9.6 м
Доптың соғылған кездегі жылдамдығы v= 14.6 м/с
123
Практикалық сабақ №9. Кулон заңы бойынша Python
программалау тілінде анимация жасау
Кулон заңының ашылуы және қолдану шектері
Зарядтар мен электр энергиясы зарядталған денелердің өзара әрекеттесуі
байқалған жағдайлар үшін міндетті терминдер болып табылады.импульсивті
және тартылыс күштері зарядталған денелерден шығып, бір уақытта барлық
бағытта таралады, біртіндеп қашықтықта жоғалады. Бұл күшті бір кездері
әйгілі француз жаратылыстанушысы Шарль Кулон ашқан және зарядталған
денелерге бағынатын ереже сол кезден бастап Кулон заңы деп аталады.
Толығырақ келесі ссылка бойынша: https://kk.wikipedia.org/wiki/Кулон_заңы
Заңның дәлірек орындалуы үшін келесі шарттарды орындау қажет:
✓ Зарядтар нүктелі болуы керек. Басқаша айтқанда, бақыланатын
зарядталған денелер арасындағы қашықтық олардың өлшемдерінен
әлдеқайда үлкен болуы керек. Егер зарядталған денелер сфералық болса,
онда барлық заряд сфераның орталығы болып табылатын нүктеде болады деп
болжауға болады.
✓ Өлшенетін денелер тұрақты болуы керек. Әйтпесе, қозғалатын
зарядқа көптеген үшінші тарап факторларыәсер етеді, мысалы, Лоренц күші,
зарядталған денеге қосымша үдеу береді. Сондай-ақ қозғалатын зарядталған
дененің магнит өрісі.
✓ Бақылау нәтижелеріне ауа массаларының ағындарының әсерін
болдырмас үшін бақыланатын денелер вакуумда болуы керек.
124
Python тіліндегі программасы
#Кітапханаларды орнату
import tkinter as tk
from tkinter import *
import math
import time
###экранды дайындау
root=tk.Tk()
canv = Canvas(root, width=700, height=700, bg="white")
ball1=canv.create_oval(50,150,200,300, width=2, fill='red')
ball2=canv.create_oval(500, 150, 650, 300, width=2, fill='blue')
canv.create_line(125,300, 125, 450 , width=2, fill='brown')
canv.create_line(575,300, 575, 450 , width=2, fill='brown')
canv.create_line(125,375, 575, 375 , width=3, fill='magenta',
arrow=BOTH)# r
canv.create_line(200,225,300,225,width=3, fill='magenta',
arrow=LAST)#F1
canv.create_line(500,225, 400, 225,width=3, fill='magenta',
arrow=LAST)#F2
canv.create_text(125, 130, text='Q1', width=5, fill='blue')#Q1
canv.create_text(575, 130, text='Q2', width=5, fill='blue')#Q2
canv.create_text(250, 210, text='F', width=5, fill='blue')#F2
canv.create_text(450, 210, text='F', width=5, fill='blue')#F2
canv.create_text(350, 390, text='r', width=10, fill='blue')#r
t1=canv.create_text(100, 250, text='+', fill='green', font=('Times',
20))#+
t2=canv.create_text(130, 170, text='+', font=('Times', 20),
fill='white')#+
t3=canv.create_text(80, 180, text='+', font=('Times', 20),
fill='white')#+
t4=canv.create_text(110, 260, text='+', font=('Times', 20),
fill='white')#+
t5=canv.create_text(170, 240, text='+', font=('Times', 20),
fill='white')#+
t6=canv.create_text(150, 180, text='+', font=('Times', 20),
fill='white')#+
t7=canv.create_text(160, 250, text='+', font=('Times', 20),
fill='white')#+
q1=canv.create_text(100+450, 250, text='-',font=('Times', 20),
fill='white')#-
q2=canv.create_text(130+450, 170, text='-', font=('Times', 20),
fill='white')#-
q3=canv.create_text(80+450, 180, text='-', font=('Times', 20),
fill='white')#-
q4=canv.create_text(110+450, 260, text='-', font=('Times', 20),
fill='white')#-
q5=canv.create_text(170+450, 240, text='-', font=('Times', 20),
fill='white')#-
q6=canv.create_text(150+450, 180, text='-', font=('Times', 20),
fill='white')#-
q7=canv.create_text(160+450, 250, text='-', font=('Times', 20),
fill='white')#-
import random
def render1():
canv.move(t1, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render1)
render1()
def render2():
125
canv.move(t2, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render2)
render2()
def render3():
canv.move(t3, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render3)
render3()
def render4():
canv.move(t4, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render4)
render4()
def render5():
canv.move(t5, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render5)
render5()
def render6():
canv.move(t6, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render6)
render6()
def render7():
canv.move(t7, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, render7)
render7()
def minus1():
canv.move(q1, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus1)
minus1()
def minus2():
canv.move(q2, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus2)
minus2()
def minus3():
canv.move(q3, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus3)
minus3()
def minus4():
canv.move(q4, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus4)
minus4()
def minus5():
canv.move(q5, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus5)
minus5()
def minus6():
canv.move(q6, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus6)
minus6()
def minus7():
canv.move(q7, random.randint(-1, 1), random.randint(-1, 1))
canv.after(10, minus7)
minus7()
canv.pack()
root.mainloop()
126
Программаның нәтижесі:
Зертханалық сабақ №9. Биіктіктен жоғары қарай тік лақтырылған
дененің қозғалысы
Есеп: Дене балконнан 0 = 10 м/с жылдамдықпен тiк жоғары
лақтырылды. Балконның жер бетiнен биiктiгi h = 12,5 м-ге тең. Дене
қозғалысының теңдеуiн жазыңыздар және лақтырылған уақыт мезетiнен
бастап жерге түскен уақыт мезетiне дейiнгi орташа жолдық
жылдамдығын табыңыздар.
Шешуі: x = h + 0t − g t 2 / 2,
02 + h + 2
2g 0
= h1 + h2 = 2g = 7,77 м/с.
t1 + t2
2 h + 02
0 2g
g +
g
Python тіліндегі программасы )#
import math
from tkinter import *
import time
TIMEOUT = 1000
from tkinter import Tk
#окно создавать
root = Tk()
canv = Canvas(root, width=620, height=620, bg="white")
#есептің сызбасын салу
canv.create_line(30, 0, 30, 550, width=2) #y
canv.create_rectangle(30,235,100,200,width=2, fill='yellow'
балкон
127
canv.create_rectangle(30, 575, 450,550, width=3, fill='green')
#жер
canv.create_line(7, 200, 7, 550, width=2,fill='red',arrow=BOTH)
#H
canv.create_line(10, 200, 30, 200, width=2,fill='green') #H
canv.create_line(0, 550, 30, 550, width=2,fill='green') #H
canv.create_line(152, 10, 152, 200,
width=2,fill='green',arrow=BOTH) #h1
canv.create_line(100, 200, 170, 200, width=2,fill='green') #h1
canv.create_line(130, 12, 325, 12, width=2,fill='green') #h2
canv.create_line(300, 12, 300, 550,
width=2,fill='green',arrow=BOTH) #h2
canv.create_text(58,300,text="м", width=2,fill='purple')#H
canv.create_text(202,80,text="м", width=2)#h1
canv.create_text(362,250,text="м", width=3)#h2
canv.create_text(170,300,text="g", width=2)#g
#canv.create_text(200,490,text="м/с", width=2)#жылдамдық
canv.create_line(160, 280, 160, 320, width=2,arrow=LAST) #g
# Есептің шарты
v0=10
h=12.5
g=9.8
#Допты жоғары лақтырған кездегi уақыт пен биiктiк
h1=v0**2/(2*g)
t1=v0/g
#Dоп төмен түскен кездегi уақыт пен биiктiк
h2=(h+h1)
t2=float(math.sqrt((2*h2/g)))
# Жылдамдық
v=float((h1+h2)/(t1+t2))
vtext="v="+str(round (v,2))
zhyldamdyk=canv.create_text(180, 490, text=vtext,
fill='black', anchor="w")
h1text="h_1="+str(round (h1,2))
biik1=canv.create_text(157, 80, text=h1text,
fill='black', anchor="w")
h2text="h_2="+str(round (h2,2))
biik2=canv.create_text(310, 250, text=h2text,
fill='black', anchor="w")
Htext="H="+str(round (h,2))
biik=canv.create_text(15, 300, text=Htext,
fill='black', anchor="w")
#Есептің анимациясын жасау
def coord (i):
x=float(0.03*i)
y1=(v0*x)+g*x**2/(2*v0*2)
x=100+10*x
y1=190-10*y1
return x, y1
def move (i):
i=i+10
x,y1=coord (i)
canv.coords(ball1, x-10, y1-10, x+10, y1+10)
128
if i<40:
root.after (TIMEOUT, lambda : move (i))
# Доптың қозғалысы
x,y1= coord(0)
ball1=canv.create_oval(x-10, y1-10, x+10, y1+10, fill='blue',
width=1)
canv.pack()
print ('Доптың соғылған кездегі жылдамдығы v=',round(v,
2),'м/с')
canv.pack()
#жоғарыдан төмен қарай доптың қозғалысы
def coord1 (i):
x2=float(0.03*i)
y2=(g*x2**2)/2-v0*t2
x2=100+10*x2
y2=100+10*y2
return x2, y2
def move1 (i):
i=i+10
x2,y2=coord1 (i)
canv.coords(ball1, x2-10, y2-10, x2+10, y2+10)
if i<=110:
root.after(TIMEOUT, lambda : move1 (i))
# Доптың қозғалысы
x2,y2= coord1(0)
canv.pack()
root.after (TIMEOUT, lambda: move1 (0))
root.after (TIMEOUT, lambda: move (0))
root.mainloop()
Программалау нәтижесі:
129
Дәріс № 10. Бірінші ретті дифференциалдық теңдеулерді шешу
Дифференциальдық теңдеу деп у(х) функциясынан басқа да dу / dх ,
d 2 у / dх 2 және т.б. туындылардан тұратын теңдеуді айтады.
y(x) = 0 (4.6.1)
қарапайым теңдеуін шешу дегеніміз осы теңдеуді қанағаттандыратын х
мәндерін табу болып табылады.
F x, y, dy , d2y , = 0 (4.6.2)
dx dx2 ..... теңдеуді
дифференциалдық теңдеуін шешу дегеніміз осы
қанағаттандыратын у(х) функцияларын табу болып табылады.
Мысалы,
d2y = −g ………………………………… (4.6.3)
dx2
теңдеуі
y = A + Bx − gx2 …………………………………(4.6.4)
2
шешіміне ие болады.
Егер алғашқы шарттар берілген болса, мысалы
у х=0 = у0 , ал dy = 0
dx
х=0
болса, (4.6.4) теңдеуіндегі A, B параметрлерінің мәндерін табуға болады.
Берілген жағдайда A = у0 , B = 0 .
Көптеген физикалық есептерде дифференциалдық теңдеулер
айтарлықтай күрделі емес. Бірақ, тек кейбір жағдайларда ғана аналитикалық,
яғни формула түрінде табылады. Сандық әдістер қарапайым есептеу
құрылғысы бар болса, кез келген (4.6.2) дифференциальдық теңдеудің
шешімін табуға мүмкіндік береді. Бірақ та, (4.6.4) дифференциальдық
теңдеудің шешімі, яғни у(х) аналитикалық тәуелділік, яғни формула түрінде
емес, сандардың қатары түрінде табылады:
Бұл кезде алғашқы шарттарды беру міндетті емес. Айталық,
Енді қарапайым жағдайды қарастырайық.
дифференциалдық теңдеу мына түрге келтірілген
130
dy = f (x, y) (4.6.5)
dx
ал f (x, y) функциясының түрі белгілі
болсын. Бұл теңдеу бірінші ретті, себебі
тек бірінші туындыдан тұрады.
Дифференциалдарды жуықтап өсімшелерге
ауыстырайық. Сонда
y = f (x, y)x; (4.6.6)
yn+1 = yn + f (xn , yn )x.
Бұл «баспалдақпен есептеуге»
мүмкіндік береді, яғни xn , yn біле отырып,
(4.6.6) формуласы бойынша yn+1 -ді, ал
xn+1 = xn + x, (4.6.7)
формуласы бойынша хn+1 -ді, содан кейін
келесі yn+2, xn+2 жұп мәндерді табуға
болады. Сонымен, у(х) тәуелділігін екі
қатар сандар түрінде алуға болады. Бұл
бірінші ретті Эйлердің қарапайым әдісі
деп аталады.
Бір қатар белгілі программалау дағдысын үйренгеннен кейін
дифференциалдық теңдеулерді шешудің жетілдірілген программасын
қолдануға көшуге болады. Есепті шешудің алгоритмі 49-суретте көрсетілген.
Мысал келтірейік. Айталық а = 2 және алғашқы шарттары
x0 = 0, y0 = 5 болған кездегі
dy = a x (4.6.8)
dx
теңдеуін шешу қажет болсын. Осыдан мынадай жуықталған қатынастарды
алайық:
yn+1 = yn + axx; (4.6.9)
xn+1 = xn + x. (4.6.10)
Әуелі x0 = 0, y0 = 5, а = 2, х = 0,1 мәндерін енгіземіз.
xn+1 = xn + x.
yn+1 = уn + a xn x
формулалары бойынша х мәндеріне сәйкес келетін у мәндерін есептеп
мынадай есептеулерді аламыз:
131
Python тіліндегі программмасы
print ('Бірінші ретті теңдеулерді шешудің бірінші тәсілі')
n=int(input('n санын енгіз n='))
x=0; y=5; a=2; h=0.1;
for i in range(0,n):
x=x+h
y=y+a*x*h
print('x=', round(x,2),' ','y=',round(y,2) )
Программалау нәтижесі
Бірінші ретті теңдеулерді шешудің бірінші тәсілі
n санын енгіз n=10
x= 0.1 y= 5.02
x= 0.2 y= 5.06
x= 0.3 y= 5.12
x= 0.4 y= 5.2
x= 0.5 y= 5.3
x= 0.6 y= 5.42
x= 0.7 y= 5.56
x= 0.8 y= 5.72
x= 0.9 y= 5.9
x= 1.0 y= 6.1
Көріп тұрғанымыздай, у өзгерісі у -пен салыстырғанда айтарлықтай
көп емес; олай болса, х = 0,1 қадамы өте аз. Ал х =1 болған кезде қадам
өте дөрекі болады. у(х) графигін сызып, жауап аламыз.
Айта кету керек, дәл қатынастарды жуық қатынастарға ауыстыру n
нөмірдің өсуімен қателікке әкеледі және х «баспалдағы» шамасы азайған
сайын, қателік азаяды. Бірақ та осы кезде есептеу уақыты өсіп кетеді.
Нәтижесінде, х және у мәндерінде айтарлықтай өзгеріске жету үшін,
көптеген сан мәндерін жазу керек болады. Бірақ, басқаша да жасауға болады.
Айталық, х өте аз болып қала берсін. Баспаға тек әрбір 10-шы жұп санды
шығарып отырамыз (50-сурет).
х = 0,1 және N = 10 болған кезде есептелген мәндер мынадай:
132
Python тіліндегі программмасы
print ('Бірінші ретті теңдеулерді шешудің екінші тәсілі')
n=int(input('n санын енгіз n='))
x=0; y=5; a=2; h=0.1;
for j in range(0,n):
for i in range(0, n):
x=x+h
y=y+a*x*h
print('x=', round(x, 2), ' ', 'y=', round(y, 4))
Программалау нәтижесі
Бірінші ретті теңдеулерді шешудің екінші тәсілі
n санын енгіз n=10
x= 1.0 y= 6.1
x= 2.0 y= 9.2
x= 3.0 y= 14.3
x= 4.0 y= 21.4
x= 5.0 y= 30.5
x= 6.0 y= 41.6
x= 7.0 y= 54.7
x= 8.0 y= 69.8
x= 9.0 y= 86.9
x= 10.0 y= 106.0
Практикалық сабақ №10. Бірқалыпты үдемелі қозғалыс теңдеуін
қорытып шығару
Берілгені:
d2y = −g теңдеуі. (1)
dx2 (2)
Алғашқы шарттар y x=0 = y0 , dy = 0. (3)
dx
x=0
Шешуі: (1)-теңдеуді екі жағынан интегралдаймыз: d 2 y = −gdx;
dx
d2y = −g dx.
dx
Интегралдаудың нәтижесінде келесі теңдеуді аламыз:
dy = −gx + A.
dx
(3)-бірінші ретті дифференциал теңдеуді dy = (−gx + A)dx
интегралдаймыз
dy = (−gx + A)dx.
Екі рет интегралдау нәтижесі:
133
y = − g x2 + Ax + B. (4)
2
Алғашқы шарттарды пайдаланып, А және В коэффициенттерін табамыз:
y x=0 = −g o2 + A0 + B = y0 ; B = y0.
2
dy = −g 0 + A = 0; A = 0.
dx
x=0
А және В коэффициенттерін теңдеудің шешіміне қойсақ
y = −g x2 + 0x + y0. (5)
2
Екінші ретті дифференциалды теңдеу бірқалыпты үдемелі қозғалыс
теңдеуіне ұқсас
s = s0 + 0t + g t2
2
Зертханалық сабақ №10 . Көкжиекке бұрышпен лақытырылған
дененің қозғалыс траекториясын сызу
№2.3.3 Дене 100 700 аралығында көкжиекке бұрыш жасай
лақытырылған. Көкжиекке бұрыш жасай лақытырылған дененің 200
бұрыш сайын 20 м / с және 30 м / с бастапқы жылдамдықпен лақтырылған
кездегі қозғалыс траекториясын сызыңыз.
Берілгені:
100 700
01 = 20 м / с
02 = 30 м / с
g = 9,8 м / с2
Табу керек: y(х) − ?
Сурет 1. Көкжиекке бұрышпен лақытырылған
дененің қозғалыс траекториясы
Есеп дененің қозғалысына арналған. Көлденең қозғалған дененің
жылдамдығы:
0x = 0 cos (1)
(1-суреттегідей) жылдамдықпен бірқалыпты қозғалады; сондықтан дененің х
өсә бойымен қозғалысы
x = 0xt . (2)
134
Ал у өсі бойынша жоғары қарай қозғалғанда дене g еркін түсу үдеуі
бағытына қарама-қарсы қозғалады. у өсі бойынша бастапқы жылдамдық
0у = 0 sin . (3)
Дененің жылдамдығы
у = 0у − gt . (4)
(4)-теңдеуден уақыт бойынша туынды алып, сонда у ось бойынша дененің
қозғалыс траекториясын табайық:
t t (0 у = 0 уt gt 2
0 2
y dt
0
y= = − gt)dt − . (5)
Траекторияның ең биік нүктесінде у = 0 болғандықтан (4) теңдеуден
дененің t1 көтерілу уақытын мына формуладан табамыз:
0 у − gt = 0 t1 = 0 y . (6)
g
Дененің толық ұшу уақыты t2 = 2t1, себебі көтерілу уақыты дененің түсу
уақытына тең.
Көтерілу биіктігі ymax = 2 , ұшу қашықтығы xmax = 20x0 y .
0у g
2g
Дененің қозғалыс траекториясы (5)-теңдеуге (6) дененің көтерілу
уақытының формуласын қойып, алатынымыз:
y = 0 yt1 − gt12 = t1 = 0 y = 0 y x − g x2.
2 g 0 x 202x
Python тіліндегі программасы
from tkinter import *
import math
import time
TIMEOUT = 100
LIMIT = 1950
#ЕСЕПТІҢ ШАРТЫ
g = 9.8
v0 = int(input(print('Бастапқы жылдамдықты енгіз v0=',)))
p = 3.14
a =int(input(print('Лақтыру бұрышын енгіз а=',)))
b = p * a / 180
u = v0 * math.cos(b)
w = v0 * math.sin(b)
#ЕСЕПТІҢ АНИМАЦИЯСЫ
def coord(i):
x = float(0.03 * i)
y = w * x / u - g * x ** 2 / (2 * u ** 2)
x = 60 + 10 * x
y = 350 - 10 * y
return x, y
#ЕСЕПТІҢ СЫЗБАСЫ
135
root = Tk()
canv = Canvas(root, width=750, height=450, bg="white")
canv.create_line(20, 350, 700, 350, width=2, arrow=LAST) # x
canv.create_text(50,50,text="y", width=3,
fill='red',font=('Times', 14))#y
canv.create_line(60, 60, 60, 500, width=2, arrow=BOTH) # y
canv.create_text(710,350,text="x",
width=4,fill='red',font=('Times', 14))#x
canv.create_line(60, 350, 160,350, width=2,
fill='red',arrow=LAST)#vx
canv.create_line(60, 350, 60,212, width=2, arrow=LAST,
fill='red')#vy
canv.create_line(60, 350, 160,212, width=2, arrow=LAST,
fill='red')#vy
canv.create_line(60, 212, 160,212, width=2, arrow=LAST,
fill='blue')#vy
canv.create_line(160, 350, 160,212, width=2, arrow=LAST,
fill='blue')#vy
canv.create_text(100,330,text="vx", width=2,font=('Times', 14))
canv.create_text(70,260,text="vy", width=2,font=('Times', 14))
canv.create_line(20, 178, 350,178, width=2, fill='green')#h_max
canv.create_text(40,250,text="h_max", width=2,font=('Times',
14))#h_max
canv.create_line(30, 178, 30,351, width=2,
fill='green',arrow=BOTH)#h_max
#L
canv.create_line(60, 350, 60,450, width=3, fill='green')#L
canv.create_line(630, 350, 630,450, width=3, fill='green')#L
canv.create_line(60, 420, 630,420, width=3,
fill='green',arrow=BOTH)#L
canv.create_text(300,430,text="L", width=2,font=('Times', 14))
# Траекториясы сызу
for i in range(0, LIMIT):
x, y = coord(i)
canv.create_line(x, y, x + 1, y + 1, fill='red')
# Доптың қозғалсы
canv.pack()
root.mainloop()
Программалау нәтижесі:
Бастапқы жылдамдықты енгіз v0=
None24
Лақтыру бұрышын енгіз а=
None50
136
137
Дәріс № 11. Екінші ретті дифференциалдық теңдеулерді шешу
4.7. Екінші ретті дифференциалдық теңдеулерді шешу
(Бурсиан Э.В. 84 бет)
Айталық, мысалы, мына түрдегі дифференциалдық теңдеу берілсін
d2y + A dy = f (x, y) . (4.7.1)
dx 2 dx (4.6.5)
Әуелі оны (4.6.5) түріне келтірейік
dy / dx = f (x, y) .
Ол үшін мынадай алмастыру жасаймыз:
z = dy (4.7.2)
dx (4.7.3)
Сонда
dz + Az = f (x, y) ,
dx
яғни (4.7.1) екінші ретті теңдеу (4.7.2) және (4.7.3) бірінші ретті екі теңдеуге
келтірілді. Осы екі теңдеуді жуықталған қатынастарға алмастырамыз:
yn+1 = yn + znx; (4.7.4)
(4.7.5)
zn+1 = zn + f (xn , yn ) − Azn x;
және егер қандай да бір хn мәнінде yn мен zn = dy белгілі болса, онда
dx n
(4.7.4) және (4.7.5) формулалары х0 , y0 , z0 -ден бастап х1, y1, z1 және әрі
қарай қанша мән қажет болса, есептей беруге мүмкіндік береді. Сондықтан,
қарапайым жағдайда алдыңғы дәрістегі келтірілген программаға тек хn мен
yn -ді ғана емес, zn -ді (4.7.5) қатынас бойынша есептейтін қосымша
жолдарды енгізейік. Нәтижені баспаға шығару кезінде zn -ді қосуға болады,
егер әрине қажет болса.
Мысал келтірейік. Айталық алғашқы шарттары
x0 = 0, dy = 40, y0 = 0 және а = −2, b = 30 болған кездегі
dx 0
d 2 y = a dy + b (4.7.6)
dx 2 dx
138
теңдеуін шешу қажет болсын. Жуықтау қатынастарын жазайық
yn+1 = yn + znx; zn+1 = zn + (azn + b)x; xn+1 = xn + x (4.7.7)
Нұсқау алдыңғы есепке ұқсас. Тек z0 және b енгізіледі. Баспаға екі сан
емес, үш сан хn , yn , zn шығарылады.
Шешуі: х = 0,1; N = 2 деп алайық. Нұсқау бойынша іс әрекет жасап,
алатынымыз
2 ретті дифференциалдық теңдеуді шешу 1
Python тіліндегі программасы
print('Екінші ретті дифренцалдық теңдеу')
x=0; y=0; z=40;
a=-2; b=30; h=0.1
n=int(input(print ('n санын енгіз n=',)))
for i in range(0,n):
z=z+(a*z+b)*h
y=y+z*h
x=x+0.01
print ('x=', round(x, 3),'z=', round(z, 3),'y=', round(y,
3),)
Программалау нәтижесі:
Екінші ретті дифренцалдық теңдеу
n санын енгіз n=
None2
x= 0.01 z= 35.0 y= 3.5
x= 0.02 z= 31.0 y= 6.6
Көріп тұрғанымыздай, бұл жол беруге болмайтын дөрекілік: z пен y
өзгерісі алғашқы мәндермен салыстырғанда айтарлықтай өзгеріске
ұшырамайды.
х -ті 0,5-ке азайтып, N = 10 деп алайық. Сонымен х = 0,5 және
N = 10 болған кездегі нәтиже мынадай:
139
2 ретті дифференциалдық теңдеуді шешу 2
Python тілінде программалау
print('Екінші ретті дифренцалдық теңдеу')
x=0; y=0; z=40;
a=-2; b=30; h=0.5
n=int(input(print ('n санын енгіз n=',)))
for i in range(0,n):
z=z+(a*z+b)*h
y=y+(z*h)
x=x+0.01
print ('x=', round(x, 3),'z=', round(z, 3),'y=', round(y,
3),)
Программалау нәтижесі:
Екінші ретті дифренцалдық теңдеу
n санын енгіз n=
None2
x= 0.01 z= 15.0 y= 7.5
x= 0.02 z= 15.0 y= 15.0
Жауап 51-суретте график түрінде келтірілген.
Алдында ескерткеніміздей, дифференциальдық теңдеулерді шешудің мұндай
әдісі өте қарапайым және онша жақсы емес. Бұдан да жетілдірілген әдістер
бар. Бірақ (4.6.6) немесе (4.7.4), (4.7.5) түріндегі қатынастарды баяндалған
әдіспен көптеген қарапайым есептерді шығаруға қолдануға болады.
Практикалық сабақ №11. Екінші ретті дифференциалдық теңдеу.
Поездың үдемелі қозғалысы. Жылдамдық.
№ 2.4.10. Поездың үдемелі қозғалысы. Жылдамдық. Тепловоздың
тарту күші 250 кН болғанда массасы 2000 т жүк поезды қозғалыс
басталғаннан бастап 1 мин уақыт өткенде қандай жылдамдыққа ие
болатынын а) үйкелісті ескермей б) ауаның тұтқырлық үйкелісін ескеріп
табыңыздар ( A =104 Н с / м , B = 30 H c3 / м3 ).
140
Берілгені: Шешуі: 1) үйкелісті ескермеген кезде Ньютонның
m = 2000 т = 2 106 кг ІІ заңы бойынша
FT = 250 кН = 2,5 105 Н FT = ma . (1)
1) − ? FT , a
2) A =104 Н с / м
немесе
B = 30 H c3 / м3
− ? FT = ma = FT t = 2,5 105 Н 60 с = 7,5 м / с .
m 2 106 кг
2) ауаның тұтқырлық үйкелісін ескерген кезде Ньютонның ІІ заңы бойынша:
mx = FT − A − B3 (1)
немесе
d = FT − A − B 3 . (2)
dt m m m
(2)-теңдеу
d = F ()
dt
түрдегі бірінші ретті дифференциалдық теңдеу, ол 4.6 және 4.7 бөлімдерінде
(Бурсиан Э.В. 80-86 бет) келтірілген теңдеулер бойынша былай жазылады:
F()t; n+1 = n + F (n )t .
Әуелі 0 = 0 деп алып, F (0 ) -ді есептейді, t -ның мәнін беріп келесі
1 -ді табады. Содан кейін 0 -дың орнына 1 -дің мәнін алып, дәл осылай
жаңа 2 -нің мәнін табады, сөйтіп әрі қарай n -ның орнына n+1 -дің мәнін
алып, дәл осылай жаңа n+1 -дің мәнін табады және де t = nt жалпы уақытты
қадағалап отыру қажет. Ол Т =1 мин = 60 c -қа тең болғанда, есептеуді
тоқтатып, -ның соңғы мәнін экранға шығару қажет.
Python тіліндегі программасы
T=0; v=0; F=2.5*10**5
A=10**4; B=30; T0=60; T1=1; m=2*10**6
v1=F*T0/m
for i in range(0,60):
v = v + (F / m - A * v / m - B * v ** 3 / m) / T1
T=T+T1
print(' T=',T, 'с',' 1) үйкелісті ескермеген кезде
v1=',round(v1, 3), 'м/с')
print(' T=',T, 'с',' 2) үйкелісті ескергенде v=',round(v, 3),
'м/с')
141
Программалау нәтижесі:
T= 60 с 1) үйкелісті ескермеген кезде v1= 7.5 м/с
T= 60 с 2) үйкелісті ескергенде v= 6.433 м/с
Сонымен, алғашқы 1 минуттағы қозғалыс кезіндегі жылдамдықтардың
айырмашылығы айтарлықтай көп емес. Ал 20 минуттан кейін жылдамдық
қалай өзгеретінін Т0=1200 с деп өзгертіп есептеп көруге болады.
Python тілінде программасы
T=0; v=0; F=2.5*10**5
A=10**4; B=30; T0=1200; T1=1; m=2*10**6
v1=F*T0/m
for i in range(0,T0):
v = v + (F / m - A * v / m - B * v ** 3 / m) / T1
T=T+T1
print(' T=',T, 'с',' 1) үйкелісті ескермеген кезде v1=',round(v1, 3),
' м/с')
print(' T=',T, 'с',' 2) үйкелісті ескергенде v=',round(v, 3), ' м/с')
Программалау нәтижесі:
T= 1200 с 1) үйкелісті ескермеген кезде v1= 150.0 м/с
T= 1200 с 2) үйкелісті ескергенде v= 14.959 м/с
Программалау нәтижесінен көрініп тұрғандай үйкелісті ескермеген және
үйкелісті ескерген кездегі жылдамдықтардың айырмашылығы өте көп, яғни
нақты есептеулерде үйкелісті міндетті түрде ескеру қажет. Жуықтап
есептеулерде үйкелісті жоқ деп болжауға бола ма? Жоқ, болмайды.
Зертханалық сабақ № 11. Екінші ретті дифференциалдық
теңдеулерді графиктік тәсілмен шешу
2 ретті дифференциалдық теңдеуді шешу 1
Python тіліндегі программасы
print('Екінші ретті дифренцалдық теңдеу')
x=0; y=0; z=40;
a=-2; b=30; h=0.1
n=int(input(print ('n санын енгіз n=',)))
for i in range(0,n):
z=z+(a*z+b)*h
y=y+z*h
x=x+0.01
print ('x=', round(x, 3),'z=', round(z, 3),'y=', round(y,
3),)
Программалау нәтижесі:
Екінші ретті дифренцалдық теңдеу
n санын енгіз n=
None2
x= 0.01 z= 35.0 y= 3.5
x= 0.02 z= 31.0 y= 6.6
142
Көріп тұрғанымыздай, бұл жол беруге болмайтын дөрекілік: z пен y
өзгерісі алғашқы мәндермен салыстырғанда айтарлықтай өзгеріске
ұшырамайды.
х -ті 0,5-ке азайтып, N = 10 деп алайық. Сонымен х = 0,5 және
N = 10 болған кездегі нәтиже мынадай:
2 ретті дифференциалдық теңдеуді шешу 2
Python тіліндегі программасы
print('Екінші ретті дифренцалдық теңдеу')
x=0; y=0; z=40;
a=-2; b=30; h=0.5
n=int(input(print ('n санын енгіз n=',)))
for i in range(0,n):
z=z+(a*z+b)*h
y=y+(z*h)
x=x+0.01
print ('x=', round(x, 3),'z=', round(z, 3),'y=', round(y,
3),)
Программалау нәтижесі:
Екінші ретті дифренцалдық теңдеу
n санын енгіз n=
None2
x= 0.01 z= 15.0 y= 7.5
x= 0.02 z= 15.0 y= 15.0
Жауап 51-суретте график түрінде келтірілген.
143
2 ретті диф теңдеу шешімінің графигі
Python тілінде программасы
from tkinter import*
root = Tk()
canv = Canvas(root, width=500, height=450, bg="white")
x=0;y=0; z=40;
a=-2; b=30; h=0.005;
canv.create_line(0, 400, 400, 400,width=2, arrow=LAST) #{ось Оу}
canv.create_line(100, 430, 100, 100,width=2, arrow=LAST) #{ось
ОХ}
canv.create_text(80,100,text='y,z',font=('Times' ,14))
canv.create_text(410,420,text='x,m',font=('Times' ,14))
canv.create_text(290,330,text='z',font=('Times' ,14))
canv.create_text(290,200,text='y',font=('Times' ,14))
x= 0
while x<=100:
y = y + (z * h) * 0.1
z = z + ((a * z + b) * h) * 0.1
canv.create_line(round(3*x) + 100, 400 -
round(3*y),round(3*x) + 100+1, 400 - round(3*y)+1, fill='red' )
canv.create_line( round(3*x) + 100, 400 - round(3*z),
round(3*x) + 100+1, 400 - round(3*z)+1, fill='green')
x = x + 0.01
canv.pack()
root.mainloop()
Программалау нәтижесі:
2 ретті диф теңдеу шешімінің графигі 2
Python тілінде программасы
from tkinter import*
root = Tk()
canv = Canvas(root, width=500, height=450, bg="white")
x=0;y=0; z=40;
a=-2; b=30; h=0.005;
canv.create_line(0, 400, 400, 400,width=2, arrow=LAST) #{ось Оу}
canv.create_line(100, 430, 100, 100,width=2, arrow=LAST) #{ось
ОХ}
144
canv.create_line(100,200,90,200)# уосі бойынша
canv.create_text(80,200,text='60')
canv.create_line(100,240,90,240)
canv.create_text(80,240,text='50')
canv.create_line(100,280,90,280)
canv.create_text(80,280,text='40')
canv.create_line(100,320,90,320)
canv.create_text(80,320,text='30')
canv.create_line(100,360,90,360)
canv.create_text(80,360,text='20')
canv.create_line(100,400,90,400)
canv.create_line(140,400,140,410)#х ось
canv.create_text(140,420,text='1')
canv.create_line (180,400,180,410)
canv.create_text(180,420,text='1.5')
canv.create_line (220,400,220,410)
canv.create_text(220,420,text='2')
canv.create_line (260,400,260,410)
canv.create_text(260,420,text='2.5')
canv.create_line (300,400,300,410)
canv.create_text(300,420,text='3')
canv.create_line (340,400,340,410)
canv.create_text(80,100,text='y,z',font=('Times' ,14))
canv.create_text(410,420,text='x,m',font=('Times' ,14))
canv.create_text(290,330,text='z',font=('Times' ,14))
canv.create_text(290,200,text='y',font=('Times' ,14))
x= 0
while x<=100:
y = y + (z * h) * 0.1
z = z + ((a * z + b) * h) * 0.1
canv.create_line(round(3*x) + 100, 400 -
round(3*y),round(3*x) + 100+1, 400 - round(3*y)+1, fill='red' )
canv.create_line( round(3*x) + 100, 400 - round(3*z),
round(3*x) + 100+1, 400 - round(3*z)+1, fill='green')
x = x + 0.01
canv.pack()
root.mainloop()
Программалау нәтижесі
145
Дәріс №12. Python программалау тіліндегі ішкі программалар
Ішкі программаның тағайындалуы:
Программаны жасау барысында кейде қайталанатын іс әрекеттердің
тобы пайда болады немесе программаны құрылымы иерархиялық
функциональды модульдерге бөлу қажеттілігі туындайды. Сондықтан
программалаудың барлық тілінде ішкі программаны ұйымдастыру құралдары
бар.
Паскальдағы ішкі программа негізгі программаның бөлігі болып
табылады, оның сипаттамасы негізгі программаның var бөлімі мен оның
программалық болгының (алғашқы begin) арасында орналасады. Ішкі
программа бірнеше болуы мүмкін, олардың сипаттамалары бір бірінен кейін
ерікті ретпен орналастырылады.
Ішкі программа – жалпылама сипаттағы есептерді шығару барысында
көп рет қолданылатын арнайы жазылған алгоритм.
Паскальда ішкі программаны екі түрге ажыратады: процедуралар және
функциялар. Олардың арасындағы негізгі айырмашылық процедура өзінің
жұмысының нәтижесінде мәліметтердің кез келген санын, ал функция – тек
бір ғана мән алады.
Функция
◼ Бұл аты мен нәтижесі бар операторлардың тізбесі;
◼ Негізгі программадан тағайындалған мәліметтерді өңдеп, содан кейін
алынған нәтижені қайтарады;
◼ Функция сілтеменің көмегімен шақырылады. Сілтеме – бұл дөңгелек
жақшаның ішінде функцияның аргументтері жазылған функцияның аты.
Python-да функцияларды үш топқа бөлуге болады:
◼ Стандартты функциялар (abs(x), sqrt(x), sqr(x), sin(x), cos(x) және
т.б.);
◼ Программистің функциялары (программист өзінің меншікті
функциясын жариялайды және әрі қарай оны стандартты функция сияқты
қолдана алады);
◼ Кітапханалық функциялар (стандартты кітапханалық модульдер).
Айнымалыларды жариялау
Ғаламдық (глобальды) айнымалылар – негізгі программада
жарияланған айнымалылар, ол программаның барлық операторларына, тіпті
процедуралар мен функциялар операторларына қол жетімді.
Локальды айнымалылар – процедураларда немесе функцияларда
жарияланған айнымалылар. Олар тек процедуралар мен функциялар
операторларына ғана қол жетімді.
Факториалды функция арқылы есептеу
146
Есеп 1. (m!−k!) факториалын есептейтін программаны жаз.
Python тілінде программасы
print('(m!-k!)факториалын есептейтін программаны жаз.')
f=1
p=1
m=int(input(print ('m санын енгіз m=')))
for i in range(1,m+1):
f=f*i
print('m!=', f)
k=int(input(('k санын енгіз k=')))
for i in range(1,k+1):
p=p*i
print('k!=', p)
Fact=f-p
print ('(m!-k!)=',Fact)
Программаның нәтижесі
(m!-k!)факториалын есептейтін программаны жаз.
m санын енгіз m=
None6
m!= 720
k санын енгіз k=3
k!= 6
(m!-k!)= 714
Есеп 2. (n!−m!) k! факториалын есептейтін программаны жаз.
Факториал (!) – 1-ден бастап сол санға дейінгі барлық сандардың көбейтіндісі
(Мысалы, 4!=1*2*3*4=24).
Python тілінде программасы
print('(n!-m!)*k! факториалын есептейтін программаны жаз.')
f=1
p=1
t=1
n=int(input(print ('m санын енгіз n=')))
for i in range(1,n+1):
f=f*i
print('n!=', f)
m=int(input(('m санын енгіз m=')))
for i in range(1,m+1):
p=p*i
print('m!=', p)
k=int(input(print ('k санын енгіз k=')))
for i in range(1,k+1):
t=t*i
print('k!=', t)
Fact=(f-p)*t
print ('(n!-m!)*k!=',Fact)
147
Программаның нәтижесі
(n!-m!)*k! факториалын есептейтін программаны жаз.
m санын енгіз n=
None2
n!= 2
m санын енгіз m=4
m!= 24
k санын енгіз k=
None5
k!= 120
(n!-m!)*k!= -2640
Мысалы:
Функцияны есептеу
Дененің еркін түсу жылдамдығын есептеу
Санның n-ші дәрежесін есептеу
1. Функцияны есептеу n + n
Python тіліндегі программасы
import math
def function():
n=int(input('n-санын енгізіңіз n='))
y=math.sqrt(n)+n
print (round(y,3))
function()
Программалау нәтижесі
n-санын енгізіңіз n=25
30.0
2. Дененің еркін түсу жылдамдығын есептеу
Python тіліндегі программасы
def erkin():
t = int(input('t-уақытты енгізіңіз t='))
fun=9.8*t
v = fun
print(round(v,2),'м/с')
erkin()
Программалау нәтижесі
t-уақытты енгізіңіз t=10
98.0 м/с
3. Санның n-ші дәрежесін есептеу
Python тілінде программасы
def darezhe():
f=1
x=int(input('x-санын енгізіңіз x='))
n=int(input('х- санның дәрежесін енгізіңіз n='))
for i in range(n):
f=f*x
148
print (x, 'санының', n ,' дәрежесі', x,'**',n,'=',f)
darezhe()
Программалау нәтижесі
x-санын енгізіңіз x=4
х- санның дәрежесін енгізіңіз n=3
4 санының 3 дәрежесі 4 ** 3 = 64
Студенттердің өзіндік жұмысына тапсырмалар:
0,5 секунд қадаммен алғашқы 10 секунд ішіндегі дененің еркін түсу
жылдамдығының кестесін шығаратын программаны құрыңыз.
Практикалық сабақ №12 Екінші ретті дифференциальдық теңдеу
Python программалау тілі арқылы шешу. Дененің ауада құлауы есебі
және графигі
№2.4.8. Дененің ауада құлауы. Массасы m = 70 кг дене биіктіктен
ауада құлайды. Ауаның кедергі күші Fкедергi = A + B3 , мұндағы A және B
коэффициенттері дененің өлшемдерімен анықталады. Айталық,
коэффициенттер мына мәндерге тең болсын: A = 5 Н с / м , B =10−2 H c3 / м3 ).
Жылдамдықтың құлау басталғаннан кейінгі уақытқа тәуелділігін
табыңыздар. График сызыңыздар.
Шешуі. Қозғалыс теңдеуі:
d2x( )m
dt 2 = mg − А + B3 . (1)
(4.7)-бөлімнің теңдеулеріне келтіреміз: (2)
(3)
dx ; d = g − A + B3 ; (4)
dt dt m
xn+1 = xn + nt ;
( )n+1 = n + g − А + B3 / m t ;
tn+1 = tn + t .
Соңғы (2), (3), (4)-формулалар программаның негізін құрайды.
Python тілінде программасы
print('Ауада дененің құлауы есебі')
t=0; v=0; x=0;A=5;B=10**-2; M=70; g=9.8; t1=0.1;
for j in range(0,15):
for i in range(0,10):
v=v+(g-(A*v+B*v**3)/M)*t1
x=x+v*t1
t=t+t1
149