第一章 電腦發展簡史

Download Report

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-