3 курс 1 семестр / Z9411_TP_LR3_Kafka
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА 41
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
канд. тех. наук, доцент |
|
|
|
Аграновский А. В. |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ЛАБОРАТОРНАЯ РАБОТА №3
|
Циклические конструкции
|
по дисциплине: Технологии программирования |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z9411 |
|
|
|
Кафка Р. С. |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2019/3603 |
|
|
|
Шифр ИНДО |
|
Санкт-Петербург 2022
Постановка задачи
Вариант №7. Вычислите приближенное значение функции 𝑓(𝑥) посредством вычисления соответствующего ряда. Вычисления следует остановить тогда, когда значение очередного члена ряда оказалось меньше заданного 𝜀
Ограничение на входные данные: x и 𝜀 должны быть меньше |1|.
Математическая модель
Следуя формуле, будем производить вычисление ряда.
Для степени и знаменателя введём переменную z. В каждом последующем члене его значение увеличивается на 2. Изначально равно единице.
Для изменения знака +/- введём переменную n. Значение очередного члена ряда будет умножаться на неё. Она будет изначально равна 1 со знаком +. После каждой итерации будет умножаться на 1 со знаком минус чтобы изменить знак.
Сама формула будет решаться с помощью цикла while. Он будет проверять условие и выполняться до тех пор, пока значение очередного члена ряда больше заданного 𝜀.
Описание разработанной программы
Список входных данных представлен в таблице №1.
Таблица №1 - список входных данных
Имя переменной |
Тип переменной |
Назначение |
x |
Float |
Аргумент функции |
e |
Float |
Аргумент функции |
Список выходных данных представлен в таблице №2.
Таблица №2 - список выходных данных
Тип |
Назначение |
Float (result) |
Вывод приближенного значения функции посредством вычисления ряда. |
Блок-схема разработанной программы представлена на рисунке 2.
Рисунок 1 – Блок-схема основной функции
Блок-схема дополнительных функций для работы программы представлены на рисунках 3-4.
Рисунок 2 – Блок-схема функции Check_input(a, letter)
Рисунок 3 – Блок-схема функции Manual_input(letter)
Листинг основного программного кода:
import math
def LAB3_VAR_37(x, e): """ Вычисляет приближенное значение функции f(x) посредством вычисления соответствующего ряда. Вычисления следует остановить тогда, когда значение очередного члена ряда оказалось меньше заданного e """ x = Check_input(x, "x") #Проверка на корректность данных e = Check_input(e, "e") n = 1 #Коэффициент определяющий знак слагаемого z = 1 #Значение знаменателя и степени s = x #Значение первого члена ряда result = s #Значение вычисления ряда: arctg(x)=result
while math.fabs(s) > e: #Вычисление значения ряда. Останавливает вычисление, когда значение ряда s оказалось меньше e z = z + 2 n = n * (-1) s = n * ((x ** z) / z) result = result + s
result = math.atan(result) #Вычисление значения функции: f(x)=arctg(x) return result
def Check_input(a, letter): "Функция для проверки корректности данных. Число должно быть меньше 1." try: a = float(a) if math.fabs(a) >= 1 print(f"ОШИБКА. Значение числа '{letter}' должно быть < |1|.") a = Manual_input(letter) return Check_input(a, letter) return a
except ValueError: print("ОШИБКА ЗНАЧЕНИЯ. Введите число.") a = Manual_input(letter) return Check_input(a, letter)
def Manual_input(letter): "Функция, которая вызывается в случае ошибки при проверке на корректные данные. Используется для ввода нового значения." try: b = float(input(f"Введите значение '{letter}': ")) return b except ValueError: print("ОШИБКА ЗНАЧЕНИЯ. Значение должно быть числом. Попробуйте снова.") return Manual_input(letter) |
Для того, чтобы программа не застряла в бесконечном цикле, все данные проверяются на корректность перед его началом.
Листинг кода для тестов:
def TEST1_LAB3_VAR_37(): if(LAB3_VAR_37(-0.5, 0.0001) == -0.43413878409366297): #Пользователь ввёл значение x ≤ 1, e print("Тест 1 - OK") else: print("Тест 1 - FAIL")
def TEST2_LAB3_VAR_37(): if(LAB3_VAR_37(0.1, 0.00001) == 0.0993405889354335): #Пользователь ввёл значение x ≤ 1, e print("Тест 2 - OK") else: print("Тест 2 - FAIL")
def TEST3_LAB3_VAR_37(): if(LAB3_VAR_37("Str", 0.00001) == 0.1948899877941649): #Пользователь ввёл строку в x. Потом 0.2 print("Тест 3 - OK") else: print("Тест 3 - FAIL")
def TEST4_LAB3_VAR_37(): if(LAB3_VAR_37(0.1, "Str") == 0.0993405889354335): #Пользователь ввёл строку в e. Потом 0.0003 print("Тест 4 - OK") else: print("Тест 4 - FAIL")
def TEST5_LAB3_VAR_37(): if(LAB3_VAR_37(1.5, 0.000001) == 0.4341452075734573): #Пользователь ввёл значение x >= 1. Потом 0.5 print("Тест 5 - OK") else: print("Тест 5 - FAIL") |
Описание тестового набора
Тестирование будет производится на следующих данных, представленных в таблице №3.
Таблица №3 – тестовый набор
Описание тестового случая |
Входные данные |
Ожидаемый результат |
Результат теста |
Пользователь ввёл значение x ≤ 1, e |
x=-0.5, e=0.0001 |
-0.43413878409366297 |
Пройден |
Пользователь ввёл значение x ≤ 1, e |
x=0.1, e=0.00001 |
0.0993405889354335 |
Пройден |
Пользователь ввёл строку в x. Потом 0.2 |
x=”Str”, e=0.0001 |
Сообщение об ошибке. Потом 0.1948899877941649 |
Пройден |
Пользователь ввёл строку в e Пользователь ввёл строку в e. Потом 0.0003 |
x=0.1, e=”Str” |
Сообщение об ошибке. Потом 0.0993405889354335 |
Пройден |
Пользователь ввёл значение x >= 1. Потом 0.5 |
x=1.5, e=0.000001 |
Сообщение об ошибке. Потом 0.4341452075734573 |
Пройден |
Примеры работы программы
На рисунках 4-5 представлены примеры работы программы.
Рисунок 4 – Пример работы программы согласно тестовому набору
Рисунок 5 – Пример работы программы с некорректным вводом данных
Выводы
Основная программа разработана верно: она выполняет поставленную задачу и успешно проходит все тестовые случаи, возвращает ожидаемые результаты.
В ходе выполнения лабораторной работы была реализована программа вычисления приближенного значения функции. Были получены практические навыки написание расчетных программ на языке программирования Python.