Funkcja złe wyniki

0

Siema. Mam problem, mianowicie program podaje inne wyniki tj cos(x) != y, i nie wiem dlaczego bo sumie program wydaje sie być ok.

// funkcja.cpp : Defines the entry point for the console application.
/*
Program powinien pobierać z pliku wartość x (patrz zadanie) oraz
n – ilość współczynników
Podprogramy iteracyjnie/rekurencyjne: warianty zadania
(ostatnia cyfra z numeru indeksu)*/
/*
y= 1-(x^2/2!)+(x^4/4!)-(x^6/6!)+(x^8/8!)...=cos(x)
*/


#include "stdafx.h"
#include <cmath>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;

double stR(double);
int silnia(int);
int silniaR(int);
void iteracja(); //silnia iteracyjnie
void rekurencja(); // silnia rekurencyjnie

int main()
{
	char w;
	cout << "Dany jest wzor y=1-(x^2/2!)+(x^4/4!)-(x^6/6!)+(x^8/8!)...=cos(x)\n";
								 //n=1	    n=2		n=3		  n=4
	do
	{
		cout << "Wybierz metode.\n[1] Iteracyjnie\n[2] Rekurencyjnie\n[q] Aby wjsc\n";
		cin >> w;
		switch (w)
		{
		case '1' :  iteracja(); break;
		case '2' :  rekurencja(); break;
		}
	} while (w != 'q');
	cin.get();
	return 0;
}

void iteracja()
{
	double x;
	double y = 1.0;
	int n = 10;

	bool p1, p2;
	do {

		cout << "Podaj x: ";
		cin.clear();
		cin.sync();
		cin >> x;
		p1 = cin.fail();
		cout << "Podaj ilosc elementow ";
		cin.clear();
		cin.sync();
		cin >> n;
		p2 = cin.fail();//jesli zla wartosc zwroci 1
		(p1 || p2) ? cout << "Zle wartosci\n" : cout << "Dobre wartosci\n";
	} while (p1 || p2);
	cout << "cosinus wynosi: " << (cos(stR(x))) << endl;
	for (int i = 1; i<n; ++i)
	{
		if ((i % 2) == 0)
			y += ((pow(x, i * 2)) / double(silnia(i * 2.0)));
		else
			y -= ((pow(x, i * 2)) / double(silnia(i * 2.0)));
	}
	cout << " a y= " << y << endl;
	cin.get();
	cin.get();
	return ;
}

void rekurencja()
{
	double x;
	double y = 1.0;
	int n = 10;

	bool p1, p2;
	do {

		cout << "Podaj x: ";
		cin.clear();
		cin.sync();
		cin >> x;
		p1 = cin.fail();
		cout << "Podaj ilosc elementow ";
		cin.clear();
		cin.sync();
		cin >> n;
		p2 = cin.fail();//jesli zla wartosc zwroci 1
		(p1 || p2) ? cout << "Zle wartosci\n" : cout << "Dobre wartosci\n";
	} while (p1 || p2);
	cout << "cosinus wynosi: " << (cos(stR(x))) << endl;   // wynik tego....
	for (int i = 1; i<n; ++i)
	{
		if ((i % 2) == 0)
			y += ((pow(x, i * 2)) / double(silniaR(i * 2.0)));
		else
			y -= ((pow(x, i * 2)) / double(silniaR(i * 2.0)));
	}
	cout << " a y= " << y << endl; // rozny od tego
	cin.get();
	cin.get();
	return;
}



double stR(double stopnie)
{
	return (stopnie * 3.14) / 180.0;
}

int silnia(int n)
{
	int silnia = 1;
	for (int i = 1; i <= n; ++i)
	{
		silnia *= i;
	}
	return silnia;
}

int silniaR(int n)
{
	if (n == 0) return 1;
	else return n*silnia(n - 1);
}

0

kurde nie czuje tego

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