Приложение на Kotlin

Приложение на Kotlin #

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

В рамках данной практической работы реализуйте небольшое консольное приложение на языке Kotlin, решающее следующую задачу.

Коэффициенты многочлена \( a_n * x^n + a_{n−1} *x^{n−1} + · · · + a_1 * x + a_0 \) хранятся в массиве A[N], где N — натуральное число, степень многочлена. Вычислить значение этого многочлена в точке x. Вычислить значение производной многочлена в той же точке.

Подход к решению задачи #

  1. Создайте проект приложения в среде разработке, IDEA.
    1. При создании проекта указывайте в качестве среды сборки систему Gradle.
  2. Реализуйте функцию для получения одного целого числа от пользователя со стандартного потока ввода. Данный метод может иметь следующую сигнатуру:
    fun readInt(prompt: String) : Int { /**/ }
    • Аргумент prompt должен содержать строку-приглашение, например "Введите целое число> ", которое должно показываться пользователю перед вводом числа. Для считывания рекомендуется использовать метод readLnOrNull.
    • null может быть получен в случае окончания потока ввода. В рамках данной программы данную ситуацию будем игнорировать и будем пытаться считывать данные со стандартного потока ввода ещё раз.
    • Метод должен получать строку от пользователя и пытаться преобразовать её к целому числу. Для преобразования строки к числу можно использовать метод toInt. Обратите внимание, что в случае ошибки преобразования будет выброшено исключение. Процесс обработки исключений описан в документации.
    • Если преобразование выполнено успешно, то возвращать его в качестве результата работы функции.
    • Если преобразование не успешно, то повторять запрос на ввод данных.
  3. Реализуйте функцию для получения коэффициентов многочлена. Данная функция может иметь следующую сигнатуру:
    fun readCoefficients() : List<Int> { /**/ }
    • Данная функция должна запрашивать степень коэффициента многочлена, N, с помощью метода readInt. Если было считано отрицательное число, то необходимо запросить ввод данных ещё раз.
    • Затем функция должна получить N+1 коэффициентов многочлена. Для этого можно использовать метод readInt с сохранением результата в списке целых чисел.
    • Сформированный список коэффициентов метод должен вернуть в качестве своего значения.
    • Удобным форматом для хранения коэффициентов является формат, когда на первом месте в массиве хранится коэффициент многочлена нулевой степени, на втором — первой степени и т.д. Для считывания удобно спрашивать у пользователя коэффициенты, начиная со старшего члена. Перед возвращением списка коэффициентов пользователю его необходимо развернуть с помощью метода reverse
  4. Используйте функцию readInt для считывания точки x, в которой необходимо произвести вычисление значения многочлена.
  5. Реализуйте функцию для вычисления коэффициентов производной многочлена. Данная функция может иметь следующую сигнатуру:
    fun calcDerivative(coefs: List<Int>) : List <Int> { /**/ }
    • Для вычисления производной удобно расположить коэффициенты многочлена по возрастающей. Т.е. коэффициент многочлена степени 0 должен быть первым, степени 1 - вторым и так далее.
    • Производной будет многочлен, у которого:
      • Значение новых элементов вычисляется как значение коэффициента оригинального многочлена, умноженного на порядковый номер многочлена.
      • Первый элемент отсутствует, т.к. степень производной многочлена меньше степени многочлена на 1.
    • Для вычисления производной по индексам можно воспользоваться диапазонами от 1 до размера оригинального массива:
      for (index in 1 until coefs.size) {
          coefs[index]
      }
  6. Реализовать функцию вычисления коэффициентов производной многочлена. Данная функция может иметь следующую сигнатуру:
    fun polynomValue(coefs: List<Int>, point: Int) : Int { /**/ }
    • Для вычисления значения числа в указанной степени можно воспользоваться методом pow.
    • Для преобразования целого числа в вещественное можно использовать метод toFloat.
    • Для преобразования вещественного числа в целое можно использовать метод toInt.
  7. Используя полученные функции выполнить вычисление значения многочлена и его производной в точке x.
  8. Выведите информацию о многочлене, его производной и их значении в указанной точке с помощью строковых шаблонов.

© A. M. Васильев, 2022, CC BY-SA 4.0, andrey@crafted.su