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

problem z prostym programem (złe wyniki funkcji f(x))

Ostatnio zmodyfikowano 2015-06-25 21:58
Autor Wiadomość
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:
C/C++
#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ę :)
P-134077
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:
C/C++
for( int i = 0; i < rozmiarTablicy; ++i )
     x[ i ] = i;
//
P-134078
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:
C/C++
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;
}
P-134079
pekfos
» 2015-06-25 20:31:22
Ta, dodaj iloscLiczb do indeksu tablicy, żeby się przedział zgadzał. Reszta kodu jak w 1. poście.
P-134080
spyder11
Temat założony przez niniejszego użytkownika
» 2015-06-25 21:58:27
Dziękuję również Tobie pekfos :)
P-134093
« 1 »
  Strona 1 z 1