
Churilov_otchet_lr3
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Кафедра проблемно-ориентированных вычислительных комплексов
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
доцент _________________ А.В. Аграновский
подпись, дата
ЛАБОРАТОРНАЯ РАБОТА №2
Использование циклических конструкций
по дисциплине «Технологии программирования»
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. Z9411 __________________ А.С. Чурилов
подпись, дата
Студенческий билет № 2019/3684
Санкт-Петербург 2021г.
Оглавление
1. Постановка задачи 3
2. Математическая модель 3
3. Описание разработанной программы 3
4. Описание тестового набора 6
5. Примеры работы программы 7
Вывод 7
Приложение 1. Листинг программного кода 7
Постановка задачи
Формулировка задания (задание №3, строка №4): вычислить приближенное значение функции f(x) посредством вычисления соответствующего ряда
вычисления следует остановить тогда, когда значение очередного члена ряда оказалось меньше заданного ε.
Входными параметрами являются вещественные числа, выступающие в качестве аргумента функции x и величина ε для остановки вычисления ряда.
Конечной целью программы является вычисление приближенного значения указанной функции f(x) и вывод результатов расчета на экран.
Математическая модель
Распишем последовательность действий, позволяющих выполнить требуемые выкладки:
пользуясь приведенной выше формулой, найдём значение первого элемента ряда;
сравним полученное значение с заданной величиной ε;
если модуль значения члена ряда меньше заданной точности ε, то вычисление прекращается; в противоположном случае, находим величину следующего элемента;
каждый найденный элемент необходимо добавлять к общей сумме ряда, которая по окончании всех действий и будет являться приближенным значением функции.
Описание разработанной программы
В качестве входных параметров имеем две характеристики, равные значению аргумента функции и величине заданной точности (см. табл. 1).
Таблица 1 – Перечень входных параметров |
||
Имя переменной |
Тип переменной |
Назначение |
x |
float |
Аргумент функции f(x) |
eps |
float |
Значение заданной точности для остановки вычисления ряда |
Используемые переменные являются вещественными числами. Значение x может быть как положительным, так и отрицательным числом, также может равняться 0. Заданная точность eps может быть только положительным числом, меньшим 1.
В таблице 2 приведена выходная характеристика, которой является приближенное значение функции f(x), вычисляемое по специальной формуле, описанной в разделе «Математическая модель».
Таблица 2 – Перечень выходных параметров |
||
Имя переменной |
Тип переменной |
Назначение |
func |
float |
Приближенное значение функции |
Разработанный для данной задачи алгоритм имеет разветвленные и циклические структуры (см. рис. 1).
|
Рисунок 1 – Блок-схема алгоритма |
Вся программа состоит из трёх функций. Первая функция is_number(inp) даёт возможность проверить, содержит ли полученный параметр сторонние символы, отличные от цифр. Во второй функции LAB3_VAR_19(x, eps) выполняется вычисление суммы заданного числового ряда, которое по окончании всех математических выкладок будет представлять собой приближенное значение функции. В последней функции TEST_LAB3_VAR_19() прописан автоматический тестовый сценарий, позволяющий проанализировать поведение программы при граничных условиях и различных форматах входных и выходных данных.
Листинг программного кода приведен в Приложении 1.
Описание тестового набора
Изучим набор тестовых случаев (см. табл. 3).
Таблица 3 – Тестовый набор |
|||
Описание тестового случая |
Входные данные |
Ожидаемый результат |
Результат теста |
Переменная x содержит буквенные символы |
x = ”test”; eps = 0,001 |
Ошибка. «Была введена строка!» |
Пройден |
Переменная eps содержит буквенные символы |
x = 1; eps = ”test” |
Ошибка. «Была введена строка!» |
Пройден |
Значение переменной eps меньше 0 |
x = 1; eps = -0,001 |
Ошибка. «Было введено некорректное значение E!» |
Пройден |
Значение переменной eps больше 1 |
x = 1; eps = 1,001 |
Ошибка. «Было введено некорректное значение E!» |
Пройден |
Все переменные введены корректно |
x = 0,25; eps = 0,01 |
func ≈ 0,2474 |
Пройден |
Все переменные введены корректно |
x = 1; eps = 0,001 |
func ≈ 0, 8415 |
Пройден |
Ожидаемые результаты вычислялись вручную согласно описанной математической модели.
Примеры работы программы
Далее представлены примеры работы написанной программы с подобранными тестовыми значениями (см. рис. 2).
|
Рисунок 2 - Пример работы программы |
Вывод
В ходе выполнения лабораторной работы была реализована программа вычисления приближенного значения функции путём вычисления суммы ряда. Были получены практические навыки написания структурно продуманных программ на языке программирования Python3.
Было проведено тестирование созданной программы. Во всех случаях полученный результат совпал с ожидаемым, что позволяет сделать вывод о корректной работе созданной программы.
Приложение 1. Листинг программного кода
import math #модуль для мат. операций
#функция проверки введенного числа на сторонние символы
def is_number(inp):
try:
float(inp)
return True
except ValueError:
return False
#основная программа
def LAB3_VAR_19(x,eps):
if is_number(x)==False or is_number(eps)==False:
print("Была введена строка!")
return('Error!')
elif eps<=0 or eps>=1:
print("Было введено некорректное значение E!")
return('Error!')
else:
sum=0 #сумма ряда (приближенное знач. функции)
znak=1 #знак перед текущим членом ряда
n=1 #показатель степени и знаменатель члена ряда
elem=x #значение текущего члена ряда
while math.fabs(elem) >= eps:
sum=sum+elem
znak=znak*(-1)
n=n+2
elem=znak*((x**(n))/math.factorial(n))
return (sum+elem)
#автоматический тестовый сценарий
def TEST_LAB3_VAR_19():
err='Error!'
print('ТЕСТ №1: x="test", eps=0,001.')
x='test'
eps=0.001
func=LAB3_VAR_19(x,eps)
if func==err:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №2: x=1, eps="test".')
x=1
eps='test'
func=LAB3_VAR_19(x,eps)
if func==err:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №3: x=1, eps=-0,001.')
x=1
eps=-0.001
func=LAB3_VAR_19(x,eps)
if func==err:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №4: x=1, eps=1,001.')
x=1
eps=1.001
func=LAB3_VAR_19(x,eps)
if func==err:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №5: x=0.25, eps=0.01.')
x=0.25
eps=0.01
func=LAB3_VAR_19(x,eps)
print("Приближенное значение функции равно ",func)
if round(func,4)==0.2474:
print('Тест пройден!')
else:
print('Тест не пройден!')
print('\nТЕСТ №6: x=1, eps=0.001.')
x=1
eps=0.001
func=LAB3_VAR_19(x,eps)
print("Приближенное значение функции равно ",func)
if round(func,4)==0.8415:
print('Тест пройден!')
else:
print('Тест не пройден!')
TEST_LAB3_VAR_19() #вызов тестовой функции