diff --git a/TEMA8/chetnie.txt b/TEMA8/chetnie.txt index 487ec1e..c10f739 100644 --- a/TEMA8/chetnie.txt +++ b/TEMA8/chetnie.txt @@ -1,20 +1,21 @@ --92 -58 --42 -14 --76 -10 --80 -34 -94 --30 -6 --46 +-70 +-48 +-66 +44 +52 20 +12 -22 -32 -46 --18 -16 -100 --32 +-42 +-80 +66 +68 +66 +44 +92 +84 +78 +76 +58 +-86 +40 diff --git a/TEMA8/nechetnie.txt b/TEMA8/nechetnie.txt index ac2b375..40f6ea6 100644 --- a/TEMA8/nechetnie.txt +++ b/TEMA8/nechetnie.txt @@ -1,20 +1,19 @@ -57 --41 -17 -73 --65 -49 -11 --91 --41 -31 +71 +13 +83 +-5 +51 65 -29 --41 --7 --83 --27 --69 --67 --1 -25 +-51 +-75 +-55 +93 +-79 +85 +51 +-89 +9 +-53 +71 +71 +-91 diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..b6f32a6 --- /dev/null +++ b/TEMA9/M0.py @@ -0,0 +1,10 @@ +import M2 + +sps = M2.main() + +if sps: + f = open('Res000.txt', 'w') + for v in sps: + f.write(str(v) + '\n') + f.close() + print('\nРезультаты записаны в Res000.txt') diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..2159a02 --- /dev/null +++ b/TEMA9/M1.py @@ -0,0 +1,22 @@ +def func1(a, b): + ma = sum(a) / len(a) + mb = sum(b) / len(b) + + da = sum((x - ma) ** 2 for x in a) / (len(a) - 1) + db = sum((x - mb) ** 2 for x in b) / (len(b) - 1) + + ab = a + b + maxv = max(ab) + minv = min(ab) + + sps = [ma, mb, da, db, maxv, minv] + return sps + +def func2(x, a, b): + mina = min(abs(z - x) for z in a) + minb = min(abs(z - x) for z in b) + + if mina < minb: + return 'A' + else: + return 'B' diff --git a/TEMA9/M2.py b/TEMA9/M2.py new file mode 100644 index 0000000..3b5d7a6 --- /dev/null +++ b/TEMA9/M2.py @@ -0,0 +1,38 @@ +import pickle +import os +from M1 import func1, func2 + +def main(): + fname = input('Имя бинарного файла: ') + + if not os.path.exists(fname): + print('Файл не существует') + return None + + f = open(fname, 'rb') + a = pickle.load(f) + b = pickle.load(f) + f.close() + + print('\nСписок A:', a) + print('Список B:', b) + + sps = func1(a, b) + + print('\nПараметры данных:') + print('Среднее A:', sps[0]) + print('Среднее B:', sps[1]) + print('Дисперсия A:', sps[2]) + print('Дисперсия B:', sps[3]) + print('Максимум:', sps[4]) + print('Минимум:', sps[5]) + + while True: + xstr = input('\nВведите x (Enter для выхода): ') + if xstr == '': + break + x = float(xstr) + rez = func2(x, a, b) + print('Список с наиболее близким значением:', rez) + + return sps diff --git a/TEMA9/data.bin b/TEMA9/data.bin new file mode 100644 index 0000000..1ff2714 Binary files /dev/null and b/TEMA9/data.bin differ diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..df293c9 --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,129 @@ +# Индивидуальное задание по модулю 3 + + + +Грудинин Егор, А-03-23 + + +## Задание + +Вариант 4 + +1) Создайте модуль М1, содержащий две функции: + +- функция 1: аргументы - списки А и В с необязательно равными числами элементов; в функции по спискам вычисляются и возвращается список SPS со средними значениями МА, МВ, оценками дисперсий DА,DВ, а также с наибольшим и наименьшим значениями по совокупности данных из обоих списков; + +- функция 2 : аргументы - числовое значение х и списки А и В; в функции по спискам находится элемент z, для которого значение |z-x| будет наименьшим, и возвращается символьное значение А, если этот элемент будет найден в списке А, или В, если он найдется в В. + +2) Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считываются два списка: А и В; + +- с применением функции 1 рассчитываются и отображаются параметры данных; + +- у пользователя запрашивается значение х; с применением функции 2 определяется символ, указывающий имя списка с наиболее "близким" значением и отображается на экране; эта операция повторяется до тех пор, пока пользователь в ответ на запрос не введет пустое значение. + +3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает список SPS, полученный в функции 1 в текстовый файл Res000.txt. + +4) Для проверки программы запишите в бинарный файл с некоторым именем два списка: + +А: -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665 + +В: 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993 + +и введите контрольные значения х=-100 и х= 3500. + +## Решение +Запись данных в бинарный файл +```py +import pickle + +a = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] +b = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] + +f = open('data.bin', 'wb') +pickle.dump(a, f) +pickle.dump(b, f) +f.close() + +print('Данные записаны в data.bin') +``` +M1 +```py +def func1(a, b): + ma = sum(a) / len(a) + mb = sum(b) / len(b) + + da = sum((x - ma) ** 2 for x in a) / (len(a) - 1) + db = sum((x - mb) ** 2 for x in b) / (len(b) - 1) + + ab = a + b + maxv = max(ab) + minv = min(ab) + + sps = [ma, mb, da, db, maxv, minv] + return sps + +def func2(x, a, b): + mina = min(abs(z - x) for z in a) + minb = min(abs(z - x) for z in b) + + if mina < minb: + return 'A' + else: + return 'B' +``` +M2 +```py +import pickle +import os +from M1 import func1, func2 + +def main(): + fname = input('Имя бинарного файла: ') + + if not os.path.exists(fname): + print('Файл не существует') + return None + + f = open(fname, 'rb') + a = pickle.load(f) + b = pickle.load(f) + f.close() + + print('\nСписок A:', a) + print('Список B:', b) + + sps = func1(a, b) + + print('\nПараметры данных:') + print('Среднее A:', sps[0]) + print('Среднее B:', sps[1]) + print('Дисперсия A:', sps[2]) + print('Дисперсия B:', sps[3]) + print('Максимум:', sps[4]) + print('Минимум:', sps[5]) + + while True: + xstr = input('\nВведите x (Enter для выхода): ') + if xstr == '': + break + x = float(xstr) + rez = func2(x, a, b) + print('Список с наиболее близким значением:', rez) + + return sps +``` +M0 +```py +import M2 + +sps = M2.main() + +if sps: + f = open('Res000.txt', 'w') + for v in sps: + f.write(str(v) + '\n') + f.close() + print('\nРезультаты записаны в Res000.txt') +```