Presentation is loading. Please wait.

Presentation is loading. Please wait.

PASCAL语言 吉林大学计算机科学与技术学院.

Similar presentations


Presentation on theme: "PASCAL语言 吉林大学计算机科学与技术学院."— Presentation transcript:

1 PASCAL语言 吉林大学计算机科学与技术学院

2 第六章 数组

3 三、 IF语句 一、一维数组 类型定义 TYPE 类型标识符=ARRAY〔下标类型〕OF 成分类型 下标类型 成分类型
规定数组类型分量的个数、分量的排列次序、下标的数据类型;下标数据类型应该是顺序类型的有穷集合,如字符型、布尔型、枚举和子界,但是整型和实型不可以,一般子界类型较多;下标类型一定要用方括号括起来。 成分类型 数组分量的数据类型,可以是简单类型,也可以是结构类型,但不应该为文件类型。

4 类型定义举例 变量定义举例 TYPE number=1..20; ax=(one,two); bx=(a,b,c);
student=ARRAY[number] OF integer; ma=ARRAY[ax] OF real; na=ARRAY[bx] OF char; sw=ARRAY[boolean] OF ax; 变量定义举例 VAR a:number; b,c:student; d:ma; e:sw;

5 二、 数组元素 B[1] B[2] B[3] B[4] B[20] 3 8 11 -23 1001

6 程序举例 Program ex(input,output); type number=1..10;
student=array[number] of integer; var i:integer; num:student; begin for i:=1 to 10 do readln(num[i]); write(num[i]:4); end.

7 Var a,b,c:array[1..20] of integer; 提倡合并说明
数组注意事项 三、 IF语句 数组元素个数固定,不允许在执行中修改 Var a,b,c:array[1..20] of integer; 提倡合并说明 不允许整体操作;必须逐个处理分量 数组分量可以随机访问; 下标可以是合法表达式,但不能越界

8 三、 IF语句 引入数组的意义 减少了每个分量确定标识符的书写量 可以批量处理空间

9 程序举例 3 结束 9 5 18 2 开始

10 PROCEDURE sortofup ( VAR a:typeofa ) ;
VAR i,r : integer ; flag : Boolean ; BEGIN flag := ture ; WHILE flag DO flag := false ; FOR i:=1 TO n-1 DO IF a[i] < a[i+1] THEN r := a[i] ; a[i] := a[i+1] ; a[i+1] := r ; flag:=ture END;

11 PROGRAM fup (input,output ) ;
CONST n=100; TYPE typeofa=array[1..n] of integer; VAR k: integer ; b:typeofa; … …. BEGIN for k:=1 to n do readln(b[k]); sortofup(b); for k:=1 to n do write(b[k]); writeln; END;

12 例子中的几个问题 数组变量做参数类型必须一致 P ) 值参数与变量参数 变量之间直接赋值

13 三、 IF语句 三、二维数组 类型定义 TYPE 下标类型 成分类型 类型标识符=ARRAY[下标类型1] OF
联合规定数组类型分量的个数、分量的排列次序、下标的数据类型;下标数据类型应该是顺序类型的有穷集合,如字符型、布尔型、枚举和子界,但是整型和实型不可以,一般子界类型较多;下标类型一定要用方括号括起来;下标类型1和2可以不同。 成分类型 数组分量的数据类型,可以是简单类型,也可以是结构类型,但不应该为文件类型。

14 类型定义举例 变量定义举例 TYPE student=ARRAY[1..5] OF ARRAY[1..6] OF integer; TYPE
student=ARRAY[1..5,1..6] OF integer; 变量定义举例 VAR a:student;

15 数组元素引用 a[1][1],a[1][2],a[1][3],a[1][4],a[1][5],a[1][6];
。。。 。。。 a[5][1],a[5][2],a[5][3],a[5][4],a[5][5],a[5][6]; a[1,1],a[1,2],a[1,3],a[1,4],a[1,5],a[1,6]; a[2,1],a[2,2],a[2,3],a[2,4],a[2,5],a[2,6]; 。。。 。。。 a[5,1],a[5,2],a[5,3],a[5,4],a[5,5],a[5,6];

16 二维数组变量举例 11 12 13 14 15 16 21 22 23 24 25 26 31 32 33 34 35 36 41 42 43 44 45 46 51 52 53 54 55 56

17 程序举例

