C++ Aproksymacja liniowa


(Iloczyn8) #1

Witam,

zrobiłem program w c++ odnośnie aproksymacji liniowej ale niestety przy kompilacji w borland c++ builder wyskakują dwa błędy w:

float x[n],y[n];

komunikat błędów: constant expression required

Jeśli kompiluje np. w dev C++ to nie ma żadnego błędu.

Ale niestety program musi się kompilować w borlandzie bo na nim będę zaliczał.

Kod programu:

#include 

#include 


using namespace std;

void input_data()

{

     int n,i=1;

     float sum_x=0,sum_y=0,sum_xy=0,sum_x2=0,a,b;


     cout <<"Podaj ilosc punktow:";

     cin >> n;

     float x[n],y[n];    

     while(i<=n)

     {

               cout <<"Podaj x"<
               cin >> x[i-1];

               cout <<"Podaj y"<
               cin >> y[i-1];

               i++;

     }

     getchar();

     cout <<"Aproksymacja liniowa do postaci y=bx+a \n";

     for (int j=0; j
     {

                 sum_x = sum_x + x[j];

                 sum_y = sum_y + y[j];

                 sum_xy = sum_xy + x[j]*y[j];

                 sum_x2 = sum_x2 + x[j]*x[j];

     }


     a = (sum_y - sum_xy*sum_x/sum_x2)/(n-sum_x*sum_x/sum_x2);

     b = (sum_xy - a*sum_x)/sum_x2;

     cout << "Rownanie ma postac: y = " <
}


int main()

{

    string imie;


    input_data();

    getchar();

    return 0;

}

[/code]

Bardzo proszę o pomoc ponieważ jestem laikiem w C++. Jeśli jest możliwość proszę o pozmienianie złych linijek w kodzie tak aby program działał w borlandzie.

Z góry dziękuje,

pozdrawiam


(Sawyer47) #2

Jeśli rozmiar tablicy nie jest znany podczas kompilacji to musisz użyć dynamicznej alokacji pamięci (new float[n]).


(Marcin Obala) #3

Na szczęście C++. Dev pozwala na deklarację tablic ze zmiennych NIE const. Borland już nie. Jedyna możliwość to tak

float x[n],y[n];

zmieniasz na

float *x = new float[n];

float *y = new float[n];

a na końcu

delete [] x;

delete [] y;

-- Dodane 18.01.2011 (Wt) 16:48 --

#include 

#include 


using namespace std;

void input_data()

{

     int n,i=1;

     float sum_x=0,sum_y=0,sum_xy=0,sum_x2=0,a,b;

float *x, *y;

     cout <<"Podaj ilosc punktow:";

     cin >> n;

x=new float[n];

y=new float[n];

     while(i<=n)

     {

               cout <<"Podaj x"<
               cin >> x[i-1];

               cout <<"Podaj y"<
               cin >> y[i-1];

               i++;

     }

     getchar();

     cout <<"Aproksymacja liniowa do postaci y=bx+a \n";

     for (int j=0; j
     {

                 sum_x = sum_x + x[j];

                 sum_y = sum_y + y[j];

                 sum_xy = sum_xy + x[j]*y[j];

                 sum_x2 = sum_x2 + x[j]*x[j];

     }


     a = (sum_y - sum_xy*sum_x/sum_x2)/(n-sum_x*sum_x/sum_x2);

     b = (sum_xy - a*sum_x)/sum_x2;

     cout << "Rownanie ma postac: y = " <


delete [] x;

delete [] y;

}


int main()

{

    string imie;


    input_data();

    getchar();

    return 0;

}[/code]

([alex]) #4

Tak a propos, w tym kodzie da się wyeliminować użycie tablic.