Transcript 第一章 電腦發展簡史
CA083/CA093 計算機概論 第十三章 演算法與程式語言 13-1 演算法與流程圖 13-2 常見的排序 / 搜尋演算法 13-3 程式語言簡介 啟芳出版社 回目錄頁 13-1 演算法與流程圖 程式(program)是一連串邏輯性指令的集合, 程式設計師針對各種問題想出適當的處理流程 ,並將之寫成一系列有順序的指令,電腦依照 這些指令的步驟逐一執行計算或資料處理,因 而解決問題或產生我們所需的合理結果,其中 「一系列有順序的指令」指的便是「程式」。 啟芳出版社 -2- 回目錄頁 13-1.1 演算法 由於電腦只能依照「程式」指示逐步完成指定 的工作,因此在設計程式時必須先將問題分解 成許多小步驟,然後再依一定的次序逐步執行 ,而這個描述問題解決程序的方法便稱做演算 法(algorithm)。 啟芳出版社 -3- 回目錄頁 13-1.1 演算法 演算法的基本原則 1. 執行步驟是有次序的。 2. 每一步驟必須清楚描述。 3. 每一步驟必須確實可行 4. 能在有限的步驟內完成。 啟芳出版社 -4- 回目錄頁 13-1.1 演算法 想一想,「計算十個整數之平均值」應該如何 做? 求一列整數的平均值是以該列整數的和除 以該列整數之個數。 使用者必須逐一輸入10個整數。 電腦逐一加總10個整數。 將這10個整數的總和除以10,如此便可求 得平均值。 啟芳出版社 -5- 回目錄頁 13-1.1 演算法(承上頁) 將上頁方法寫成演算法後可得: 第一步:程式開始。 第二步:令 Sum = 0 , Number = 0(Sum 代表各 整數的總和, Number 則代表目前已經加總 過的整數個數)。 第三步:讀入一個整數。 第四步:將這個整數的值加入Sum 內(計算總和)。 第五步:將 Number 值加 1(因為多讀入一個整數)。 啟芳出版社 -6- 回目錄頁 13-1.1 演算法(承上頁) 第六步:判斷是否已讀入10 個整數了?(Number 是 否等於10?)。若已經讀入10個整數則跳到 第七步。否則跳到第三步(繼續處理下一個 整數)。 第七步:計算平均值(亦即將Sum 除以10)。 第八步:印出平均值。 第九步:程式結束。 啟芳出版社 -7- 回目錄頁 13-1.2 流程圖與虛擬碼 •流程圖 雖然我們可以用演算法來說明解決問題的步驟 ,但是隨著問題的複雜性逐漸增加,光以演算 法來說明解決問題的流程似乎不夠清楚,這時 便可配合流程圖來增加演算法的說明性。 啟芳出版社 -8- 回目錄頁 13-1.2 流程圖與虛擬碼 •流程圖 所謂流程圖(flowchart)是指以各種特定的圖 形符號來表示演算法,藉以說明處理方法與步 驟的一種特定圖表。 啟芳出版社 -9- 回目錄頁 13-1.2 流程圖與虛擬碼 •流程圖常用符號一覽表 啟芳出版社 -10- 回目錄頁 13-1.2 流程圖與虛擬碼 •流程圖常用符號一覽表 啟芳出版社 -11- 回目錄頁 13-1.2 流程圖與虛擬碼 「計算10個整數之平均值」 的流程圖。 啟芳出版社 -12- 回目錄頁 13-1.2 流程圖與虛擬碼 •「求三角形面積」的演算法 •與流程圖 演算法: 1.程式開始。 2.輸入三角形的底和高。 3.計算三角形的面積 = ( 底×高 ) ÷ 2。 4.輸出計算後所得三角形的 面積。 5.程式結束。 啟芳出版社 -13- 回目錄頁 13-1.2 流程圖與虛擬碼 •虛擬碼 虛擬碼(pseudocode)是一種介於一般語言與程 式語言之間的語言碼。有些程式設計師不喜歡 繪製流程圖,因此用一種很像程式碼的虛擬碼 來表示程式的邏輯架構與執行程序。 啟芳出版社 -14- 回目錄頁 13-1.2 流程圖與虛擬碼 •虛擬碼 虛擬碼多半使用英文來表示,不過若使用中文 也沒什麼不可以,虛擬碼並不能真的放到電腦 中去執行,因為電腦看不懂這些虛擬碼。 啟芳出版社 -15- 回目錄頁 13-1.2 流程圖與虛擬碼 •虛擬碼 啟芳出版社 -16- 回目錄頁 13-2 常見的排序 / 搜尋演算法 所謂排序(sorting)是指將一系列資料依特定順 序由小至大(升冪排列)或由大到小(降冪排 列)排列的動作。 搜尋(searching)則是在一堆資料中找出特定 資料的方法。 啟芳出版社 -17- 回目錄頁 13-2 常見的排序 / 搜尋演算法 應該注意的是,在電腦裡的記憶體中,資料只 能互相「比較」和「交換」,並不能像我們在 玩撲克牌的方式從中間直接插入牌,或將一堆 牌向前或向後移動。 啟芳出版社 -18- 回目錄頁 13-2.1 排序演算法 •選擇排序法 假若有 N 個元素想利用選擇排序法由小到大排 序,其方法如下: 1. 拿第一個元素依序與其餘各元素作比 較,若是第一個元素大於後面的元素則 兩個元素對調。如此當所有元素與第一 個元素比較完畢後,第一個元素便存放 著最小值。 啟芳出版社 -19- 回目錄頁 13-2.1 排序演算法(承上頁) •選擇排序法 2. 再拿資料列中第二個元素與其餘N-2 個元素作比較,以此類推直到拿第N-1 個元素與第N 個元素作完比較後,陣列 中的元素便完成由小至大的排序工作。 啟芳出版社 -20- 回目錄頁 13-2.1 排序演算法 •選擇排序法 利用「選擇排序法」由小到大排序下列資料:7 、3 、6 、10 、2 。 啟芳出版社 -21- 回目錄頁 13-2.1 排序演算法 (承上頁) •選擇排序法 啟芳出版社 -22- 回目錄頁 13-2.1 排序演算法 (承上頁) •選擇排序法 啟芳出版社 -23- 回目錄頁 13-2.1 排序演算法 (承上頁) •選擇排序法 啟芳出版社 -24- 回目錄頁 13-2.1 排序演算法 •氣泡排序法 假若有N個元素想利用氣泡排序法由小到大排序 ,其方法如下: 1. 自第一筆資料開始,依序將所有資料 與次一筆資料比較大小,如果次一筆資 料較小則將二筆資料交換。 啟芳出版社 -25- 回目錄頁 13-2.1 排序演算法 (承上頁) •氣泡排序法 2. 經過N-1次的處理之後,資料小的必會 排列在資料列前端,而資料大的便會排 在資料列末端。 啟芳出版社 -26- 回目錄頁 13-2.1 排序演算法 •氣泡排序法 利用「氣泡排序法」由小到大排序下列資料:7 、3 、6 、10 、2 。 啟芳出版社 -27- 回目錄頁 13-2.1 排序演算法 (承上頁) •氣泡排序法 啟芳出版社 -28- 回目錄頁 13-2.1 排序演算法 (承上頁) •氣泡排序法 啟芳出版社 -29- 回目錄頁 13-2.1 排序演算法 (承上頁) •氣泡排序法 啟芳出版社 -30- 回目錄頁 13-2.2 搜尋演算法 •循序搜尋法 循序搜尋法原理如下: 1. 由資料的第一個元素開始,往後逐一 和欲尋找的項目相比較,如果比較後的 結果相同就表示找到了。 2. 如果從第一個元素到最後一個元素都 未能找到相同的項目,那麼該項搜尋工 作便算失敗。 啟芳出版社 -31- 回目錄頁 13-2.2 搜尋演算法 •二分搜尋法 使用二分搜尋法(binary search)之前,必須確 定所搜尋的元素已經排序成遞增或遞減的順序 ,其步驟如下: 1. 開始時,先將欲搜尋的數值與中間元 素相比較,如果中間元素等於所欲搜尋 的數值時,則搜尋成功並停止搜尋。 啟芳出版社 -32- 回目錄頁 13-2.2 搜尋演算法 (承上頁) •二分搜尋法 2. 如果所欲搜尋的數值小於中間元素時 ,則將搜尋範圍縮小為中間元素的前半 部,繼續利用二分搜尋法搜尋。 3. 如果所欲搜尋的數值大於中間元素時 ,則將搜尋範圍縮小為中間元素的後半 部,然後繼續利用二分搜尋法搜尋。 啟芳出版社 -33- 回目錄頁 13-2.2 搜尋演算法 (承上頁) •二分搜尋法 4. 重複以上步驟直到找到所欲搜尋的數 值或沒有搜尋範圍為止。 啟芳出版社 -34- 回目錄頁 13-2.2 搜尋演算法 •二分搜尋法 假設有八個元素由小而大依序為 2 、5 、9 、13 、15 、22 、26 、30 ,請利用二分搜尋法來搜 尋數值2。 啟芳出版社 -35- 回目錄頁 13-2.2 搜尋演算法 (承上頁) •二分搜尋法 啟芳出版社 -36- 回目錄頁 13-2.2 搜尋演算法 (承上頁) •二分搜尋法 啟芳出版社 -37- 回目錄頁 13-3 程式語言簡介 程式語言(programming language)是指使用者 用來與電腦溝通之文字記號所形成的集合,一 旦我們找到解決某種問題的演算法,下一步便 是以合適的程式語言將之表達為電腦能夠接受 的形式,並藉此指揮電腦處理資料或解決問題 。 啟芳出版社 -38- 回目錄頁 13-3.1 低階語言 低階語言(low-level language)指的是會隨著使 用的CPU架構不同(如X86或Mac)而有顯著的 差異的語言,包括機器語言與組合語言,其優 點是執行速度快,不過編寫程式較困難且程式 碼不易理解。 啟芳出版社 -39- 回目錄頁 13-3.1 低階語言 •第一代語言:機器語言 機器語言(machine language)是電腦所能處理 最直接的語言,不同處理器類型的電腦只適用 一種特別為該處理器之指令集所設計的機器語 言。 所有的程式在執行前都必須被轉換成機器語言 。 啟芳出版社 -40- 回目錄頁 13-3.1 低階語言 •第二代語言:組合語言 由於機器語言對程式設計師來說並不方便,因 此後來設計出一種使用英文簡寫來代表各種基 本運算的語言。 例如:以ADD 代表「加」,以SUB 代表「減」 這些以英文簡寫所構成的語言叫做組合語言( assembly language)。 啟芳出版社 -41- 回目錄頁 13-3.1 低階語言 •第二代語言:組合語言 組合語言必須先被翻譯成機器語言後才能被電 腦接受,擔任這個翻譯工作的程式叫做組譯器 (assembler)。 啟芳出版社 -42- 回目錄頁 13-3.2 高階語言 高階語言(high-level language)的語法已經接 近人類日常生活用語,簡單易懂,在高階語言 中,一個命令就可以代表數個組合語言中的命 令。 啟芳出版社 -43- 回目錄頁 13-3.2 高階語言 •第三代語言:程序式語言 程序式語言(procedural language)將重心放在 解決問題的程序,設計師必須仔細思考各步驟 的細節並進行控制, 例如:FORTRAN、COBOL、BASIC、C、 Pascal...等都是程序式語言的代表例子。 啟芳出版社 -44- 回目錄頁 延伸學習 •常見的第三代語言 啟芳出版社 -45- 回目錄頁 延伸學習(承上頁) •常見的第三代語言 啟芳出版社 -46- 回目錄頁 13-3.2 高階語言 •第四代語言:資料庫查詢語言 第四代語言(4th Generation Language,簡稱 4GL)是使用者導向的語言,它和程序式程式 語言最大的不同,在於它是以程式的「目的」 為設計重心,而非如第三代語言以「過程」為 法則。 啟芳出版社 -47- 回目錄頁 13-3.2 高階語言 •第四代語言:資料庫查詢語言 4GL比第三代語言缺少了控制性及設計彈性, 執行速度也比較慢,至今在資料庫處理的領域 裡, 4GL 仍然保有一片天空。 例如:結構化查詢語言(structured query language , SQL)就是典型的代表實例。 啟芳出版社 -48- 回目錄頁 13-3.2 高階語言 •第五代語言:人工智慧語言 第五代程式語言的發展目標為利用人工智慧技 術,使其接近人類使用的自然語言,且能容忍 少量的拼字及語法錯誤,就有如我們在和電腦 對談一般。 啟芳出版社 -49- 回目錄頁 13-3.2 高階語言 •第五代語言:人工智慧語言 目前人工智慧語言仍處於發展中的階段,現今 開發的產品則多是以LISP或Prolog語言為基礎, 專為特定領域設計的知識庫系統(如醫療、財 經),或是智慧型的資料庫存取工具。 啟芳出版社 -50- 回目錄頁 延伸學習 電腦不能直接接受以高階語言所寫成的程式, 必須先轉換成機器語言後才能執行,而依轉換 工具不同可分為: 直譯器 編譯器 啟芳出版社 -51- 回目錄頁 延伸學習 •直譯器 啟芳出版社 -52- 回目錄頁 延伸學習 •編譯器 啟芳出版社 -53- 回目錄頁 延伸學習 •其他相關的程式開發工具 啟芳出版社 -54-