diff --git a/TEMA8/Fig1.png b/TEMA8/Fig1.png new file mode 100644 index 0000000..31cf58b Binary files /dev/null and b/TEMA8/Fig1.png differ diff --git a/TEMA8/test_mod.md b/TEMA8/test_mod.md new file mode 100644 index 0000000..8a4e0d6 --- /dev/null +++ b/TEMA8/test_mod.md @@ -0,0 +1,206 @@ +# Тест модуля 3 + +Похил Анастасия, А-02-23, вариант 22 + +## Задание +1) Создайте модуль Мm1, содержащий две функции: + +- функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу; + +- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции. + +2) Создайте еще один модуль Мm2, в котором должны: + +- запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса; + +- запрос порогового значения КК; + +- вызов функции 1 с указанным именем; + +- трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов. + +3) Создайте модуль Мm0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin. + +4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу. + + +## Решение +```py +#Mmod1 +import statistics + +def funkciya1(imya_faila, KK): + f = open(imya_faila, 'r') + stroki = f.readlines() + f.close() + vse_chisla = [] + + + for stroka in stroki: + slova = stroka.split() + + for slovo in slova: + if slovo: + chislo = float(slovo) + vse_chisla.append(chislo) + + if imya_faila.endswith('.txt'): + osnova = imya_faila[:-4] + else: + osnova = imya_faila + + imya1 = osnova + '1.txt' + imya2 = osnova + '2.txt' + + f1 = open(imya1, 'w') + + f2 = open(imya2, 'w') + + + for chislo in vse_chisla: + if chislo > KK: + f1.write(str(chislo) + '\n') + else: + f2.write(str(chislo) + '\n') + + f1.close() + f2.close() + + return vse_chisla + + +def funkciya2(imya_faila): + f = open(imya_faila, 'r') + stroki = f.readlines() + f.close() + chisla = [] + + for stroka in stroki: + slova = stroka.split() + + for slovo in slova: + if slovo: + chisla.append(float(slovo)) + + if len(chisla) == 0: + return None + + + srednee = statistics.mean(chisla) + mediana = statistics.median(chisla) + minimum = min(chisla) + maximum = max(chisla) + std = statistics.stdev(chisla) + + return [srednee, mediana, minimum, maximum, std] + +``` +2) +```py +# Модуль Мmod2 +import Mmod1 +import os + +while True: + imya = input("Введите имя файла с данными: ") + if os.path.exists(imya): + break + else: + print(f"Ошибка: файл '{imya}' не найден!") + +KK_str = input("пороговое значение КК: ") +KK = float(KK_str) +vse_chisla = Mmod1.funkciya1(imya, KK) + + +print("Для исходного файла:") +rez1 = Mmod1.funkciya2(imya) +if rez1: + print(rez1[0]) + print({rez1[1]) + print(rez1[2]) + print(rez1[3]) + print(rez1[4]) +else: + print(" ") + + + +if imya.endswith('.txt'): + osnova = imya[:-4] +else: + osnova = imya + +imya1 = osnova + '1.txt' + +print(f"Для файла '{imya1}':") +if os.path.exists(imya1): + rez2 = Mmod1.funkciya2(imya1) + if rez2: + print(rez2[0]) + print(rez2[1]) + print(rez2[2]) + print(rez2[3]) + print(rez2[4]) + else: + print("") + + +imya2 = osnova + '2.txt' + +print(f"Для файла '{imya2}':") +if os.path.exists(imya2): + rez3 = Mmod1.funkciya2(imya2) + if rez3: + print(rez3[0]) + print(rez3[1]) + print(rez3[2]) + print(rez3[3]) + print(rez3[4]) + else: + print("") +``` +3) +````py +#Mmod0 +import Mmod2 +import matplotlib.pyplot as plt + +with open("data.txt", "r") as f: + d = [float(x) for line in f for x in line.split()] + +plt.plot(d) +plt.show() + +with open("RES2a.bin", "wb") as f: + f.write(struct.pack("i", len(d))) + for x in d: + f.write(struct.pack("f", x)) +``` + + +# Результат +```py +Введите имя файла с данными: data.txt +пороговое значение КК: 6 +Для исходного файла: +10.5 +10.5 +1.0 +20.0 +5.916079783099616 +Для файла 'data1.txt': +13.5 +13.5 +7.0 +20.0 +4.183300132670378 +Для файла 'data2.txt': +3.5 +3.5 +1.0 +6.0 +1.8708286933869707 +``` + +![](Fig1.PNG) \ No newline at end of file