Рейтинг:
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
Спасибо еще раз. И я слепо доверял их исходному коду :-&
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();
}
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);
геч();
}