problem z prostym programem (złe wyniki funkcji f(x))
Ostatnio zmodyfikowano 2015-06-25 21:58
spyder11 Temat założony przez niniejszego użytkownika |
problem z prostym programem (złe wyniki funkcji f(x)) » 2015-06-25 18:33:38 Witam, mam problem z poniższym programem: #include <iostream> #include <fstream> #include <cmath> using namespace std; const int iloscLiczb = 22; int main() { fstream plikX, plikY; plikX.open( "x.txt", ios::out ); plikY.open( "y.txt", ios::out ); int x[ 2 * iloscLiczb + 1 ], y[ 2 * iloscLiczb + 1 ]; for( int i = - iloscLiczb; i <= iloscLiczb; i++ ) { x[ i ] = i; plikX << "x = " << x[ i ] << endl; } for( int i = - iloscLiczb; i <= iloscLiczb; i++ ) { y[ i ] = x[ i ] * x[ i ] - 3 * abs( x[ i ] ) + 2; plikY << "y = " << y[ i ] << endl; } plikX.close(); plikY.close(); return 0; }
Kod prosty, nie wiem gdzie jest błąd. W pliku "y.txt" pojawiają mi się takie dane: y = 420 y = 380 y = 342 y = 115940 y = 2 y = 2 y = 420 y = 1445003654 y = -2147483648 y = 132 y = 2 y = 90 y = 72 y = 56 y = 42 y = 30 y = 20 y = 12 y = 6 y = 2 y = 0 y = 0 y = 2 y = 0 y = 0 y = 2 y = 6 y = 12 y = 20 y = 30 y = 42 y = 56 y = 72 y = 90 y = 110 y = 132 y = 156 y = 182 y = 210 y = 240 y = 272 y = 306 y = 342 y = 380 y = 420 Niektóre wartości funkcji są obliczone prawidłowo, a niektóre nie. Czy ktoś mógłby mi pomóc ? Z góry dziękuję :) |
|
Lora |
» 2015-06-25 18:50:16 Tablice indeksowane są od zera, a ty w tych pętlach odwołujesz się do elementów od -22 do 22. Pętla przechodząca po wszystkich elementach tablicy powinna wyglądać w ten sposób: for( int i = 0; i < rozmiarTablicy; ++i ) x[ i ] = i;
|
|
spyder11 Temat założony przez niniejszego użytkownika |
» 2015-06-25 19:21:55 Dziękuję za odpowiedź. Rzeczywiście głupi błąd ;) Istnieje jakiś szybszy sposób by wprowadzić liczby ujemne zamiast użycie dodatkowej pętli for dla x i f(x) ? Naprawiłem to tak: int x[ 2 * iloscLiczb + 1 ], y[ 2 * iloscLiczb + 1 ];
for( int i = iloscLiczb; i > 0; i-- ) { x[ i ] = - i; plikX << x[ i ] << endl; }
for( int i = 0; i <= iloscLiczb; i++ ) { x[ i ] = i; plikX << x[ i ] << endl; }
for( int i = iloscLiczb; i > 0; i-- ) { y[ i ] = x[ i ] * x[ i ] - 3 * abs( x[ i ] ) + 2; plikY << y[ i ] << endl; }
for( int i = 0; i <= iloscLiczb; i++ ) { y[ i ] = x[ i ] * x[ i ] - 3 * abs( x[ i ] ) + 2; plikY << y[ i ] << endl; }
|
|
pekfos |
» 2015-06-25 20:31:22 Ta, dodaj iloscLiczb do indeksu tablicy, żeby się przedział zgadzał. Reszta kodu jak w 1. poście. |
|
spyder11 Temat założony przez niniejszego użytkownika |
» 2015-06-25 21:58:27 Dziękuję również Tobie pekfos :)
|
|
« 1 » |