![](/user_photo/_userpic.png)
Министерство образования Республики Беларусь
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра экономической информатики
Практическая работа №5 «Оценка программного продукта на основе метрик.» Вариант 17
Проверил: |
Старший преподаватель кафедры ПОИТ Грибович А. А. |
Минск 2024
СОДЕРЖАНИЕ
ХОД ЛАБОРАТОРНОЙ РАБОТЫ 3
1. Исходные предоставленные данные 3
2. Блок-схема алгоритма с нумерацией блоков и их описанием 3
3. Листинг программы 5
4. Результаты вычислений 9
Ход лабораторной работы
Цель работы: разработать детализированную схему алгоритма, представленную в соответствии с положениями ГОСТ 19701-90. В алгоритме предусмотреть вывод на экран всех входных и выходных данных. На основании разработанного алгоритма создать программный код программы.
Исходные предоставленные данные
Для значений Х, изменяющихся от –1,5 до 2 с шагом 0,01, вычислить значения функции Y:
Полученные значения Y занести в массив. Вывести значения Х и соответствующие им значения элементов результирующего массива.
Блок-схема алгоритма с нумерацией блоков и их описанием
Для построения диаграммы использовались следующие переменные:
values_of_function — массив значений вида “аргумент(float)-значение(float)-функция(string)”;
first_border(float) — первая граница интервала;
second_border(float) — вторая граница интервала;
step(float) — шаг аргумента по заданному интервалу.
Описание созданных блоков:
Блок 1 — точка входа в программу;
Блок 2 — объявление переменных;
Блок 3 — цикл прохождения по всей области определения функции;
Блок 4, 7 — проверка принадлежности аргумента к одному из трёх интервалов;
Блок 5, 8, 9 — Добавление в массив пар “аргумент-значение-функция”;
Блок 6 — увеличение значения аргумента на заданный шаг (счётчик цикла);
Блок 10, 11, 12 — вывод пар “аргумент-значение-функция” из массива
Блок 13 — специальный итератор, с помощью которого постепенно осуществляется доступ ко всем парам значений;
Блок 14 — точка выхода из программы.
Блок-схема алгоритма решения поставленной задачи имеет вид:
Рисунок 2.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)