|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jan 2008
Messaggi: 140
|
[C++] Problema nelle sommatorie (+=) nei cicli for e nella formattazione dei numeri
Sto svolgendo qualche esercizio di programmazione dal Resnick ma ho un problema con la forma:
Codice:
for(int i=0; i<n; i++) Sommatoria+=array[n]; Codice:
#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;
}
Codice:
`#`rdiv_expr' not supported by dump_expr#<expression error>' cannot be used as a function Il testo del problema, abbastanza banale, è il seguente, dove ho evidenziato le sommatorie: ![]() Ancora, vorrei sapere se posso chiedere l'errore in questo programma per la regressione lineare dei minimi quadrati, altrimenti edito: Codice:
#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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
nel primo hai solo dimenticato di mettere * prima di (x[i]-X) e (y[i]-Y)
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Jan 2008
Messaggi: 140
|
Grazie mille, ho trovato anche qualche errorino logico. Mentre per le cifre significative? Qualcuno sa come si fa?
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12919
|
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.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:43.





















