2015-04-07 35 views
-1

這是我的代碼的Scilab存入數組[信道編碼]

e=0; 
c=0; 
n=10000; 

for t=zeros(1:n) 
//state1 
x=rand(); 
if(x<=0.95) then disp(t); 
    c=c+1; 
elseif(x>0.95) 
//state2 
x=rand(); 
if(x<=0.99) then disp(t) 
    c=c+1; 
//state3 
elseif(x>0.99) then disp(t=1) 
    e=e+1; 
    arr(e)=t; //store error bits only 



end 
end 
end 
disp(c); 
disp(e); 
for z=1:e //loop the earlier arr(s) 
disp(arr(z)) //display all arr of s 
end 

clear(); 

部分是什麼,我試圖做的是產生零10000。 在這10000個零中,將會出現很少錯誤,例如我可能會得到9990個零和10個零。我現在做了一個只存儲數組的數組。現在我迷惑了,我該如何將零和零存儲到同一個數組中。

讓我們說,當前運行..我將以10個(包含錯誤位的零)結束。然後在這部分代碼中,所有變成1的零將被存儲到arr(e)中。因此,輸出將是

0 
0 
0 
0 
0 
0 
0 
0 
0 
0 

但我想要的是這樣的。

arr[1] = 0 
. 
. 
. 
arr[250] = 1 
. 
. 
. 
arr[749] = 1 
. 
. 
. 
arr[1234] = 1 
. 
. 
. 
arr[5463] = 1 
. 
. 
. 
arr[6678] = 1 
. 
. 
. 
arr[8890] = 1 
. 
. 
. 
arr[9987] = 1 
. 
. 
. 
arr[10000] = 0  

這顯示了錯誤位出現在250,749,1234,5463,6678,8890,9987

謝謝

回答

2

所有你需要做的是:

e = [250 759 1234 5463 6678 8890 9987]; 
arr = zeros(10000,1); 
arr(e) = 1; 

e定義您希望arr中的值更改爲1的位置。只需使用e即可索引arr並設置相應的值找到位置爲1.就是這樣......沒有什麼值得的!

+0

但250,749,1234,5463,6678,8890,9987陣列只是一個隨機的位置..下一次當我再次運行的代碼..數組的位置可能是不同的 – MkLim

+0

那麼...確保這些位置存儲在'e' ....然後執行上面的代碼。你說你有位置,它們存儲在'e'中....所以....使用'e'和索引到'arr'中。但是,您正在生成位置,請確保它們存儲在「e」中。你想讓我解釋一下多簡單? – rayryeng