最新delphi 数组定义汇总.docx

上传人:b****4 文档编号:4162670 上传时间:2022-11-28 格式:DOCX 页数:15 大小:19.56KB
下载 相关 举报
最新delphi 数组定义汇总.docx_第1页
第1页 / 共15页
最新delphi 数组定义汇总.docx_第2页
第2页 / 共15页
最新delphi 数组定义汇总.docx_第3页
第3页 / 共15页
最新delphi 数组定义汇总.docx_第4页
第4页 / 共15页
最新delphi 数组定义汇总.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

最新delphi 数组定义汇总.docx

《最新delphi 数组定义汇总.docx》由会员分享,可在线阅读,更多相关《最新delphi 数组定义汇总.docx(15页珍藏版)》请在冰豆网上搜索。

最新delphi 数组定义汇总.docx

最新delphi数组定义汇总

 

delphi数组定义

在c语言中

有:

a[5]={1,2,3,4,5};

那么在delphi中,这个数组的赋值该怎么写?

问题补充:

下面有人说的对,我就是想在声明数组的时候赋初值,至于初值的内容你们不需要知道,我想知道的只是申明的时候赋值的格式,而不是通过一个过程去实现

var

a:

=array[1..5]ofinteger=(1,2,3,4,5)

只有全局变量才能赋初始值,而且5个值都要赋满

s:

array[1..264]ofinteger;

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:

array[0..10]ofInteger;//定义静态数组

--------------------------------------------------------------------------------

//2.可以使用非0下标:

var

MyArr:

array[9..10]ofInteger;//不能提倡,这样不容易与系统函数沟通

--------------------------------------------------------------------------------

//3.根据预定义类型来声明数组:

type

TMyArr=array[0..10]ofInteger;//先定义一个数组类型

var

MyArr:

TMyArr;//再定义静态数组

--------------------------------------------------------------------------------

//4.在非过程区可以直接赋值:

var

MyArr:

array[0..2]ofInteger=(11,22,33);

--------------------------------------------------------------------------------

//5.多维数组:

var

MyArr:

array[0..2,0..2]ofInteger;

begin

//使用

MyArr[1,2]:

=100;

end;

--------------------------------------------------------------------------------

//6.根据子界定义数组:

type

TRange=0..10;

var

MyArr:

array[TRange]ofInteger;

--------------------------------------------------------------------------------

//7.根据枚举定义数组:

type

TEnums=(Enum1,Enum2,Enum3);

var

MyArr:

array[TEnums]ofstring;

begin

MyArr[Enum1]:

='万一';

ShowMessage(MyArr[Enum1]);//万一

end;

--------------------------------------------------------------------------------

//8.根据其他类型定义数组:

var

MyArr:

array[Byte]ofChar;

begin

MyArr[255]:

=#65;

ShowMessage(MyArr[255]);//A

end;

//应尽量不使用内建类型,可以新建类型:

type

TNewByte=Byte;

var

MyArr:

array[TNewByte]ofChar;

begin

MyArr[255]:

=#65;

ShowMessage(MyArr[255]);//A

end;

//也可以使用类型别名:

type

TChar=typeChar;

var

MyArr:

array[TChar]ofByte;

begin

MyArr['C']:

=255;

ShowMessage(IntToStr(MyArr['C']));//255

end;

//同时定义类型:

type

MyRec=record

s:

string;

r:

Real;

b:

Byte;

end;

var

Arr1:

array[0..100]ofMyRec;

Arr2:

array[0..100]ofrecords:

string;r:

Real;b:

Byte;end;//可以直接这样定义

Arr3:

packedarray[0..100]ofMyRec;//压缩数组定义,好像没有区别?

 

一.一维数组

A:

Arrayofinteger;

setlength(A,5)

 

二:

二维数组

定义整型二维数组

aiMyarray:

arrayofarrayofinteger

大小设置

setlength(aiMyarray,5,5)

 

三、多维数组的定义

当一维数组元素的类型也是一维数组时,便构成了二维数组。

二维数组定义的一般格式:

array[下标类型1]ofarray[下标类型2]of元素类型;

但我们一般这样定义二维数组:

array[下标类型1,下标类型2]of元素类型;

说明:

其中两个下标类型与一维数组定义一样,可以看成“下界1..上界1”和“下界2..上界2”,

给出二维数组中每个元素(双下标变量)可以使用下标值的范围。

of后面的元素类型就是基类型。

一般地,n维数组的格式为:

array[下标类型1,下标类型2,…,下标类型n]of元素类型;

其中,下标类型的个数即数组的维数,且说明了每个下标的类型及取值范围。

**多维数组元素的引用

多维数组的数组元素引用与一维数组元素引用类似,区别在于多维数组元素的引用必须给出多个下标。

引用的格式为:

<数组名>[下标1,下标2,…,下标n]

说明:

显然,每个下标表达式的类型应与对应的下标类型一致,且取值不超出下标类型所指定的范围。

例如,设有说明:

