2016-02-24 71 views
-1

我正在解決3個陣列問題。他們中的兩個我已經解決了,而且我有兩個問題。如何以不同的方式將陣列複製到另一個陣列 - Pascal

如果前兩個的代碼是好的以及如何解決第三個問題。

好的,第三個問題是以這種方式將數組複製到另一個數組:arrayA = [1,2,3],然後arrayB爲[1,2,3,3,2,1]。

首先從頭到尾,然後從頭到尾。第一個問題是以這種方式將arrayA複製到arrayB:arrayA = [1,2,3],arrayB = [1,1,2,2,3 ,3]。 我只會發布我的僞代碼。

while i<length(a) do begin 
    b[j]=a[i]; 
    j+=1; 
    if (j+1) MOD 2 =0 then i+=1; 
end; 

另一個之一是arrayA複製到arrayB twice.arrayA = [1,2,3],arrayB = [1,2,3,1,2,3]。在這裏,我用循環:

for i=1 to length(a) do arrayB[i]=arrayA[i]; 
for i=length(a)+1 to 2*length(a) do arrayB[i]=arrayA[i-length(a)] 
+2

你的描述是難以遵循,但最大的問題是,你的例子是不完整的。根據陣列類型的不同,Pascal中的邊界可能會有所不同,因此您所展示的內容不足以回答任何問題。哦,並啓用所有檢查(範圍,溢出,算術),如果您使用Free Pascal,則啓用-CRriot。 –

+1

它是由我分配的數組,不是動態的,所以索引從1開始......我沒有明白,CRiot如何幫助我? –

+0

這就是問題,@Hasin。你沒有發佈你的分配代碼,人們無法猜測它是如何。如果你想獲得更多的幫助,我建議你發佈更多的代碼。 –

回答

1

避免while個時鐘週期數是預定義的。
漏洞利用簡單的指數算術(我假設所有的數組是基於1):

//112233 
for i := 1 to length(a) do begin 
    b[2 * i - 1] := a[i]; 
    b[2 * i] := a[i]; 
end; 

//123123 
l := length(a); 
for i := 1 to length(a) do begin 
    b[i] := a[i]; 
    b[i + l] := a[i]; 
end; 

//123321 
l := length(a); 
for i := 1 to length(a) do begin 
    b[i] := a[i]; 
    b[2*l - i + 1] := a[i]; 
end; 
相關問題