首頁>技術>

程式設計,顧名思義就是編寫程式。學習之前,要先弄明白什麼是程式?解決問題的步驟就是程式嗎?演算法和程式的關係是什麼?本課將一一給出答案。透過本課的學習,你將瞭解到程式及演算法的概念及其關係。

什麼是計算機程式?

程式是指完成某些事物的一種既定方式和過程,可以將程式看成是一系列動作的執行過程的描述。在百度百科中,計算機程式被定義為“一組指示計算機執行動作或做出判斷的指令,通常用某種程式設計語言編寫,運行於某種目標體系結構上。

在生活中,可以見到許多計算機程式例項。下面,我們看一個生活片段:

清晨六點十分,伴隨著準時而優美的起床鈴聲,我邁出宿舍,走進了第一餐廳。餐廳里人很多,沒有辦法,我只買了兩個包子做為我的早餐罷了。隨著我的餐卡在打卡機上輕輕掠過,六毛錢便不翼而飛了。當我走到超市的時候,突然感覺只吃包子是不是太單調了,於是在超市裡拿了一包早餐奶,但付錢的時候卻發現超市的收銀機壞掉了,沒奈何,我只得忍痛把剛拿到手的早餐奶又放了回去,真鬱悶!

在上面的生活片段中,我們能找出幾處計算機程式為我們生活服務的痕跡來呢?

● 餐廳打卡機

● 超市收銀機

前面關於計算機程式的定義提到了“計算機程式是一組執行動作或做出判斷的指令並且運行於某種目標體系結構上”。定義有點晦澀難懂,但是隻要我們結合實際執行的程式並稍微略加分析,就能夠做到了然於心。

首先考察(餐廳打卡機)

餐廳打卡機一般採用了射頻識別技術,“射頻識別(RFID)是一種無線通訊技術,可以透過無線電訊號識別特定目標並讀寫相關資料,而無需識別系統與特定目標之間建立機械或者光學接觸。”②

打卡機利用射頻識別技術將餐卡資訊讀取到打卡機,由打卡機的處理程式對讀取的資訊做進一步處理。打卡機中的處理程式就是計算機程式,它需要執行下述動作和指令完成一次打卡操作:

1) 接受輸入的餐費金額

2) 讀取卡內金額

3) 判斷卡內金額是否大於餐費金額

4) 如果卡內金額小於餐費金額,給出餘額不足提示

5) 如果卡內金額大於餐費金額,將卡內金額減去餐費金額後,回寫到卡內

文字描述其動作或流程不夠清晰或理解的話,我們可以用流程圖來描述打卡機程式的執行動作或流程:

圖 1 餐廳打卡機程式流程圖

採用流程圖描述打卡機程式的執行動作,是不是更直觀和清晰一些。

再來考察(超市收銀機)

超市收銀機的工作原理類似餐廳打卡機,也是採用射頻識別技術讀取商品條碼,獲取商品價格、名稱等資訊,並由收銀機內建的計算機程式對商品價格等資訊進行彙總處理,給出所購商品金額等資訊。其處理流程要比餐廳打卡機複雜一些,它需要執行下述動作和指令完成一次收費操作:

1) 讀取商品條碼

2) 獲取商品價格、名稱等資訊並顯示到收銀機螢幕上

3) 計算商品總金額

4) 等待操作員按鍵

5) 操作員按下“商品”按鍵,繼續讀取商品條碼

6) 操作員按下“等金額”或“找零”按鍵,錢櫃自動開啟

其流程圖描述如下:

圖 2 超市收銀機程式流程圖

從餐廳打卡機和超市收銀機的內建的程式可以看出,人們使用計算機,就是要利用計算機程式處理各種不同的問題,為了讓計算機能夠按照我們的意願去工作,人們在設計計算機時,為計算機提供了一套指令,其中的每一種指令對應著計算機能執行的一個基本動作,為讓計算機完成某項任務而編寫的指令序列就稱為計算機程式。

2、什麼是程式演算法?

我們知道,程式是用來解決問題的,是由多個步驟或過程組成的,這些步驟和過程就是解決問題的演算法。

同學們都下過象棋吧,圖3給出的是《江湖迷局》一書的一個殘局棋譜,棋譜給出了每一步棋的走法,按照棋譜規定的步驟行棋,就能破解這個殘局,棋譜給出的行棋規則就是演算法。

圖3 棋譜殘局

去超市購物時,人們經常會對需要購買的同類商品做價格的比較,例如商品A、商品B、商品C在同樣質量的情況下,人們會傾向於比較價格,優先購買價格便宜的商品,這個比較過程是在大腦進行的,比較的過程就是排序演算法,從三個數中找出最小的數。

圖4 超市購買貨物時進行價格比較

圖3的棋譜殘局需要走11手,就能破解殘局,圖4的價格排序也僅需要對3個數進行排序,在大腦比對一下數的大小就完成了。它們都是演算法,演算法有沒有明確的概念和特徵呢?

要想弄清楚演算法的概念和特徵。先看看演算法能給人們的生活帶來哪些幫助?前面的棋譜殘局和價格比對是生活中的演算法,可以幫助人們解決生活中的一些問題,讓我們變成象棋高手,或者買到最實惠的商品。

如果讓計算機執行演算法,會給人們帶來什麼幫助呢?在學習方面,把解方程的步驟輸入到計算機,可以幫助人們解方程;在工作方面,把英漢詞庫及檢索演算法輸入到計算機,可以幫助人們自動進行英漢詞語翻譯;在生活方面,把遊戲規則和演算法輸入到計算機,可以讓人們娛樂等等。計算機有了演算法,才有了大腦和靈魂,沒有演算法的計算機,只能是一臺機器。

