delphi 数组定义.doc_第1页
delphi 数组定义.doc_第2页
delphi 数组定义.doc_第3页
delphi 数组定义.doc_第4页
delphi 数组定义.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在c语言中 有:a5=1,2,3,4,5 ;那么在 delphi中,这个数组的赋值该怎么写? 问题补充:下面有人说的对,我就是想在声明数组的时候赋初值,至于初值的内容你们不需要知道,我想知道的只是申明的时候赋值的格式,而不是通过一个过程去实现var a:=array1.5 of integer=(1,2,3,4,5)只有全局变量才能赋初始值,而且5个值都要赋满s:array1.264 of integer; s:=(1),(2),(2),(1),(1),(2),(2),(1),(2),(1),(1),(1),(1),(2),(2),(1),(1),(2),(1),(1),(2),(2),(1),(1),(2),(1),(1),(2),(2),(2),(1),(2),(1),(2),(1),(2),(2),(2),(2),(1),(2),(2),(1),(2),(1),(1),(2),(1),(2),(1),(1),(2),(1),(1),(1); s:=(122112221211111111111111222221212121212121212); 都显示错误哦;C语言可以的哦 静态数组的定义方法/1. 标准方法:var MyArr: array0.10 of Integer; /定义静态数组-/2. 可以使用非0下标:var MyArr: array9.10 of Integer; /不能提倡,这样不容易与系统函数沟通-/3. 根据预定义类型来声明数组:type TMyArr = array0.10 of Integer; /先定义一个数组类型var MyArr: TMyArr; /再定义静态数组-/4. 在非过程区可以直接赋值:var MyArr: array0.2 of Integer = (11,22,33);-/5. 多维数组:var MyArr: array0.2, 0.2 of Integer;begin /使用 MyArr1,2 := 100;end;-/6. 根据子界定义数组:type TRange = 0.10;var MyArr: arrayTRange of Integer;-/7. 根据枚举定义数组:type TEnums = (Enum1,Enum2,Enum3);var MyArr: arrayTEnums of string;begin MyArrEnum1 := 万一; ShowMessage(MyArrEnum1); /万一end;-/8. 根据其他类型定义数组:var MyArr: arrayByte of Char;begin MyArr255 := #65; ShowMessage(MyArr255); /Aend;/应尽量不使用内建类型,可以新建类型:type TNewByte = Byte;var MyArr: arrayTNewByte of Char;begin MyArr255 := #65; ShowMessage(MyArr255); /Aend;/也可以使用类型别名:type TChar = type Char;var MyArr: arrayTChar of Byte;begin MyArrC := 255; ShowMessage(IntToStr(MyArrC); /255end;/同时定义类型:type MyRec = record s: string; r: Real; b: Byte; end;var Arr1: array0.100 of MyRec; Arr2: array0.100 of record s: string; r: Real; b: Byte; end; /可以直接这样定义 Arr3: packed array0.100 of MyRec; /压缩数组定义, 好像没有区别?一. 一维数组 A:Array of integer ; setlength(A,5)二: 二维数组 定义整型二维数组 aiMyarray : array of array of integer 大小设置 setlength(aiMyarray,5,5)三、多维数组的定义当一维数组元素的类型也是一维数组时,便构成了二维数组。二维数组定义的一般格式:array下标类型1 of array下标类型2 of 元素类型;但我们一般这样定义二维数组:array下标类型1,下标类型2 of 元素类型;说明:其中两个下标类型与一维数组定义一样,可以看成“下界1.上界1”和“下界2.上界2”,给出二维数组中每个元素( 双下标变量)可以使用下标值的范围。of后面的元素类型就是基类型。一般地,n维数组的格式为:array下标类型1,下标类型2,下标类型n of 元素类型;其中,下标类型的个数即数组的维数,且说明了每个下标的类型及取值范围。*多维数组元素的引用多维数组的数组元素引用与一维数组元素引用类似,区别在于多维数组元素的引用必须给出多个下标。引用的格式为:下标1,下标2,下标n说明:显然,每个下标表达式的类型应与对应的下标类型一致,且取值不超出下标类型所指定的范围。例如,设有说明: 引用内容type matrix=array1.5,1.4of integer;var a:matrix;则表示a是二维数组,共有5*4=20个元素,它们是: 引用内容a1,1a1,2a1,3a1,4a2,1a2,2a2,3a2,4a3,1a3,2a3,3a3,4a4,1a4,2a4,3a4,4a5,1a5,2a5,3a5,4因此可以看成一个矩阵,a4,2即表示第4 行、第2 列的元素。由于计算机的存储器是一维的,要把二维数组的元素存放到存储器中,pascal是按行(第一个下标)的次序存放,即按a1,1a1,2a1,3a1,4a2,1,a5,4的次序存放于存储器中某一组连续的存储单元之内。对于整个二维数组的元素引用时,大多采用二重循环来实现。如:给如上说明的二维数组a 进行赋值: 引用内容ai,j=i*j。for i:=1 to 5 do for j:=1 to 4 do ai,j:=i*j;对二维数组的输入与输出也同样可用二重循环来实现: 引用内容for i:=1 to 5 dobegin for j:=1 to 4 do read(ai,j);end; for i:=1 to 5 dobegin for j:=1 to 4 do write(ai,j:5);end;eg、多维数组的应用示例例7、设有一程序: 引用内容program ex5_3;const n=3;type matrix=array1.n,1.nof integer;var a:matrix; i,j:1.n;begin for i:=1 to n do begin for j:=1 to n do read(ai,j); readln; end; for i:=1 to n do begin for j:=1 to n do write(aj,i:5); writeln; end;end.且运行程序时的输入为: 引用内容213331121则程序的输出应是: 引用内容231 132 311例8、输入4名学生数学、物理、英语、化学、pascal五门课的考试成绩,求出每名学生的平均分,打印出表格。分析:用二维数组a 存放所给数据,第一下标表示学生的学号, 第二个下标表示该学生某科成绩,如ai,1、ai,2、ai,3、ai,4、ai,5分别存放第i 号学生数学、物理、英语、化学、pascal 五门课的考试成绩,由于要求每个学生的总分和平均分, 所以第二下标可多开两列,分别存放每个学生5门成绩和总分、平均分。源程序如下: 引用内容program ex5_4;var a:array1.4,1.7of real; i,j:integer;begin fillchar(a,sizeof(a),0); 函数fillchar用以将a中所有元素置为0 writeln(Enter 4 students score); for i:=1 to 4 do begin for j:=1 to 5 do 读入每个人5科成绩 begin read(ai,j); 读每科成绩时同时统计总分 ai,6:=ai,6+ai,j; end; readln; ai,7:=ai,6/5;求平均分 end; writeln( No. Mat. Phy. Eng. Che. Pas. Tot. Ave.); 输出成绩表 for i:=1 to 4 do begin write(i:2, ); for j:=1 to 7 do write(ai,j:9:2); writeln; 换行 end;end.例9、输入一串字符,字符个数不超过100,且以“.”结束。 判断它们是否构成回文。分析:所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA 等。先读入要判断的一串字符(放入数组letter中),并记住这串字符的长度,然后首尾字符比较,并不断向中间靠拢,就可以判断出是否为回文。源程序如下: 引用内容program ex5_5;var letter : array1.100of char; i,j : 0.100; ch : char;begin 读入一个字符串以.号结束 write(Input a string:); i:=0;read(ch); while ch. do begin i:=i+1;letteri:=ch; read(ch) end; 判断它是否是回文 j:=1; while (j=i then writeln(Yes.) else writeln(No.);end.例10、奇数阶魔阵魔阵是用自然数1,2,3,n2填n 阶方阵的各个元素位置,使方阵的每行的元素之和、每列元素之和及主对角线元素之和均相等。奇数阶魔阵的一个算法是将自然数数列从方阵的中间一行最后一个位置排起,每次总是向右下角排(即Aij的下一个是Ai+1,j+1)。但若遇以下四种情形,则应修正排数法。(1)列排完(j=n+1时),则转排第一列; (2)行排完(即i=n+1时),则转排第一行;(3)对An,n的下一个总是An,n-1; (4)若Aij已排进一个自然数,则排Ai1,j2。例如3阶方阵,则按上述算法可排成:4 3 89 5 12 7 6有了以上的算法,解题主要思路可用伪代码描述如下:1 i?n div 2+1,y?n /*排数的初始位置*/2 ai,j?1;3 for k:=2 to n*n do4 计算下一个排数位置!(i,j);5 if ai,j0 then6 i?i-1;7 j?j-2;6 ai,j?k;7 endfor对于计算下一个排数位置,按上述的四种情形进行,但我们应先处理第三处情况。算法描述如下:1 if (i=n)and(j=n) then2 j?j-1; /*下一个位置为(n,n-1)*/;3 else4 i?i mod n +1;5 j?j mod n +1;6 endif;源程序如下: 引用内容program ex5_7;var a :array1.99,1.99of integer; i,j,k,n :integer;begin fillchar(a,sizeof(a),0); write(n=);readln(n); i:=n div 2+1;j:=n; ai,j:=1; for k:=2 to n*n do begin if (i=n)and(j=n) then j:=j-1 else begin i:=i mod n +1; j:=j mod n +1; end; if ai,j0 then begin i:=i-1; j:=j-2; end; ai,j:=k; end; for i:=1 to n do begin for j:=1 to n do write(ai,j:5); writeln; end;end.二、二维数组 合并定义: var 数组名:array下标类型1, 下标类型2 of 元素类型; 下标类型的个数即数组的维数,且说明了每个下标的类型及取值范围。 例如,定义 :var a:array1.4,1.3of integer; 则表示a是二维数组,共有4*3=12个元素,它们是:a1,1a1,2a1,3a2,1a2,2a2,3a3,1a3,2a3,3a4,1a4,2a4,3因此可以看成一个矩阵,a4,2即表示第4行、第2列的元素。 虽然逻辑上可以把二维数组看作是一张表格或一个矩阵,但在计算机内部,二维数组的所有元素对应的存储单元是连续的,与一维数组的存储方式在本质上是相同的。 对于整个二维数组的元素引用时,大多采用二重循环来实现。如给上例定义的二维数组a进行赋值: for i:=1 to 4 do for j:=1 to 3 do ai,j:=i*j;同样用二重循环来实现二维数组的输入与输出: for i:=1 to 4 do for j:=1 to 3 doread(ai,j); for i:=1 to 4 do begin for j:=1 to 3 dowrite(ai,j:5); writeln; end; 例5、已知数组A中,每个元素A(I,J)在存贮时要占3个字节,设I从1变化到8,J从1变化到10,分配内存时是从地址SA开始连续按行存贮分配的。试问:A(5,8)的起始地址为()。 NOIP2000高中单选13题 A) SA+141 B) SA+180 C) SA+222 D) SA+225 例6、仔细阅读下列程序段: var a:array1.3,1.4 of integer; NOIP2000高中单选16题 b:array1.4,1.3 of integer; x,y:integer; beginfor x:=1 to 3 do for y:=1 to 4 doax,y:=x-y;for x:=4 downto 1 do for y:=1 to 3 do bx,y:=ay,x;writeln(b3,2); end. 上列程序段的正确输出是( )。 A) -1B) -2C) -3D) 4 分析: 数组a: 数组 b: 0 1 2 3 0 1 2 1 0 -1 -2 -1 0 1 2 1 0 -1 -2 1 0 -3 -2 -1 例7、输入4名学生数学、物理、英语、化学、pascal五门课的考试成绩,求出每名学生的平均分,打印出表格。var a:array1.4,1.7of real; 下标1学号,下标2某科成绩 i,j:integer; 下标2多两列,分别存放总分、平均分 beginfillchar(a,sizeof(a),0); 用函数fillchar将数组a中所有元素置为0 writeln(Input 4 students score);for i:=1 to 4 do begin for j:=1 to 5 do begin read(ai,j); ai,6:=ai,6+ai,j; 读每科成绩时同时统计总分 end;ai,7:=ai,6/5; 求平均分 end; writeln( No. Math Phy Eng Che Pas Total Ave

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论