Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование, C, проверьте правильность программы

Андрей Филюшин Знаток (319), закрыт 2 месяца назад
Тема. Простейшие циклы.

Цель работы: Изучение приемов организации простейших циклов.
Задача.
Согласно приведенной ниже таблице вычислить требуемое выражение. 8 выражение , проверьте пожалуйста, правильность программы

#include "stdafx.h"
#include <stdio.h>

// Функция для вычисления факториала
int factorial(int num) {
if (num == 0 || num == 1) {
return 1;
} else {
return num * factorial(num - 1);
}
}

// Функция для вычисления выражения
float calculateExpression(int n) {
float result = 0;
for (int i = 1; i <= n; i++) {
result += 1.0 / factorial(i);
}
return result;
}

int main() {
int n;
printf("Введите целое число n: ");
scanf("%d", &n);
float result = calculateExpression(n);
printf("Результат вычисления выражения для n=%d: %f\n", n, result);
return 0;
}
Лучший ответ
Андрей Высший разум (450720) 3 месяца назад
 double result = 0.0, fact = 1.0;
for (int i = 1; i <= n; ++i) {
fact /= i;
result += fact;
}
printf("Результат вычисления выражения для n=%d: %lf\n", n, result);
НЕ надо использовать в вычислениях float.
НЕ надо на каждой итерации заново пересчитывать весь факториал. У тебя же сумма ряда, задаваемого рекуррентной формулой:
 a[1] = 1.0
a[i] = a[i - 1] / i
Андрей ФилюшинЗнаток (319) 3 месяца назад
Извините, так будет правильно выглядеть?
#include <stdio.h>

// Функция для вычисления значения выражения
double calculateExpression(int n) {
double result = 0.0;
double term = 1.0; // Первый член ряда

for (int i = 1; i <= n; i++) {
result += term;
term /= i; // Рекуррентное вычисление следующего члена ряда
}

return result;
}

int main() {
int n;
printf("Введите целое число n: ");
scanf("%d", &n);

double result = calculateExpression(n);
printf("Результат вычисления выражения для n=%d: %lf\n", n, result);

return 0;
}
Андрей Высший разум (450720) Андрей Филюшин,
 double calculateExpression(int n) {
  double result = 0.0;
  double term = 1.0; // Очередной член ряда
  for (int i = 1; i <= n; i++) {
    term /= i; // Рекуррентное вычисление очередного члена ряда
    result += term;
  }
  return result;
} 
Остальные ответы
Похожие вопросы