Сравнить коммиты

...

45 Коммитов

Автор SHA1 Сообщение Дата
8ace2828ad Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:33:26 +00:00
e92e49d8ac Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:32:41 +00:00
59fcc5d4a4 Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:32:00 +00:00
d2a80f27f8 Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:31:29 +00:00
583f2b2cd4 Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:27:09 +00:00
b336dda2dc Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:03:59 +00:00
3a9e1cd16f Изменил(а) на 'TEMA9/task.md' 2025-12-19 08:36:46 +00:00
a05ba56e5f Изменил(а) на 'TEMA9/task.md' 2025-12-19 08:35:18 +00:00
619f22636d Изменил(а) на 'TEMA9/task.md' 2025-12-19 08:11:39 +00:00
0ccf8cdb8b Изменил(а) на 'TEMA9/report.md' 2025-12-19 06:53:01 +00:00
8a2bf54d48 Изменил(а) на 'TEMA9/task.md' 2025-12-19 06:39:20 +00:00
7d54e8f87b Изменил(а) на 'TEMA9/task.md' 2025-12-19 06:34:36 +00:00
Solovyova_ED
5ed924371a Добавлена тема 9 2025-12-18 20:18:52 +03:00
Solovyova_ED
181ac41163 Добавлены отчёты, задания и тесты 2025-12-08 12:45:25 +03:00
d8b49dd42f Изменил(а) на 'TEMA8/task.md' 2025-12-08 09:01:47 +00:00
c4fbbf2718 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:56:38 +00:00
77c44a0d24 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:47:56 +00:00
33a67fc233 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:44:38 +00:00
be663ed6e7 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:43:50 +00:00
Solovyova_ED
ed5322825d Добавлены отчёты, задания и тесты 2025-12-08 11:42:41 +03:00
694a8609e6 Изменил(а) на 'TEMA7/report.md' 2025-12-08 06:56:10 +00:00
09cdf1e6be Изменил(а) на 'TEMA7/task.md' 2025-12-08 06:44:57 +00:00
dc058214ec Изменил(а) на 'TEMA7/report.md' 2025-12-08 06:40:13 +00:00
093a9d0586 Изменил(а) на 'TEMA8/task.md' 2025-12-08 02:13:39 +00:00
Solovyova_ED
6b67cbc7f8 Обновлен task.md в TEMA8 2025-12-08 05:12:57 +03:00
26bace05eb Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:48:11 +00:00
6c52d6a41f Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:45:58 +00:00
c467c0fbb0 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:36:38 +00:00
aff380f9f6 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:34:32 +00:00
00d6ce48a6 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:33:24 +00:00
3d8d9d8e88 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:17:44 +00:00
ab1b5fe571 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:08:48 +00:00
7bfbdc941a Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:05:22 +00:00
eb1476dfa0 Изменил(а) на 'TEMA7/report.md' 2025-12-08 01:00:09 +00:00
ee1d0d709b Изменил(а) на 'TEMA7/report.md' 2025-12-08 00:55:32 +00:00
a54b7c3dba Изменил(а) на 'TEMA7/report.md' 2025-12-08 00:43:46 +00:00
a25863a200 Изменил(а) на 'TEMA7/task.md' 2025-12-07 23:28:47 +00:00
c109424599 Изменил(а) на 'TEMA7/task.md' 2025-12-07 14:40:16 +00:00
832863a169 Изменил(а) на 'TEMA8/report.md' 2025-12-07 14:37:19 +00:00
Solovyova_ED
ed2affa688 Добавлены отчёты 2025-12-07 17:15:54 +03:00
c235c6bc28 Изменил(а) на 'TEMA7/task.md' 2025-11-24 09:38:45 +00:00
becd453a56 Изменил(а) на 'TEMA7/task.md' 2025-11-24 09:38:16 +00:00
f85ae22107 Изменил(а) на 'TEMA7/task.md' 2025-11-24 09:37:47 +00:00
9aaa5896e6 Изменил(а) на 'TEMA7/report.md' 2025-11-24 08:59:31 +00:00
9d5399198a Изменил(а) на 'TEMA7/report.md' 2025-11-24 08:54:08 +00:00
28 изменённых файлов: 2185 добавлений и 739 удалений

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@@ -1,26 +1,84 @@
\# Общее контрольное задание по теме 5 # Общее контрольное задание по теме 7
Соловьёва Екатерина, А-01-23 Соловьёва Екатерина, А-01-23
## Задание
* Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
\## Задание * Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
* Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
\* Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т. Y=b1+b2*X
\* Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
\* Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2\*X
и имеющую аргументы b1, b2 и X. и имеющую аргументы b1, b2 и X.
## Решение
# 1.
\## Решение
```py ```py
def del_signal (signal, T):
'''Расчет выхода y(t) для устройства задержки'''
output = []
for i in range(len(signal)):
if i<T:
output.append(0)
else:
output.append(signal[i-T])
return output
x=[1,0.5,3.6,4.5,1,2,0.5]
y = del_signal(x,2)
print(y)
[0, 0, 1, 0.5, 3.6, 4.5, 1]
```
# 2.
```py
import random
import matplotlib.pyplot as plt
def histogram(sample, number):
min_1 = min(sample)
max_1 = max(sample)
bins = (max_1 - min_1) / number # Ширина одного интервала
rows = [0] * number # Создание списка для подсчёта элементов в каждом интервале
intervals = [] # Список для хранения границ интервалов
for i in range(number):
lower = min_1 + i * bins
upper = min_1 + (i + 1) * bins
intervals.append((lower, upper))
for x in sample:
i = int((x - min_1) / bins) # Вычисление номера интервала для текущего элемента
if i == number:
i = number - 1
rows[i] += 1
print("Границы интервала | Число элементов")
for i in range(number):
lower, upper = intervals[i]
print(lower, "-", upper, " |", rows[i])
plt.hist(sample, number)
plt.xlabel('Значения выборки')
plt.ylabel('Число элементов')
plt.title('Гистограмма выборки')
plt.show()
return rows
data = [random.gauss(1, 20) for _ in range(10)]
histogram(data, 3)
Границы интервала | Число элементов
-41.93512946278788 - -17.371680704583262 | 1
-17.371680704583262 - 7.191768053621352 | 3
7.191768053621352 - 31.755216811825967 | 6
```
# 3.
```py
linreg = lambda b1, b2, x: b1 + b2 * x
b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
x_val = float(input("Введите значение x: "))
print(linreg(b1, b2, x_val))
Введите коэффициент b1 линейной регрессии: 3
Введите коэффициент b2 линейной регрессии: 4
Введите значение x: 5
23.0
```

357
TEMA7/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,357 @@
# Индивидуальное контрольное задание по теме 7
Соловьёва Екатерина, А-01-23
## Задание
Разработайте функцию с 3 аргументами: x, А и В, реализующую преобразование входного сигнала x по формуле:
$y=B$, если $x>A$;
$y= 2B\frac{x}{A}-B x^2 / A^2$ , если 0≤ x ≤ А;
$y= 2B * x/A +B*x^2 /A^2$ , если $-A≤ x <0;$
$y=-B$, если $x< -A$.
Создайте список со 100 значениями входного сигнала х – случайными, равномерно распределенными числами в диапазоне значений от -5 до 12. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при трех разных парах значений А и В. Записать результаты в текстовый файл в виде двух столбцов: $хi, yi$.
## Решение
```py
import random
def func(x, A, B):
if x > A:
return B
elif 0 <= x <= A:
return (2 * B * x / A) - (B * x**2 / A**2)
elif -A <= x < 0:
return (2 * B * x / A) + (B * x**2 / A**2)
else:
return -B
x_values = [random.uniform(-5, 12) for _ in range(100)]
params = [(5, 7), (3, 4), (8, 12)]
with open('test.txt', 'w', encoding='utf-8') as f:
for A, B in params:
f.write(f'\nПараметры: A = {A}, B = {B}\n')
f.write('xi yi\n')
f.write('----------------\n')
for x in x_values:
y = func(x, A, B)
f.write(f'{x:10.5f} {y:10.5f}\n')
```
## Вывод
```txt
Параметры: A = 5, B = 7
xi yi
----------------
5.86982 7.00000
10.60889 7.00000
4.06461 6.75501
5.29288 7.00000
10.15479 7.00000
3.86484 6.63920
0.47680 1.27140
-1.27013 -3.10467
-1.24129 -3.04419
-1.03170 -2.59073
-1.50325 -3.57637
6.95909 7.00000
1.03174 2.59082
1.91432 4.33400
6.86539 7.00000
10.89394 7.00000
3.61242 6.46090
7.85303 7.00000
-4.35477 -6.88343
-1.10787 -2.75836
8.88241 7.00000
-3.41076 -6.29281
2.60220 5.39016
5.28102 7.00000
-4.78747 -6.98735
-1.71943 -3.98660
6.26656 7.00000
10.65755 7.00000
-2.27517 -4.92108
9.47499 7.00000
-0.31369 -0.85077
7.62057 7.00000
6.96683 7.00000
8.14176 7.00000
11.97237 7.00000
10.89297 7.00000
2.48892 5.23446
6.69740 7.00000
-4.11167 -6.77904
4.94378 6.99912
-4.48180 -6.92481
7.27224 7.00000
-0.83065 -2.13263
1.01590 2.55555
6.91175 7.00000
10.08303 7.00000
3.60696 6.45664
0.72761 1.88906
2.82893 5.68021
7.15816 7.00000
6.46978 7.00000
3.33574 6.22447
7.04571 7.00000
2.60493 5.39382
6.93663 7.00000
2.92556 5.79507
10.45675 7.00000
9.22932 7.00000
7.40673 7.00000
1.40836 3.38804
11.95106 7.00000
-3.11935 -6.00968
6.61976 7.00000
-1.59679 -3.75709
2.39406 5.09855
8.98971 7.00000
2.01005 4.49685
-1.42513 -3.42169
1.91515 4.33544
4.75207 6.98279
-3.22786 -6.12067
2.18031 4.77382
6.95316 7.00000
-3.92956 -6.67917
-1.97791 -4.44276
7.95253 7.00000
9.86943 7.00000
-3.45314 -6.33002
2.13008 4.69379
-1.21212 -2.98255
8.50756 7.00000
1.85195 4.22513
3.75620 6.56683
4.47003 6.92136
11.09999 7.00000
-1.70654 -3.96287
11.73001 7.00000
1.90609 4.31977
-2.36144 -5.05063
0.04914 0.13690
3.82695 6.61471
6.12422 7.00000
2.32662 4.99884
9.35261 7.00000
8.06504 7.00000
2.97498 5.85181
4.38768 6.89502
4.20153 6.82148
4.19242 6.81739
-4.63619 -6.96294
Параметры: A = 3, B = 4
xi yi
----------------
5.86982 4.00000
10.60889 4.00000
4.06461 4.00000
5.29288 4.00000
10.15479 4.00000
3.86484 4.00000
0.47680 1.17044
-1.27013 -2.67003
-1.24129 -2.62531
-1.03170 -2.27813
-1.50325 -3.00433
6.95909 4.00000
1.03174 2.27821
1.91432 3.47613
6.86539 4.00000
10.89394 4.00000
3.61242 4.00000
7.85303 4.00000
-4.35477 -4.00000
-1.10787 -2.40881
8.88241 4.00000
-3.41076 -4.00000
2.60220 3.92967
5.28102 4.00000
-4.78747 -4.00000
-1.71943 -3.27117
6.26656 4.00000
10.65755 4.00000
-2.27517 -3.76650
9.47499 4.00000
-0.31369 -0.79276
7.62057 4.00000
6.96683 4.00000
8.14176 4.00000
11.97237 4.00000
10.89297 4.00000
2.48892 3.88391
6.69740 4.00000
-4.11167 -4.00000
4.94378 4.00000
-4.48180 -4.00000
7.27224 4.00000
-0.83065 -1.90841
1.01590 2.25038
6.91175 4.00000
10.08303 4.00000
3.60696 4.00000
0.72761 1.70499
2.82893 3.98699
7.15816 4.00000
6.46978 4.00000
3.33574 4.00000
7.04571 4.00000
2.60493 3.93063
6.93663 4.00000
2.92556 3.99754
10.45675 4.00000
9.22932 4.00000
7.40673 4.00000
1.40836 2.87409
11.95106 4.00000
-3.11935 -4.00000
6.61976 4.00000
-1.59679 -3.12489
2.39406 3.83682
8.98971 4.00000
2.01005 3.56444
-1.42513 -2.89769
1.91515 3.47693
4.75207 4.00000
-3.22786 -4.00000
2.18031 3.70138
6.95316 4.00000
-3.92956 -4.00000
-1.97791 -3.53571
7.95253 4.00000
9.86943 4.00000
-3.45314 -4.00000
2.13008 3.66366
-1.21212 -2.57933
8.50756 4.00000
1.85195 3.41421
3.75620 4.00000
4.47003 4.00000
11.09999 4.00000
-1.70654 -3.25642
11.73001 4.00000
1.90609 3.46816
-2.36144 -3.81877
0.04914 0.12996
3.82695 4.00000
6.12422 4.00000
2.32662 3.79847
9.35261 4.00000
8.06504 4.00000
2.97498 3.99972
4.38768 4.00000
4.20153 4.00000
4.19242 4.00000
-4.63619 -4.00000
Параметры: A = 8, B = 12
xi yi
----------------
5.86982 11.14919
10.60889 12.00000
4.06461 9.09613
5.29288 10.62591
10.15479 12.00000
3.86484 8.79384
0.47680 1.38779
-1.27013 -3.50792
-1.24129 -3.43498
-1.03170 -2.89553
-1.50325 -4.08605
6.95909 11.79685
1.03174 2.89564
1.91432 5.05583
6.86539 11.75862
10.89394 12.00000
3.61242 8.39047
7.85303 11.99595
-4.35477 -9.50856
-1.10787 -3.09347
8.88241 12.00000
-3.41076 -8.05104
2.60220 6.53696
5.28102 10.61384
-4.78747 -10.06493
-1.71943 -4.60396
6.26656 11.43660
10.65755 12.00000
-2.27517 -5.85493
9.47499 12.00000
-0.31369 -0.92261
7.62057 11.97301
6.96683 11.79985
8.14176 12.00000
11.97237 12.00000
10.89297 12.00000
2.48892 6.30526
6.69740 11.68186
-4.11167 -9.16516
4.94378 10.24866
-4.48180 -9.67917
7.27224 11.90069
-0.83065 -2.36258
1.01590 2.85420
6.91175 11.77795
10.08303 12.00000
3.60696 8.38148
0.72761 2.08355
2.82893 6.98626
7.15816 11.86712
6.46978 11.56096
3.33574 7.92088
7.04571 11.82925
2.60493 6.54247
6.93663 11.78798
2.92556 7.17188
10.45675 12.00000
9.22932 12.00000
7.40673 11.93401
1.40836 3.85319
11.95106 12.00000
-3.11935 -7.53361
6.61976 11.64280
-1.59679 -4.31230
2.39406 6.10753
8.98971 12.00000
2.01005 5.27259
-1.42513 -3.89459
1.91515 5.05774
4.75207 10.02206
-3.22786 -7.73000
2.18031 5.64961
6.95316 11.79452
-3.92956 -8.89341
-1.97791 -5.20021
7.95253 11.99958
9.86943 12.00000
-3.45314 -8.12363
2.13008 5.53950
-1.21212 -3.36088
8.50756 12.00000
1.85195 4.91277
3.75620 8.62315
4.47003 9.66362
11.09999 12.00000
-1.70654 -4.57356
11.73001 12.00000
1.90609 5.03706
-2.36144 -6.03873
0.04914 0.14695
3.82695 8.73482
6.12422 11.34027
2.32662 5.96488
9.35261 12.00000
8.06504 12.00000
2.97498 7.26547
4.38768 9.55333
4.20153 9.29468
4.19242 9.28168
-4.63619 -9.87840
```

312
TEMA7/test.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,312 @@
Параметры: A = 5, B = 7
xi yi
----------------
5.86982 7.00000
10.60889 7.00000
4.06461 6.75501
5.29288 7.00000
10.15479 7.00000
3.86484 6.63920
0.47680 1.27140
-1.27013 -3.10467
-1.24129 -3.04419
-1.03170 -2.59073
-1.50325 -3.57637
6.95909 7.00000
1.03174 2.59082
1.91432 4.33400
6.86539 7.00000
10.89394 7.00000
3.61242 6.46090
7.85303 7.00000
-4.35477 -6.88343
-1.10787 -2.75836
8.88241 7.00000
-3.41076 -6.29281
2.60220 5.39016
5.28102 7.00000
-4.78747 -6.98735
-1.71943 -3.98660
6.26656 7.00000
10.65755 7.00000
-2.27517 -4.92108
9.47499 7.00000
-0.31369 -0.85077
7.62057 7.00000
6.96683 7.00000
8.14176 7.00000
11.97237 7.00000
10.89297 7.00000
2.48892 5.23446
6.69740 7.00000
-4.11167 -6.77904
4.94378 6.99912
-4.48180 -6.92481
7.27224 7.00000
-0.83065 -2.13263
1.01590 2.55555
6.91175 7.00000
10.08303 7.00000
3.60696 6.45664
0.72761 1.88906
2.82893 5.68021
7.15816 7.00000
6.46978 7.00000
3.33574 6.22447
7.04571 7.00000
2.60493 5.39382
6.93663 7.00000
2.92556 5.79507
10.45675 7.00000
9.22932 7.00000
7.40673 7.00000
1.40836 3.38804
11.95106 7.00000
-3.11935 -6.00968
6.61976 7.00000
-1.59679 -3.75709
2.39406 5.09855
8.98971 7.00000
2.01005 4.49685
-1.42513 -3.42169
1.91515 4.33544
4.75207 6.98279
-3.22786 -6.12067
2.18031 4.77382
6.95316 7.00000
-3.92956 -6.67917
-1.97791 -4.44276
7.95253 7.00000
9.86943 7.00000
-3.45314 -6.33002
2.13008 4.69379
-1.21212 -2.98255
8.50756 7.00000
1.85195 4.22513
3.75620 6.56683
4.47003 6.92136
11.09999 7.00000
-1.70654 -3.96287
11.73001 7.00000
1.90609 4.31977
-2.36144 -5.05063
0.04914 0.13690
3.82695 6.61471
6.12422 7.00000
2.32662 4.99884
9.35261 7.00000
8.06504 7.00000
2.97498 5.85181
4.38768 6.89502
4.20153 6.82148
4.19242 6.81739
-4.63619 -6.96294
Параметры: A = 3, B = 4
xi yi
----------------
5.86982 4.00000
10.60889 4.00000
4.06461 4.00000
5.29288 4.00000
10.15479 4.00000
3.86484 4.00000
0.47680 1.17044
-1.27013 -2.67003
-1.24129 -2.62531
-1.03170 -2.27813
-1.50325 -3.00433
6.95909 4.00000
1.03174 2.27821
1.91432 3.47613
6.86539 4.00000
10.89394 4.00000
3.61242 4.00000
7.85303 4.00000
-4.35477 -4.00000
-1.10787 -2.40881
8.88241 4.00000
-3.41076 -4.00000
2.60220 3.92967
5.28102 4.00000
-4.78747 -4.00000
-1.71943 -3.27117
6.26656 4.00000
10.65755 4.00000
-2.27517 -3.76650
9.47499 4.00000
-0.31369 -0.79276
7.62057 4.00000
6.96683 4.00000
8.14176 4.00000
11.97237 4.00000
10.89297 4.00000
2.48892 3.88391
6.69740 4.00000
-4.11167 -4.00000
4.94378 4.00000
-4.48180 -4.00000
7.27224 4.00000
-0.83065 -1.90841
1.01590 2.25038
6.91175 4.00000
10.08303 4.00000
3.60696 4.00000
0.72761 1.70499
2.82893 3.98699
7.15816 4.00000
6.46978 4.00000
3.33574 4.00000
7.04571 4.00000
2.60493 3.93063
6.93663 4.00000
2.92556 3.99754
10.45675 4.00000
9.22932 4.00000
7.40673 4.00000
1.40836 2.87409
11.95106 4.00000
-3.11935 -4.00000
6.61976 4.00000
-1.59679 -3.12489
2.39406 3.83682
8.98971 4.00000
2.01005 3.56444
-1.42513 -2.89769
1.91515 3.47693
4.75207 4.00000
-3.22786 -4.00000
2.18031 3.70138
6.95316 4.00000
-3.92956 -4.00000
-1.97791 -3.53571
7.95253 4.00000
9.86943 4.00000
-3.45314 -4.00000
2.13008 3.66366
-1.21212 -2.57933
8.50756 4.00000
1.85195 3.41421
3.75620 4.00000
4.47003 4.00000
11.09999 4.00000
-1.70654 -3.25642
11.73001 4.00000
1.90609 3.46816
-2.36144 -3.81877
0.04914 0.12996
3.82695 4.00000
6.12422 4.00000
2.32662 3.79847
9.35261 4.00000
8.06504 4.00000
2.97498 3.99972
4.38768 4.00000
4.20153 4.00000
4.19242 4.00000
-4.63619 -4.00000
Параметры: A = 8, B = 12
xi yi
----------------
5.86982 11.14919
10.60889 12.00000
4.06461 9.09613
5.29288 10.62591
10.15479 12.00000
3.86484 8.79384
0.47680 1.38779
-1.27013 -3.50792
-1.24129 -3.43498
-1.03170 -2.89553
-1.50325 -4.08605
6.95909 11.79685
1.03174 2.89564
1.91432 5.05583
6.86539 11.75862
10.89394 12.00000
3.61242 8.39047
7.85303 11.99595
-4.35477 -9.50856
-1.10787 -3.09347
8.88241 12.00000
-3.41076 -8.05104
2.60220 6.53696
5.28102 10.61384
-4.78747 -10.06493
-1.71943 -4.60396
6.26656 11.43660
10.65755 12.00000
-2.27517 -5.85493
9.47499 12.00000
-0.31369 -0.92261
7.62057 11.97301
6.96683 11.79985
8.14176 12.00000
11.97237 12.00000
10.89297 12.00000
2.48892 6.30526
6.69740 11.68186
-4.11167 -9.16516
4.94378 10.24866
-4.48180 -9.67917
7.27224 11.90069
-0.83065 -2.36258
1.01590 2.85420
6.91175 11.77795
10.08303 12.00000
3.60696 8.38148
0.72761 2.08355
2.82893 6.98626
7.15816 11.86712
6.46978 11.56096
3.33574 7.92088
7.04571 11.82925
2.60493 6.54247
6.93663 11.78798
2.92556 7.17188
10.45675 12.00000
9.22932 12.00000
7.40673 11.93401
1.40836 3.85319
11.95106 12.00000
-3.11935 -7.53361
6.61976 11.64280
-1.59679 -4.31230
2.39406 6.10753
8.98971 12.00000
2.01005 5.27259
-1.42513 -3.89459
1.91515 5.05774
4.75207 10.02206
-3.22786 -7.73000
2.18031 5.64961
6.95316 11.79452
-3.92956 -8.89341
-1.97791 -5.20021
7.95253 11.99958
9.86943 12.00000
-3.45314 -8.12363
2.13008 5.53950
-1.21212 -3.36088
8.50756 12.00000
1.85195 4.91277
3.75620 8.62315
4.47003 9.66362
11.09999 12.00000
-1.70654 -4.57356
11.73001 12.00000
1.90609 5.03706
-2.36144 -6.03873
0.04914 0.14695
3.82695 8.73482
6.12422 11.34027
2.32662 5.96488
9.35261 12.00000
8.06504 12.00000
2.97498 7.26547
4.38768 9.55333
4.20153 9.29468
4.19242 9.28168
-4.63619 -9.87840

26
TEMA7/testt.py Обычный файл
Просмотреть файл

@@ -0,0 +1,26 @@
import random
def func(x, A, B):
if x > A:
return B
elif 0 <= x <= A:
return (2 * B * x / A) - (B * x**2 / A**2)
elif -A <= x < 0:
return (2 * B * x / A) + (B * x**2 / A**2)
else:
return -B
x_values = [random.uniform(-5, 12) for _ in range(100)]
params = [(5, 7), (3, 4), (8, 12)]
with open('test.txt', 'w', encoding='utf-8') as f:
for A, B in params:
f.write(f'\nПараметры: A = {A}, B = {B}\n')
f.write('xi yi\n')
f.write('----------------\n')
for x in x_values:
y = func(x, A, B)
f.write(f'{x:10.5f} {y:10.5f}\n')

Двоичные данные
TEMA7/Рис2.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

3
TEMA8/MM0.py Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
import MM2
print('y=',MM2.vyhod)

22
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) and (xtt > (-gran)):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt

25
TEMA8/MM2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,25 @@
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)

Просмотреть файл

@@ -1,2 +1,9 @@
perm1=input('Mod1:Введите значение = ') def reading (file):
print('Mod1:Значение perm1=',perm1) nums = []
with open(file, 'r') as file:
for line in file:
nums.extend(map(float, line.split()))
return nums

Просмотреть файл

@@ -1,11 +1,17 @@
def alpha(): import math
print('****ALPHA****')
t=input('Значение t=') def correlation(list1, list2):
return t n = min(len(list1), len(list2))
if n < 2:
return None
x, y = list1[:n], list2[:n]
mean_x, mean_y = sum(x)/n, sum(y)/n
num = sum((x[i]-mean_x)*(y[i]-mean_y) for i in range(n))
den = math.sqrt(sum((x[i]-mean_x)**2 for i in range(n)) *
sum((y[i]-mean_y)**2 for i in range(n)))
return num/den if den != 0 else None
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)

15
TEMA8/Mod3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,15 @@
from Mod1 import reading
from Mod2 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}")

2
TEMA8/data1.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
1.0 2.0 3.0 4.0 5.0
6.0 7.0 8.0 9.0 10.0

2
TEMA8/data2.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
10.0 9.5 9.0 8.5 8.0
7.5 7.0 6.5 6.0 1.0

18
TEMA8/func_module.py Обычный файл
Просмотреть файл

@@ -0,0 +1,18 @@
import math
f = lambda x, a, b, c, d: a / (1 + math.exp(-b - c * x - d * x**2))
def calc_and_save(a, b, c, d, filename="results.txt"):
if a <= 0 or b <= 0 or c <= 0 or d <= 0:
raise ValueError("Все параметры должны быть положительными")
xs = list(range(-20, 21, 2))
values = [f(x, a, b, c, d) for x in xs]
with open(filename, "w", encoding="utf-8") as file:
for i in range(0, len(values), 3):
chunk = values[i:i+3]
line = " ".join(f"{v:.6f}" for v in chunk)
file.write(line + "\n")
return xs, values

25
TEMA8/main_module.py Обычный файл
Просмотреть файл

@@ -0,0 +1,25 @@
from func_module import calc_and_save
def main():
print("Ввод параметров a, b, c, d (положительные числа):")
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
d = float(input("d = "))
if a <= 0 or b <= 0 or c <= 0 or d <= 0:
print("Ошибка: все параметры должны быть положительными!")
return
filename = input("Имя выходного файла (по умолчанию results.txt): ").strip()
if not filename:
filename = "results.txt"
try:
calc_and_save(a, b, c, d, filename)
print(f"Результаты записаны в файл {filename}")
except Exception as e:
print(f"Ошибка: {e}")
if __name__ == "__main__":
main()

333
TEMA8/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,333 @@
# Отчёт по Теме 8
Соловьёва Екатерина, А-01-23
## 1. Запуск интерактивной оболочки IDLE.
Следует начинать сеанс работы с IDLE со следующих инструкций:
```py
import sys, importlib #Импорт трёх важных вспомогательных модулей
import os
os.chdir("C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8")
os.getcwd() #Контролируем корректность установки текущего каталога
'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8'
```
Большие программы делятся на части-модули, записываемые в отдельные файлы. Это делается для удобства отладки, обеспечения возможности коллективной разработки, создания возможности повторного использования программ и по другим соображениям. При этом возникают 2 проблемы:
* передача управления от одного модуля к другому в процессе выполнения программы;
* передача данных между модулями.
Поэтому техника структурирования программ на любом языке программирования предусматривает изучение способов решения этих проблем.
## 2. Создание и использование модулей в среде Python.
Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле. В языке Python модули также являются объектами класса module.
## 2.1. Запуск модуля на выполнение путем его импорта.
Cодержимое модуля становится доступным для исполнения после выполнения процедуры импорта. После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями. В Python импорт является одним из важных способов решения проблемы передачи управления между модулями.
Файл с именем Mod1.py содержит:
```py
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
```
Пока введенный или измененный текст в этом окне не сохранен в файле, в заголовке перед именем файла стоит символ «*» (звёздочка).
Теперь вспомним возможность запуска модуля из командной строки оболочки IDLE.
```py
import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
```
При этом управление передается от модуля с именем main (это имя модуля – командной строки) к модулю Mod1, который ищется в файле с именем Mod1.py в рабочем каталоге. Если бы он находился в другом каталоге, то в инструкции импорта пришлось бы указать не только имя файла с модулем, но и его каталог.
После выполнения записанной в модуль программы (после ввода значения объекта perm1 и его отображения) управление возвращается вызывающему модулю, т.е. в данном случае, в командную строку. Объекты, созданные при выполнении модуля, становятся его атрибутами.
```py
type(Mod1)
<class 'module'>
dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
```
Доступ к значению созданного в модуле объекта perm1 – атрибута модуля Mod1:
```py
Mod1.perm1
'5'
import Mod1
```
Повторно выполнить модуль с помощью инструкции импорта не выходит. Для повторного выполнения ранее импортированного модуля следует применить функцию reload из модуля imp:
```py
importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
Mod1.perm1
'3'
```
## 2.2. Словарь импортированных модулей
```py
print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_suggestions', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
```
Для обеспечения возможности повторного импорта и, следовательно, выполнения программы из модуля, его надо удалить из этого словаря:
```py
sys.modules.pop('Mod1')
```
Mod1 из него исчез повторите импорт и проверьте, что записанная в нем программа будет снова выполнена. После этого еще раз удалите Mod1 из словаря.
```py
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_suggestions', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
Mod1.perm1
'5'
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
```
## 2.3. Запуск модуля на выполнение с помощью функции exec().
Запуск модуля на выполнение может быть произведен с использованием ранее изученной функции exec. При этом модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции.
Внимание: объект-модуль при этом не создается! Созданные при выполнении модуля объекты становятся объектами главной программы!
```py
exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
```
Эту функцию можно вызывать любое число раз и каждый раз будет выполняться программа из модуля.
## 2.4. Использование инструкции from … import …
В одном модуле может содержаться несколько программных единиц (например, функций или пользовательских объектов). Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов.
```py
from Mod1 import perm1
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
'Mod1' in dir()
True
perm1
'4'
```
Пример 2.
Mod2, содержащий две функции
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
import math
expi=q*math.pi
return math.exp(expi)
```
```py
g=beta(2)
****BETA****
g
535.4916555247646
print(sorted(sys.modules.keys()))
['Mod2', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_suggestions', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
```
```py
alpha() #Функция alpha не была импортирована
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'alpha' is not defined
from Mod2 import alpha as al
del al,beta
from Mod2 import alpha as al, beta as bt
del al,beta
from Mod2 import *
tt = alpha()
from Mod2 import *
tt=alpha()
****ALPHA****
Значение t=0.12
uu=beta(float(tt))
****BETA****
uu
1.4578913609506803
```
## 3. Создание многомодульных программ.
## 3.1. Пример простой многомодульной программы.
Модуль Mod0
```py
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
```
Этот модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0.
```py
import Mod0
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
perm1= 1
****ALPHA****
Значение t=2
tt= 2
****BETA****
qq= 535.4916555247646
Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'2'
535.4916555247646
'1'
```
## 3.2. Еще пример.
Файл MM0.py:
```py
import MM2
print('y =', MM2.vyhod)
```
Файл MM1.py:
```py
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
```
Файл MM2.py:
```py
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)
```
```py
k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,1500
y = [0, 0, ... 0, -70.20177063675057, 0, 257.73311334096866, -677.4095530135962, ... -6.270038281034423e+306, -1.198995988522659e+307]
```
## 3.3. Области действия объектов в модулях.
В ранее созданных модулях вводятся и используются следующие объекты:
Mod1: perm1
Mod2: функции alpha, beta; переменные t, expi
Mod0: переменные tt,qq
Попробую вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha.
```py
def alpha():
print("Alpha called")
result_beta = beta(5) # вызов beta из alpha
print("Beta returned:", result_beta)
return "alpha_finished"
def beta(x):
print("Beta called with", x)
if x > 0:
pass
return x * 2
```
Отобразить на экране в модуле Mod0 значения объектов t и expi:
```py
import Mod2
print("t =", Mod2.t)
print("expi =", Mod2.expi)
t = 10
expi = 2.718
```
В модуле Mod0 увеличить в 3 раза значение
объекта perm1 и отобразить его после этого на экране.
Так как perm1 имеет тип str, то умножение напрямую без преобразования типов
будет выглядеть так:
```py
print('perm1 = ', Mod1.perm1)
print('Умножено:' , Mod1.perm1 * 3)
Mod1: Введите значение = 4
Mod1: Значение perm1 = 4
perm1 = 4
Умножено: 444
```
Преобразовав тип perm1, можно получить классическое умножение:
```py
print('Умножено:' , int(Mod1.perm1) * 3)
...
Mod1: Введите значение = 4
Mod1: Значение perm1 = 4
perm1 = 4
Умножено: 12
```
В командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq:
```py
Mod1.perm1 * 2
'55'
Mod0.tt * 2
'44'
Mod0.qq * 2
573502.6262733063
```
## 4. Окончание сеанса работы с IDLE.