引用内容typematrix=array[1..5,1..4]ofinteger;

vara:

matrix;

则表示a是二维数组,共有5*4=20个元素,它们是:

引用内容

a[1,1]a[1,2]a[1,3]a[1,4]

a[2,1]a[2,2]a[2,3]a[2,4]

a[3,1]a[3,2]a[3,3]a[3,4]

a[4,1]a[4,2]a[4,3]a[4,4]

a[5,1]a[5,2]a[5,3]a[5,4]

因此可以看成一个矩阵,a[4,2]即表示第4行、第2列的元素。

由于计算机的存储器是一维的,

要把二维数组的元素存放到存储器中,pascal是按行(第一个下标)的次序存放,即按a[1,1]a[1,

2]a[1,3]a[1,4]a[2,1]…,a[5,4]的次序存放于存储器中某一组连续的存储单元之内。

对于整个二维数组的元素引用时,大多采用二重循环来实现。

如:

给如上说明的二维数组a进行赋

值:

引用内容a[i,j]=i*j。

fori:

=1to5do

forj:

=1to4do

a[i,j]:

=i*j;

对二维数组的输入与输出也同样可用二重循环来实现:

引用内容fori:

=1to5do

begin

forj:

=1to4doread(a[i,j]);

end;

fori:

=1to5do

begin

forj:

=1to4dowrite(a[i,j]:

5);

end;

 

eg、多维数组的应用示例

例7、设有一程序:

引用内容programex5_3;

const

n=3;

type

matrix=array[1..n,1..n]ofinteger;

var

a:

matrix;

i,j:

1..n;

begin

fori:

=1tondo

begin

forj:

=1tondo

read(a[i,j]);

readln;

end;

fori:

=1tondo

begin

forj:

=1tondo

write(a[j,i]:

5);

writeln;

end;

end.

且运行程序时的输入为:

引用内容2□1□3←┘

3□3□1←┘

1□2□1←┘

则程序的输出应是:

引用内容2□3□1

1□3□2

3□1□1

 

例8、输入4名学生数学、物理、英语、化学、pascal五门课的考试成绩,求出每名学生的平均分,

打印出表格。

分析:

用二维数组a存放所给数据,第一下标表示学生的学号,第二个下标表示该学生某科成绩,如

a[i,1]、a[i,2]、a[i,3]、a[i,4]、a[i,5]分别存放第i号学生数学、物理、英语、化学、pascal五门

课的考试成绩,由于要求每个学生的总分和平均分,所以第二下标可多开两列,分别存放每个学生5门成

绩和总分、平均分。

源程序如下:

引用内容programex5_4;

var

a:

array[1..4,1..7]ofreal;i,j:

integer;

begin

fillchar(a,sizeof(a),0);{函数fillchar用以将a中所有元素置为0}

writeln(’Enter4studentsscore’);

fori:

=1to4do

begin

forj:

=1to5do{读入每个人5科成绩}

begin

read(a[i,j]);{读每科成绩时同时统计总分}

a[i,6]:

=a[i,6]+a[i,j];

end;

readln;

a[i,7]:

=a[i,6]/5;{求平均分}

end;

writeln(’No.Mat.Phy.Eng.Che.Pas.Tot.Ave.’);{输出成绩表}

fori:

=1to4do

begin

write(i:

2,’’);

forj:

=1to7do

write(a[i,j]:

9:

2);

writeln;{换行}

end;

end.

 

例9、输入一串字符,字符个数不超过100,且以“.”结束。

判断它们是否构成回文。

分析:

所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA等。

先读入要

判断的一串字符(放入数组letter中),并记住这串字符的长度,然后首尾字符比较,并不断向中间靠拢,

就可以判断出是否为回文。

源程序如下:

引用内容programex5_5;

var

letter:

array[1..100]ofchar;

i,j:

0..100;

ch:

char;

begin

{读入一个字符串以’.’号结束}

write(’Inputastring:

’);

i:

=0;read(ch);

whilech<>’.’do

begin

i:

=i+1;letter[i]:

=ch;

read(ch)

end;

{判断它是否是回文}

j:

=1;

