PDA

View Full Version : [C++] Problema nelle sommatorie (+=) nei cicli for e nella formattazione dei numeri


Aldin
17-12-2010, 19:42
Sto svolgendo qualche esercizio di programmazione dal Resnick ma ho un problema con la forma:
for(int i=0; i<n; i++)
Sommatoria+=array[n];
Nel seguente programma:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

int main() {
//numero particelle
int n;//numero di particelle
double q[n];//carica di ogni paricella
double x[n], y[n];//coordinate delle particelle
double X, Y;//punto in cui voglio calcolare il campo
double r[n];//distanza del punto da ogni particella
double sX, sY;//sommatorie dei campi sugli assi
double k=8996365468.;// =(1/ 4*pi*epsilon_0)

cout<<"Quante sono le particelle?\n";
cin>>n;

//Chiedo i dati
for (int i=0; i<n; i++) {
cout<<"Inserisci ordinatamente x, y, q\n";
cin>>x[i]>>y[i]>>q[i];
}
cout<<"Per quale punto vuoi calcolare il campo elettrostatico?";
cin>>X>>Y;

//Riassumo in tabella
cout<<"Hai inserito i seguenti dati\n\n";
cout<<setw(13)<<"CARICA"<<setw(13)<<"x"<<setw(13)<<"y";
for(int j; j<n; j++)
cout<<q[j]<<setw(7)<<x[j]<<setw(7)<<y[j];

//Calcolo le distanze
for(int i=0; i>n; i++)
r[i]=pow(pow(X-x[i],2.)+pow(Y-y[i],2.),1.5);

//Calcolo le sommatorie dei campi sugli assi
for(int i=0; i>n; i++)
-->sX+=(k *(q[i]/(pow(r[i],3)))(x[i]-X)); //ERRORE!!

for(int i=0; i>n; i++)
-->sY+=(k *(q[i]/(pow(r[i],3)))(y[i]-Y));//ERRORE!!

cout<<"Il modulo del campo elettrico vale:\n"<<"x = "<<sX<<"\ny = "<<sY;

return 0;
}

Le freccine sono volutamente inserite per indicare dove Dev C++ segnala il seguente errore:
`#`rdiv_expr' not supported by dump_expr#<expression error>' cannot be used as a function
Inoltre non saprei come limitare il numero di cifre significative in ouput...
Il testo del problema, abbastanza banale, è il seguente, dove ho evidenziato le sommatorie:
http://img830.imageshack.us/img830/1346/problemaalcalcolatore.png

Ancora, vorrei sapere se posso chiedere l'errore in questo programma per la regressione lineare dei minimi quadrati, altrimenti edito:

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main() {
cout<<"\n********************************"<<endl;
cout<<"Quanti sono i punti della regressione?\n";
int n;//
char ascisse[100], ordinate[100];//per titolare la tabella
cin>>n;//dimensione degli array che contengono x e y
double x[n], y[n], sigma, S_sigma;

//Passaggi:
//Elemento(Sx^2)
//Elemento (Sx)^2
//Elemento Sy
//Elemento Sxy
//elemento Sx ...cicli for terminati
//Calcolo delta, calcolo A, calcolo B
//Calcolo l'errore sulle y

cout<<">>>Titola le ascisse:\n";
cin>>ascisse;
cout<<">>>Titola le ordinate:\n";
cin>>ordinate;
cout<<">>>Inserisci i valori delle x seguiti dai valori delle y\n";
for(int i=0; i<n; i++) {
cout<<"Inserisci i valori della coppia n° "<<i<<"\n_ ";
cin>>x[i]>>y[i]; }

cout<<"\nSono state inserite le seguenti misure\n";
cout<<ascisse<<setw(13)<<ordinate<<"\n";
for(int j=0; j<n; j++)
cout<<setw(7)<<x[j]<<setw(7)<<y[j]<<"\n";

//Ho raccolto le varie sommatorie per semplificare i calcoli
double S_xquadrato, Sx_quadrato, Sy, Sxy, Sx;

for(int a=0; a<n; a++)
S_xquadrato+=(pow(x[a], 2.0));
for(int b=0; b<n; b++)
Sx_quadrato+=x[b];
Sx_quadrato=(pow(Sx_quadrato, 2.0));
for(int c=0; c<n; c++)
Sy=y[c];
for(int d; d<n; d++)
Sx+=((x[d])*(y[d]));
for(int e; e<n; e++)
Sx=x[e];

//Calcolo delta, A e B
double delta=(n*(S_xquadrato)-Sx_quadrato);
double A=((S_xquadrato)*(Sy)-(Sx)*(Sxy))/delta;//intercetta dall'origine
double B=(n*(Sxy)-(Sx)*(Sy))/delta;//inclinazione della retta

cout<<"\nRisultati della retta interpolante.\n";
cout<<"A= "<<A<<"\n"<<"B= "<<B<<endl;
cout<<"\nOvvero y = "<<A<<" x + "<<B<<"\n";

//Calcolo dell'errore sulle y
for(int f; f<n; f++)
S_sigma+=((1.0/(n-2))*(pow((x[f]-A-B*y[f]), 2.0)));
for(int g; g<n; g++)
sigma+=pow(S_sigma, 0.5);
cout<<"In particolare l'errore sulle y è il seguente: "<<sigma;

return 0;
}

tuccio`
17-12-2010, 22:49
nel primo hai solo dimenticato di mettere * prima di (x[i]-X) e (y[i]-Y)

Aldin
17-12-2010, 23:45
Grazie mille, ho trovato anche qualche errorino logico. Mentre per le cifre significative? Qualcuno sa come si fa?

Supdario
18-12-2010, 00:34
Grazie mille, ho trovato anche qualche errorino logico. Mentre per le cifre significative? Qualcuno sa come si fa?

cout.precision(n_cifre);

WarDuck
18-12-2010, 12:32
Ad occhio mi sembra anche che nel primo tu non abbia inizializzato sX e sY, il che significa che sX e sY in partenza potrebbero contenere la qualunque.