Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Расчетно-аналитическое задание по "Программированию"

Автор:   •  Апрель 20, 2023  •  Лабораторная работа  •  1,372 Слов (6 Страниц)  •  194 Просмотры

Страница 1 из 6

Кафедра   ____Информационные системы__________________________

Рейтинговая работа ________Расчетно-аналитическое задание ________

                                         (домашняя творческая работа, расчетно-аналитическое задание, реферат, контрольная работа)

по дисциплине     _________________________________________________

Задание/вариант №  ____10______

Тема*  ______________________________________________________________

Выполнена обучающимся группы

_______________ _______________________

(фамилия, имя, отчество)

Преподаватель  ___________ Зайцев Сергей Александрович _______________

                                               (фамилия, имя, отчество)

Москва – 2022 г.

* при наличии


Условие задачи

Дана функция, вычисляющая значение переменной y в зависимости от переменной x.  Дан интервал целых чисел, которые может принимать переменная x. Необходимо написать программу на языке Python, которая выведет в текстовый файл result.txt значения переменной y для каждого из предложенных x.  Точность значений у при распечатке установить в 3 знака после запятой. Кодировка в текстовом файле должна быть Unicode. Путь к входному и выходному файлу в коде программы нужно сделать относительным.

Исходные данные

Список значений x, подготавливается заранее в текстовом файле source_data.txt

Содержимое файла исходных данных представлено следующим образом:

x=-7

x=-6

x=-5

x=-4

x=-3

x=-2

x=-1

x=0

x=1

x=2

x=3

x=4

x=5

x=6

x=7

x=8

x=9

x=10

x=11

x=12

Функция, которую необходимо применить к каждому целому числу из представленного интервала, выглядит так:

Выходные данные

В текстовый файл result.txt должны быть выведены результаты в следующем формате:

При x = -3 значение y = 2.348

При x = -2 значение y = 7.928

При x = -1 значение y = -6.122

При x = 0 значение y = -4.115

При x = 1 значение y = -7.254

Алгоритм решения задачи

  1. Поскольку предопределен файл заранее нужного формата, то следующий алгоритм будет оптимальным:
  2. Инициализируем пустые списки xs и ys.
  3. Считываем файл исходных данных построчно, каждую строку мы очищаем от пробелов и символов переноса строк, вычленяем число после знака равно, добавляем его в список xs.
  4. Для каждого числа x из xs мы применяем функцию, описанную выше, если значение есть, то мы добавляем его в ys, иначе мы добавляем в ys пустое значение.
  5. Создаем пустой файл result.txt, который будет содержать выходные данные.
  6. Для каждого x из xs и y из ys записываем новую строку в файл result.txt в формате, описанном в условии задачи.

Код программы

from os import path
from typing import Callable
from math import pow, sqrt

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
SOURCE_FILE_PATH = path.join(path.dirname(__file__), 'source_data.txt')
RESULT_FILE_PATH = path.join(path.dirname(__file__), 'result.txt')
TEMPLATE = 'При x = %d значение y = %.3f\n'
TEMPLATE_NO_VALUE = 'При x = %d значение y не определено\n'


def get_xs_from_source_file(filepath: str) -> list[int]:
   
"""
   A function used to extract a list of x values from a given filename.
   A filename should be preformatted as follows:
       x=1
       ...
       x=9

   Parameters:
   ----------
   filename: string
       An absolute path to a file.

   Returns
   ----------
   list[int]
       A list of integer values.
   """
   
xs = []
   with open(filepath) as f:
       while line := f.readline():
           x = int(line.split('=')[-1].strip())
           xs.append(x)
       f.close()
   return xs


def func(x: int) -> float:
   
"""
   A function from variant 10.

   Parameters:
   ----------
   x: int

   Returns
   ----------
   float | None
   """
   
try:
       if x < -3:
           return ((pow(56*x**7 + 58*x**2 + 60, 5) - 45*x**3) /
                   (pow(31*x**6 - x**3, 8) + pow(40*x**2 + 92, 4)))
       elif -3 <= x < 4:
           return ((sqrt(pow(72*x**5 + 54*x**2 + 77, 5)) - 90*x**6) /
                   (pow(92*x**7 + x**2, 5) + pow(76*x**2 - 7, 6)))
       else:
           return ((pow(39*x**5 + 74*x**2 + 84, 6) - 75*x**5) /
                   (pow(74*x**4 - x**3, 7) + sqrt(pow(56*x - 56, 3))))
   except ValueError:
       return None


def calculate(xs: list[int], fn: Callable[[int], float]) -> list[float]:
   
"""
   Creates a list of float values from a given list with a given function.

   Parameters:
   ----------
   xs: list[int]
       A list of integer values.

   fn: (x: int) -> float
       A function accepting an int value, returns a float.

   Returns
   ----------
   list[float]
   """
   
return [fn(x) for x in xs]


def write_ys_to_result_file(filepath: str, xs: list[int], ys: list[float]):
   
"""
   Writes a result file mapping each x to y according to the format.

   Parameters:
   ----------
   filename: string
       An absolute path to a file.
   template: str
       A template containing 2 placeholders for x and y.
   xs: list[int]
       A list of integer values.
   ys: list[int]
       A list of integer values.
   """
   
assert(len(xs) == len(ys))
   with open(filepath, 'w') as f:
       for i, _ in enumerate(xs):
           if(ys[i]):
               f.write(TEMPLATE % (xs[i], ys[i]))
           else:
               f.write(TEMPLATE_NO_VALUE % (xs[i]))

       f.close()


def main():
   xs = get_xs_from_source_file(SOURCE_FILE_PATH)
   ys = calculate(xs, func)
   write_ys_to_result_file(RESULT_FILE_PATH, xs, ys)


if __name__ == '__main__':
   main()

...

Скачать:   txt (9.4 Kb)   pdf (163.9 Kb)   docx (13.6 Kb)  
Продолжить читать еще 5 страниц(ы) »
Доступно только на Essays.club