Sommatorie e cicli for, risultati degli stessi non uguali...

Folkner
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:
# 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
vict85
Non hai inizializzato le variabili. Mi stupisco che le altre si comportino bene sinceramente.

Folkner
Grazie, grazie mille vict85! grazie davvero :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.