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

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常用技巧_IT/计算机_专业资料。[重要资料]关于 FP(Free Pascal)的一些非常...③ 求一个整数数组中的最小值 var a:array[1..Maxint]of longint; begin ...
pascal数组习题
pascal-多维数组 5页 免费 PASCAL习题 30页 免费 ...1.编写程序,输入 5 个数字,输出最大、最小值、...Photoshop的抠图技巧分析©2014 Baidu 使用百度前必读...
pascal-一维数组
下标 2] of <基类型>; {补充:Turbo Pascal 提供...在上程序中,a,b,c 三个数组类型完全一致, 它们...排序的算法有很多,其中选择排序是一种较简单的方法...
pascal常用函数
使用方法:在程序头用 Uses 语句加载 Math 库 例子...返回数组中的最小值 sum 原型:function sum(const ...PASCAL常用函数集锦 3页 免费 高中信息竞赛(Pascal...
pascal 数组部分测试卷1
5、将 a 数组中的第一个元素移到最后,其他元素依次上移一个位 数组中的第...然后按大的在先小的 在后顺序输出.见 在后顺序输出 见 e88 program e88; ...
pascal技巧
不论在任何一个循环语句中 执行了 break 的话, 马上...“end”后面是一个小圆点,标识着程序 结束,整个...PASCAL 使用的保留字有: AND ARRAY BEGIN CASE ...
PASCAL_Math库实用汇总
PASCAL_Math库实用汇总_理学_高等教育_教育专区。noip...使用方法:在程序头用 Uses 语句加载 Math 库 例子...返回数组中的最小值 sum 原型:function sum(const ...
PASCAL实例教程
Pascal 的自定义数据类型 第一节 数组与子界类型 ...仔细观察题中的示例,用数学方法归纳可得出 X=N*(...[例 2.2] 读入三个不同的数,编程按由小到大的...
pascal-多维数组
pascal-多维数组_IT/计算机_专业资料。pascal-多维数组第九课 多维数组 一、多维数组的定义 当一维数组元素的类型也是一维数组时, 便构成了二维数组。 二维数组定义...
PASCAL知识点小结 5
Pascal教程 81页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或...给数组所有元素赋值的运用:比如要对上面一维数组 a 全部清 0 时的使用方法: ...
更多相关标签: