A lot of people email me asking the way to start some program or another. Perhaps the best advice is simply to start writing down a layout for the program: once you start writing down ideas or code you'll start to get a feel for your project. There are two standard methods of program design: the top-down approach and the bottom-up approach. Top-down programming involves writing code that calls functions you haven't defined and working through the general algorithm before writing the functions that do the processing. Top-down programming is, to a good degree, a very abstract way of writing code because it starts out by using functions you haven't designed, and that you perhaps do not know how to design. The bottom-up approach to programming is the opposite: the programmer writes the basic functions she realizes will be necessary at some point in the programming and then work up to the more complex parts of the program.
比較有意思的是,那兩種方法都是關注程序中要執行的動作或方法,而不是關注程序要處理的數據。很多時候,寫程序最好的方法是,寫出你將要用到或處理的數據,然后再從上到下的想怎么樣去處理這些數據,最后才能得到你需要的結果。首先定義數據,然后再寫出那些要處理這些數據的相關的函數。,這樣你才會得到你的程序應該怎樣寫的基本思路,
Another value to defining variables before writing code is that many times you can accomplish an entire program without many functions; this fact is especially true when you are a beginner making simple programs. The variables give you the raw materials you need to begin working with the tools: loops, if statements, library functions, and perhaps user defined functions.
現在讓我們來看一個關于怎樣開始寫一個完整程序的例子。假設你要寫的程序是要模擬一個DVD商店的租售系統,這個系統需要計算出出租DVD的總收入。你的程序有可能要求,需要輸入一個代碼,告訴你這個DVD租售的價格是2元一天還是是3元一天,然后還需要它出租了多少天,最后如果這個輸入的代碼是0,整個程序就結束了。你應該要分別計算出租金為3元/天和2元/天的DVD的出租的總天數。拿這個程序來說,思考設計程序的最好的方式是,想象為了計算出租金的收入,你需要存儲哪些信息:
- 你需要一個變量用來存儲總收入,當程序結束時;
- 你需要一個臨時變量用來存儲代表DVD的租金的代號;
- 你需要一個臨時變量用來存儲某個DVD出租的天數;
- 你需要一個變量來存儲租金為3元/天的所有DVD出租了多少天的總數;
- 最后,你還需要一個變量來存儲租金為2元/天的所有DVD出租了多少天的總數;
Let's take a look at an example of how to go about thinking about a program. If you were to write a program to simulate a video store rental system that calculates the gross revenue from rentals, you might be asked to write a program that accepts a code telling you whether a certain video was rented at $2.00 (input as 2) a day or $3.00 (input as 3) a day and then asks for how many days it was rented out for; finally, if the code for the cost of rental is 0 the program should terminate. You should also count the number of days videos were rented at $3.00 per day and $2.00 per day. The best way to think about the design for a program such as this one is to imagine what information you need to store in order to calculate the revenue:
- you need a variable to store the total dollar amount at the end of the program;
- you need a temporary variable to store the code for the cost of a transaction;
- you need a temporary variable to store the number of days a specific video was rented;
- you need a variable to store the number of days each video was rented;
- you need a variable to count the total number of days $3.00 videos were rented;
- finally, you need a variable to count the total number of days $2.00 videos were rented.
一旦你認識到你需要這些數據,那么你就很容易想出如何處理這些數據:比如,你知道租金2元/天的DVD的總收入=所有租金為2元/天DVD的出租天數之和*2;類似的也可以計算出租金3元/天的DVD的總收入。你也會理解這個“代表DVD的租金的代號”,這個變量的用處是,當用戶輸入某個DVD出租的天數時,決定哪個變量會被操作。在你的程序中你需要一個循環結構。
Once you realize you need these variables, you can easily imagine how to translate them in terms of each other: for example, you know the total amount of revenue is the number of days videos at $2.00 were rented times $2.00; in similar fashion, you know the relationship for $3.00 a day videos. You should understand that the transaction 'code' determines which variables are manipulated when the user inputs the number of days a specific video was rented (for example, whether to add to the count of days for $2.00 videos or $3.00 videos). You'll probably need a loop in your program (although you can't necessarily infer this from the variables).
程序的代碼有可能會像下面那樣:
The code might look as follows:
3 int main()
4 {
5 int total_dollars = 0;
6 int total_days_at_3_dollars = 0;
7 int total_days_at_2_dollars = 0;
8 int transaction_code = 0;
9 int days_for_one_video = 0;
10 do
11 {
12 if(transaction_code==2)
13 total_days_at_2_dollars+=days_for_one_video;
14 if(transaction_code==3)
15 total_days_at_3_dollars+=days_for_one_video;
16 cout<<"Please enter a transaction code and number of days a video was rented: ";
17 cin>>transaction_code>>days_for_one_video;
18 }while(transaction_code!=0)
19 return 0;
20 }
我希望,你現在已經有了一個基本的思路,在寫代碼之前,應該如何安排你的程序的結構。
Hopefully, you now have a basic idea of how to lay out your program structure in your mind before you begin to write code.