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

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

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

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

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

Практическая работа №5 «Оценка программного продукта на основе метрик.» Вариант 17

Проверил:

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

кафедры ПОИТ

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

Минск 2024

СОДЕРЖАНИЕ

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

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

2. Блок-схема алгоритма с нумерацией блоков и их описанием 3

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

4. Результаты вычислений 9

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

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

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

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

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

  1. Блок-схема алгоритма с нумерацией блоков и их описанием

Для построения диаграммы использовались следующие переменные:

  1. values_of_function — массив значений вида “аргумент(float)-значение(float)-функция(string)”;

  2. first_border(float) — первая граница интервала;

  3. second_border(float) — вторая граница интервала;

  4. step(float) — шаг аргумента по заданному интервалу.

Описание созданных блоков:

  1. Блок 1 — точка входа в программу;

  2. Блок 2 — объявление переменных;

  3. Блок 3 — цикл прохождения по всей области определения функции;

  4. Блок 4, 7 — проверка принадлежности аргумента к одному из трёх интервалов;

  5. Блок 5, 8, 9 — Добавление в массив пар “аргумент-значение-функция”;

  6. Блок 6 — увеличение значения аргумента на заданный шаг (счётчик цикла);

  7. Блок 10, 11, 12 — вывод пар “аргумент-значение-функция” из массива

  8. Блок 13 — специальный итератор, с помощью которого постепенно осуществляется доступ ко всем парам значений;

  9. Блок 14 — точка выхода из программы.

Блок-схема алгоритма решения поставленной задачи имеет вид:

Рисунок 2.1 – Блок-схема основного алгоритма

  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)