18 CONST m = 10 ; n = 20 ;p = 30 ;   TYPE atypematrix = ARRAY [ 1..m , 1..p ] OF real ; btypematrix = ARRAY [ 1..p , 1..n ] OF real ; ctypematrix = ARRAY [ 1..m , 1..n ] OF real ; PROCEDURE matrixproduct ( VAR a:atypematrix ; VAR b:btypematrix ; VAR c:ctypematrix ) ; VAR e : real ; i , j , k : integer ; BEGIN FOR i:=1 TO m DO FOR j:=1 TO n DO e := 0 ; FOR k:=1 TO p DO e := e + a[i,k] * b[k,j] ; c[i,j] := e END

19 三、 IF语句 四、多维数组 类型定义 TYPE 类型标识符=ARRAY[下标类型1] OF ARRAY[下标类型2] OF
下标类型2, 下标类型3] OF 成分类型

20 定义举例 TYPE student=ARRAY[1..5,1..6,1..3] OF integer;
a[5,1,1],a[5,1,2],a[5,1,3] a[5,2,1],a[5,2,2],a[5,2,3] …… ……. a[5,6,1],a[5,6,2],a[5,6,3] VAR a:student; a[2,1,1],a[2,1,2],a[2,1,3] a[2,2,1],a[2,2,2],a[2,2,3] …… ……. a[2,6,1],a[2,6,2],a[2,6,3] a[1,1,1],a[1,1,2],a[1,1,3] a[1,2,1],a[1,2,2],a[1,2,3] …… ……. a[1,6,1],a[1,6,2],a[1,6,3]

21 三、 IF语句 五、紧缩数组 TYPE 1)牺牲时间换取空间的产物。 2)时间换取空间->空间换取时间 程序员的方便
类型标识符=PACKED ARRAY[下标类型] OF 成分类型 1)如果数组的成分是构造类型,则只有当该数组类型及成分类型均被指明为紧缩的,该存储才有效。 2)紧缩数组与非紧缩数组之间的整体赋值不可以,成员之间可以。(当然类型相同的情况下) 1)牺牲时间换取空间的产物。 2)时间换取空间->空间换取时间 程序员的方便 3)因此不提倡使用紧缩数组。

22 三、 IF语句 六、字符串 字符串变量 TYPE 串类型=PACKED ARRAY[下标类型] OF CHAR;
字符串的概念与字符串常量。用‘ ’括起来的一组字符序列。 可以进行常量定义。 CONST first=‘Chinese’ Write(first); write(‘chinese’); 字符串变量 TYPE 串类型=PACKED ARRAY[下标类型] OF CHAR; 1)等长的字符串可以直接赋值。不等长不可以。 var a,b:array[1..10] of char; a:=‘ ’; b:=a; 2)可以进行write()输出。如:write(a); 超过规定域宽则截断

23 三、 IF语句 六、字符串 1)不同长度之间的字符串变量或者常量之间不允许赋值操作。
3)标准PASCAL规定不允许用read语句直接读入字符串。如:var a:array[1..3] of char;read(a); 必须用for i:=1 to 3 do read(a[i]); 4)TURBO PASCAL规定可以用string[n]的形式来定义字符串,如:type a=string[10];等价于:a=array[1..10] of char;但是string方式支持read语句。 5)可以比较大小。实际是比较第一个不同的字符。 1)不同长度之间的字符串变量或者常量之间不允许赋值操作。 2)不同长度之间的字符串变量或者常量之间不允许比较大小。

24 Program aaa(input,output);
Var letter:array[1..100] of char; I,j:0..100; ch:char; Begin i:=0; repeat read(ch); i:=i:+1; letter[i]:=ch; until ch=‘.’; j:=1; while(j<i) and (letter[j]=letter[i]) do begin j:=j+1; i:=i-1; end; write(letter); if j>=I then writeln(‘是回文’) else writeln(‘不是回文’); End.

25 Program aaa(input,output);
Type county=string[10]; Var a:array[1..10] of county; temp:county; I,j:integer; Begin for i:=1 to 10 do begin readln(a[i]); end; for i:=1 to 9 do for j:=i+1 to 10 do if a[i]>a[j] then begin temp:=a[j]; a[j]:=a[i]; temp:=a[i]; writeln(a[i]); End.

26


Download ppt "PASCAL语言 吉林大学计算机科学与技术学院."

Similar presentations


Ads by Google