結構化程式設計(8)


重複(迴圈)結構

教學影片

說明


計次迴圈

有限次數的重複執行是多數程式語言 (text-based programming language) 的基礎結構,在 Scratch 中反而容易被忽略。Scratch 中省去了使用變數來紀錄次數、遞增變數與條件判斷等複雜控制,我們可以簡單使用「重複幾次」來執行特定次數的指令,如下面程式會執行恰好10次的「拍手」,不多也不少。有確定次數與精確計算的需求,那麼使用「重複幾次」的所造成的結果是可以預期與設想的。

範例-數列

實作1:數學專案-以計次迴圈(for loop)產生數列5,10,15,20,...,50

提示:

步驟1:i←?(變數i初始化)

步驟2:重複迴圈?次

產生數列印出數字=i

i←i+?(設定數字 = 數字+?)

參考程式碼

參考網站

http://itopnet.blogspot.com/2019/03/scratch3-06.html?m=1
https://class.tn.edu.tw/modules/tad_web/news.php?WebID=1384&NewsID=6398
http://cvod.cnu.edu.tw/category/show/id/303#198-1

實作2:數學專案-以計次迴圈(for loop)計算1+2+3+......+10的總和

程式執行結果:

數學家的故事:「高斯」的小時候

問題解析

1.求出從1+2+3+...100的和,如果我們就是從1開始,先兩個數相加,然後再用這兩個數相加的結果與後一個數相加,一直加到100,如先計算1+2=3,然後計算3+3=6,然後6+4等於10,如此一直加到100,這樣一定可以計算出來,但此方法非常花時間沒效率

高斯數學家的解法

圖片來源:https://zhuanlan.zhihu.com/p/53205895

2×(1+2+...+100) =101×100=100100
1+2+...+100 =100100÷2=5050

2.如果用人工計算求1+2+3+...100的和是非常費時的,但我們利用程式設計讓電腦去做卻是非常簡單的事情,因為這種有規律的計算恰好是電腦最擅長的事情。所以我們不需要去用技巧公式,我們只需要想一種演算法,能夠讓電腦正確完成計算。

3.連續相加就是拿上一個結果和下一個數相加得到一個新的和,然後再拿這個和與下一個數相加,這是很有規律的,我們使用循環過程。為了完成這個循環相加,我們需要使用兩個變量:一個是數字,一個是,計算算式如下:

和 ←和+數字

4.數字是一個變量,每執行一次要增加1,算式=號右邊的和就是數字加之前的所有數之和,加上數字之後的結果成為一個新的和,然後再用這個和與下一個數進行相加,又的一個新的和,如此循環,一直到數字變為100為止。

數字 ← 數字+1

5.虛擬碼示例

首先可以定義兩個變量 i(記錄1到100變化的加數) ,S(記錄累加的總和),演算法以虛擬碼的寫法可以表示為

步驟1:i←1,s←0(設定數字為1.總和為0==>初始化) 。

步驟2:s←s+i(設定總和為總和+數字==>累加和) 。

步驟3:i←i+1(設定數字 = 數字+1==>規律性) 。

步驟4:假如i大於100就結束並印出總和s,否則返回重新執行步驟2。

Tracing an algorithm

i與s變數的數值變化如下表


i

s

1

1

2

3

3

6

4

10

5

15

 

 

 

 

100

5050

由上例的演算過程得知演算法的基本原則及特性符合明確性、有限性、正確性和具有結果的輸出

流程控制

程式碼參考

實作3:數學專案-以計次迴圈(for loop)計算1-10之間的偶數和(2+4+6+8+10=?)

程式執行結果:

演算法

判斷i是否為偶數(i除以2的餘數=0)

那麼就執行累加和s←s+i

若不是就執行i←i+1

最後印出偶數和s

程式提示:

程式碼參考


實作4:數學專案-以計次迴圈(for loop)計算1+2+3+...N的和

程式執行結果:

演算法

程式碼參考