while(j

begin

i:

=i-1;j:

=j+1;

end;

ifj>=ithenwriteln(’Yes.’)

elsewriteln(’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已排进一个自然数,则排Ai-1,j-2。

例如3阶方阵,则按上述算法可排成:

438

951

276

有了以上的算法,解题主要思路可用伪代码描述如下:

1i?

ndiv2+1,y?

n/*排数的初始位置*/

2a[i,j]?

1;

3fork:

=2ton*ndo

4计算下一个排数位置!

(i,j);

5ifa[i,j]<>0then

6i?

i-1;

7j?

j-2;

6a[i,j]?

k;

7endfor

对于计算下一个排数位置,按上述的四种情形进行,但我们应先处理第三处情况。

算法描述如下:

1if(i=n)and(j=n)then

2j?

j-1;/*下一个位置为(n,n-1)*/;

3else

4i?

imodn+1;

5j?

jmodn+1;

6endif;

源程序如下:

引用内容programex5_7;

var

a:

array[1..99,1..99]ofinteger;

i,j,k,n:

integer;

begin

fillchar(a,sizeof(a),0);

write(‘n=’);readln(n);

i:

=ndiv2+1;j:

=n;

a[i,j]:

=1;

fork:

=2ton*ndo

begin

if(i=n)and(j=n)then

j:

=j-1

else

begin

i:

=imodn+1;

j:

=jmodn+1;

end;

ifa[i,j]<>0then

begin

i:

=i-1;

j:

=j-2;

end;

a[i,j]:

=k;

end;

fori:

=1tondo

begin

forj:

=1tondo

write(a[i,j]:

5);

writeln;

end;

end.

 

二、二维数组

合并定义:

  var数组名:

array[下标类型1,下标类型2]of元素类型;

 下标类型的个数即数组的维数,且说明了每个下标的类型及取值范围。

例如,定义:

vara:

array[1..4,1..3]ofinteger;

 则表示a是二维数组,共有4*3=12个元素,它们是:

  a[1,1]a[1,2]a[1,3]

  a[2,1]a[2,2]a[2,3]

  a[3,1]a[3,2]a[3,3]

  a[4,1]a[4,2]a[4,3]

  因此可以看成一个矩阵,a[4,2]即表示第4行、第2列的元素。

虽然逻辑上可以把二维数组看作是一张表格或一个矩阵,但在计算机内部,二维数组的所有元素对应的存储单元是连续的,与一维数组的存储方式在本质上是相同的。

对于整个二维数组的元素引用时,大多采用二重循环来实现。

如给上例定义的二维数组a进行赋值:

  fori:

=1to4do 

forj:

=1to3do a[i,j]:

=i*j;

  同样用二重循环来实现二维数组的输入与输出:

 fori:

=1to4do

  forj:

=1to3do read(a[i,j]);

 fori:

=1to4do

  begin

   forj:

=1to3do write(a[i,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、仔细阅读下列程序段:

vara:

array[1..3,1..4]ofinteger;{NOIP2000高中单选16题}

  b:

array[1..4,1..3]ofinteger;

   x,y:

integer;

 begin

   forx:

=1to3do

   fory:

=1to4do a[x,y]:

=x-y;

   forx:

=4downto1do

   fory:

=1to3do b[x,y]:

=a[y,x];

   writeln(b[3,2]);

 end.

上列程序段的正确输出是(  )。

A)-1  B)-2  C)-3  D)–4

分析:

数组a:

数组b:

0–1–2–3012

10-1-2-101

210-1-2–10

-3-2-1

例7、输入4名学生数学、物理、英语、化学、pascal五门课的考试成绩,求出每名学生的平均分,打印出表格。

  vara:

array[1..4,1..7]ofreal;{下标1学号,下标2某科成绩}

   i,j:

integer;{下标2多两列,分别存放总分、平均分}

begin

   fillchar(a,sizeof(a),0); {用函数fillchar将数组a中所有元素置为0}

   writeln('Input4studentsscore');

   fori:

=1to4do

  begin

   forj:

=1to5do

  begin

    read(a[i,j]);a[i,6]:

=a[i,6]+a[i,j]; {读每科成绩时同时统计总分}

    end; 

    a[i,7]:

=a[i,6]/5;{求平均分}

  end;

  writeln('No.MathPhyEngChePasTotalAverage');

  fori:

=1to4do

  begin

    write(i,'');

    forj:

=1to7do write(a[i,j]:

7:

1);

    writeln;

  end;

  end.

例8、奇数魔方阵。

输出整数1到n2(n为齐数),排成的一个n×n方阵,使方阵中的每一行、每一列及对角线上的数之和都相同。

奇数阶魔阵算法:

①将1填在第一行中间,即[1,(n+1)/2],然后依次填入2到n2;

②若当前位置为[i,j],下一个填在[i-1,j-1];若左上方无空格,即j-1为0时,则填在[n,j-1];

③若j-1为0时,则填在[i-1,n];

④若当前位置为[i,j],而左上方已有数字,则填在正下方,即[i+1,j];

 如3阶方阵,则按上述算法可排成:

          618

          753

          294

vara:

array[1..100,1..100]ofinteger;

  i,j,k,n,h,l:

integer;

begin

 fillchar(a,sizeof(a),0);

write('inputn:

');readln(n);

 j:

=(n+1)/2;

i:

=1; a[i,j]:

=1;

 fork:

=2ton*ndo

  begin

h:

=i-1;ifh=0thenh:

=n;

l:

=j-1;ifl=0thenl:

=n;

ifa[h,l]=0thenbegina[h,l]:

=k;i:

=h;j:

=lend;

elsebegina[i+1,j]:

=k;i:

=i+1end;

end;

 fori:

=1tondo

  begin

forj:

=1tondo write(a[i,j]:

5);

 writeln

 end

end.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1