Funkcja złe wyniki

Odpowiedz Nowy wątek
2014-10-31 12:30
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);
}

Pozostało 580 znaków

2014-10-31 12:36
0

http://4programmers.net/Forum/C_i_C++/232838-wie_ktos_jak_napisac_takie_sumowanie_w_c_wyskakujeblad-1indoo?p=1029578#id1029578


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-10-31 12:50
0

kurde nie czuje tego

Pozostało 580 znaków

2014-10-31 12:58
0

A to: Program liczący e^x


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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