Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3 курс 1 семестр / Z9411_TP_LR3_Kafka

.docx
Скачиваний:
2
Добавлен:
18.05.2022
Размер:
223.64 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА 41

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

канд. тех. наук, доцент

Аграновский А. В.

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ЛАБОРАТОРНАЯ РАБОТА №3

Циклические конструкции

по дисциплине: Технологии программирования

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

Z9411

Кафка Р. С.

номер группы

подпись, дата

инициалы, фамилия

Студенческий билет №

2019/3603

Шифр ИНДО

Санкт-Петербург 2022

  1. Постановка задачи

Вариант №7. Вычислите приближенное значение функции 𝑓(𝑥) посредством вычисления соответствующего ряда. Вычисления следует остановить тогда, когда значение очередного члена ряда оказалось меньше заданного 𝜀

Ограничение на входные данные: x и 𝜀 должны быть меньше |1|.

  1. Математическая модель

Следуя формуле, будем производить вычисление ряда.

Для степени и знаменателя введём переменную z. В каждом последующем члене его значение увеличивается на 2. Изначально равно единице.

Для изменения знака +/- введём переменную n. Значение очередного члена ряда будет умножаться на неё. Она будет изначально равна 1 со знаком +. После каждой итерации будет умножаться на 1 со знаком минус чтобы изменить знак.

Сама формула будет решаться с помощью цикла while. Он будет проверять условие и выполняться до тех пор, пока значение очередного члена ряда больше заданного 𝜀.

  1. Описание разработанной программы

Список входных данных представлен в таблице №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")

  1. Описание тестового набора

Тестирование будет производится на следующих данных, представленных в таблице №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

Пройден

  1. Примеры работы программы

На рисунках 4-5 представлены примеры работы программы.

Рисунок 4 – Пример работы программы согласно тестовому набору

Рисунок 5 – Пример работы программы с некорректным вводом данных

  1. Выводы

Основная программа разработана верно: она выполняет поставленную задачу и успешно проходит все тестовые случаи, возвращает ожидаемые результаты.

В ходе выполнения лабораторной работы была реализована программа вычисления приближенного значения функции. Были получены практические навыки написание расчетных программ на языке программирования Python.

Соседние файлы в папке 3 курс 1 семестр