Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

175 строки
5.2 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# Индивидуальное контрольное задание по теме 9
Подольский Никита, А-01-23
## Задание (Вариант 5)
M3_5
1)      Создайте модуль М1, содержащий две функции:
- функция 1: аргумент - список СС с числовыми или символьными значениями; по этому списку рассчитывается новый список СС1  с неповторяющимися значениями из исходного списка и числовой список СС2 с целочисленными элементами, равными числам повторений значений из СС1 в СС; эти два списка - результаты функции.
- функция 2: аргументы - имя текстового файла, список с числовыми или символьными значениями  и целое число; элементы из входного списка должны быть записаны в указанный файл, причем число элементов в строке файла должно равняться указанному целому числу.
2) Создайте еще один модуль М2, в котором должны:
- запрашиваться имя текстового файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;
- считывание значений из каждой строки файла и формирование из них списка ММ;
- вызов функции 1 с ММ и отображение результатов;
- вызов функции 2 с передачей ей списка СС1 из функции 1 для записи в файл RES2.txt по 3 элемента в строке.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика  полученный список СС2 и записывает его в бинарный файл RES2a.bin.
4) Подготовьте 2 файла: один с 50 целочисленными случайными значениями из диапазона от 20 до 27, второй - с некоторым набором повторяющихся символьных значений, например, фамилий, и проверьте с ними разработанную программу.
## Решение (Вариант 5)
M1:
```python
# M1.py
def func1(CC):
CC1 = []
CC2 = []
i = 0
while i < len(CC):
value = CC[i]
j = 0
exists = 0
while j < len(CC1):
if CC1[j] == value:
exists = 1
break
j = j + 1
if exists == 0:
CC1.append(value)
i = i + 1
i = 0
while i < len(CC1):
value = CC1[i]
count = 0
j = 0
while j < len(CC):
if CC[j] == value:
count = count + 1
j = j + 1
CC2.append(count)
i = i + 1
return CC1, CC2
def func2(filename, CC, n):
with open(filename, "w", encoding="utf-8") as f:
i = 0
in_line = 0
while i < len(CC):
if in_line > 0:
f.write(" ")
f.write(str(CC[i]))
in_line = in_line + 1
if in_line == n:
f.write("\n")
in_line = 0
i = i + 1
if in_line != 0:
f.write("\n")
```
M2:
```python
# M2.py
import os
import M1
def to_value(text):
s = text.strip()
if s.isdigit():
return int(s)
return s
def run():
filename = input("Введите имя файла: ")
while not os.path.exists(filename):
print("Файл не найден. Повторите ввод.")
filename = input("Введите имя файла: ")
MM = []
with open(filename, "r", encoding="utf-8") as f:
for line in f:
parts = line.split()
i = 0
while i < len(parts):
MM.append(to_value(parts[i]))
i = i + 1
CC1, CC2 = M1.func1(MM)
print(CC1)
print(CC2)
M1.func2("RES2.txt", CC1, 3)
return CC2
```
M0:
```python
# M0.py
import pickle
import matplotlib.pyplot as plt
import M2
def write_bin(filename,data):
with open(filename,"wb") as f:
pickle.dump(data,f)
def main():
CC2=M2.run()
x=[]
i=0
while i<len(CC2):
x.append(i)
i=i+1
plt.plot(x,CC2)
plt.grid(True)
plt.show()
write_bin("RES2a.bin",CC2)
if __name__ == "__main__":
main()
```
1 запуск:
```py
import M0
NUM50.txt
# Числа
[21, 25, 23, 27, 22, 24, 26, 20]
# Количество повторений
[7, 7, 6, 6, 6, 6, 6, 6]
```
![[111.png]]
2 запуск:
```py
import M0
NAMES.txt
['Иванов', 'Петров', 'Сидоров', 'Смирнов', 'Кузнецов', 'Орлов']
[6, 5, 4, 4, 3, 3]
```
![[222.png]]