diff --git a/TEMA5/test.md b/TEMA5/test.md new file mode 100644 index 0000000..fe90c80 --- /dev/null +++ b/TEMA5/test.md @@ -0,0 +1,57 @@ +Филиппова Евгения А-01-23 +# Контрольное задание по теме 5 +## 4. Создайте список с 20 случайными, нормально распределенными (математическое ожидание равно 3400, стандартное отклонение равно 121) числами. Рассчитайте по нему среднее значение и число элементов, значение которых превышает это среднее. +## Решение +```py +import random + +mean = 3400 +std_dev = 121 +num_elements = 20 + +data_list = [] + +for i in range(num_elements): + number = random.gauss(mean, std_dev) + data_list.append(number) + +print("Сгенерированный список чисел:") +for i, value in enumerate(data_list): + print(value) + +average = sum(data_list) / len(data_list) +print(f"Среднее значение: {average:.2f}") + +count_above_average = 0 +for value in data_list: + if value > average: + count_above_average += 1 + +print(f"Количество элементов, превышающих среднее: {count_above_average}") +``` +## Вывод +```py +Сгенерированный список чисел: +3266.0057161740197 +3364.2577873809582 +3348.916608655013 +3262.5066922987626 +3308.9415900120775 +3455.0412592717685 +3206.3788580234527 +3504.741563444228 +3453.7470771740113 +3487.2596108101347 +3449.8944578223154 +3541.3210943794948 +3438.469218313021 +3352.7049681354106 +3382.8377250077247 +3421.6158576628404 +3249.3337511565533 +3143.7702393890813 +3424.510733659812 +3468.569809364851 +Среднее значение: 3376.54 +Количество элементов, превышающих среднее: 11 +``` \ No newline at end of file diff --git a/TEMA5/test.py b/TEMA5/test.py new file mode 100644 index 0000000..4f90ace --- /dev/null +++ b/TEMA5/test.py @@ -0,0 +1,25 @@ +import random + +mean = 3400 +std_dev = 121 +num_elements = 20 + +data_list = [] + +for i in range(num_elements): + number = random.gauss(mean, std_dev) + data_list.append(number) + +print("Сгенерированный список чисел:") +for i, value in enumerate(data_list): + print(value) + +average = sum(data_list) / len(data_list) +print(f"Среднее значение: {average:.2f}") + +count_above_average = 0 +for value in data_list: + if value > average: + count_above_average += 1 + +print(f"Количество элементов, превышающих среднее: {count_above_average}") diff --git a/TEMA6/M2_11.bin b/TEMA6/M2_11.bin new file mode 100644 index 0000000..7a2d8a4 Binary files /dev/null and b/TEMA6/M2_11.bin differ diff --git a/TEMA6/test.M2.py b/TEMA6/test.M2.py new file mode 100644 index 0000000..3db3ae3 --- /dev/null +++ b/TEMA6/test.M2.py @@ -0,0 +1,63 @@ +import math +import random +import pickle +print("\n1. Ввод имени функции") +func_name = input("Введите имя функции из библиотеки math: ") +func = eval(f"math.{func_name}") + +print("\n2. Создание кортежа случайных чисел") +temp_list = [] +for i in range(20): + number = random.randint(11, 40) + temp_list.append(number) + +numbers_tuple = tuple(temp_list) +print("Сгенерированный кортеж:") +print(numbers_tuple) + +print("\n3. Применение функции к элементам кортежа") +result_list = [] +for value in numbers_tuple: + result = func(value) + result_list.append(result) + +print("\n4. Запись в бинарный файл") +filename = "M2_11.bin" +print(f"Имя файла: {filename}") + +file = open(filename, 'wb') +pickle.dump(numbers_tuple, file) +pickle.dump(result_list, file) +file.close() +print("Данные успешно записаны в файл") +print("\nПроверка записи (чтение из файла):") +file = open(filename, 'rb') +read_tuple = pickle.load(file) +read_list = pickle.load(file) +file.close() + +print(f"Прочитанный кортеж (первые 5 элементов): {read_tuple[:5]}") +print(f"Прочитанный список (первые 5 элементов): {[round(x, 3) for x in read_list[:5]]}") +# 5. Расчет среднего значения разностей элементов на соседних четных и нечетных позициях +print("\n5. Расчет среднего значения разностей") + +differences = [] +i = 0 +while i < len(result_list) - 1: + diff = result_list[i] - result_list[i+1] + differences.append(diff) + i = i + 2 +print(f"Найдено {len(differences)} разностей") +if len(differences) > 0: + sum_diff = 0 + for d in differences: + sum_diff = sum_diff + d + average_diff = sum_diff / len(differences) + print("\nРазности между соседними четными и нечетными позициями:") + for j in range(len(differences)): + d_1 = j * 2 + print(f" {result_list[d_1]:.3f} - {result_list[d_1+1]:.3f} = {differences[j]:.3f}") + + print(f"\nСреднее значение разностей: {average_diff:.6f}") +else: + print("Недостаточно элементов для вычисления разностей") diff --git a/TEMA6/test.md b/TEMA6/test.md new file mode 100644 index 0000000..e69de29 diff --git a/TEMA7/test.md b/TEMA7/test.md new file mode 100644 index 0000000..e69de29 diff --git a/TEMA7/test.py b/TEMA7/test.py new file mode 100644 index 0000000..7f84d3a --- /dev/null +++ b/TEMA7/test.py @@ -0,0 +1,39 @@ +def read_file_to_list(filename): + result = [] + try: + f = open(filename, 'r', encoding='utf-8') + lines = f.readlines() + f.close() + for line in lines: + line = line.strip() + if line == '': + continue + elements = line.split(',') + row = [] + for elem in elements: + elem = elem.strip() + if elem.isdigit() or (elem.startswith('-') and elem[1:].isdigit()): + row.append(int(elem)) + else: + try: + if '.' in elem: + parts = elem.split('.') + if len(parts) == 2: + if (parts[0].isdigit() or (parts[0].startswith('-') and parts[0][1:].isdigit())) and parts[1].isdigit(): + row.append(float(elem)) + else: + row.append(elem) + else: + row.append(elem) + else: + row.append(elem) + except: + row.append(elem) + + result.append(row) + + except FileNotFoundError: + print(f"Ошибка: Файл '{filename}' не найден!") + return [] + + return result diff --git a/TEMA7/test.txt b/TEMA7/test.txt new file mode 100644 index 0000000..181b779 --- /dev/null +++ b/TEMA7/test.txt @@ -0,0 +1,8 @@ +1,2,3,4,5 +100,200,300 +3.14,2.718,1.618,0.577 +один,два,три,четыре,пять +-5,-10,-15,-20 +10.5,20.7,30.9 +строка1,строка2,строка3 +смешанные,данные,15,20.5,-7 \ No newline at end of file diff --git a/TEMA8/Figure_1.png b/TEMA8/Figure_1.png new file mode 100644 index 0000000..e3476ec Binary files /dev/null and b/TEMA8/Figure_1.png differ diff --git a/TEMA8/Mod1_test.py b/TEMA8/Mod1_test.py new file mode 100644 index 0000000..81a8008 --- /dev/null +++ b/TEMA8/Mod1_test.py @@ -0,0 +1,35 @@ +import math +f = lambda a, x: a * math.sin(x) / x if x != 0 else a +def raschet(a, nachalo, konec, shag, name_file): + """ + Рассчитывает значения функции a*sin(x)/x на интервале + и записывает результаты в файл + + Параметры: + a - коэффициент + nachalo - начало интервала + konec - конец интервала + shag - шаг + imya_faila - имя файла для сохранения + """ + # Списки для результатов + x_znach = [] + y_znach = [] + + # Цикл для расчета значений + x = nachalo + while x <= konec: + y = f(a, x) + x_znach.append(x) + y_znach.append(y) + x = x + shag + + # Запись в файл + fail = open(name_file, 'w') + for y in y_znach: + fail.write(str(y) + '\n') + fail.close() + + print(f"Результаты сохранены в файл '{name_file}'") + + return x_znach, y_znach diff --git a/TEMA8/Mod2_test.py b/TEMA8/Mod2_test.py new file mode 100644 index 0000000..928e9a2 --- /dev/null +++ b/TEMA8/Mod2_test.py @@ -0,0 +1,23 @@ +import Mod1_test as m1 +import math +import pylab +print("\nВведите параметры для расчета:") +a = float(input("Коэффициент a = ")) +print("\nИнтервал расчета (по заданию: 0 < x ≤ 50):") +nachalo = float(input("Начало интервала = ")) +konec = float(input("Конец интервала (до 50) = ")) +shag = float(input("Шаг (0.5) = ")) + +name_file = input("Имя файла для сохранения = ") + +x_list, y_list = m1.raschet(a, nachalo, konec, shag, name_file) + +for i in range(min(10, len(x_list))): + print(f"{x_list[i]:6.2f} | {y_list[i]:10.4f}") + +pylab.plot(x_list, y_list, 'b-', linewidth=2) +pylab.xlabel('x') +pylab.ylabel('y') +pylab.title(f'График функции y = {a}*sin(x)/x') +pylab.grid(True) +pylab.show() diff --git a/TEMA8/test b/TEMA8/test new file mode 100644 index 0000000..e73edc7 --- /dev/null +++ b/TEMA8/test @@ -0,0 +1,99 @@ +1.682941969615793 +1.3299933154720727 +0.9092974268256817 +0.47877771528316515 +0.0940800053732448 +-0.20044755867978276 +-0.3784012476539641 +-0.43445783007337646 +-0.3835697098652554 +-0.2565601183892334 +-0.09313849939964196 +0.0661907655654817 +0.18771045677679687 +0.25013332713993036 +0.24733956165584545 +0.18787932061729182 +0.09158188560927924 +-0.015821288518275644 +-0.10880422217787396 +-0.16756109713746095 +-0.181816401191037 +-0.1522525521197267 +-0.08942881966673916 +-0.01061150357619211 +0.06464108258871398 +0.11907917430394385 +0.14151533652783863 +0.1289510421413356 +0.08670504535428224 +0.026640965411328592 +-0.03598791458313316 +-0.08627701119625734 +-0.11310558727994786 +-0.11150011491064658 +-0.08344302741907512 +-0.037024931726444596 +0.015776548385573932 +0.06210665330457447 +0.09129452507276277 +0.09725168724671213 +0.0796814893843863 +0.04387339563666941 +-0.0008046644809458069 +-0.043304401107600844 +-0.07358438297175397 +-0.08494315131739542 +-0.07546486350055198 +-0.0482740840706224 +-0.010588140007821843 +0.028161439531150453 +0.05865834234458482 +0.07391378438520128 +0.07084266136329652 +0.050853820484007106 +0.019350413450562074 +-0.015702150188547117 +-0.045767854083652935 +-0.06379873954867482 +-0.06586877493952412 +-0.05200834357096952 +-0.026066944859552584 +0.005331711472491862 +0.03446416757760566 +0.05439202606435881 +0.06060071879437983 +0.052008358219055306 +0.031122510948236697 +0.0033326074263724387 +-0.024467581114065773 +-0.04557852204010741 +-0.05509882519128421 +-0.05105298015642222 +-0.034785845046324294 +-0.010549269313944655 +0.015598346247862386 +0.03729738144268281 +0.049425404424825015 +0.049298504085821676 +0.03725565802396744 +0.01650129268387262 +-0.007737691161205316 +-0.029520971227733485 +-0.0436438832340778 +-0.046874658970333834 +-0.038687197331562714 +-0.021324851309601257 +0.0008046329593369808 +0.02224203674393834 +0.0378179344237386 +0.043894104281836065 +0.0392081890282091 +0.02512673481347465 +0.005258430755115915 +-0.01546548838459753 +-0.03201061088848612 +-0.04045807994239575 +-0.03892867970446824 +-0.027995351686209927 +-0.01049499414815715 diff --git a/TEMA8/test.md b/TEMA8/test.md new file mode 100644 index 0000000..e69de29 diff --git a/TEMA9/Figure_2.png b/TEMA9/Figure_2.png new file mode 100644 index 0000000..7b9c734 Binary files /dev/null and b/TEMA9/Figure_2.png differ diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..81c788b --- /dev/null +++ b/TEMA9/M0.py @@ -0,0 +1,18 @@ +import M2 +import pylab +signal, t, F = M2.process_signal() +indices = list(range(len(signal))) +pylab.figure(figsize=(12, 6)) +pylab.plot(indices, signal, 'b-o', linewidth=2, markersize=4) +pylab.xlabel('Номер отсчета') +pylab.ylabel('Значение сигнала') +pylab.title('График сигнала (приращения заболеваемости COVID-19)') +pylab.grid(True) +pylab.axhline(y=0, color='r', linestyle='--', linewidth=1) + +N = len(signal) // 2 +pylab.axvline(x=N, color='g', linestyle='-', linewidth=2, label=f'Граница N={N}') +pylab.legend() +pylab.show() + +print("График отображен.") diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..3800bfb --- /dev/null +++ b/TEMA9/M1.py @@ -0,0 +1,89 @@ +import math + +def function1(signal, N): + """ + Функция 1: рассчитывает оценки средних и дисперсий по первым N отсчетам + и по оставшейся части сигнала + + Аргументы: + signal - ряд отсчетов сигнала + N - целочисленный параметр (количество первых отсчетов) + + Возвращает: + M1, M2, C1, C2 - средние и дисперсии по двум частям сигнала + """ + part1 = signal[:N] + part2 = signal[N:] + + if len(part1) > 0: + M1 = sum(part1) / len(part1) + sum_sq1 = 0 + for x in part1: + sum_sq1 += (x - M1) ** 2 + C1 = sum_sq1 / (len(part1) - 1) if len(part1) > 1 else 0 + else: + M1 = 0 + C1 = 0 + + if len(part2) > 0: + M2 = sum(part2) / len(part2) + sum_sq2 = 0 + for x in part2: + sum_sq2 += (x - M2) ** 2 + C2 = sum_sq2 / (len(part2) - 1) if len(part2) > 1 else 0 + else: + M2 = 0 + C2 = 0 + + return M1, M2, C1, C2 + + +def function2(filename): + """ + Функция 2: читает данные из файла, передает их в функцию 1, + отображает результаты и рассчитывает статистики t и F + + Аргумент: + filename - имя текстового файла с отсчетами сигнала + + Возвращает: + signal - прочитанный сигнал + t, F - рассчитанные статистики + M1, M2, C1, C2 - промежуточные результаты + """ + file = open(filename, 'r') + content = file.read() + file.close() + + elements = content.replace(',', ' ').split() + signal = [] + for elem in elements: + if elem.strip(): + signal.append(float(elem)) + + NN = len(signal) + N = NN // 2 + print(f"Параметр N (половина длины) = {N}") + + M1, M2, C1, C2 = function1(signal, N) + + print(f"Первые {N} отсчетов: M1 = {M1:.4f}, C1 = {C1:.4f}") + print(f"Оставшиеся {NN-N} отсчетов: M2 = {M2:.4f}, C2 = {C2:.4f}") + + if NN > 2 and (C1 * N + C2 * (NN - N)) > 0: + numerator = abs(M1 - M2) + denominator = math.sqrt((C1 * N + C2 * (NN - N)) / (NN - 2)) + t = numerator / denominator if denominator != 0 else 0 + else: + t = 0 + print("Недостаточно данных для расчета t") + + if C2 > 0 and C1 > 0: + F = max(C1, C2) / min(C1, C2) + else: + F = 1 + + print(f"Статистика t = {t:.6f}") + print(f"Статистика F = {F:.6f}") + + return signal, t, F, M1, M2, C1, C2 diff --git a/TEMA9/M2.py b/TEMA9/M2.py new file mode 100644 index 0000000..af85952 --- /dev/null +++ b/TEMA9/M2.py @@ -0,0 +1,55 @@ +import os +import M1 + +def process_signal(): + """ + Основная функция модуля M2 + Запрашивает имя файла, проверяет его существование, + вызывает функцию2 из M1 и записывает результаты в файл Res101.txt + """ + # Запрос имени файла с проверкой существования + while True: + filename = input("\nВведите имя файла с данными: ").strip() + + if os.path.exists(filename): + print(f"Файл '{filename}' найден") + break + else: + print(f"Файл '{filename}' не существует. Повторите ввод.") + # Вызов функции 2 из модуля M1 + signal, t_stat, F_stat, mean1, mean2, var1, var2 = M1.function2(filename) + + print("Отсчеты сигнала:") + for i in range(len(signal)): + print(f" {i:2d}: {signal[i]:8.2f}") + print("\n--- Анализ результатов ---") + messages = [] + if t_stat > 2: + msg_t = "Сигнал сильно меняется" + print(f"t={t_stat:.4f} > 2: {msg_t}") + else: + msg_t = "Сигнал заметно не меняется" + print(f"t={t_stat:.4f} ≤ 2: {msg_t}") + messages.append(msg_t) + + if F_stat > 4: + msg_F = "Разброс сигнала сильно меняется" + print(f"F={F_stat:.4f} > 4: {msg_F}") + else: + msg_F = "Разброс сигнала заметно не меняется" + print(f"F={F_stat:.4f} ≤ 4: {msg_F}") + messages.append(msg_F) + res_filename = "Res101.txt" + file = open(res_filename, 'w', encoding='utf-8') + file.write(f"Исходный файл: {filename}\n") + file.write(f"Количество отсчетов: {len(signal)}\n") + file.write(f"t-статистика: {t_stat:.6f}\n") + file.write(f"F-статистика: {F_stat:.6f}\n") + file.write("-"*40 + "\n") + file.write(f"Вывод 1: {msg_t}\n") + file.write(f"Вывод 2: {msg_F}\n") + file.close() + + print(f"\nРезультаты сохранены в файл '{res_filename}'") + + return signal, t_stat, F_stat diff --git a/TEMA9/Res101.txt b/TEMA9/Res101.txt new file mode 100644 index 0000000..18f4213 --- /dev/null +++ b/TEMA9/Res101.txt @@ -0,0 +1,7 @@ +Исходный файл: covid_jan2022.txt +Количество отсчетов: 20 +t-статистика: 1.480665 +F-статистика: 6.441532 +---------------------------------------- +Вывод 1: Сигнал заметно не меняется +Вывод 2: Разброс сигнала сильно меняется diff --git a/TEMA9/covid_jan2022.txt b/TEMA9/covid_jan2022.txt new file mode 100644 index 0000000..fda9f7c --- /dev/null +++ b/TEMA9/covid_jan2022.txt @@ -0,0 +1,20 @@ +-440 +-131 +-456 +1419 +-167 +-322 +-416 +1695 +421 +3209 +2665 +3359 +2051 +1496 +526 +2647 +4951 +10663 +7699 +5993 \ No newline at end of file diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..e69de29