[程式設計][C_OT43-易] 繪製菱形
簡介
題目來源:e-tutor 平台
這篇文章分析了這題的寫法,但請注意,這篇有提示的程式碼,但沒有「完整」的程式碼。不過若是看了整篇的文章,應該是可以組合出完整的程式碼才對。
話不多說,來看看題目
輸入一個整數 H,印出對應的菱形。
例如 H=2時,菱形如下圖:
H=3 時,菱形如下圖:
對於初學者而言,寫程式第一個要學的,就是「分解題目」,將大問題,分解成小問題。
這題可以拆成兩個子問題。
(1) 輸入 H,印出上半的三角形,以及
(2) 輸入 H,印出下半的三角形 (如下圖)
請注意,H 代表的是菱形每邊的「星號」個數,不是三角形的高度喔!
請注意,H 代表的是菱形每邊的「星號」個數,不是三角形的高度喔!
接著就一個一個來分析吧!
問題一
問題一一樣可以「拆成子問題」。
如何印出第1列?
如何印出第2列?
如何印出第3列?…依此類推 (見下圖)
底下我們用 「變數 i」 來代表第 i 列。
每一列的工作
每一列可以再「拆成子問題」
(1) 印「空白」
(2) 印「星號」
再一個一個來看吧!
印空白
這兒的思考方式是,先列出幾個案例,例如例出 H = 2 時的狀況,H = 3 時的狀況,以及 H = 4 時的狀況,都畫在紙上,然後看看能不能找出規則!
以 H = 3 為列,請見下圖:
思考點是:「空白」的個數,和變數 H 以及 i 有關嗎?
如果仔細分析了數個狀況後,大約可以得到底下的結論:
同樣的,我們也是要推導出變數群和「星號個數」的規則。
這裏的重點是要多分析幾個案例,由案例中就可以導出規則了。
我們可以看出來,星號的個數每一次遞增兩個,第一項是 1 個。所以應該是一個等差數列。
於是我們可以導出底下的公式:
底下是對應的程式碼:
底下是對應的程式碼
印星號
同樣的,我們也是要推導出變數群和「星號個數」的規則。
這裏的重點是要多分析幾個案例,由案例中就可以導出規則了。
我們可以看出來,星號的個數每一次遞增兩個,第一項是 1 個。所以應該是一個等差數列。
於是我們可以導出底下的公式:
底下是對應的程式碼:
組合起來
接著我們就可以把前述的程式碼組合起來。底下的程式碼便可以印出上半部的三角形。問題二
基本上也是依循問題一的思考方式,先拆解成「如何印每一列」的資料,然後再分解成「如何印空白」,「如何印星號」這類的子問題。
在這兒強調一下,解出問題的寫法有很多種,這兒只是其中一種寫法。
眼尖的同學可以看到,i 的值是「逆」過來的。是由2到數回1。為什麼?
簡單的說明是這樣的,因為三角形是「逆」過來,所以數字就要逆過來。
但前面的說法是胡扯!實際上是先分析了多個案例,找到規則後,發現逆過來比較容易寫。
就才是實情囉!總之這部分要花時間下去了!
印空白
一樣要分析多個案例,由其中找出規則!
應該可以分析出來,印空白的公式如下:
寫的很好有其他範例嗎
回覆刪除