From a9286dbd8009c8c4b884cb5e3e3ad4f07b0b4064 Mon Sep 17 00:00:00 2001 From: MakhnovGA Date: Fri, 5 Dec 2025 12:38:31 +0300 Subject: [PATCH] done lab8 --- TEMA8/MM0.py | 2 + TEMA8/MM1.py | 22 ++++++ TEMA8/MM2.py | 23 ++++++ TEMA8/Mod0.py | 6 +- TEMA8/Module1.py | 4 ++ TEMA8/Module2.py | 17 +++++ TEMA8/Module3.py | 18 +++++ TEMA8/ModuleIKZ.py | 13 ++++ TEMA8/numbers.txt | 3 + TEMA8/numbers2.txt | 2 + TEMA8/report.md | 172 +++++++++++++++++++++++++++++++++++++++++++++ TEMA8/result.txt | 50 +++++++++++++ TEMA8/task.md | 66 +++++++++++++++++ TEMA8/task.py | 17 +++++ TEMA8/test.md | 42 +++++++++++ TEMA8/test.py | 31 ++++++++ 16 files changed, 485 insertions(+), 3 deletions(-) create mode 100644 TEMA8/MM0.py create mode 100644 TEMA8/MM1.py create mode 100644 TEMA8/MM2.py create mode 100644 TEMA8/Module1.py create mode 100644 TEMA8/Module2.py create mode 100644 TEMA8/Module3.py create mode 100644 TEMA8/ModuleIKZ.py create mode 100644 TEMA8/numbers.txt create mode 100644 TEMA8/numbers2.txt create mode 100644 TEMA8/report.md create mode 100644 TEMA8/result.txt create mode 100644 TEMA8/task.md create mode 100644 TEMA8/task.py create mode 100644 TEMA8/test.md create mode 100644 TEMA8/test.py diff --git a/TEMA8/MM0.py b/TEMA8/MM0.py new file mode 100644 index 0000000..535feb8 --- /dev/null +++ b/TEMA8/MM0.py @@ -0,0 +1,2 @@ +import MM2 +print('y=',MM2.vyhod) \ No newline at end of file diff --git a/TEMA8/MM1.py b/TEMA8/MM1.py new file mode 100644 index 0000000..d6828f2 --- /dev/null +++ b/TEMA8/MM1.py @@ -0,0 +1,22 @@ +def realdvig(xtt,kk1,TT,yti1,ytin1): + #Модель реального двигателя + yp=kk1*xtt #усилитель + yti1=yp+yti1 #Интегратор + ytin1=(yti1+TT*ytin1)/(TT+1) + return [yti1,ytin1] + +def tahogen(xtt,kk2,yti2): + #Модель тахогенератора + yp=kk2*xtt #усилитель + yti2=yp+yti2 #интегратор + return yti2 + +def nechus(xtt,gran): + #зона нечувствит + if xtt(-gran): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt \ No newline at end of file diff --git a/TEMA8/MM2.py b/TEMA8/MM2.py new file mode 100644 index 0000000..cbba0a3 --- /dev/null +++ b/TEMA8/MM2.py @@ -0,0 +1,23 @@ +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1=float(znach[0]) +T=float(znach[1]) +k2=float(znach[2]) +Xm=float(znach[3]) +A=float(znach[4]) +F=float(znach[5]) +N=int(znach[6]) + +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) + +import MM1 as mod +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1) + yi2=mod.tahogen(yin1,k2,yi2) + yt=mod.nechus(yin1,Xm) + vyhod.append(yt) diff --git a/TEMA8/Mod0.py b/TEMA8/Mod0.py index 6337fc3..2b1024c 100644 --- a/TEMA8/Mod0.py +++ b/TEMA8/Mod0.py @@ -1,9 +1,9 @@ #Модуль Mod0 import Mod1 -print('perm1=',Mod1.perm1) +print('perm1=',Mod1.perm1*2) from Mod2 import alpha as al tt=al() -print('tt=',tt) +print('tt=',tt*2) from Mod2 import beta qq=beta(float(tt)) -print('qq=',qq) +print('qq=',qq*2) diff --git a/TEMA8/Module1.py b/TEMA8/Module1.py new file mode 100644 index 0000000..a965bec --- /dev/null +++ b/TEMA8/Module1.py @@ -0,0 +1,4 @@ +def numbers_reading(file_name = str): + with open(file_name) as f: + fin_list = list(map(float, f.read().split())) + return fin_list diff --git a/TEMA8/Module2.py b/TEMA8/Module2.py new file mode 100644 index 0000000..98bd4d7 --- /dev/null +++ b/TEMA8/Module2.py @@ -0,0 +1,17 @@ +import math +def correlation(l1, l2): + min_lenght = min(len(l1), len(l2)) + sum1 = sum(l1[:min_lenght]) + sum2 = sum(l2[:min_lenght]) + sum1sq = sum(num ** 2 for num in l1) + sum2sq = sum(num ** 2 for num in l2) + sum12 = sum(x * y for x, y in zip(l1, l2)) + + part1 = min_lenght * sum12 - sum1 * sum2 + part2 = math.sqrt((min_lenght * sum1sq - sum1 ** 2) * (min_lenght * sum2sq - sum2 ** 2)) + if part2 == 0: + print("Деление на ноль") + return + else: + corr = part1 / part2 + return corr \ No newline at end of file diff --git a/TEMA8/Module3.py b/TEMA8/Module3.py new file mode 100644 index 0000000..7f76f2b --- /dev/null +++ b/TEMA8/Module3.py @@ -0,0 +1,18 @@ +from Module1 import numbers_reading +from Module2 import correlation +import os + +os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8") + +file1 = input("Введите имя первого файла: ") +file2 = input("Введите имя второго файла: ") + +arr1 = numbers_reading(file1) +arr2 = numbers_reading(file2) + +if arr1 is None or arr2 is None: + print("Не удалось считать данные из файлов.") +else: + corr = correlation(arr1, arr2) + if corr is not None: + print(f"Коэффициент корреляции: {corr:.2f}") \ No newline at end of file diff --git a/TEMA8/ModuleIKZ.py b/TEMA8/ModuleIKZ.py new file mode 100644 index 0000000..df9714d --- /dev/null +++ b/TEMA8/ModuleIKZ.py @@ -0,0 +1,13 @@ +import numpy as np +import os + +os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8") + +def generate_sinusoidal_signal(amplitude, period, phase, num_samples, filename): + n = np.arange(num_samples) + omega = 2 * np.pi / period #угловая частота + signal = amplitude * np.sin(omega * n + phase) + with open(filename, 'w+') as file: + for value in signal: + file.write(f"{value}\n") # 6 знаков после запятой + return signal \ No newline at end of file diff --git a/TEMA8/numbers.txt b/TEMA8/numbers.txt new file mode 100644 index 0000000..1fe69a2 --- /dev/null +++ b/TEMA8/numbers.txt @@ -0,0 +1,3 @@ +1 2 3 4 2 34 4 12 4.5 6 4 3.2 4 56 3 5 6 +1 2.3 44 3 3 4 67 5 5 6 78 4 3 5 +3 4 5 2 3 5 \ No newline at end of file diff --git a/TEMA8/numbers2.txt b/TEMA8/numbers2.txt new file mode 100644 index 0000000..3d8fab4 --- /dev/null +++ b/TEMA8/numbers2.txt @@ -0,0 +1,2 @@ +1 2 3 7 3 6 43.7 5 3 1 3345.0 12 512 34 +1 3 4 2.2 3 4 67 74 2 46 42 45 7 8.3 \ No newline at end of file diff --git a/TEMA8/report.md b/TEMA8/report.md new file mode 100644 index 0000000..42934a4 --- /dev/null +++ b/TEMA8/report.md @@ -0,0 +1,172 @@ +# Отчет по теме 8 + +Махнов Георгий, А-01-23 + +## Тема 8. Модули и структурирование программы +## 2. Создание и использование модулей в среде Python. + +## 2.1. Запуск модуля на выполнение путем его импорта. + +```py +>>> import os,sys,imp +__main__:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses +>>> os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8") +>>> import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> Mod1.perm1 +'5' +>>> import Mod1 +>>> imp.reload(Mod1) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +>>> Mod1.perm1 +'3' +``` + +## 2.2. Импортированные модули заносятся в словарь – значение атрибута sys.modules. +```py +>>> print(sorted(sys.modules.keys())) +['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope'] +>>> sys.modules.pop('Mod1') + +>>> print(sorted(sys.modules.keys())) +['__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', +'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope'] +>>> import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> print(sorted(sys.modules.keys())) +['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope'] +>>> sys.modules.pop('Mod1') + +>>> print(sorted(sys.modules.keys())) +['__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', +'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope'] +``` +## 2.3. Запуск модуля на выполнение с помощью функции exec(). +```py +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 +>>> perm1 +'3' +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 6 +Mod1:Значение perm1= 6 +>>> perm1 +'6' +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 9 +Mod1:Значение perm1= 9 +>>> perm1 +'9' +``` + +## 2.4. Использование инструкции from … import … + +Пример 1. +```py +>>> from Mod1 import perm1 +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 +>>> perm1 +'3' +>>> print(sorted(sys.modules.keys())) +['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope' +``` +Mod1 появился в памяти. Программа вызвалась из модуля. perm1 имеет заданное значение 3. + +Пример 2. +```py +>>> from Mod2 import beta +>>> g = beta(2) +****BETA**** +>>> g +535.4916555247646 +>>> print(sorted(sys.modules.keys())) +['Mod1', 'Mod2', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp1251', +'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'mpl_toolkits', 'msvcrt', 'nt', 'ntpath', 'operator', 'os', 'os.path', 'platform', 'pywin32_bootstrap', 'pywin32_system32', 're', 'reprlib', 'select', 'selectors', 'signal', 'site', 'socket', +'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'traceback', 'types', 'warnings', 'winreg', 'zipimport', 'zope'] +>>> alpha() +Traceback (most recent call last): + File "", line 1, in +NameError: name 'alpha' is not defined +>>> from Mod2 import alpha as al +>>> al() +****ALPHA**** +Значение t=3 +'3' +>>> del al, beta +>>> from Mod2 import alpha as al, beta as bt +>>> del al, bt +>>> from Mod2 import * +>>> tt=alpha() +****ALPHA**** +Значение t=0.12 +>>> uu=beta(float(tt)) +****BETA**** +>>> uu +1.4578913609506803 +``` +## 3. Создание многомодульных программ. +## 3.1. Пример простой многомодульной программы. +```py +>>> import Mod0 +perm1= 3 +****ALPHA**** +Значение t=3 +tt= 3 +****BETA**** +qq= 12391.647807916694 +>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 +'3' +12391.647807916694 +'3' +``` + + +## 3.2. Еще пример. + +```py +>>> import MM0 +k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000 +y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, -17303.76245797908, 20708.797073656922, 23131.712847291765, -96666.92589990808,...] +``` + +## 3.3. Области действия объектов в модулях. +```py +>>> from Mod2 import alpha as al, beta as bt +>>> al(bt()) +Traceback (most recent call last): + File "", line 1, in +TypeError: beta() missing 1 required positional argument: 'q' +>>> bt(al()) +****ALPHA**** +Значение t=3 +****BETA**** +Traceback (most recent call last): + File "", line 1, in + File "C:\Users\gmack\OneDrive\Рабочий стол\3 KURS\LABS\python-labs\TEMA8\Mod2.py", line 9, in beta + expi=q*math.pi +TypeError: can't multiply sequence by non-int of type 'float' +>>> t +Traceback (most recent call last): + File "", line 1, in +NameError: name 't' is not defined +>>> expi +Traceback (most recent call last): + File "", line 1, in +NameError: name 'expi' is not defined +>>> import Mod0 +perm1= 55 +****ALPHA**** +Значение t=3 +tt= 33 +****BETA**** +qq= 24783.295615833387 +``` diff --git a/TEMA8/result.txt b/TEMA8/result.txt new file mode 100644 index 0000000..9652a18 --- /dev/null +++ b/TEMA8/result.txt @@ -0,0 +1,50 @@ +1.4142135623730951 +1.7820130483767356 +1.9753766811902755 +1.9753766811902755 +1.7820130483767358 +1.4142135623730951 +0.9079809994790937 +0.31286893008046196 +-0.31286893008046146 +-0.9079809994790933 +-1.414213562373095 +-1.7820130483767356 +-1.9753766811902753 +-1.9753766811902755 +-1.782013048376736 +-1.4142135623730954 +-0.9079809994790939 +-0.3128689300804622 +0.31286893008046124 +0.907980999479093 +1.4142135623730947 +1.7820130483767356 +1.9753766811902753 +1.9753766811902758 +1.7820130483767351 +1.4142135623730967 +0.9079809994790926 +0.3128689300804642 +-0.31286893008046274 +-0.9079809994790913 +-1.4142135623730958 +-1.7820130483767345 +-1.9753766811902755 +-1.9753766811902758 +-1.7820130483767354 +-1.414213562373097 +-0.9079809994790928 +-0.31286893008046446 +0.3128689300804625 +0.907980999479091 +1.4142135623730956 +1.7820130483767345 +1.9753766811902755 +1.975376681190276 +1.7820130483767354 +1.4142135623730971 +0.907980999479093 +0.3128689300804647 +-0.3128689300804623 +-0.9079809994790908 diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..6f3c78c --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,66 @@ +# Общее контрольное задание по теме 8 + +Махнов Георгий, А-01-23 + +## Задание +Общее контрольное задание. +Разработайте программу, состоящую из трех модулей: +- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу. +- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. +- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. +Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. + +## Выполнение +```py + +#Module 1 + +def numbers_reading(file_name = str): + with open(file_name) as f: + fin_list = list(map(float, f.read().split())) + return fin_list + +#Module 2 +import math +def correlation(l1, l2): + min_lenght = min(len(l1), len(l2)) + sum1 = sum(l1[:min_lenght]) + sum2 = sum(l2[:min_lenght]) + sum1sq = sum(num ** 2 for num in l1) + sum2sq = sum(num ** 2 for num in l2) + sum12 = sum(x * y for x, y in zip(l1, l2)) + + part1 = min_lenght * sum12 - sum1 * sum2 + part2 = math.sqrt((min_lenght * sum1sq - sum1 ** 2) * (min_lenght * sum2sq - sum2 ** 2)) + if part2 == 0: + print("Деление на ноль") + return + else: + corr = part1 / part2 + return corr + +#Module3 +from Module1 import numbers_reading +from Module2 import correlation +import os + +os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8") + +file1 = input("Введите имя первого файла: ") +file2 = input("Введите имя второго файла: ") + +arr1 = numbers_reading(file1) +arr2 = numbers_reading(file2) + +if arr1 is None or arr2 is None: + print("Не удалось считать данные из файлов.") +else: + corr = correlation(arr1, arr2) + if corr is not None: + print(f"Коэффициент корреляции: {corr:.2f}") +#Проверка +import Module3 +>>> Введите имя первого файла: numbers.txt +>>> Введите имя второго файла: numbers2.txt +Коэффициент корреляции: -0.09 +``` \ No newline at end of file diff --git a/TEMA8/task.py b/TEMA8/task.py new file mode 100644 index 0000000..f3476b3 --- /dev/null +++ b/TEMA8/task.py @@ -0,0 +1,17 @@ +''' +Общее контрольное задание. +Разработайте программу, состоящую из трех модулей: +- Модуль 1 содержит функцию считывания числового списка +из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке +с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. +- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). +Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. +- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и +считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 + и отображает рассчитанное значение на экране с округлением до трех цифр после точки. +Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. +''' + +from os import chdir +import Module3 + diff --git a/TEMA8/test.md b/TEMA8/test.md new file mode 100644 index 0000000..689b4cb --- /dev/null +++ b/TEMA8/test.md @@ -0,0 +1,42 @@ +# Индивидуальное контрольное задание по теме 8 + +Махнов Георгий, А-01-23 + +По указанному варианту контрольного задания обратитесь к индивидуальному заданию с таким номером в теме 7, разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов. +## Задание 1 +1. Разработайте функцию с 5 аргументами, создающую последовательность отсчетов синусоидального сигнала с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргу-менты функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка. + +## Выполнение +```py +#ModuleIZK +import numpy as np +import os + +os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8") + +def generate_sinusoidal_signal(amplitude, period, phase, num_samples, filename): + n = np.arange(num_samples) + omega = 2 * np.pi / period #угловая частота + signal = amplitude * np.sin(omega * n + phase) + with open(filename, 'w+') as file: + for value in signal: + file.write(f"{value}\n") # 6 знаков после запятой + return signal +#Проверка + +from ModuleIKZ import generate_sinusoidal_signal + +lst = generate_sinusoidal_signal(2.0, 20, np.pi/4, 50, filename="result.txt") +print(lst) +>>> [ 1.41421356 1.78201305 1.97537668 1.97537668 1.78201305 1.41421356 + 0.907981 0.31286893 -0.31286893 -0.907981 -1.41421356 -1.78201305 + -1.97537668 -1.97537668 -1.78201305 -1.41421356 -0.907981 -0.31286893 + 0.31286893 0.907981 1.41421356 1.78201305 1.97537668 1.97537668 + 1.78201305 1.41421356 0.907981 0.31286893 -0.31286893 -0.907981 + -1.41421356 -1.78201305 -1.97537668 -1.97537668 -1.78201305 -1.41421356 + -0.907981 -0.31286893 0.31286893 0.907981 1.41421356 1.78201305 + 1.97537668 1.97537668 1.78201305 1.41421356 0.907981 0.31286893 + -0.31286893 -0.907981 ] + +``` +Полученный файл [result.txt](result.txt) \ No newline at end of file diff --git a/TEMA8/test.py b/TEMA8/test.py new file mode 100644 index 0000000..1dff6b8 --- /dev/null +++ b/TEMA8/test.py @@ -0,0 +1,31 @@ +''' +По указанному варианту контрольного задания обратитесь к индивидуальному заданию с таким номером в теме 7, разработайте функцию, +на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания + исходных данных для проверки работы функции, вызов функции и отображение полученных результатов. +## Задание 1 +1. Разработайте функцию с 5 аргументами, создающую последовательность отсчетов синусоидального сигнала +с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргументы функции). Сигнал должен быть записан +в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка. +''' +import numpy as np +#ModuleIKZ + +import numpy as np +import os + +os.chdir("C:\\Users\\gmack\\OneDrive\\Рабочий стол\\3 KURS\\LABS\\python-labs\\TEMA8") + +def generate_sinusoidal_signal(amplitude, period, phase, num_samples, filename): + n = np.arange(num_samples) + omega = 2 * np.pi / period #угловая частота + signal = amplitude * np.sin(omega * n + phase) + with open(filename, 'w+') as file: + for value in signal: + file.write(f"{value}\n") # 6 знаков после запятой + return signal +#Проверка + +from ModuleIKZ import generate_sinusoidal_signal + +lst = generate_sinusoidal_signal(2.0, 20, np.pi/4, 50, filename="result.txt") +print(lst) \ No newline at end of file