《我的第一本程式設計書》第三章 迴圈,讓程式變短

伊徵銀王發表於2019-12-29

第三章 迴圈,讓程式變短

1.如果畫一個4*4的方塊,需要如下程式碼:

儲存區[60000]->999999
儲存區[60001]->999999
儲存區[60002]->999999
儲存區[60003]->999999
儲存區[60100]->999999
儲存區[60101]->999999
儲存區[60102]->999999
儲存區[60103]->999999
儲存區[60200]->999999
儲存區[60201]->999999
儲存區[60202]->999999
儲存區[60203]->999999
儲存區[60300]->999999
儲存區[60301]->999999
儲存區[60302]->999999
儲存區[60303]->999999

顯然如此大幅度重複會很累,所以就需要減少程式碼量,因而就涉及到了迴圈。

2.迴圈的使用方法

 只要 0 < 1
    儲存區[60303]->999999

只要:程式碼令。 0<1:判斷語句。 儲存區[60303]->999999:執行的內容,這只是一個案例。

3.判斷語句
由於判斷語句一般不是固定數字,是需要變化的,所以就有了變數。

1)就像數學中的y=x+1這樣,程式設計也經常使用:

  只要 x<1

但這裡的變數沒有“x”這樣的定義,所以就只能使用“儲存區[數字]”的方式代替。

只要 儲存區[60000] < 1

但可惜“儲存區[60000]”到“儲存區[69999]”這部分地址被顯示器佔用,也就是用來顯示螢幕上的點,所以就換成其他的儲存區地址。

  只要 儲存區[0]<1

其實只要不在那個區間的任何編號都行,但也不能超出最大地址的限定,所以一般都推選使用前面的地址。

4.一次完整的迴圈

儲存區[0]->0
只要 儲存區[0]<1
    {希望迴圈的內容}
    儲存區[0]->1

上述的解釋是:先給儲存區[0]賦值一個數,然後在進行比較和迴圈,然後執行要迴圈的內容,最後給儲存區[0]重新賦值。

由於重新賦值一個固定的數是沒法多次迴圈或停止迴圈的,所以就引入了一種計算:

儲存區[0]->儲存區[0]+1

每迴圈一次,給自身加一,從而當滿足判斷條件後,停止迴圈。

如:迴圈5次後結束

儲存區[0]->0
只要 儲存區[0]<5
    {程式碼塊}
    儲存區[0]->儲存區[0]+1

5.接下來是如何使用迴圈,繪製一個5畫素的橫

儲存區[0]->0
儲存區[1]->60000
只要 儲存區[0]<5
    儲存區[儲存區[1]]->999999
    儲存區[1]->儲存區[1]+1
    儲存區[0]->儲存區[0]+1

由於畫素地址不變,那麼無論迴圈多少次也不會出現第二個畫素點,因而也得把畫素地址也換成變數。

  儲存區[儲存區[1]]->999999

而儲存區[1]也就成了一個變數名,裡面賦值了一個60000,也就是顯示器的第一行第一個畫素點地址。

    儲存區[1]->儲存區[1]+1

然後“儲存區[1]->儲存區[1]+1”和“儲存區[0]->儲存區[0]+1”,也就是在原來的數值之上加1,即所謂的自增1.

6.優化程式碼,不浪費儲存區。(哎!我就想不到啊!)

儲存區[0]->0
只要 儲存區[0]<5
    儲存區[60000+儲存區[0]]->999999
    儲存區[0]->儲存區[0]+1

思路就是,上邊的“儲存區[1]”和“儲存區[0]”之間就差一個“60000”常量,所以將其提取出來,複用一個變數就好。

6.繪製一個4*4的方塊

1)笨辦法是:

儲存區[0]->0
只要 儲存區[0]<4
    儲存區[60000+儲存區[0]]->999999    //注意60000
    儲存區[0]->儲存區[0]+1

儲存區[0]->0
只要 儲存區[0]<4
    儲存區[60100+儲存區[0]]->999999    //注意60100
    儲存區[0]->儲存區[0]+1

儲存區[0]->0
只要 儲存區[0]<4
    儲存區[60200+儲存區[0]]->999999    //注意60200
    儲存區[0]->儲存區[0]+1

儲存區[0]->0
只要 儲存區[0]<4
    儲存區[60300+儲存區[0]]->999999    //注意60300
    儲存區[0]->儲存區[0]+1

就是在第一行60000迴圈一次,輸出四個畫素點,第二行60100迴圈一次,輸出四個畫素點,第三行60200迴圈一次,輸出四個畫素點,第四行60300迴圈一次,輸出四個畫素點。
綜合起來,就是一個4*4的方塊畫素點。

2)優化後的程式碼

儲存區[0]->0
只要 儲存區[0]<4
    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[60000+儲存區[1]+(儲存區[0]*100)]->999999    //括號很重要
        儲存區[1]->儲存區[1]+1
    儲存區[0]->儲存區[0]+1

由於4*4畫素的方塊是橫豎都是4,所以就需要兩個迴圈來確保“橫”和“豎”的迴圈。
代表橫向迴圈的:

    儲存區[1]->0
    只要 儲存區[1]<4
        儲存區[60000+儲存區[1]]->999999   
        儲存區[1]->儲存區[1]+1

然後再把這橫向迴圈4行!

儲存區[0]->0
只要 儲存區[0]<4
    {迴圈一行的程式碼}
    儲存區[0]->儲存區[0]+1

又因為每一行進位是100,
即第一行的第一個畫素點是60000
第二行的第一個畫素點是60100
第三行的第一個畫素點是60200
…… 第n行的第一個畫素點是60000+(n-1)*100 所以也就在最終執行的程式碼就是:

儲存區[60000+(儲存區[0]*100)+儲存區[1]]->999999

“(儲存區[0]*100)”代表的是每一行
“儲存區[1]”代表的是一行中的幾個畫素點

書上的總結:

1.程式執行時的替換
儲存區可以被替換成它所儲存的數字,還可以計算。
(也就是給儲存區賦值,並進行加1)

2.書寫算式的方法。
加法和減法
(也就是加減乘除的運算)

3.迴圈的使用方法。
根本在於儲存區表示迴圈過的次數。
(將儲存區作為變數,進行賦值自增自減)

4.算式中使用()來改變計算順序。
沒有括號時無論是加法還是乘法都從左開始計算。 (就像數學計算那樣)

5.沒有按照預期執行怎麼辦? (重新捋順程式碼,檢視那裡有書寫錯誤,並且還要思考邏輯的準確性。)

6.使用迴圈有助於提高修改效率。 (最起碼不用一行一行的重複書寫。)

相關文章