当前位置:首页 >> 学科竞赛 >>

Pascal中的数组技巧小集锦


Pascal 中的数组技巧小集锦
来源:万一 静态数组:普通意义上的数组,最常用 动态数组:数组的长度可以自由定义,适宜用于规定内存大小且内存 需要规划使用时的情况 变体数组:数组元素可以是任意类型,不受定义约束
【一】静态数组的定义方法

1. 标准方法: var MyArr: array[0..10] of Integer; 2. 可以

使用非 0 下标: var MyArr: array[9..10] of Integer; 函数沟通 3. 根据预定义类型来声明数组: type TMyArr = array[0..10] of Integer; var MyArr: TMyArr; //再定义静态数组 //先定义一个数组类型 //不能提倡,这样不容易与系统 //定义静态数组

4. 在非过程区可以直接赋值: var MyArr: array[0..2] of Integer = (11,22,33); 5. 多维数组: var MyArr: array[0..2, 0..2] of Integer; begin 使用 MyArr[1,2] := 100;

end; 6. 根据子界定义数组: type TRange = 0..10; var MyArr: array[TRange] of Integer; 7. 根据枚举定义数组: type TEnums = (Enum1,Enum2,Enum3); var MyArr: array[TEnums] of string; begin MyArr[Enum1] := '万一'; ShowMessage(MyArr[Enum1]); end; 8. 根据其他类型定义数组: var MyArr: array[Byte] of Char; begin MyArr[255] := #65; ShowMessage(MyArr[255]); //A end; *应尽量不使用内建类型,可以新建类型: type TNewByte = Byte; var MyArr: array[TNewByte] of Char; begin MyArr[255] := #65; ShowMessage(MyArr[255]); //A end; *也可以使用类型别名: type TChar = type Char; var MyArr: array[TChar] of Byte; begin //万一

MyArr['C'] := 255; ShowMessage(IntToStr(MyArr['C'])); end; 同时定义类型:

//255

type MyRec = record s: string; r: Real; b: Byte; end; var Arr1: array[0..100] of MyRec; Arr2: array[0..100] of record s: string; r: Real; b: Byte; end; ****可以直接这样定义 //压缩数组定义, 好像没

Arr3: packed array[0..100] of MyRec; 有区别?
【二】动态数组的使用

例 1: var StrArr: array of String; begin SetLength(StrArr,6); StrArr[0] := '万一'; //分配 6 个元素位置: 0-5 //动态数组的下界是 0 //分配空间后和静态数组一样使用 //动态数组定义时不与维数

ShowMessage(StrArr[0]); StrArr := nil; 会自释放 end; 例 2. 动态数组的引用:

//一般没必要手动释放, 动态数组离开作用域

var Arr1,Arr2: array of Integer; a: array[0..1] of Integer;

begin SetLength(Arr1,6); Arr1[5] := 100; Arr2 := Arr1; //Arr2 引用了 Arr1 //100 //当然 Arr2 维数也会

ShowMessage(IntToStr(Arr2[5]));

ShowMessage(IntToStr(Length(Arr2))); 是 6 ShowMessage(IntToStr(SizeOf(Arr1))); 个指针 ShowMessage(IntToStr(SizeOf(Arr2))); Arr2[5] := 99; 变这个就是改变那个 ShowMessage(IntToStr(Arr1[5])); Arr1 := nil; 在 ShowMessage(IntToStr(Arr2[5])); end; 例 3. 数组 Copy <1>: var Arr1,Arr2: array of Integer; begin SetLength(Arr1,6); Arr1[5] := 100; Arr2 := Copy(Arr1); Arr2[5] := 99; //数组 Copy //99

//4, 其实动态数组是 //4

//现在它们指向同一个数组, 改 //99

//释放其中一个指针, 数组继续存

//改变 Arr2 不再影响 Arr1

ShowMessage(IntToStr(Arr1[5]-Arr2[5])); //1 SetLength(Arr1,7); ShowMessage(IntToStr(Length(Arr1))); //7 ShowMessage(IntToStr(Length(Arr2))); end; 例 4. 数组 Copy <2>: var Arr1,Arr2: array of Integer; //6, 没有一点牵扯了