7
TEMA8/results.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,7 @@
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000
0.999994 0.880797 1.000000
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000

65
TEMA8/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,65 @@
# Общее контрольное задание по Теме 8
Соловьёва Екатерина, А-01-23
## Задание
Общее контрольное задание.
Разработайте программу, состоящую из трех модулей:
* Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
* Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
* Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
Mod1
```py
def reading (file):
nums = []
with open(file, 'r') as file:
for line in file:
nums.extend(map(float, line.split()))
return nums
```
Mod2
```py
import math
def correlation(list1, list2):
n = min(len(list1), len(list2))
if n < 2:
return None
x, y = list1[:n], list2[:n]
mean_x, mean_y = sum(x)/n, sum(y)/n
num = sum((x[i]-mean_x)*(y[i]-mean_y) for i in range(n))
den = math.sqrt(sum((x[i]-mean_x)**2 for i in range(n)) *
sum((y[i]-mean_y)**2 for i in range(n)))
return num/den if den != 0 else None
```
Mod3
```py
from Mod1 import reading
from Mod2 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}")
```
## Вывод
```py
=================================================== RESTART: C:/Users/Ekaterina/OneDrive/Desktop/Solovyova/python-labs/TEMA8/Mod3.py ===================================================
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.88
```

0
TEMA8/test.md Обычный файл
Просмотреть файл

