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

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;



相关文章:
Pascal数组习题
Pascal数组习题_学科竞赛_高中教育_教育专区。适用于想要参加NOIP的中学阶段学生,...14. 求 n*n 数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小 ...
pascal数组习题
pascal-多维数组 5页 免费 PASCAL习题 30页 免费 ...1.编写程序,输入 5 个数字,输出最大、最小值、...Photoshop的抠图技巧分析©2014 Baidu 使用百度前必读...
pascal语言知识入门_小学计算机_教学视频大全
学习目标 freepascal软件的使用;pascal的简单语句;选择结构程序设计;循环结构程序设计;数组和字符串;函数与过程等 讲师信息 非主流IT民工 信息学竞赛教练 目录...
PASCAL实例教程
Pascal 的自定义数据类型 第一节 数组与子界类型 ...仔细观察题中的示例,用数学方法归纳可得出 X=N*(...[例 2.2] 读入三个不同的数,编程按由小到大的...
pascal 数组部分测试卷1
5、将 a 数组中的第一个元素移到最后,其他元素依次上移一个位 数组中的第...然后按大的在先小的 在后顺序输出.见 在后顺序输出 见 e88 program e88; ...
pascal语言语法大全
2. pascal 语法保留字:and,array,begin,case,const...(procedure)、函数(function)、方法 (method)、单元...的计算机系统允许的最 大整型数,而最小的整型数即...
DELPHI编程技巧集锦(4)
DELPHI编程技巧集锦(4) 编程技巧集锦( ) 编程技巧集锦董占山 (中国农科院棉花...end; B 安全的数组循环 一个 Object Pascal 数组是一组同类元素的有序集合。...
pascal教程
Pascal 的自定义数据类型 第一节 数组与子界类型 ...仔细观察题中的示例,用数学方法归纳可得出 X=N*(...发现 Y 值比 X 小一个 N 值,即 Y=X—N; (...
pascal 习题 完善程序
pascal 习题 完善程序_IT/计算机_专业资料。pascal...在 n 个元素的集合 S 中,找最大和最小元素(设...[程序] program wsh; type data = array[1..256...
Pascal教程
程序中 Pi 是 Pascal 提供的标准函数,它返回圆周率...发现 Y 值比 X 小一个 N 值,即 Y=X—N; ...②定义由8个元素组成的数组(NAME),元素类型为字符串...
更多相关标签: