Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МСиСвИТ Практическая работа №3.docx
Скачиваний:
1
Добавлен:
09.07.2024
Размер:
59.58 Кб
Скачать

Министерство образования Республики Беларусь

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра экономической информатики

Практическая работа №3 «Метрики сложности потока данных.» Вариант 17

Выполнил:

Проверил:

Старший преподаватель

кафедры ПОИТ

Грибович А. А.

Минск 2024

СОДЕРЖАНИЕ

ХОД ЛАБОРАТОРНОЙ РАБОТЫ 3

1. Исходные предоставленные данные 3

2. Листинг программы 3

3. Описание программы 7

4. Расчёт спена идентификаторов и спена разработанной программы 8

5. Расчет полной метрики Чепина и метрики Чепина ввода/вывода с результатами 8

Ход лабораторной работы

Цель работы: разработать детализированную схему алгоритма, представленную в соответствии с положениями ГОСТ 19701-90. В алгоритме предусмотреть вывод на экран всех входных и выходных данных. На основании разработанного алгоритма создать программный код программы.

  1. Исходные предоставленные данные

Для значений Х, изменяющихся от –1,5 до 2 с шагом 0,01, вычислить значения функции Y: 

Полученные значения Y занести в массив. Вывести значения Х и соответствующие им значения элементов результирующего массива.

  1. Листинг программы

Файл main.py имеет вид:

from function_y import FunctionY # импортирование разработанного класса искомой функции from messages import message, name_of_work, info_of_developer, go_out # импортирование приветственных сообщений # решение представлено с использованием объектно-ориентированного подхода class Solution(object): # класс основного метода @staticmethod # статический метод, который реализует основную бизнес-логику def main() -> None: # вывод приветственных сообщений message() name_of_work() info_of_developer() input() # ввод символа для успешного просмотра сообщений (аналог _getch()) # создание объекта класса с заданными границами и шагом аргумента y = FunctionY(first_border=-1.5, second_border=2, step=0.01) # пока аргумент функции не вышел за рамки, изначально аргумент равен значению первой границы while y.value_of_argument <= y.second_border: match y.defineInterval(): # определение к какому из 3-ёх интервалов принадлежит аргумент case 1: # аргумент принадлежит к первому интервалу y.firstFunction() # реализация функции Y на первом интервале и подсчёт её значения case 2: # аргумент принадлежит к второму интервалу y.secondFunction() # реализация функции Y на втором интервале и подсчёт её значения case 3: # аргумент принадлежит к третьему интервалу y.thirdFunction() # реализация функции Y на третьем интервале и подсчёт её значения y.doStep() # перемещение на следующую итерацию цикла (аргумент делает шаг +0.01) y.printValuesOfFunction() # вывод таблицы аргумент-значение-функция go_out() # вывод сообщения об окончании программы # запуск скрипта текущего файла if __name__ == '__main__': Solution.main()

Файл function_y.py имеет вид:

from math import sin, cos # импортирование необходимых математических функций from colors import * # импортирование стилей текста class FunctionY(object): # основной класс, представляющий искомую функцию # инициализация атрибутов объекта класса: границы, шаг аргумента def __init__(self: object(), first_border: float, second_border: float, step: float) -> None: self.first_border = first_border # первая граница self.value_of_argument = first_border # расчёт начинается с начала первой границы self.second_border = second_border # вторая граница self.step = step # шаг аргумента self.values_of_function = [] # список (аргумент-значение-функция) # pow - возведение в степень, round - округление дробного числа # добавление в список кортежа (аргумент, значение 1 - ой функции при заданном аргументе, номер функции) def firstFunction(self: object()) -> None: self.values_of_function.append((self.value_of_argument, round((sin(self.value_of_argument) + cos( self.value_of_argument) + self.value_of_argument), 3), 1)) # добавление в список кортежа (аргумент, значение 2 - ой функции при заданном аргументе, номер функции) def secondFunction(self: object()) -> None: self.values_of_function.append((self.value_of_argument, round((pow(self.value_of_argument, 2) * cos(self.value_of_argument)), 3), 2)) # добавление в список кортежа (аргумент, значение 3 - ей функции при заданном аргументе, номер функции) def thirdFunction(self: object()) -> None: self.values_of_function.append((self.value_of_argument, round((sin(self.value_of_argument) + pow(self.value_of_argument, 2)), 3), 3)) # определение к какому интервалу принадлежит аргумент def defineInterval(self: object()) -> int: if self.value_of_argument < 1: # [-1.5, 1) return 1 # первая функция elif self.value_of_argument >= 1.5: # [1.5, 2] return 3 # третья функция else: return 2 # [1, 1.5) - вторая функция # перемещение по интервалу аргумент = аргумент + шаг def doStep(self: object()) -> None: self.value_of_argument = round((self.value_of_argument + self.step), 3) # вывод таблицы аргумент-значение-функция def printValuesOfFunction(self: object()) -> None: # в зависимости от номера функции показывается её математическая запись view_of_functions = {1: 'sin(X) + cos(X) + X', 2: 'X^2 * cos(X)', 3: 'sin(X) + X^2'} # вывод заголовка таблицы print(Style.BRIGHT + Fore.LIGHTCYAN_EX + '+---------+------------+---------------------+\n' '| X | Y | Вид функции Y |\n' '+---------+------------+---------------------+') # вывод на экран пар аргумент-значение-функция в табличном виде for x, y, string in self.values_of_function: print(Style.BRIGHT + Fore.LIGHTCYAN_EX + '|', Style.BRIGHT + Fore.LIGHTWHITE_EX + f' {str(x).ljust(6)} ', Style.BRIGHT + Fore.LIGHTCYAN_EX + '|', Style.BRIGHT + Fore.LIGHTWHITE_EX + f' {str(y).ljust(8)} ', Style.BRIGHT + Fore.LIGHTCYAN_EX + '|', Style.BRIGHT + Fore.LIGHTWHITE_EX + f' {view_of_functions[string].ljust(19)}', Style.BRIGHT + Fore.LIGHTCYAN_EX + ' |', sep='') print(Style.BRIGHT + Fore.LIGHTCYAN_EX + '+---------+------------+---------------------+')

Файл messages.py имеет вид:

# использование стилей текста from colors import * # ДОБРО ПОЖАЛОВАТЬ В ПРОГРАММУ! def message() -> None: print(Style.BRIGHT + Fore.BLUE + '+---+--------------------------------------------------------+') print(Style.BRIGHT + Fore.BLUE + '|', Style.BRIGHT + Fore.RED + ' ДОБРО ПОЖАЛОВАТЬ В ПРОГРАММУ! ', Style.BRIGHT + Fore.BLUE + '|') print(Style.BRIGHT + Fore.BLUE + '+---+--------------------------------------------------------+') # ПРАКТИЧЕСКАЯ РАБОТА №1' ВАРИАНТ 17 def name_of_work() -> None: print(Style.BRIGHT + Fore.BLUE + '+---+--------------------------------------------------------+') print(Style.BRIGHT + Fore.BLUE + '|', Style.BRIGHT + Fore.RED + ' ПРАКТИЧЕСКАЯ РАБОТА №1', Style.BRIGHT + Fore.LIGHTCYAN_EX + ' ВАРИАНТ 17 ', Style.BRIGHT + Fore.BLUE + '|') print(Style.BRIGHT + Fore.BLUE + '+---+--------------------------------------------------------+') # информация о разработчике def info_of_developer() -> None: print(Style.BRIGHT + Fore.BLUE + '+---------------------------------------------------------------------------------+') print(Style.BRIGHT + Fore.BLUE + '|', Style.BRIGHT + Fore.RED + ' ПРОГРАММА БЫЛА РАЗРАБОТАНА СТУДЕНТОМ 2 КУРСА :', Style.BRIGHT + Fore.LIGHTCYAN_EX + ' ПАНФИЛЕНКО СТАНИСЛАВ ИГОРЕВИЧ ', Style.BRIGHT + Fore.BLUE + '|') print(Style.BRIGHT + Fore.BLUE + '+---------------------------------------------------------------------------------+') print(Style.BRIGHT + Fore.BLUE + '+----------------------------------------------------------------+') print(Style.BRIGHT + Fore.BLUE + '|', Style.BRIGHT + Fore.RED + ' АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ : ', Style.BRIGHT + Fore.LIGHTCYAN_EX + ' stasa_stasa_stasa_stasa@mail.ru ', Style.BRIGHT + Fore.BLUE + '|') print(Style.BRIGHT + Fore.BLUE + '+----------------------------------------------------------------+') # Осуществляем выход из программы... def go_out() -> None: print(Style.BRIGHT + Fore.BLUE + '+---+--------------------------------------------------------+') print(Style.BRIGHT + Fore.BLUE + '|', Style.BRIGHT + Fore.RED + ' Осуществляем выход из программы... ', Style.BRIGHT + Fore.BLUE + '|') print(Style.BRIGHT + Fore.BLUE + '+---+--------------------------------------------------------+')

Файл colors.py имеет вид:

# подключение необходимых атрибутов для настойки стиля текста from colorama import init, Fore from colorama import Back from colorama import Style init(autoreset=True)