From f91acc56b1e2bdb8531685c73819ed385ad3049c Mon Sep 17 00:00:00 2001 From: VatariShin Date: Fri, 5 Dec 2025 10:28:40 +0300 Subject: [PATCH] done lab8 --- TEMA8/MM0.py | 2 + TEMA8/MM1.py | 21 ++++++++ TEMA8/MM2.py | 23 ++++++++ TEMA8/Mod0.py | 2 + TEMA8/Mod2.py | 6 +-- TEMA8/OKZ1.py | 6 +++ TEMA8/OKZ2.py | 18 +++++++ TEMA8/OKZ3.py | 15 ++++++ TEMA8/data1.txt | 2 + TEMA8/data2.txt | 2 + TEMA8/report.md | 136 ++++++++++++++++++++++++++++++++++++++++++++++++ TEMA8/task.md | 75 ++++++++++++++++++++++++++ 12 files changed, 304 insertions(+), 4 deletions(-) create mode 100644 TEMA8/MM0.py create mode 100644 TEMA8/MM1.py create mode 100644 TEMA8/MM2.py create mode 100644 TEMA8/OKZ1.py create mode 100644 TEMA8/OKZ2.py create mode 100644 TEMA8/OKZ3.py create mode 100644 TEMA8/data1.txt create mode 100644 TEMA8/data2.txt create mode 100644 TEMA8/report.md create mode 100644 TEMA8/task.md diff --git a/TEMA8/MM0.py b/TEMA8/MM0.py new file mode 100644 index 0000000..78c82d2 --- /dev/null +++ b/TEMA8/MM0.py @@ -0,0 +1,2 @@ +import MM2 +print('y =', MM2.vyhod) diff --git a/TEMA8/MM1.py b/TEMA8/MM1.py new file mode 100644 index 0000000..ff53a5a --- /dev/null +++ b/TEMA8/MM1.py @@ -0,0 +1,21 @@ +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) and (xtt > (-gran)): + ytt = 0 + elif xtt >= gran: + ytt = xtt - gran + elif xtt <= (-gran): + ytt = xtt + gran + return ytt diff --git a/TEMA8/MM2.py b/TEMA8/MM2.py new file mode 100644 index 0000000..3f67a9c --- /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..cc3141a 100644 --- a/TEMA8/Mod0.py +++ b/TEMA8/Mod0.py @@ -1,6 +1,8 @@ #Модуль Mod0 import Mod1 print('perm1=',Mod1.perm1) +Mod1.perm1 *= 3 +print('new perm1=',Mod1.perm1) from Mod2 import alpha as al tt=al() print('tt=',tt) diff --git a/TEMA8/Mod2.py b/TEMA8/Mod2.py index 88c5b37..a23c982 100644 --- a/TEMA8/Mod2.py +++ b/TEMA8/Mod2.py @@ -4,8 +4,6 @@ def alpha(): return t def beta(q): - print('****BETA****') import math - expi=q*math.pi - return math.exp(expi) - + expi = int(alpha())*math.pi + return math.exp(expi) \ No newline at end of file diff --git a/TEMA8/OKZ1.py b/TEMA8/OKZ1.py new file mode 100644 index 0000000..de097b0 --- /dev/null +++ b/TEMA8/OKZ1.py @@ -0,0 +1,6 @@ +def reading (file): + nums = [] + with open(file) as file: + for line in file: + nums.extend(map(float, line.split())) + return nums \ No newline at end of file diff --git a/TEMA8/OKZ2.py b/TEMA8/OKZ2.py new file mode 100644 index 0000000..90e5c2f --- /dev/null +++ b/TEMA8/OKZ2.py @@ -0,0 +1,18 @@ +import math +def correlation(l1, l2): + n = min(len(l1), len(l2)) + sum1 = sum(l1) + sum2 = sum(l2) + sum1sq = sum(now ** 2 for now in l1) + sum2sq = sum(now ** 2 for now in l2) + sum12 = sum(x * y for x, y in zip(l1, l2)) + + part1 = n * sum12 - sum1 * sum2 + part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2)) + + try: + corr = part1 / part2 + return corr + except ZeroDivisionError: + print("Ошибка деления на ноль!") + return \ No newline at end of file diff --git a/TEMA8/OKZ3.py b/TEMA8/OKZ3.py new file mode 100644 index 0000000..0111e71 --- /dev/null +++ b/TEMA8/OKZ3.py @@ -0,0 +1,15 @@ +from OKZ1 import reading +from OKZ2 import correlation + +file1 = input("Введите имя первого файла: ") +file2 = input("Введите имя второго файла: ") + +arr1 = reading(file1) +arr2 = 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/data1.txt b/TEMA8/data1.txt new file mode 100644 index 0000000..160dc99 --- /dev/null +++ b/TEMA8/data1.txt @@ -0,0 +1,2 @@ +4.0 3.0 2.0 1.0 6.0 +5.0 6.0 7.0 8.0 9.0 \ No newline at end of file diff --git a/TEMA8/data2.txt b/TEMA8/data2.txt new file mode 100644 index 0000000..4e5ae68 --- /dev/null +++ b/TEMA8/data2.txt @@ -0,0 +1,2 @@ +11.0 10.5 10.0 9.5 9.0 +8.5 8.0 7.5 7.0 10.0 \ No newline at end of file diff --git a/TEMA8/report.md b/TEMA8/report.md new file mode 100644 index 0000000..7855493 --- /dev/null +++ b/TEMA8/report.md @@ -0,0 +1,136 @@ +# Отчет по теме 8 + +Коваленко Дмитрий, А-01-23 + +## 8 Модули и структурирование программы + +### 8.1 Настройка текущего каталога + +```py +import os,sys,imp +os.chdir("/Users/vatarishin/lab_sem_5/python-labs/TEMA8") +os.getcwd() +'/Users/vatarishin/lab_sem_5/python-labs/TEMA8' +``` + +### 8.2 Создание и использование модулей в среде Python + +```py +>>> import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +>>> Mod1.perm1 +'5' +>>> import Mod1 +>>> imp.reload(Mod1) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +>>> Mod1.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', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport'] +>>> 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', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport'] +>>> import Mod1 +Mod1:Введите значение = 6 +Mod1:Значение perm1= 6 +>>> sys.modules.pop('Mod1') + + +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 1 +Mod1:Значение perm1= 1 +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 2 +Mod1:Значение perm1= 2 +>>> exec(open('Mod1.py').read()) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +>>> perm1 +'3' + +>>> from Mod1 import perm1 +Mod1:Введите значение = 7 +Mod1:Значение perm1= 7 +>>> Mod1 + +>>> perm1 +'7' + +>>> 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', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport'] + +>>> 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 +``` + +### 8.3 Создание многомодульных программ + +```py +>>> sys.modules.pop('Mod1') + +>>> sys.modules.pop('Mod2') + +>>> import Mod0 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 +perm1= 5 +****ALPHA**** +Значение t=2 +tt= 2 +****BETA**** +qq= 535.4916555247646 +>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1 +'2' +535.4916555247646 +'5' + +>>> import MM0 +k1,T,k2,Xm,A,F,N=1,2,3,4,5,6,7 +y = [0, 0, 0, 0, -3.430711797903516, -4.909726376383112, 0] + +``` +Проведите следующие эксперименты: +- Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha. +- Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi. +> Будет выведена ошибка так как `t`, `expi` – локальные переменные, который существуют только внутри функций +- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране. +> ```py +imp.reload(Mod0) +perm1= 5 +new perm1= 555 +``` +- Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq +```py +>>> Mod0.tt *= 2 +>>> Mod0.tt +'22' +``` + diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..64914af --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,75 @@ +# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8 +Выполнил: Коваленко Д.М. Проверил: Козлюк Д.А. + +## Задание +Разработайте программу, состоящую из трех модулей: +- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу. +- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. +- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. +Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. + +## Решение +Первый модуль +``` +def reading (file): + nums = [] + with open(file, 'r') as file: + for line in file: + nums.extend(map(float, line.split())) + return nums +``` +Второй модуль +``` +import math +def correlation(l1, l2): + n = min(len(l1), len(l2)) + sum1 = sum(l1) + sum2 = sum(l2) + sum1sq = sum(now ** 2 for now in l1) + sum2sq = sum(now ** 2 for now in l2) + sum12 = sum(x * y for x, y in zip(l1, l2)) + + part1 = n * sum12 - sum1 * sum2 + part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2)) + + try: + corr = part1 / part2 + return corr + except ZeroDivisionError: + print("Ошибка деления на ноль!") + return +``` +Третий модуль +``` +from OKZ1 import reading +from OKZ2 import correlation + +file1 = input("Введите имя первого файла: ") +file2 = input("Введите имя второго файла: ") + +arr1 = reading(file1) +arr2 = 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}") +``` +Содержимое файлов: +``` +data1.txt +4.0 3.0 2.0 1.0 6.0 +5.0 6.0 7.0 8.0 9.0 + +data2.txt +11.0 10.5 10.0 9.5 9.0 +8.5 8.0 7.5 7.0 10.0 +``` +``` +>>> import OKZ3 +Введите имя первого файла: data1.txt +Введите имя второго файла: data2.txt +Коэффициент корреляции: -0.52 +``` \ No newline at end of file