Download presentation
Presentation is loading. Please wait.
1
1 第十三章 Pascal 程式語言 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
2
2 大綱 程式結構 運算子 資料型態 控制結構 副程式 參數傳遞 精選習題
3
3 簡介 1975 年由 IBM 公司贊助製作而成 命名是為了紀念法國數學家 Blaise Pascal 採用區塊結構 (block structure) 提供集合 (set) 與記錄 (record) 等資料結構 儲存區配置法 全域變數採用靜態儲存區配置法 區域變數採用動態儲存區配置法 外顯式 (explicit) 變數型態 不論是變數、標記、程序或函數皆需經過宣告才可使用 語言處理器對註解不做處理,也就是說不會產生目的碼 註解以 "{ }" 或 "(* *)" 標示
4
4 程式結構 程式名稱是指程式設計師為程式所取的名稱 而程式本體 (program body) 程式宣告 可分為單元宣告、標記宣告、常數宣告、定義資料型 態、變數宣告及副程式宣告 程式敘述 代表程式要處理的動作
5
5 程式宣告 單元宣告 宣告使用的單元 (unit) 名稱 標記宣告 宣告使用的標記 (label) 名稱。在標準 Pascal 語言中標記 只能以數字表示,且最多只有四位數,但 Turbo Pascal 中則同時允許數字或文字做為標記 常數宣告 定義程式中使用到的常數 (constant) 名稱及其相對應的 值。如: const PI=3.14; 定義資料型態 利用 “type” 敘述使用者可自行定義一個新的資料型態
6
6 程式宣告 變數宣告 變數皆必須經宣告後才可以使用而變數即是在此區宣 告 例: var a : integer; b : student; 此處宣告了二個變數分別是 a 與 b ,其中 a 宣告為整 數資料型態,而 b 則宣告為使用者自行定義的 “student” 資料型態。 副程式宣告 的副程式分為程序 (procedure) 和函數 (function) 二類
7
7 程式範例 1. program structure; 2. label ErrInput,Ok; 3. const 4. no=5; 5.type 6. StudentData=array[1..no]of string[10]; 7. var 8. student:StudentData; 9. i:integer; 10. procedure output; 11. var 12. i:integer; 13. begin 14. writeln('The student''s name is as follows: '); 15. for i:=1 to no do 16. write(student[i],' ':3) 17.end; 18.begin 19.for i:=1 to no do begin 20.write('Please enter the ', i, ' student''s name '); 21.readln(student[i]); 22.if student[i]=' ' then goto ErrInput 23.end; 24.output; 25.goto Ok; 26.ErrInput:writeln('Student''s name can not be empty string '); 27.Ok: 28.writeln 29.end.
8
8 運算子 在寫作程式時,常用的運算子有三類 算術運算子 關係運算子 邏輯運算子 在計算時,這三類運算子的運算優先順序 算術運算子 > 關係運算子 > 邏輯運算子
9
9 算術運算子 運算子意義範例結果 + 加法 10+414 - 減法 10-46 * 乘法 10*440 / 除法 10/42.5 div 除法 ( 取商 ) 10 div 42 mod 除法 ( 取餘 ) 10 mod 42
10
10 關係運算子 運算子意義範例結果 < 小於 4<10T <= 小於等於 4<=10T > 大於 10>4T >= 大於等於 10>=4T = 等於 10 =10T <> 不等於 10 <> 4T
11
11 邏輯運算子 運算子意義範例 not 否 not A and 及 A and B or 或 A or B
12
12 資料型態 整數 實數 布林值 字元 列舉式資料型態 子範圍 指標 陣列 記錄 集合 檔案
13
13 整數 Byte : 長度: 1 byte 範圍: 0~255 ShortInt : 長度: 1 byte 範圍: -128~127 Word : 長度: 2 bytes 範圍: 0~65535 Integer : 長度: 2 bytes 範圍: -32768 ~ 32767 LongInt : 長度: 4 bytes 範圍: -2147483648 ~ 2147483647
14
14 實數 Real 長度為 4 bytes Single 長度為 4 bytes Double 長度為 8 bytes Extended 長度為 10 bytes Copm 長度為 8 bytes
15
15 布林型態 布林型態有二種 真 (true) 假 (false)
16
16 字元資料型態 字元資料型態佔用一個位元組空間 宣告方式如下 var 變數名稱 : char;
17
17 字元資料型態 實例 1. program ch1; 2. var 3. ch : char; 4. num, value, code, sum : integer; 5. begin 6. write(′Please enter an integer string --->′); 7. sum:=0; 8. while not eoln do begin 9. read(ch); 10. if ch ′′then begin 11. num:=num+1; 12. val(ch, value, code); 13. sum := sum + value 14. end{of if} 15. end;{of while} 16. readln; 17. writeln( ‘ num= ’, num, ‘ sum= ’, sum); 18. end. 輸入: Please enter an integer string ---> 12345 輸出: num=5 sum=15
18
18 列舉式資料型態 列舉式資料型態 將所需的資料一一的定義與列舉出來 如 Type Days = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
19
19 列舉式資料型態 實例 1. program enum; 2. type 3. Days = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); 4. var 5. I : Days; 6. sum, val : integer; 7. begin 8. sum := 0; 9. adder := 2; 10. for I := Sunday to Saturday do 11. sum := sum + adder; 12. writeln(′sum=′,sum) 13. end. 利用列舉式資料型態 I 作為 for loop 的控制變數,故迴圈敘述會執行 7 次, 因此 sum=14
20
20 子範圍 子範圍是指根據列舉式資料型態之定義, 擷取其一部份即成子範圍 如, type Days = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); type LikeDays = Sunday..Tuesday;
21
21 指標 指標的宣告範例如下 type node=^integer; var ptr:node; “ptr” 代表位址,而 “ptr^” 才代表真正的內容 指標的內容可為位址或 nil Pascal 語言提供了二個指標函數供程式設計師使用 第一個是 “new( )” ,其作用是配置新的記憶體空間 第二個是 “dispose( )” 其作用是釋放記憶體空間 指標變數為不具名變數 (anonymous variable) ,指標變數的 生命週期由使用者控制,也就是說利用 new() 命令來建立指 標變數,利用 dispose() 命令來結束指標變數之生命週期, 因此指標變數是一種動態變數 (dynamic variable)
22
22 結構性資料型態 字串 陣列 集合 記錄 檔案
23
23 字串 標準 Pascal 語言未提 供字串資料型態 Turbo Pascal 提供的 字串資料型態其宣 告方式如下: var 變數名稱 : string[ 字串長度 ]; 介紹一個實際的範例如下: 1. program stringl; 2. var 3. str : string 〔 20 〕 ; 4. begin 5. str :=′Happy New Year′; 6. insert(′Pig′, str, 6); 7. writeln(′String=′, str); 8. delete(str, 6, 4); 9. writeln(′String=′, str) 10. end. 輸出: String = Happy Pig New Year String = Happy New Year
24
24 陣列 陣列需利用連續的記憶體空間來存放其元素 陣列之宣告方式 一維陣列 var ArrayName : array[ 下限.. 上限 ] of 型態 ; 二維陣列 var ArrayName : array 〔下限 1.. 上限 1, 下限 2.. 上限 2 〕 of 型態 ; 三維陣列 var ArrayName : array [ 下限 1.. 上限 1, 下限 2.. 上限 2, 下限 3.. 上限 3] of 型態 ; 若為四維或更高維度之陣列,其作法與三維陣列類似
25
25 集合 集合資料型態代表資料項目的聚集 集合中元素的順序並無意義 宣告方式有以下二種 將所有元素列舉出來 type animal=[’Dog’,’Pig’,’Cat,’Monkey’]; 標示元素範圍 type animal=[‘A’..‘Z’];
26
26 集合 集合資料型態所提供的運算子有以下四種 “+” 代表 “ 聯集 ” 運算 “-” 代表 “ 差集 ” 運算 “*” 代表 “ 交集 ” 運算 “in” 代表 “ 屬於 ” 運算 空集合以 “ 〔〕 ” 表示
27
27 記錄 記錄宣告方式如下 type 記錄名稱 = record 欄位名稱 1 : 型態 1; 欄位名稱 2 : 型態 2;.... 欄位名稱 n : 型態 n end; 範例 type StudentData = record Name : string 〔 20 〕 ; Id : integer; Score : integer end;
28
28 檔案 檔案的宣告方式如下 type 檔案定義名稱 = File of 型態 ; var 檔案變數名稱 : 檔案定義名稱 ; 或 var 檔案變數名稱 : File of 型態 ; 如, type Filetype = File of char; var V6 : FileType; 或 var V6 : File of char; Pascal 語言以循序存取 (sequential access) 的方式對檔案中的資料做 處理,並未支援隨機存取 (random access)
29
29 常用的檔案處理函數 reset( ) 開啟一個已經存在的檔案作讀取資料之用。 語法為 reset ( 檔名 ); rewrite( ) 開啟一個檔案 ( 若不存在則 create) 作寫入資料之用 語法為 rewrite( 檔名 ); assign( ) 將實體檔案名稱指定給檔案變數,語法為 assign( 檔案變數, 實體檔案 名稱 ); close( ) 關閉一個已經開啟的檔案,語法為 close( 檔名 ); EOLN( ) 檢查是否到達檔案中一列的尾端,語法為 EOLN( 檔名 ); EOF( ) 檢查是否到達檔案尾端,語法為 EOF( 檔名 );
30
30 控制結構 基本控制結構共有三類 循序結構 (sequential structure) 敘述會按照先後順序來執行 選擇結構 (selection structure) 單路選擇 雙路選擇 多重選擇 反覆結構 (iteration structure) 前測迴路 後測迴路
31
31 單路選擇與雙路選擇結構 單路選擇 if then exp 雙路選擇 if then exp 1 else exp 2 當條件成立或不成立時,需執行的敘述超過一 行時 ( 即為複合敘述時 ) ,必需以 “begin..end” 加 以標示
32
32 多重選擇結構 多重選擇結構即為 case 結構 語法結構如下 case of : exp 1; : exp 2;.... [else exp N] end; 在以上的 case 結構中之 else 敘述不一定存在,若存 在則表示將處理所有未列舉出來的情況 Pascal 語言的 case 結構屬於內隱分歧 (implicit branch) 的控制結構
33
33 while loop 語法 while do begin 迴圈敘述 end; while 迴路屬於前測迴路 (PreTest Loop) 進入迴圈前先檢查條件是否成立 迴圈敘述可能一次也不會執行
34
34 sum=1+2+3+…+10 1 program while_loop; 2 var 3 i,sum:integer; 4 begin 5 i:=1; 6 sum:=0; 7 while(i<=10) do begin 8 sum:=sum+i; 9 i:=i+1 10 end; 11 writeln( ‘ 1+2+...+10= ’,sum) 12 end.
35
35 for loop Pascal 語言提供二類計數反覆敘述 for := to do begin 迴圈敘述 end; for := downto do begin 迴圈敘述 end;
36
36 sum=1+2+3+…+10 1 program for1; 2 var 3 i,sum:integer; 4 begin 5 sum:=0; 6 for i:=1 to 10 do 7 sum:=sum+i; 8 writeln( ’ 1+2+...+10= ’,sum) 9 end.
37
37 sum=1+2+3+…+10 1program for2; 2var 3i,sum:integer; 4begin 5sum:=0; 6for i:=10 downto 1 do 7sum:=sum+i; 8writeln( ’ 10+9+...1= ’,sum) 9end.
38
38 repeat until loop repeat 迴圈敘述 until ; repeat..until 迴路屬於後測迴路 (PostTest Loop) 離開迴圈時檢查條件是否成立 迴圈敘述至少會執行一次
39
39 副程式 副程式的執行模式 副程式的執行動作是因為呼叫程式呼叫了副程 式所引起 當呼叫程式呼叫副程式時會將程式的控制流程 轉移到副程式開始處 待副程式執行結束時會將程式的控制流程轉移 到呼叫程式中呼叫副程式敘述的下一個敘述 副程式執行時可改變其所處的環境的狀態
40
40 副程式 副程式的種類 程序 (procedure) 沒有傳回值 函式 (function) 函式與程序類似,最大的不同之處是函式會傳回 一個值 函式本身亦具有型態 函式也可作為運算式的一部分
41
41 副程式 副程式中宣告之變數為區域變數 領域 (scope) 為定義該區域變數之副程式段 範圍 (extend) 則為副程式段被呼叫時開始至副 程式段執行結束時為止 採靜態領域法 (static scoping) 來處理變數定 義問題
42
42 參數傳遞 Pascal 語言參數傳遞的方法分為二類 傳值呼叫法 (call by value) 內定參數傳遞法,型式參數不需做記號 傳址呼叫法 (call by reference) 型式參數需以 “var” 做記號
43
43 範例 program Exchange (Input, Output); var a, b: real; procedure swap (x : real; var y : real); var t : real; begin t := x; x := y; y := t; writeln (′x=′,x,′y=′,y) end; begin a:=3.5; b:=2.2; swap(a, b); writeln(′a=′,a,′b=′,b) end. 由 procedure swap (x : real ; var y : real) ;知 x 是以傳值呼叫法來傳 遞參數,而 y 則是以傳址呼叫法 來傳遞參數;結果: x = 2.2 , y = 3.5 及 a = 3.5 , b = 3.5 。
44
44 精選習題 Pascal 語言如何處理 dangling else 問題? 請說明常見的迴圈結構中之前測迴路與後測迴路 之意義各別為何?並請詳細描述前測迴路與後測 迴路中的迴圈敘述執行的最少次數為何? 何以 Pascal 程式要呼叫宣告在後面的程序 (procedure) 或函數 (function) 時,須要有前置宣告 (forward declaration) 在呼叫程序之前? 試問 C 語言和 Pascal 語言的 for 敘述有何不同?二 種語言不同設計的主要理由為何? 試寫出 Pascal 語言裡的結構化資料型態有那些? 試寫出 Pascal 語言裡的五種純量 (scalar) 型態?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.