kschandru Ответов: 4

объяснение синусоидального ряда


Значение sin(x) можно получить по формуле:
грех(Х) = Х −Х^3/3!+х^5/5!−х^7/7!+х^9/9!· · ·

Любой из них объяснит, как работает цикл while в этой программе..

и если я дам sin90, то результат будет 1.57, правильно это или нет...




#include<stdio.h> 
#include<math.h> 
void main() 
{ 
  int i = 2, n, s = 1, x, pwr = 1, dr; 
  float nr = 1, x1, sum; 
  clrscr(); 
  printf("\n\n\t ENTER THE ANGLE...: "); 
  scanf("%d", &x); 
  x1 = 3.142 * (x / 180.0); 
  sum = x1; 
  printf("\n\t ENTER THE NUMBER OF TERMS...: "); 
  scanf("%d", &n); 
  while(i <= n) 
  { 
    pwr = pwr + 2; 
    dr = dr * pwr * (pwr - 1); 
    sum = sum + (nr / dr) * s; 
    s = s * (-1); 
    nr = nr * x1 * x1; 
    i+= 2; 
  } 
  printf("\n\t THE SUM OF THE SINE SERIES IS..: %0.3f",sum); 
  getch(); 
  }

Sergey Alexandrovich Kryukov

Это не правильный вопрос. Зачем вам объяснять код, написанный кем-то другим? Это неразумно. Если у вас есть программный вопрос, задайте его. Объясните, чего вы хотите достичь и почему, все остальное пойдет дальше.
--СА

kschandru

хорошо, хорошо, пожалуйста, скажите мне какую-нибудь идею для поиска выражения синусоидального ряда в c...

Sergey Alexandrovich Kryukov

Спасибо за разъяснение вопроса, но я думаю, что к этому времени вы также получили решения. Кстати, почему вы не принимаете формально (зеленая кнопка)?
--СА

4 Ответов

Рейтинг:
32

Amir Mahfoozi

По-видимому, синус 90 градусов равен единице, а не 1,57.

[После комментария CPallini]
Вот один из них рабочий:

int i = 0, iterations, sign = -1, currentN = 1, factorial = 1;
  float power, radian, sum, degree;

  Console.Write("\nAngle(D) ? ");
  degree = float.Parse(Console.ReadLine());
  radian = 3.14159265f * (degree / 180.0f);
  sum = radian;
  power = radian;
  Console.Write("\nNumber of iterations ? ");
  iterations = int.Parse(Console.ReadLine());

  while (i++ < iterations)
  {
      currentN = currentN + 2;
      factorial = factorial * currentN * (currentN - 1);
      power = power * radian * radian;
      sum = sum + (power / factorial) * sign;
      sign = sign * (-1);
  }

  Console.WriteLine("Sine of {0}(D) is {1}", degree,sum);
  Console.ReadLine();

Давая ему 15 итераций, вы получите хороший результат.
Это в C#, но просто конвертировать WriteLine к printf и ReadLine к scanf и getch и это хорошо работает.


CPallini

- Почему бы тебе не воспользоваться этим кодом?"

Потому что это тоже неправильно (мне кажется, что это в основном тот же самый неправильный код)?

Amir Mahfoozi

Спасибо, что проинформировали меня. Я обновил свое решение.

CPallini

Мой 5. Жаль, что ссылка "обратная связь" оригинального сайта (тот, на который вы ссылались раньше) не работает: мы должны сообщить, что их образец исходного кода сломан. :-)

Amir Mahfoozi

Спасибо еще раз. И я слепо доверял их исходному коду :-&

thatraja

5!

Amir Mahfoozi

Спасибо тебе, Татраджа :)

Sergey Alexandrovich Kryukov

Похоже, теперь ты его починил. Мой 5.
--СА

Amir Mahfoozi

Спасибо :). А вы учли, что ответ 2 и 3 автоматически стал зеленым без вмешательства ОП! Я думаю, что это новая функция.

Рейтинг:
20

CPallini

Код, который вы разместили неправильный.
Например dr не инициализируется, также вы можете обнаружить, что он неправильно реализует расширение sin формула.

Следующий код немного лучше:

#include<stdio.h> 
#include<math.h> 
void main() 
{ 
  int i = 2, n, s = 1, x, pwr = 1, dr=1; 
  float nr, x1, sum; 

  clrscr(); 
  printf("\n\n\t ENTER THE ANGLE...: "); 
  scanf("%d", &x); 
  x1 = 3.142 * (x / 180.0); 
  sum = 0; 
  nr = x1;
  printf("\n\t ENTER THE NUMBER OF TERMS...: "); 
  scanf("%d", &n); 
  while(i <= n) 
  {
    sum = sum + (nr / dr) * s; 
    pwr = pwr + 2; 
    dr = dr * pwr * (pwr - 1); 
    s = s * (-1); 
    nr = nr * x1 * x1; 
    i += 2; 
  } 
  printf("\n\t THE SUM OF THE SINE SERIES IS..: %0.3f",sum); 
  getch(); 
  }


Amir Mahfoozi

+5

thatraja

5!

Sergey Alexandrovich Kryukov

Похоже, ты его починил. Мой 5.
--СА

Рейтинг:
2

Sergey Alexandrovich Kryukov

Никто не может ответить, правильно это или нет, потому что вы не сказали нам, что ожидается.

Чтобы увидеть, как это работает, используйте отладчик. Нет ничего лучше этого. А что еще? .. . Написать программы. Вы понимаете, в чем дело?

—СА


kschandru

я жду тебя
"Значение sin(x) можно определить по следующей формуле:
грех(Х) = Х −Х^3/3!+х^5/5!−х^7/7!+х^9/9!· · ·

Sergey Alexandrovich Kryukov

Конечно, я понял. Спасибо.
--СА

CPallini

Мы (я и Амир) - это никто. :-Д

Sergey Alexandrovich Kryukov

Спасибо за эту заметку, но похоже, что вы ответили после того, как ОП прояснил вопрос, но это произошло после того, как я разместил этот пост. Я надеюсь, что вы поняли суть; я просто не люблю догадок и не советую заниматься догадками без реальной необходимости в этом.

Ваши ответы выглядят хорошо, я собираюсь проголосовать сейчас.

Спасибо.
--СА

CPallini

Ну, извини. Я должен был догадаться об этом.

Рейтинг:
0

Member 14001278

#включить<stdio.h>
#включить<conio.h>
#включить<math.h>
пустота главная()
{
int i=1,n;
float T,s,x,sum,term;
printf("\n введите значение x:");
scanf("%f",&x);
T=(x * 3.14159 / 180) ;
s=sin(T);
printf("\n фактическое значение sin(%.0f) равно: %f \n",x,s);
printf("\n введите предел допуска:");
scanf("%d",&n);
термин=T;
сумма=T;
в то время как(i<n+1)
{
терм=-терм*(T*T)/(2*i*(2*i+1));
сумма=сумма+срок;
i=i+1;
}
printf("\n приблизительное значение sin(%.0f) равно: %f",x,sum);
геч();
}