為了讓計算機能夠完成前面所說的任務,就需要事先對各類問題進行分析,確定解決問題的具體方法和步驟。再編制好一組讓計算機執行的指令,交給計算機,讓計算機按人們指定的步驟有效地工作。這些具體的方法和步驟,其實就是一個問題的演算法。例如,讓計算機幫助我們解方程,就需要把解方程的步驟和方程引數輸入到計算機,計算機根據輸入的步驟和引數完成方程的求解。

嚴格來說,計算機程式是為讓計算機完成某項任務而編寫的指令序列,指令序列就是解決問題的演算法。

圖5 演算法的概念

前面理解了演算法的概念,再來看看演算法有哪些特徵。

演算法是由有限多個步驟組成的,它有下述兩個基本特徵:第一個特徵是每個步驟都明確地規定要執行何種操作;第二個特徵是每個步驟都可以被人或機器在有限的時間內完成。演算法除了上述兩個基本特徵外,還要具有第三個基本特徵:雖然有些步驟可能被反覆執行多次,但是在執行有限多次之後,就一定能夠得到問題的解答。

圖6 演算法的特徵

演算法比較抽象,下面講解一個實際的演算法案例,讓同學們對演算法有個感性認識。對一組無序的數字進行排序,比較經典的排序演算法就是氣泡排序。

3、氣泡排序演算法

氣泡排序是將一組數字多趟順序比較,一次比較兩個數字,如果他們的順序錯誤就把他們交換過來,小數或(大數)逐漸往上冒,當再沒有需要交換的數字時,說明該組數已經排序完成。

對下面的一組數用氣泡排序演算法,並按照從小到大的順序排序。

排序前的一組數,我們稱為原始數列,每兩個數進行一次比較,稱為一輪比較。

第一輪比較:23與34比較,23小於34,兩個數不用交換位置。

第二輪比較:34與5比較,因為34大於5,因此34和5交換位置。

第三輪比較:34與7比較,因為34大於7,因此34與7交換位置。

第四輪比較:比較34和56,因為34小於56,兩個數不用交換位置。

在前面的四輪比較中,從數列左側的第一個數開始,順序兩兩比較兩個數的大小,如果前面一個數比後面一個數大,就交換兩數的位置,直到數列的最後一個數比較完畢。

這四輪比較下來,稱為一趟比較。如果在該趟比較中,存在兩個數交換位置的情況,就需要進行下一趟比較,直到再沒有數字進行交換,演算法結束。

因為在第一趟比較中,存在兩數的位置交換,因此還需要進行第二趟的比較。

第二趟比較

第二趟比較也是從數列左側的第一個數開始,順序兩兩比較兩個數的大小。不過第二趟比較就不需要再比較數列右側的最後一個數了,因為在第一趟比較的過程中,該數列最大的數已經被交換到數列右側最後的一個位置了。

第一輪比較:比較23和5,因為23大於5,因此23和5交換位置。

第二輪比較:比較23和7,因為23大於7,因此23和7交換位置。

第三輪比較:比較23和24,因為23小於24,兩個數不用交換位置。

至此,第二趟比較完成。最後的一個數56就不用比較了,因為56在第一趟比較中就已經為自己找到了正確的位置。

從第三輪的比較結果來看,排序已經完成,每個數都自己找到了正確的位置。已經不需要再進行第三趟比較了。

4、 演算法和程式的關係

演算法是解決問題的步驟,在前面也談到了程式是執行過程的描述,那麼,演算法和程式是什麼關係呢?

先請同學們思考一個計算長方形面積的問題,並給出演算法。

第一步,設定num1和num2兩個變數,接收使用者輸入的長度和寬度,並存儲到num1和num2兩個變數;

第二步,判斷num1和num2是否大於0,如果大於0,繼續下一個步驟,否則提示使用者長度和寬度輸入錯誤,演算法結束;

第三步,計算num1和num2的乘積,並將乘積結果儲存到result變數;

第四步,顯示result變數的值到螢幕。

演算法非常簡單,四個步驟,如何讓計算機執行這個演算法呢?

實現演算法的虛擬碼:

Begin(演算法開始)     宣告  num1、num2;     輸入  num1、num2;     IF num1 <=0 || num2 <=0     {        Print(“輸入的長度和寬度不能小於0”);       退出程式     }     result = num1 * num2;     Print  result;End (演算法結束)

要讓計算機執行演算法,就必須要把演算法用程式語言編寫出來,如Java語言,如實現計算長方形面積演算法的虛擬碼,虛擬碼是一種演算法描述語言,可以很容易地轉換為程式語言,如Java、C語言等。可見,程式是演算法的實現,演算法透過某一種程式語言實現後,就是程式。

5、練習題

1、請列舉一些你在生活中經常使用的計算機程式。

2、計算機程式和演算法有什麼區別?

3、對下面的一組數字用氣泡排序演算法進行排序,請用文字詳細描述排序過程。

36,29,101,12,33

4、現實問題模擬:《停車場的看門人》

某大型停車場對於進入該場地的車輛有如下的規定:

(1)進入該停車場的車輛必須為客運車輛,貨運車輛謝絕入內。

(2)如果該車的乘員數量小於等於4人,則收費五元。

(3)如果該車的乘員數量大於4人,則收費八元。

作業要求:請根據該停車場的規定,用文字給出判斷進入該場的車輛是否符合規定,應該收費多少的演算法。

5、請用文字給出一個計算長方形面積問題的演算法。

要求:接受使用者輸入的長度和寬度,輸入的長度和寬度不能為零,如果為零,提示使用者重新輸入,最後將計算結果顯示到顯示器上。

14
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • DeepMind開源了新架構以改善深度學習系統中的長期記憶體