2013-11-01 97 views
0

問題是: 在一個26名學生的班級中,給出了一個包含10個問題的測試。學生們通過擲硬幣來回答問題。我必須找出有多少學生有兩個或更少的答案是正確的。這是我編寫的程序,但我不確定它...是好的嗎?如何計算數量?

correct=0; 
students=0; 
for i=1:26 
    for j=1:10 
     answ=ceil(rand); 
     if answ==1 
      correct=correct+1; 
      if correct==2 
       students=students+1; 
      end 
     end 
    end 
end 
disp(students) 
+0

它對您有用嗎? – chappjc

+0

爲了記錄,這實際上是一個預定義的函數。 Y ='binocdf(10,26,0.5)'http://www.mathworks.com/help/stats/binocdf.html – PearsonArtPhoto

回答

0

輕微的mod ification到您的代碼:

correct=0; 
students=0; 
for i=1:26 
    for j=1:10 
     answ=round(rand); % Use round instead of ceil 
     if (answ==1) 
      correct=correct+1; 
      if correct==2 
       students=students+1; 
       break; 
      end 
     end 
    end 
    correct=0; % Was missing in original code 
end 
disp(students) 

附加說明:因爲這對於正確答5

  1. 嘗試測試代碼將有變化的更多機會的結果,因爲隨機數的均勻分佈。大多數學生在假設等概率的情況下會得到至少2個正確的答案,這不是實際情況。

  2. 嘗試保持適當的壓痕習慣。它將更具可讀性並且不易出錯。

+0

感謝很多幫助;) –

+0

@TudorPlugaru不客氣! – jkshah

0

就像這樣:(你必須重新設置正確的計數器爲每個學生,有的end是不是在正確的地方)

correct = 0; 
students = 0; 

for i = 1:26 
    for j = 1:10 
    answ = ceil(rand); 
    if(answ==1) 
     correct = correct + 1; 
    end 
    end 

    if(correct < 2) 
    students = students + 1; 
    end 

    correct= 0; 
end 

編輯

對不起,我沒有看到你的聲音越少,所以我改變><

5

它更簡潔,更快速地運行,如果你這樣做矢量更具可讀性:

answers = round(rand(10,26)); % 10x26 matrix of 0/1 values 
correct = sum(answers); % sum along each column 
students = sum(correct<=2) % how many values of correct are 2 or less 

順便說一句,從您的代碼看起來你想知道學生有多少2或更多正確答案(而不是2或爲你的國家)。在這種情況下,將最後一行更改爲

students = sum(correct>=2) % how many values of correct are 2 or more