Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2009, 22:03   #1
Надежда..
Пользователь
 
Регистрация: 13.12.2008
Сообщений: 12
По умолчанию Программа вычисления синуса и косинуса через тангенс

Нужна программа, реализующая вычисление синуса и косинуса через тангенс.
Тангенс вычисляется по цепной дроби, а Синус и косинус вычисляются через тангенс половинного аргумента.
Вот ссылка с формулами.
http://algorithm.narod.ru/el/sicota.html

программа должна еще содержать-пользователь вводит угол, и если он в промежутке от минус пи до п, то он все считает, а если он в этот промежуток не попадает, то программа автоматически вводит его в данный промежуток и высчитывает дальше..

Я код написала, но тут много лишнего и надо его уменьшить

Код:
#include <stdio.h> //Нужна для функции getch();
#include <conio.h>

#define M_PI ((float)3.141592653589793)

double mytan(double x, int i);
double mysin(double x, int i);
double mycos(double x, int i);
//double prevedpi(double x, int i);
double prevedpi(double x);

void main()
    {  int i;
	   printf("vvedite ygol\n");
	   //scanf("%c",&i);
	   //printf("tangens %c\n sinus %c\n cosinus %c", mytan, mysin, mycos);
       scanf("%d",&i);
printf("tangens %lf, sinus %lf, cosinus %lf", (float)(mytan(i, 17)), (float)(mycos(i, 17)), (float)(mysin(i, 17)));
       getch();   
    }

//Тангенс на +-1/4 пи, i-количество звеньев в дроби (выше 15-17 бессмысленно точночть близка к макс)
double mytan(double x, int i)
   {
   x=prevedpi(x);
   
   double ret=x*x;//То, что возвращаем    
       for(; i>=0; i--)
          {  
               ret=x/( (2*i+1)  - x*ret  );    
          }
   return ret;
   }

//Тангенс на +-1/4 пи, i-количество звеньев в дроби тангенса
double mysin(double x, int i)
   {
   x=prevedpi(x);
   //В худшем случае аргумент близок к +-пи. Поэтому делим его на 4.
   double t=mytan(x/4, i);
   //Теперь получаем синус и косинус углов х/2
   double s=2*t/(1+t*t), c=(1-t*t)/(1+t*t);
   //Переобъявляем тангенс. теперь он у нас тангенс x/2
   t=s/c;
   //Находим искомый синус
   
   return ((2*t)/(1+t*t));
   }
double mycos(double x, int i)
   {
   x=prevedpi(x);
   //В худшем случае аргумент близок к +-пи. Поэтому делим его на 4.
   double t=mytan(x/4, i);
   //Теперь получаем синус и косинус углов х/2
   double s=2*t/(1+t*t), c=(1-t*t)/(1+t*t);
   //Переобъявляем тангенс. теперь он у нас тангенс x/2
   t=s/c;
   //Находим искомый koсинус
   
   return ((1-t*t)/(1+t*t));
   }


//Преведение по пи
double prevedpi(double x)
   {
   //сколько раз укладывается пи    
   int a=((int)(x/(M_PI)));   
       
       if(x/M_PI > 1.0 || x/M_PI < - 1.0 )
          {
          //Если укладывается четное число раз       
          if(a%2 == 0)
           x = x - a*M_PI;
          else
           x =-(x - a*M_PI);
           
          }
   return x;
   }
Модератор: не используйте вложения для исходников.

Последний раз редактировалось Sazary; 27.11.2009 в 20:42.
Надежда.. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с вычислением синуса, косинуса, тангенса и котангенса Panika Помощь студентам 10 08.11.2009 16:54
программа для вычисления значения определителя матрицы [рыжий хвост] Помощь студентам 0 10.06.2009 18:27
Помогите составить программу вычисления матричного синуса, пожалуйста! Lunatik Помощь студентам 6 31.03.2009 16:59
программа суммирует натуральные числа от 1 до 50 и выводит результат вычисления на экран xxasb07 Паскаль, Turbo Pascal, PascalABC.NET 2 18.11.2008 10:32
Быстрый алгоритм для вычисления синуса RIO Помощь студентам 10 17.12.2007 14:33