Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 第十三章 Pascal 程式語言 陳維魁 博士 儒林圖書公司.

Similar presentations


Presentation on theme: "1 第十三章 Pascal 程式語言 陳維魁 博士 儒林圖書公司."— Presentation transcript:

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) 型態?


Download ppt "1 第十三章 Pascal 程式語言 陳維魁 博士 儒林圖書公司."

Similar presentations


Ads by Google