2012年6月29日 星期五

Top-Down程式策略

程式變數的功能和用途。
1.計數器(counter):用來標示次數、序號,如工作次數和資料的序號。
2.累積器(ccumulator):用來存放計算結果、累算結果。
3.旗標(flag、indicator):用來標示狀態。
其中計數器為進行累加、減的變數。為能清楚表現其次序、經常執行加一或減一的運算。;
而累積器則是用來暫存各種累算的結果,無法由計數器來得。
//每仰臥起坐,每得相對的$.

獎金=0;

for(口令=1;口令<=100;口令=口令+1)

做一次仰臥起坐;

獎金=獎金+口令;

}

口令為計數值,每變化一次即為為仰臥起坐。

口令也為累積器,代表做過的仰臥起坐總數。

獎金為累積器,代表為其獎金總數。(已無法直接由計數器(口令)的最終值推算出來。

而在旗標,標示不同狀態來執行不同程序,而在設定旗標的初始化值的設定上。

需依程式來決定,初始值否定原則


//任意指定127給整數變數no,判斷是否為質數

1.判斷(no-1)是否可整除no,如果可以,no就不為質數

2.判斷(no-2)是否可整除no,如果可以,no就不為質數

 

n-2.判斷(2)是否可整除no,如果可以,no就不為質數


初始值否定原則,故我們先設為no為質數,然後在程序中去檢測來推翻。


no=127;

prime=1; //1為質數;0反之.

for(k=no-1;k>1;k--)

    if(no%k==0) prime=0; //推翻

if(prime)

  為質數

else

  不為質數




Top-Down程式策略:


1.寫出解決問題的外迴圈敘述,必要時可先用中文及(工作)數數描朮要重複執行的工作

2.逐步將迴圈內的中文句子轉成C語言,必要時使用直線方程式決定(工作)變數迴圈變數間的關係(方程式)

即類似系統分析的Top-Down,先寫出解決問題的幾個大步驟,再分若干小步驟,直到可用C描述為之。

而其中直線方程式最為重要。

EX:

印出:

image

1.由最外圍的for,可先用中文及(工作)數數描朮要重複執行的工作


for(i=0;i<5;i++)

{

印出空白;

印出*;

/n;

}

2.轉成C語言,必要時使用直線方程式決定(工作)變數迴圈變數間的關係(方程式)

(i可由0開始,除了在C語中是以從0開始外。還可方便計算出其直線關係方程。

















i012
" "864
*147

3.其" "中,其之間的直線關係式

8=a*0+b;

6=a+b;

a=-2; b=8;

其*中,其之間的直線關係式

1=a*0+b;

4=a+b;

b=1,a=3

4.

for(i=0;i<5;i++)

    印出(-2i+8)個" ";

    印出(3i+1)個*;

    \n;

5.轉換成C


#include <stdio.h>

#include <stdlib.h>

 

int main(int argc, char *argv[])

{

  int i;

  for(i=0;i<5;i++)

  {

  //space=-2i+8;

  int j;

  for(j=0;j< -2*i+8;j++) 

    printf(" ");

  //start=3i+1    

  for(j=0;j<3*i+1;j++)  

    printf("*"); 

  printf("\n"); 

                  }                   

  system("PAUSE");    

  return 0;

}



EX:求面積:

求y=x^2和y=0以x=1所來之面積

1.求其切割的次數

   因為最好為可整除的,故令1/5

   故為

iSum=0;

   for(i=0;i<=5;i++)


{

所在的面積,並做累加的動作 。y=x^2

}

2.其i與x之間的線性方程.












i013
y0.20.40.6

  故為z=0.2i+0.2

iSum=0;

   for(i=0;i<=5;i++)


{

x=(0.2*i+0.2); //x

y=x*x;//y

sum=sum+y*0.2;

}

//在未接觸Bottom-UP程式策略的什都是使用Top-Down程式策略來撰寫程式。

且少先去規劃其程式流程,而在Top-Down程式策略與規劃流程圖一樣,需要程式的經驗、直觀與巧技。

所以用Top-Down時,若寫不出時,可改以Bottom-UP程式策略。

沒有留言:

張貼留言