38
TEMA9/Employee.py Обычный файл
Просмотреть файл

@@ -0,0 +1,38 @@
class Employee:
"""Класс для работы с данными сотрудников"""
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self.__pooshreniya = []
def povysit_oklad(self, summa_povysheniya):
"""
Метод для повышения оклада сотрудника на заданное значение """
if summa_povysheniya <= 0:
raise ValueError("Сумма повышения должна быть положительной!")
self.oklad += summa_povysheniya
return self.oklad
def perevesti_v_drugoi_otdel(self, novy_otdel):
"""Перевод сотрудника в другой отдел"""
self.otdel = novy_otdel
print(f"Сотрудник {self.fio} переведен в отдел: {novy_otdel}")
def izmenit_dolzhnost(self, novaya_dolzhnost):
"""Метод изменения должности"""
self.dolzhnost = novaya_dolzhnost
@property
def pooshreniya(self):
return self.__pooshreniya.copy()
def dobavit_pooshrenie(self, text):
"""Добавить поощрение в список"""
self.__pooshreniya.append(text)

Двоичные данные
TEMA9/Figure_1.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

11
TEMA9/Mod3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,11 @@
class Class1: #Объявление класса Class1 в модуле
def zad_zn(self,znach): # 1 Метод класса
self.data=znach # self - ссылка на экземпляр класса Class1
def otobrazh(self): # 2 Метод класса
print(self.data)#Отображение данных экземпляра
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2
print('значение=',self.data)#Отображение данных экземпляра
def otobrazh(objekt): #Объявление самостоятельной функции
print('значение объекта=',objekt)

