Sommatorie e cicli for, risultati degli stessi non uguali...
Salve a tutti. Sto cercando di scrivere un programmino in c++ che mi faccia il bestfit lineare di una serie di dati sperimentali. Ecco il codice:
Il compilatore non mi segnala errori. Il problema è che, come potete vedere eseguendo più volte il programma con l'immissione degli stessi dati, mentre A, B e D mi danno valori sempre uguali, il ciclo for per C, pur essendo sintatticamente uguale a quello per B (che mi dà un valore costante) dà valori sempre diversi... stessa cosa vale per i conti che mi calcolano 'a' e 'b', anche se non so se questa sia o meno una conseguenza della diversità di C (non ho tempo né voglia di controllare a mano)...
Mi sapreste dire dove ho sbagliato? (vi prego, aiutatemi
)
# include <iostream> #include <math.h> using namespace std; int d; double w, z, Y, X; char e1, e2; int main () { cout<<"Dammi l'etichetta che stai immettendo come parametro di ascissa X: "; cin>>e1; cout<<"Dammi l'etichetta che stai immettendo come parametro di ordinata Y: "; cin>>e2; richiestadimensione: cout<<"Dammi il numero totale di dati sia "<<e1<<" che "<<e2<<" di cui vuoi eseguire il bestfit lineare (il numero deve essere intero, altrimenti il programma non funziona): "; cin>>d; if(cin.fail()) {cin.clear(); d=cin.get(); cout<<"Attenzione: non è stato inserito un valore numerico. Inserire di nuovo il numero di dati in "<<e1<<" o in "<<e2<<" che si vuole elaborare."<<endl; goto richiestadimensione;} const int dim=d; unsigned i; //i è l'indice di elemento del vettore dati[] double datiX[d]; //dichiarazione del vettore datiX[] double datiY[d]; //dichiarazione del vettore datiY[] cout<<"Ora verranno richiesti i dati sperimentali che si vogliono mettere in ascissa "<<e1<<". Ad ogni ripetizione della richiesta, inserisci il dato successivo (partendo dal primo). I dati verranno numerati, così che tu possa tenere il conto di dove ti trovi. Assicurati di averli numerati sulla carta tu per primo (partendo da: 1)!\n"; for(i=0;i<d;i++) { iniziociclo: cout<<"Inserisci dato "<<i+1<<": "; cin>>w; if(cin.fail()) {cin.clear(); w=cin.get(); cout<<"Attenzione: non è stato inserito un valore numerico. Inserire di nuovo il dato "<<i+1<<" che si tentava di mettere."<<endl; goto iniziociclo;} datiX[i]=w; cout<<"Dato "<<i+1<<" di "<<e1<<" immesso."<<endl; } cout<<"Ora verranno richiesti i dati sperimentali che si vogliono mettere in ordinata "<<e2<<". Questi dati sono numerati in corrispondenza dei dati in "<<e1<<" (esempio: al dato 1 di "<<e1<<" corrisponde il dato 1 in "<<e2<<").\n"; for(i=0;i<d;i++) { iniziociclo1: cout<<"Inserisci dato "<<i+1<<": "; cin>>z; if(cin.fail()) {cin.clear(); w=cin.get(); cout<<"Attenzione: non è stato inserito un valore numerico. Inserire di nuovo il dato "<<i+1<<" che si tentava di mettere."<<endl; goto iniziociclo1;} datiY[i]=z; cout<<datiY[i]<<endl<<"Dato "<<i+1<<" di "<<e2<<" immesso."<<endl; } /*La retta sarà del tipo Y=aX+b, dove a=(dA-BC)/(dD-B2) b=(CD-AB)/(dD-B2) con A=S[Xi*Yi]; B=S[Xi]; C=S[Yi]; D =S[Xi^2] e d: numero di dati sperimentali sia in X che in Y. Il programma ora passa al calcolo dei vari parametri e infine restituisce la retta cercata. */ double A, B, C, D; for(i=0;i<d;i++) { A+=(datiY[i]*datiX[i]); } cout<<"A = "<<A<<endl; for(i=0;i<d;i++) { B+=datiX[i]; } cout<<"B = "<<B<<endl; for(i=0;i<d;i++) { C+=datiY[i]; } cout<<"C = "<<C<<endl; for(i=0;i<d;i++) { D+=(datiX[i]*datiX[i]); } cout<<"D = "<<D<<endl; double a, b; a=(d*A-B*C)/(d*D-B*2); cout<<"a = "<<a<<endl; b=(C*D-A*B)/(d*D-B*2); cout<<"b = "<<b<<endl; cout<<"Bestfit lineare: "<<e2<<" = "<<a<<" "<<e1<<" + ("<<(b)<<")"<<endl; }
Il compilatore non mi segnala errori. Il problema è che, come potete vedere eseguendo più volte il programma con l'immissione degli stessi dati, mentre A, B e D mi danno valori sempre uguali, il ciclo for per C, pur essendo sintatticamente uguale a quello per B (che mi dà un valore costante) dà valori sempre diversi... stessa cosa vale per i conti che mi calcolano 'a' e 'b', anche se non so se questa sia o meno una conseguenza della diversità di C (non ho tempo né voglia di controllare a mano)...
Mi sapreste dire dove ho sbagliato? (vi prego, aiutatemi

Risposte
Non hai inizializzato le variabili. Mi stupisco che le altre si comportino bene sinceramente.
Grazie, grazie mille vict85! grazie davvero
