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);
}