Funkcja COSINUS podana wedłUUUUUUUUg wzoru. PROBLEM!

0

Witam!

Piszę taki program:

Wartości funkcji cosinus (x) można wyznaczyć stosując wzór:

http://imageshack.us/photo/my-images/717/wzor2.png/

Napisać funkcję cosinus wyznaczającą przybliżoną wartość funkcji cosinus x przy pomocy iloczynu n (gdzie n jest
parametrem funkcji) kolejnych czynników powyższego wzoru, dla argumentu x (x również jest parametrem funkcji).
Liczbę PI w powyższym wzorze przyjąć jako PI≈3,14159 .
W funkcji main wywołać funkcję cosinus dla n=1000. Wynik zwrócony przez funkcję wypisać na konsolę.
Prawidłowo napisana funkcja, dla n=1000 przybliża wartość funkcji cosinus x z dokładnością do jednego miejsca po
przecinku (w przedziale x nalezy od∈−0.5 , 0.5 rad)

I napisałem do tego taki program:




#include <iostream>
#include <cstdlib>
#include <math.h>
#include <iomanip>

using namespace std;

double COSINUS(int n, double x)
{
	double iloczyn = 1;
	double pi = 3.14159;
	double licznik, mianownik;


	for(int i = 1; i < n; i++)
	{
		licznik = (4*x*x);
		mianownik = (pi*pi)*(2*i-1)*(2*i+1);
		iloczyn = (1-(licznik/mianownik));
	
	
	}

	return iloczyn;
}






int main()
{
	unsigned int n = 1000;
	double x;
	
	cout << "Podaj wartosc x: " << endl;
	cin >> x;
	
	
	cout.precision(1);
	cout << "Wartosc Cos(x) zadana wedlog wzoru rowna sie: " << COSINUS(x,n) << endl;







system("PAUSE");
} 

Tylko nie wiem co jest tutaj zle ale cały czas bez wzgledu jakie x podaje to wyswietla mi 1 albo ogromna liczbe... proszę o pomoc:)

0

double COSINUS(int n, double x), a wołasz COSINUS(x, n)
mianownik = (pipi)(2i-1)(2*i+1) we wzorze jest (2i-1)^2
DGoMm

0

dodatkowo to jest źle iloczyn = (1-(licznik/mianownik)), powinno tam być *=, i to nieszczęsne... wedłUg

0

w pętli powinno zostać tylko: c = (1 - p/(jj));

0

Okej okej :P

Już to zrobiłem. Powinno to tak wyglądać :P

 #include <iostream>
#include <cstdlib>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
double COSINUS(unsigned int n, double x)
{
        double iloczyn = 1;
        double pi = 3.14159;
        double licznik, mianownik;
 
 
        for(int i = 1; i < n; i++)
        {
                licznik = (4*x*x);
                mianownik = (pi*pi)*(2*i-1)*(2*i-1);
                iloczyn *= (1-(licznik/mianownik));
 
 
        }
 
        return iloczyn;
}
 
 
 
 
 
 
int main()
{
        unsigned int n = 1000;
        double x=0;
 
        cout << "Podaj wartosc x stopniach: " << endl;
        cin >> x;
        
        double pi = 3.14159;
        

        x = x * pi / 180;
        
        
        cout.precision(1);
        
        cout << "Wartosc Cos(x) zadana wg. wzoru rowna sie: " << COSINUS(n,x) << endl;
        
        
        
        
        
        while(x>28 || x<-28)
        {
               cout << "Podales zly x!";
            
            
            
        }
 
 
 
 
 
system("PAUSE");
} 

PS> Jeśli ktoś pyta o coś konkretnie w temacie to odpowiadajcie konkretnie a nie o wszystkim i o niczym :P

2

użyję rekurencji
Link

0

W tym przypadku nie trzeba używać rekurencji :P liczy jak miało liczyć i jest okejka xd

0

a popatrzyłeś gdzie prowadzi link?

0

Prowadzi kilka postów wyżej xd

0

by zasugerować rozwiązanie unikające obniżenia oceny
a jeszcze
double pi = 3.14159;
\pi - pi = 2.653590e-06 to całkiem sporo

1 użytkowników online, w tym zalogowanych: 0, gości: 1