Приблизительный ряд Пи/Тейлора; быстрый ввод данных пользователем

У меня есть еще одна задача для домашнего задания. На этот раз я знаю, где я в целом, но я вижу, что у меня есть некоторые явные проблемы с кодом. Недавно я потерял свои ключи, и это как-то так. Я точно не знаю, ГДЕ я ошибся с кодом, но у меня есть хорошая идея, и я бы хотел, чтобы вы помогли мне ее найти.

Задача состоит в том, чтобы аппроксимировать число Пи с помощью ряда Тейлора. Теперь моя проблема не совсем в том, чтобы приблизить его к числу пи. Скорее аппроксимируйте число пи, используя первые N терминов введенных пользователем. Так, например, если бы я ввел 2, то я должен пройти через первые 2, так как N=2. Моя проблема в том, как это представляет printF (и переменная кажется неинициализированной). Вот мой код:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{ 
   //program to calculate series of numbers equal to pi/4

   //declare variables

   int num_Terms;
   int sign= 1;
   int n;
   float sum= 0.0;
   float next_Term;
   float final_sum;

   //prompt user for input

   printf("Enter a value for integer n:  ");
   scanf("%i",&n);

   //perform calculations

   for(n = 1; n<= num_Terms; n=n+1) {
      sum= sum+next_Term;
      next_Term = sign*(1.0/(2*n-1));
      sign = sign*-1;
   }
   final_sum = sum*4;

   //display result
   printf("\n 4 * %f = %f\n",sum, final_sum);

   return 0;
}

person Taylor Bee    schedule 02.10.2015    source источник
comment
Не хочу быть грубым, но это только создает больше проблем. Мне жаль.   -  person Taylor Bee    schedule 02.10.2015
comment
Я согласен с отрицательным знаком, хотя.   -  person Taylor Bee    schedule 02.10.2015
comment
Он превращает предыдущее неинициализированное предупреждение в ошибку.   -  person Taylor Bee    schedule 02.10.2015


Ответы (1)


Я точно не знаю, ГДЕ я ошибся с кодом

Сначала вы сканируете значение в переменную n, а затем используете его как переменную итератора. Измените это на num_Terms. Это должно решить вашу основную проблему, связанную с неучетом количества терминов.

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

int main(void)
{ 
   //program to calculate series of numbers equal to pi/4

   //declare variables

   int   num_Terms = 0;
   int   sign      = 1;
   int   n         = 0;
   float sum       = 0;
   float next_Term = 0;
   float final_sum = 0;

   //prompt user for input

   printf("Enter a value for integer n:  ");
   scanf("%i",&num_Terms);

   //perform calculations

   for(n = 1; n<= num_Terms; n=n+1) {
     //not too sure if you need to reverse this order of calculation of sum
      sum = sum + next_Term;
      next_Term = sign * (1.0/(2*n-1));
      sign = sign * -1;
   }
   final_sum = sum * 4;

   //display result
   printf("\n 4 * %f = %f\n",sum, final_sum);

   return 0;
}
person Vivek Vijayan    schedule 02.10.2015
comment
думал будет что-то подобное. что-то простое. Спасибо. - person Taylor Bee; 03.10.2015