Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Obliczyć przybliżoną wartość funkcji - POMOCY

Ostatnio zmodyfikowano 2017-06-06 15:15
Autor Wiadomość
piotrek424
Temat założony przez niniejszego użytkownika
» 2017-06-06 14:40:02
Chciałem napisać -1 i 3. Na takich wartościach wcześniej testowałem.

|x|<1 więc mam rozumieć że w przypadku wartości bezwzględnej będzie to przedział od -0.999.. do 0.999... ?? Dlaczego napisałeś że tylko od 0 do 0.9?
W k się pomyliłem i jest tak jak powiadasz.

P-162143
hit
» 2017-06-06 14:45:07
|x| to jak rozumiem jest wartość bezwzględna z x. Nie uwzględniłeś tego w swoim programie więc zaleciłem wprowadzanie liczb dodatnich. Jeśli chcesz wprowadzać wartości od -0.999 do 0 to wewnątrz programu powinieneś użyć funkcji abs dla x, która zwróci wartość bezwzględną czyli nieuwzględniającą znaku -.

Edit:

Jednak nie, z absem powinieneś sprawdzać tylko przy wprowadzaniu. Możesz podawać wartości od -0.99 do 0.99 i będzie ok.

Edit2:

Lub po prostu zmień warunek:
while( x >= 1 )
na
while( x >= 1 || x <= - 1 )

i już będzie ok.
P-162145
piotrek424
Temat założony przez niniejszego użytkownika
» 2017-06-06 14:53:09
Właśnie też na to wpadłem.
Tylko dlaczego jak wpisze wartość k np. 99 to w wyniku funkcji pokazuje się: nan ?
P-162146
hit
» 2017-06-06 14:55:41
Bo tak jak Ci napisał @darko202, we wzorze jest silnia z k, której wartość rośnie bardzo szybko. Mi do k=50 liczyło bez problemu i z wystarczającą precyzją.

https://pl.wikipedia.org/wiki​/NaN
P-162147
piotrek424
Temat założony przez niniejszego użytkownika
» 2017-06-06 15:08:00
Ok. W takim razie wszystko jasne. Reasumując zrobiłem taki kod. Sprawdź jeśli możesz czy jest ok.
I bardzo bardzo dziękuję za szybką pomoc i oczywiście cierpliwość.

C/C++
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
double silnia( double n )
{
    if( n == 0 )
         return 1;
    else
         return silnia( n - 1 ) * n;
   
}

int main()
{
    double x;
    double k;
    double wynik = 0;
    double prawa, lewa;
    cout << "Podaj |x| < 1: ";
    cin >> x;
    while( x >= 1 || x <= - 1 )
    {
        cout << "Podaj ponownie prawidlowa wartosc: |x| < 1: ";
        cin >> x;
    }
    cout << "Podaj k >= 0: ";
    cin >> k;
   
    while( k < 0 )
    {
        cout << "Podaj ponownie prawidlowa wartosc: k >= 0: ";
        cin >> k;
    }
    for( int i = 0; i < k; i++ )
    {
        wynik +=( pow( - 1, i ) * silnia( 2 * i ) ) /(( 1 - 2 * i ) * pow( silnia( i ), 2 ) * pow( 4, i ) ) * pow( x, i );
    }
    prawa = wynik;
    lewa = sqrt( x + 1 );
    cout << "Wynik lewej strony wyrazenia:" << lewa << endl;
    cout << "Wynik funkcji:" << prawa;
   
    getchar();
    return 0;
}
P-162149
hit
» 2017-06-06 15:15:04
Liczy ok, ale bez sensu jest tworzenie zmiennej prawa, bo od razu możesz wyświetlać wynik (lub obliczać wynik do zmiennej prawa). Zmiennej lewa jakby się uprzeć też nie musisz tworzyć:

C/C++
cout << "Wynik lewej strony wyrazenia:" << sqrt( x + 1 ) << endl;
cout << "Wynik funkcji:" << wynik;

Ale generalnie jest ok.
P-162150
1 « 2 »
Poprzednia strona Strona 2 z 2