2012年6月26日 星期二

關於程式入門-程式設計策略

一般是,思考[問題的解題流程],再製作程式的流程圖,有了流程圖就可以轉換成程式。如此問題變成-不知從何著手寫出[問題的解題流程]。
而設計解題流程中,需要有
1.題型辨識; 2. 解題規劃; 3.腦中模擬 ; 4.錯誤修正...
而這些是需要直觀、經驗與創意的配合,沒有一定的流程。所是稱為藝術(art)

在教學課本中,內容為:提出問題、秀出解題流程及轉換成程式。而解題流程是很大的問題所在。
而大多的程式,並非以藝術而是程序性的工作。因此以Bottom-UP及Top-Down策略。
Bottom-Up為,先找出"解決部份問題",接著再用"相同的方法及相似的程式段",依序把剩下問題解決。
而其中,最主要的是了解電腦中,要去做什麼工作(敘述)。
Bottom-UP:
  1. 按部就班地解決問題,寫出暴力程式。
  2. 用變數取代重複敘述中不同的部分,將之變成相同。
  3. 使用迴圈敘述取代完全相同的重複敘述。
在使用Bottom-up 程式策略時,對於我這種學習程式數年但一直無法得心應手的人,常會執著於過去的學習方式與程式發展步驟,反而無法完全投入Bottom-UP
練習:印出3+6+9+12+15的和。
1.
  • sum=0
  • sum=sum+3
  • sum=sum+6
  • sum=sum+9
  • sum=sum+12
  • sum=sum+15
2.變數取代不同處,將之變成相同
  • sum=i;
  • i=3
  • sum=sum+i
  • i=6
  • sum=sum+i
  • i=9
  • sum=sum+i
  • i=12
  • sum=sum+i
  • i=15
  • sum=sum+i
3.以迴圈取代完全相同(迴圈的執行條件,迴圈中的遞增、減)
  • for(i=0;i<=15;i+=3)
  • sum=sum+i
累加、累印問題練習:
印出3+6+9+12+15=45,程式一邊求和一邊印出連加的算式,最後再印出[=]及[累加結果]
1.
  • sum=0,
  • sum=sum+3
  • printf(%d+,3);
  • sum=sum+6
  • printf(%d+,6);
  • sum=sum+9
  • printf(%d+,9);
  • sum=sum+12
  • printf(%d+,12);
  • sum=sum+15
  • printf(%d+,15);
2.以變數取代不同
  • sum=0;
  • i=3;
  • printf(%d+,i);
  • sum=sum+i
  • i=6;
  • printf(%d+,i);
  • sum=sum+i
  • i=9;
  • printf(%d+,i);
  • sum=sum+i
  • i=12;
  • printf(%d+,i);
  • sum=sum+i
  • i=15;
  • printf(%d,i);
  • sum=sum+i
  • printf(=%d,sum);
3.以迴圈(修件,變數加,減)
  • for(i=3;i<15;i+=3)
  • printf(%d,i)
  • sum=sum+i
  • printf(%d,i);
  • sum=sum+i
  • printf(=%d,sum);
練習:求階
計算6!並印出其結果
1.
  • sum=1;
  • sum=sum*2;
  • sum=sum*3;
  • sum=sum*4;
  • sum=sum*5;
  • sum=sum*6;
2.以變數取代不同
  • sum=1;
  • i=2;
  • sum=sum*i
  • i=3;
  • sum=sum*i
  • i=4;
  • sum=sum*i
  • i=5;
  • sum=sum*i
  • i=6;
  • sum=sum*i
3.代入迴圈(條件,加減)
  • sum=1;
  • for(i=2;i<=6;i++)
  • sum=sum*i
練習:印出9x9的乖法表
傳統的方式是分析出資料輸出的變化規則,再用迴敘述其規則來產生所要的資料。
而我最缺的就是"問題的分析"能力。故用Bottom-UP(即碰到不會解的問題,就不要嘗試一次完成,先解決一部份再以相同的樣式完成其它部份)
這個適合不知如何下手的程式。因此不需要分析問題,只要按部就班寫出暴力程式,再使用迴圈敘述即可。
image
1.先解決一部分的,如第一列
2x2...2x5...2x9
問題:
image
image

沒有留言:

張貼留言