Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора - C (СИ) (78817)
Формулировка задачи:
Котики мои Вы дорогие, помогите зайчику с такими вот заданиями. Не могу разобраться скорее с не с самими программулинами, а с приведением в рекуррентный вид (
Решение задачи: «Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <locale.h> float summa(int, int, float); int main() { setlocale(2, ".1251"); int x; float eps = 0.000001, sum = 0; //eps - точность printf("Введите x: "); scanf("%d", &x); for (int i = 1; 1/(i*pow(x, i)) > eps; sum += 1/(i*pow(x, i)), i += 2) ; printf("Нерекурсивный цикл: %f", 2*sum); printf("\nРекурсивная функция: %f", 2*summa(x, 1, eps)); printf("\nЗначение ln((x+1)/(x-1): %f", log((x+1.)/(x-1.))); return 0; } float summa(int x, int n, float eps) { float s = 1/(n*pow(x, n)); if (s > eps) return s + summa(x, n+2, eps); else return s; }
Объяснение кода листинга программы
- #include
- подключает файл стандартного ввода/вывода, что позволяет использовать функции для работы с консолью (например, printf). - #include
- подключает математические функции, такие как sqrt, pow, log и другие. - #include
- подключает функции для работы с локалью, в данном случае используется для установки русской локали. - float summa(int x, int n, float eps) - объявление функции с тремя аргументами: целое число x, целое число n и число с плавающей точкой eps.
- int main() - функция main(), в которой происходит основная работа программы.
- setlocale(2,
.1251
); - установка русской локали. - int x; - объявление переменной целого типа x.
- float eps = 0.000001, sum = 0; //eps - точность - объявление переменных eps и sum, и инициализация eps значением 0.000001.
- printf(
Введите x:
); - вывод сообщения с просьбой ввести значение x. - scanf(
%d
, &x); - ввод значения x с клавиатуры и сохранение его в переменной x. - for (int i = 1; 1/(ipow(x, i)) > eps; sum += 1/(ipow(x, i)), i += 2) - инициализация цикла, который будет выполняться до тех пор, пока значение 1/(ipow(x, i)) больше eps. На каждой итерации к сумме sum добавляется значение 1/(ipow(x, i)).
- *printf(
Нерекурсивный цикл: %f
, 2sum);** - вывод значения суммы sum, умноженной на 2. - *printf(
\nРекурсивная функция: %f
, 2summa(x, 1, eps));** - вывод значения суммы, вычисленной с помощью рекурсивной функции summa, умноженной на 2. - printf(
\nЗначение ln((x+1)/(x-1): %f
, log((x+1.)/(x-1.))); - вывод значения натурального логарифма (ln) от (x+1)/(x-1). - return 0; - завершение функции main().
- float summa(int x, int n, float eps) - тело функции summa.
- *float s = 1/(npow(x, n));** - вычисление значения s, которое является началом рекурсии.
- if (s > eps) - проверка, является ли значение s больше eps.
- return s + summa(x, n+2, eps); - если значение s больше eps, то возвращается сумма s и вызывается рекурсивная функция summa с новыми значениями аргументов.
- return s; - если значение s меньше или равно eps, то возвращается значение s.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д