i: Integer; begin SetLength(Arr1,6); for i := Low(Arr1) to High(Arr1) do Arr1[i] := i+1; Arr2 := Copy(Arr1,1,3); //只 Copy 第 2..4 个元素 //2, 现在 Arr2[0] 和 //给每个元素赋值

ShowMessage(IntToStr(Arr1[1])); Arr1[1] 的值是一样的 ShowMessage(IntToStr(Arr2[0]));

//2 //6, 维数肯定不一样 //3

ShowMessage(IntToStr(Length(Arr1))); 了 ShowMessage(IntToStr(Length(Arr2))); end; 例 5. 动态多维数组: var Arr: array of array of Integer; begin SetLength(Arr,5,5); Arr[0,3] := 100; //分配空间 //赋值

//定义多维数组

ShowMessage(IntToStr(Arr[0,3])); end; 例 6. 另类建立:

//取值

var Arr: array of Integer; begin Arr := varArrayCreate([0,3],varInteger); ShowMessage(IntToStr(Length(Arr))); //4 Arr := VarArrayOf([1,2,3,4]); ShowMessage(IntToStr(Arr[0])); //1

{这是给变体数组使用的,可能会有效率问题}

end;
【三】变体数组(

Variant

其他类型变量的数据类型)

var Arr: array[0..3] of Variant; begin Arr[0] := 123; Arr[1] := 'wy'; Arr[2] := True; Arr[3] := VarArrayOf([1,'wanyi',1.5]); 可以是变体数组 ShowMessage(Arr[0]); //123, 不需要转换 //变体数组的元素也

ShowMessage(Arr[1]); //wy ShowMessage (Arr[2]); //True ShowMessage(Arr[3][1]); //wanyi end;


相关文章:
数组典型例题及参考答案
个整数从大到小排序, 然后在已经排序后的数组中插入平均数(取整) ,保持数组的...例如: 在文本"It is good to program in PASCAL language."中,用 C 将 ...
数组练习题
数组练习题_学科竞赛_高中教育_教育专区。数组练习题 pascal 信息学奥赛数组...⑵ 在数组元素中,以下标为序,按顺序找到未曾找过的最小素数 minp,和它的位 ...
数组测试题目二解析
把这个下标号的元素安排在旁边 (相邻) ; ④重复步骤③的方法,安排其后的元素...Pascal 程序: Program Exam54; const name : array[1..8]of string {定义...
PHP数组常用函数集锦
PHP数组常用函数集锦_计算机软件及应用_IT/计算机_...在数组中检索 apple ,如果存在返回键名 array_key_...($arr); 由小到大的顺序排序(第二个参数为按...
数组练习题
PASCAL 语言数组下标的下界要大于等于零 2.设有说明 var a:array['a'..'z...数组中数的平均值 C)数组中数的最小值 B)数组中数的总和 D)数组中数的最...
数组练习题
PASCAL 语言数组下标的下界要大于等于零 2.设有说明 var a:array['a'..'z...数组中数的平均值 C)数组中数的最小值 B)数组中数的总和 D)数组中数的最...
数组练习
一个数组中的各元素类型可以不一样 c)数组的下标类型若为整型,则其上界一定要大于下界 d)pascal 语言数组下标的下界要大于等于零 2.设有说明 var a:array['a...
一维数组
第8讲 数组(pascal程序语... 16页 免费一​维​数​组 ...请大家注意上述程序中的几个小技巧,一个是 FOR N: =0 TO 50,共循环 51 ...
free pascal 数组必会的题目的解题思路
free pascal 数组必会的题目的解题思路_学科竞赛_初中教育_教育专区。数组必会...3、输出集合 m 的最小的 n 个数。集合中数据特点: (1)1∈m; (2)假设 ...
Pascal数组习题
Pascal数组习题_学科竞赛_高中教育_教育专区。适用于想要参加NOIP的中学阶段学生,...14. 求 n*n 数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小 ...
更多相关标签:
pascal数组 | pascal二维数组 | pascal数组赋值 | pascal数组定义 | pascal字符串数组 | pascal动态数组 | 树状数组pascal | pascal常量数组 |