From 69ded5e71cff2b69e1a4264cc7c4d3bb3e8e6560 Mon Sep 17 00:00:00 2001 From: KireevYP Date: Mon, 15 Dec 2025 10:07:17 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB(=D0=B0)=20?= =?UTF-8?q?'TEMA9/test.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/test.md | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 TEMA9/test.md diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..e93ce36 --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,160 @@ +# Индивидуальное контрольное задание по модулю 3 +Киреев Юрий А-02-23 +## Задание +1) Создайте модуль М1, содержащий две функции: + +- функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу; + +- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции. + +2) Создайте еще один модуль М2, в котором должны: + +- запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса; + +- запрос порогового значения КК; + +- вызов функции 1 с указанным именем; + +- трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов. + +3) Создайте модуль М0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin. + +4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу. +## Решение +Модуль M1: +```py +import statistics + +def raspil(filename, KK): + numbers = [] + with open(filename,'r') as fp: + for line in fp: + parts = line.split() + for part in parts: + numbers.append(float(part)) + file_name = filename.split(".")[0] + new_name1 = file_name + '1' + '.txt' + new_name2 = file_name + '2' + '.txt' + with open (new_name1, 'w') as f1, \ + open (new_name2, 'w') as f2: + for x in numbers: + if x > KK: + f1.write(str(x)+" ") + else: + f2.write(str(x)+" ") + return numbers + +def raschet(filename): + numbers = [] + with open(filename,'r') as fp: + for line in fp: + parts = line.split() + for part in parts: + numbers.append(float(part)) + mean_val = statistics.mean(numbers) + median_val = statistics.median(numbers) + min_val = min(numbers) + max_val = max(numbers) + std_val = statistics.stdev(numbers) + return mean_val, median_val, min_val, max_val, std_val +``` +Модуль M2: +```py +import os +import M1 +while True: + filename = input("Введите имя файла:") + if os.path.isfile(filename): + break + else: + print("Такого файла не существует, повторите ввод:") +KK = float(input("Введите пороговое значение:")) +numbers = M1.raspil(filename, KK) +print("Данные из файла:", numbers) +file_name = filename.split(".")[0] +file1 = file_name + '1' + '.txt' +file2 = file_name + '2' + '.txt' +files = (filename, file1, file2) +for file in files: + mean_val, median_val, min_val, max_val, std_val = M1.raschet(file) + print (f"Среднее: {mean_val}") + print (f"Медиана: {median_val}") + print (f"Минимальное: {min_val}") + print (f"Максимальное: {max_val}") + print (f"Стандартное отклонение: {std_val}") +``` +Модуль M0: +```py +import pylab +import pickle +import M2 + +pylab.plot(M2.numbers) +pylab.title('Исходные данные') +pylab.xlabel('Индекс') +pylab.ylabel('Значение') +pylab.show() + +with open('RES2a.bin', 'w') as RES: + pickle.dump(M2.numbers, RES) +``` +Файлы: +super_test_file.txt +```py +-1 +2 -3 +4 -5 6 +-7 8 -9 10 +-11 12 -13 14 -15 +16 -17 18 -19 20 +``` +test_file.txt +```py +1 2 3 +4 5 6 7 8 +9 10 +11 12 13 14 +15 16 17 18 19 20 +``` +Проверка super_test_file +```py +Введите имя файла:super_test_file.txt +Введите пороговое значение:0 +Данные из файла: [-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, 12.0, -13.0, 14.0, -15.0, 16.0, -17.0, 18.0, -19.0, 20.0] +Среднее: 0.5 +Медиана: 0.5 +Минимальное: -19.0 +Максимальное: 20.0 +Стандартное отклонение: 12.2796365452814 +Среднее: 11.0 +Медиана: 11.0 +Минимальное: 2.0 +Максимальное: 20.0 +Стандартное отклонение: 6.0553007081949835 +Среднее: -10.0 +Медиана: -10.0 +Минимальное: -19.0 +Максимальное: -1.0 +Стандартное отклонение: 6.0553007081949835 +``` +Проверка test_file +```py +Введите имя файла:test_file.txt +Введите пороговое значение:5 +Данные из файла: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0] +Среднее: 10.5 +Медиана: 10.5 +Минимальное: 1.0 +Максимальное: 20.0 +Стандартное отклонение: 5.916079783099616 +Среднее: 13.0 +Медиана: 13.0 +Минимальное: 6.0 +Максимальное: 20.0 +Стандартное отклонение: 4.47213595499958 +Среднее: 3.0 +Медиана: 3.0 +Минимальное: 1.0 +Максимальное: 5.0 +Стандартное отклонение: 1.5811388300841898 +```