2013-12-23 34 views
0

所以我得到了這個ADL代碼,並要求通過不同數字輸入的代碼來呈現結果測試表。 我明白了大部分內容,但從[開始直到]結束,我一直在掙扎。瞭解ADL中的for循環

這就是我到目前爲止: 對於任何負值,代碼在第一個if語句後結束,並且不顯示任何內容。 對於任何0值,代碼在第二個if語句後結束。 對於任何1值,代碼在第三個if語句之後結束。 任何幫助將不勝感激。

考慮下面的算法寫在ADL:

procedure unknown(IN number, OUT result, OUT status) 

    declare i, number1, number2, sum 

    status <-- true 
    if number < 0 then [status <-- false] 
    else 
    if number = 0 then [result <-- 0] 
    else 
     if number = 1 then [result <-- 1] 
     else 
     **[number2 <-- 0 
     number1 <-- 1 
     for i <-- 2 to number do 
      sum <-- number1 + number2 
      number2 <-- number1 
      number1 <-- sum 
     end 
     result <-- sum 
     ]** 
     endif 
    endif 
    endif 
end // unknown 

使用這種算法,你需要完成以下任務:

我。假裝成一個處理器,並使用演講中講授的代碼漫遊技術來執行上述算法。爲此設計自己的測試數據,並解釋該算法的功能。

回答

0

前三if語句,它的作用:

  • 如果輸入< 0,則狀態= FALSE;
  • 如果輸入= 0,則輸出= 0;
  • 如果輸入= 1,則輸出= 1;

當涉及到最終else,將for i <--2 to number do聲明意味着重複做身體(1列)次i是2,3,4,...,頭號通過一個,所以你得到(編號-1)i)。身體是:

sum <-- number1 + number2 
number2 <-- number1 
number1 <-- sum 

讓每一個迭代後的見(ADA I = 2,3,4,...)後,會有什麼這些變量是:

i  number1  number2  sum 
======================================== 
begin 1   0   N/A 
2  1   1   1 
3  2   1   2 
4  3   2   3 
5  5   3   5 
6  8   5   8 
7  13   8   13 
8  21   13   21 

您可能會看到sumFibonacci number是:

enter image description here

因此,讓我們通過附加完成分析:

  • 如果輸入= n(n> 1),則輸出=斐波納契數Fn。
+0

哇,謝謝。 – JosephHistorg

+0

我剛剛意識到我應該避免像「謝謝」這樣的評論,但我不知道如何表達我的讚賞。我當然不會注意到這是一個斐波那契數列。 – JosephHistorg

+0

@JosephHistorg我很高興能有所幫助。祝你今天愉快。 – Skyler