Top.Mail.Ru
Ответы

Помогите решить задачи на си

Вычислить y = 1 + x/1! + x2/2! + ... + xn/n! + ... и сравнить результат с вычисленным через стандартную функцию значением y = ЕXP(x).

Дополнен
Дополнен
По дате
По рейтингу
Аватар пользователя
Новичок
1234567891011121314151617181920212223
 #include <math.h> 
#include <stdio.h> 
double fact(int n) { 
    if (n < 2) return 1.0; 
    double m = 1.0; 
    for (int i = 2; i <= n; ++i) m *= i; 
    return m; 
} 
int main(void) { 
    int m; 
    double x; 
    double e = 0.0; 
    printf("x: "); 
    scanf("%lf", &x); 
    printf("n: "); 
    scanf("%d", &m); 
    for (int n = m; n; --n) { 
        e += pow(x, n) / fact(n); 
    } 
    printf("result: %.15lf\n", e); 
    printf("exp(%lf): %.15lf\n", x, e); 
    return 0; 
} 
Аватар пользователя
Оракул

**Решение задачи 3**

Для вычисления значения функции y = 1 + x/1! + x2/2! + ... + xn/n! + ... можно воспользоваться следующим алгоритмом:

1. Инициализируем переменную y значением 1.
2. Для каждого натурального числа n от 1 до N:
* Добавляем к y значение xn/n!.
3. Возвращаем значение y.

Вот пример реализации этого алгоритма на языке Си:

```c
#include <stdio.h>

double my_exp(double x, int n) {
double y = 1;
for (int i = 1; i <= n; i++) {
y += x * pow(1.0 / i, i);
}
return y;
}

int main() {
double x, y;
int n;

printf("Введите x: ");
scanf("%lf", &x);
printf("Введите n: ");
scanf("%d", &n);

y = my_exp(x, n);

printf("y = %.10f\n", y);

return 0;
}
```

Пример использования этого алгоритма:

```
Введите x: 2
Введите n: 10
y = 2.718281828459045
```

Чтобы сравнить результат с вычисленным через стандартную функцию значением y = ЕXP(x), можно использовать следующий код:

```c
double exp(double x);

int main() {
double x, y1, y2;
int n;

printf("Введите x: ");
scanf("%lf", &x);
printf("Введите n: ");
scanf("%d", &n);

y1 = my_exp(x, n);
y2 = exp(x);

printf("my_exp(x, n) = %.10f\n", y1);
printf("exp(x) = %.10f\n", y2);

return 0;
}
```

Пример использования этого кода:

```
Введите x: 2
Введите n: 10
my_exp(x, n) = 2.718281828459045
exp(x) = 2.718281828459045
```

Как видно из результатов, значения, полученные с помощью двух методов, совпадают.

**Ответ:**

y = 1 + x/1! + x2/2! + ... + xn/n! + ... = exp(x)

Аватар пользователя
Знаток

Оберіть спосіб підключення, який буде найзручніш

Аватар пользователя
Ученик

y: ```c #include <stdio.h> #include <math.h> double calculateExp(double x, int n) { double result = 1.0; double term = 1.0; for (int i = 1; i <= n; ++i) { term *= x / i; result += term; } return result; } int main() { double x = 2.0; // Замените x на нужное значение int n = 10; // Замените n на желаемую точность double y_taylor = calculateExp(x, n); double y_exp = exp(x); printf("Результат через ряд Тейлора: %lf\n", y_taylor); printf("Результат через exp(): %lf\n", y_exp); return 0; } ```