2013-10-20 40 views
0

大家我來創建一個程序,讀取在包含數字的輸入文件,然後使用以下方法找到的標準偏差所需要:標準偏差方案與While循環CPP/C++

sqrt((x1 - mu)^2 + (x2 - mu)^2 + (x3 - mu)^2 + (x4 - mu)^2)/mu

的x的數字等於讀入的數字,mu等於平均值​​。我在這樣做時遇到了問題,因爲我不知道如何爲從while循環中的輸入文件讀入的值設置不同的變量(x1,x2,x3,x4)。另外需要注意的是,我們應該先讀取第一位數字,然後再讀取第三位數字。這是我到目前爲止有:

fin.open(FileName.c_str()); 
    if (fin.fail()) 
    { 
     cout <<"Bad file name or location.\n" ; 
     exit(0); 
    } 
    fin >> X; 
    first_score = X; 
    Counter = 0, Sum=0; 
    while (!fin.eof()) 
    { 
     Counter++; 
     if (Counter%3==0) 
     { 
      fin >> X; 
      Sum += X; 
      Counter++; 
      Counter2 ++ ; 
      Avg = (Sum+first_score)/(Counter2+1); 
      deviation = pow((X-Avg),2); 
      sum_of_deviations += deviation; 
     } 
     fin >> Score; 
    } 
    quotient_of_deviations = sum_of_deviations/Counter2; 
    standard_dev2 = sqrt(quotient_of_deviations); 
    fin.close(); 

我知道這個代碼是邏輯上不正確,因爲我從每x值減去一個不同的平均。有人知道我可以在每次while循環運行時將while循環中的X分配給一個新變量嗎?如果我能做到這一點,那麼我將能夠通過循環外的相同平均值來減去每個x值。我希望我解釋得很好,以便你們能理解我的問題。如果沒有,我會很樂意解釋更多。在此先感謝您的時間。

回答

1

如果您不想使用數組,那麼您可能必須多次讀取文件。

int counter = 0; 
int sum1=0; 
ifstream fin,fin2; //fin and fin2 to read the file each time. 
fin.open("myfile.txt"); //opening a file to read it. 



while (!fin.eof()) //reading a file 
{ 
    fin>>X; 
    sum1 = sum1+X; //adding all the numbers in the file 
    counter++;  //counting number of items in the file 

} 

fin.close() 
//Now first calculate mean 
int mean=0; 
mean = sum1/counter; //calculating the mean 

//now calculate sum of squares of difference of each term and mean 
int sum2=0; 
fin2.open("myfile.txt");  //again opening the file with fin2 

while (!fin2.eof()) //again reading the file 
{ 
    fin2>>Y; 
    sum2 = sum2+ pow(Y-mean,2);  

} 

fin2.close() 


//finally standard deviation 

double sd=0; 

sd = sqrt(sum2/mean); //calculating standard deviation 
+0

ahhh雖然你的方法可能有效,但我們的班級還沒有碰到數組,所以我不知道它們是如何工作的,所以我應該避開它們。有沒有使用數組的方法?感謝您的時間,對不起,您的方法不是我所期待的。 – coolioschmoolio

+0

你只有四個元素對嗎? – nitinsh99

+0

它應該處理未知數量的數字,因爲我正在從輸入文件中讀取它們。 – coolioschmoolio

1

問題在於您需要知道平均值,但在讀完所有數據之前您不會知道這一點。您正試圖根據迄今爲止讀取的術語的平均值來計算偏差。這是不正確的

您應該使用標準偏差的sqrt(Sum(x^2)/ n - (sum(n)/ n)^ 2)公式。

計算循環中的兩個和,然後除以n,最後完成計算。然後你不需要每次都分配一個新的變量。

+0

感謝您的快速反應..但我不認爲我理解您發佈的代碼。有沒有其他方法可以更好地解釋它? – coolioschmoolio