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 »  |