21
TEMA9/SAU.py Обычный файл
Просмотреть файл

@@ -0,0 +1,21 @@
class SAU:
def __init__(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])

15
TEMA9/main_SAU.py Обычный файл
Просмотреть файл

@@ -0,0 +1,15 @@
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()

295
TEMA9/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,295 @@
# Отчёт по Теме 9
Соловьёва Екатерина. А-01-23
## 1. Запуск интерактивной оболочки IDLE.
## 2. Создание классов и их наследников
## 2.1. Создание автономного класса
Класс с именем Class1, содержащий 2 функции:
```py
class Class1: #Объявление класса
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
self.data=znach # self - ссылка на экземпляр класса
def otobrazh(self): # Метод 2 класса1
print(self.data)#Отображение данных экземпляра класса
z1=Class1() #Создаём 1-й экземпляр класса
z2=Class1() #Создаём 2-й экземпляр класса
z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
z1
<__main__.Class1 object at 0x00000244872A6660>
z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
z2
<__main__.Class1 object at 0x0000024487293C50>
z1.otobrazh()
экз.класса 1
z2.otobrazh()
-632.453
z1.data='Новое значение атрибута у экз.1' # Измените значение атрибута у первого экземпляра
z1.otobrazh()
Новое значение атрибута у экз.1
```
## 2.2. Создание класса-наследника
В объявлении класса после его имени в скобках перечисляются его «родительские классы»
```py
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
print('значение=',self.data)#Отображение данных экземпляра
z3=Class2()
dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
z3.zad_zn('Совсем новое')
z3.otobrazh()
значение= Совсем новое
z1.otobrazh()
Новое значение атрибута у экз.1
del z1,z2,z3
```
Когда вызывается метод объекта, Python:
* Сначала ищет метод в классе объекта (Class2)
* Если не находит - ищет в родительских классах (Class1)
* Продолжает по цепочке наследования
## 3. Использование классов, содержащихся в модулях
Модуль с именем Mod3:
```py
class Class1: #Объявление класса Class1 в модуле
def zad_zn(self,znach): # 1 Метод класса
self.data=znach # self - ссылка на экземпляр класса Class1
def otobrazh(self): # 2 Метод класса
print(self.data)#Отображение данных экземпляра
class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2
print('значение=',self.data)#Отображение данных экземпляра
def otobrazh(objekt): #Объявление самостоятельной функции
print('значение объекта=',objekt)
```
```py
from Mod3 import Class1
z4=Class1()
z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
z4.otobrazh()
File "C:\Users/Ekaterina/OneDrive/Desktop/Solovyova/python-labs/TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
При создании z4 не вызывается метод zad_zn(), поэтому атрибут data не создаётся. При вызове z4.otobrazh() метод пытается обратиться к self.data, но этого атрибута не существует.
```py
from Mod3 import Class1
z4=Class1() # Вызывается метод otobrazh() из класса Class1, который просто печатает self.data
z4.data='значение данного data у экз.4'
z4.otobrazh()
значение данного data у экз.4
```
Сравним с:
```py
del z4
import Mod3
z4=Mod3.Class2() # Вызывается ПЕРЕОПРЕДЕЛЁННЫЙ метод otobrazh() из класса Class2
z4.zad_zn('Класс из модуля')
z4.otobrazh()
значение= Класс из модуля
Mod3.otobrazh('Объект') # Вызывается ОТДЕЛЬНАЯ ФУНКЦИЯ otobrazh()
значение объекта= Объект
```
Разница в выводе объясняется тем, что во втором случае вызывается переопределённый метод Class2.otobrazh() (с префиксом "значение ="), а в третьем - самостоятельная функция из модуля.
## 4. Использование специальных методов
Имена специальных методов предваряются одним или двумя подчерками и имеют вид: <имя специального метода>
Для примера создам класс, содержащий два специальных метода
```py
class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
def __init__(self,znach): #Конструктор вызывается при создании нового экземпляра класса
self.data=znach
def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+»
return Class3(self.data+drug_zn)
def zad_dr_zn(self,povtor): #А это - обычный метод
self.data*=povtor
```
Метод add - это один из методов, осуществляющих так называемую «перегрузку» операторов.
Перегрузка операторов это возможность определять поведение стандартных операторов (+, -, *, /, <, > и т.д.) для объектов собственных классов.
Для иллюстрации работы этих методов создам экземпляр класса Class3
```py
z5=Class3('abc') #При создании экземпляра срабатывает конструктор
z5.otobrazh()
значение= abc
z6=z5+'def' должен сработать специальный метод __add__
z6.otobrazh()
значение= abcdef
z6.zad_dr_zn(3)
z6.otobrazh()
значение= abcdefabcdefabcdef
```
## 5. Присоединение атрибутов к классу.
```py
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
Class3.fio='Иванов И.И.'
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
z7=Class3(123)
dir(z7)==dir(Class3)
False
dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
```
## 6. Выявление родительских классов
Такое выявление делается с помощью специального атрибута bases, например, выведу родительский класс для созданного класса Class3:
```py
Class3.__bases__
(<class '__main__.Class2'>,)
Class2.__bases__
(<class '__main__.Class1'>,)
Class1.__bases__
(<class 'object'>,)
Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## 7. Создание свойства класса.
Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута.
Создам, например, новый класс с определенным в нем свойством
```py
class Class4:
def __init__(sam,znach):
sam.__prm=znach
def chten(sam):
return sam.__prm
def zapis(sam,znch):
sam.__prm=znch
def stiran(sam):
del sam.__prm
svojstvo=property(chten,zapis,stiran)
```
Здесь имеется 3 метода: chten, zapis, stiran, которые обслуживают созданное свойство, реализуя операции, соответственно, чтения, записи или удаления значений свойства. Теперь попробую некоторые операции с этим свойством
```py
exempl=Class4(12) # Вызывается __init__(12)
exempl.svojstvo Вызывается chten() возвращает self.__prm (12)
12
exempl.svojstvo=45 # Вызывается zapis(45) → self.__prm = 45
print(exempl.svojstvo) # Вызывается chten() → возвращает 45
45
del exempl.svojstvo # Вызывается stiran() → del self.__prm
exempl.svojstvo # атрибут удалён
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
exempl.svojstvo
File "<pyshell#42>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
## 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
Создадим модуль SAU.py с классом:
```py
class SAU:
def init(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])
```
модуль main_Sau.py:
```py
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
```
Тестирование:
```py
y= 0.0
y= 0.2173913043478261
y= 0.4763705103969754
y= 0.686594887811293
y= 0.8199324616478645
y= 0.8837201137353929
y= 0.8994188484874774
y= 0.8892777072047301
y= 0.870097963179993
y= 0.8518346102696789
y= 0.8387499784485772
y= 0.8314204114211459
y= 0.8286051955249649
y= 0.8285656555914835
y= 0.8297915186846528
y= 0.8312697736438287
y= 0.8324765218921963
y= 0.8332456979978418
y= 0.8336163607592184
y= 0.8337101315489143
y= 0.833654237067147
```
![График](Figure_1.png)
## 9. Сохраните созданный текстовый файл протокола в своем рабочем каталоге. Закончите сеанс работы с IDLE.

78
TEMA9/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,78 @@
# Общее контрольное задание по Теме 9
Соловьёва Екатерина, А-01-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
## Решение
```py
class Employee:
"""Класс для работы с данными сотрудников"""
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self.__pooshreniya = []
def povysit_oklad(self, summa_povysheniya):
"""
Метод для повышения оклада сотрудника на заданное значение
"""
if summa_povysheniya <= 0:
raise ValueError("Сумма повышения должна быть положительной!")
self.oklad += summa_povysheniya
return self.oklad
def perevesti_v_drugoi_otdel(self, novy_otdel):
"""Перевод сотрудника в другой отдел"""
self.otdel = novy_otdel
print(f"Сотрудник {self.fio} переведен в отдел: {novy_otdel}")
def izmenit_dolzhnost(self, novaya_dolzhnost):
"""Метод изменения должности"""
self.dolzhnost = novaya_dolzhnost
def get_pooshreniya(self):
"""Получить список поощрений"""
return self.__pooshreniya.copy()
def dobavit_pooshrenie(self, text):
"""Добавить поощрение в список"""
self.__pooshreniya.append(text)
@property #вызывает метод, который возвращает копию текущего списка поощрений.
def pooshreniya(self):
"""Свойство для получения списка поощрений"""
return self.__pooshreniya.copy()
```
## Вывод программы
```py
emp1=Employee ("Обычайко Д.С.", "Кафедра Управления и информационных технологий", "Ассистент", 100000)
emp2=Employee ("Пронин А.С.", "Кафедра Управления и информационных технологий", "Ассистент", 100000)
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
Обычайко Д.С., Кафедра Управления и информационных технологий, Ассистент, оклад: 100000
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
Пронин А.С., Кафедра Управления и информационных технологий, Ассистент, оклад: 100000
emp2.perevesti_v_drugoi_otdel("Деканат")
Сотрудник Пронин А.С. переведен в отдел: Деканат
emp1.izmenit_dolzhnost("Старший преподаватель")
print(f"Новая должность {emp1.fio}: {emp1.dolzhnost}")
Новая должность Обычайко Д.С.: Старший преподаватель
novy_oklad1 = emp1.povysit_oklad(20000)
emp2.dobavit_pooshrenie("За публикацию научной статьи")
print(f" Поощрения: {emp2.get_pooshreniya()}")
Поощрения: ['За публикацию научной статьи']
employee1.povysit_oklad(15000)
65000
```

187
TEMA9/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,187 @@
# Общее контрольно задание по Теме 9
Соловьёва Екатерина, А-01-23
## Задание:
1) Создайте модуль М1, содержащий 2 функции:
- функция 1: аргумент - список или кортеж с отсчетами некоторого сигнала; функция должна определить и вернуть число элементов, значение которых превышает значение предыдущего элемента;
- функция 2: аргумент - список или кортеж с последовательностью отсчетов сигнала; функция должна рассчитать список с накопленными суммами: первый элемент равен первому элементу исходной последовательности, второй - равен сумме двух первых элементов последовательности, третий - сумме первых трех элементов и т.д.
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
- запрашивается имя бинарного файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос;
- выборка вводится из файла;
- с помощью функции 1 производится определение числа элементов со значениями, превышающими значения их предшественников;
- с помощью функции 2 рассчитывается список с кумулятивными суммами;
- выборка отображается в виде графика.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
4) Проведите расчеты при 2-х разных исходных файлах.
## Решение:
M1.py
```py
def count_increasing_elements(sequence):
""" Функция 1: подсчитывает число элементов, значение которых превышает значение предыдущего элемента"""
if len(sequence) <= 1:
return 0
count = 0
for i in range(1, len(sequence)):
if sequence[i] > sequence[i-1]:
count += 1
return count
def cumulative_sum(sequence):
"""Функция 2: рассчитывает список с накопленными суммами"""
result = []
current_sum = 0
for value in sequence:
current_sum += value
result.append(current_sum)
return result
```
M2.py
```py
import os
import struct
import matplotlib.pyplot as plt
from M1 import count_increasing_elements, cumulative_sum
def read_binary_file(filename):
"""
Читает бинарный файл с числами с плавающей точкой
"""
data = []
try:
with open(filename, 'rb') as f:
while True:
bytes_data = f.read(8)
if not bytes_data:
break
value = struct.unpack('d', bytes_data)[0]
data.append(value)
except Exception as e:
print(f"Ошибка при чтении файла: {e}")
return data
def display_plots(original_data, cumulative_data):
"""
Отображает графики исходных данных и кумулятивных сумм
"""
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
ax1.plot(original_data, 'b-', linewidth=1.5, label='Исходный сигнал')
ax1.set_xlabel('Отсчеты')
ax1.set_ylabel('Амплитуда')
ax1.set_title('Исходный сигнал')
ax1.grid(True, alpha=0.3)
ax1.legend()
ax2.plot(cumulative_data, 'r-', linewidth=1.5, label='Накопленные суммы')
ax2.set_xlabel('Отсчеты')
ax2.set_ylabel('Сумма')
ax2.set_title('Кумулятивные суммы сигнала')
ax2.grid(True, alpha=0.3)
ax2.legend()
plt.tight_layout()
plt.show()
def process_signal_data():
""" Основная функция модуля M2 - выполняет все требуемые операции """
while True:
filename = input("Введите имя бинарного файла с выборкой: ").strip()
if os.path.exists(filename):
print(f"Файл '{filename}' найден.")
break
else:
print(f"Файл '{filename}' не существует. Пожалуйста, попробуйте еще раз.")
print("Чтение данных из файла...")
signal_data = read_binary_file(filename)
if not signal_data:
print("Файл пуст или содержит некорректные данные.")
return None, None, None
print(f"Прочитано {len(signal_data)} отсчетов сигнала.")
increasing_count = count_increasing_elements(signal_data)
print(f"Количество элементов, превышающих предыдущий: {increasing_count}")
cumulative_sums = cumulative_sum(signal_data)
print("Список с кумулятивными суммами рассчитан.")
display_plots(signal_data, cumulative_sums)
return signal_data, increasing_count, cumulative_sums
if __name__ == "__main__":
process_signal_data()
```
M0.py
```py
from M2 import process_signal_data
def main():
"""
Главная функция программы
"""
print("=" * 60)
print("ПРОГРАММА ОБРАБОТКИ СИГНАЛОВ")
print("=" * 60)
print("\n" + "=" * 60)
print("РАСЧЕТ №1")
print("=" * 60)
data1, count1, sums1 = process_signal_data()
if data1:
print(f"\nРезультаты расчета №1:")
print(f" • Общее количество отсчетов: {len(data1)}")
print(f" • Элементов, превышающих предыдущий: {count1}")
print(f" • Процент возрастающих элементов: {count1/len(data1)*100:.2f}%")
print("\n" + "=" * 60)
print("РАСЧЕТ №2")
print("=" * 60)
data2, count2, sums2 = process_signal_data()
if data2:
print(f"\nРезультаты расчета №2:")
print(f" • Общее количество отсчетов: {len(data2)}")
print(f" • Элементов, превышающих предыдущий: {count2}")
print(f" • Процент возрастающих элементов: {count2/len(data2)*100:.2f}%")
print("\n" + "=" * 60)
print("ОБРАБОТКА ЗАВЕРШЕНА")
print("=" * 60)
if __name__ == "__main__":
main()
```