马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
动态数组。
动态数组的定义:
数组名: Array of 基类型;
如:ArrStr: Array of String;
使用时需先确定数组的长度,SetLength(ArrStr, n);
数组的下标从0开始。
二维动态数组:
ArrStr: Array of Array of String;
SetLength(ArrStr, n1, n2);
那么拌静态版动态数组可以吗?我做了如下尝试:
这样是可以的,也就是先固定第二级,再动态第一级。
var
ArrStr1: Array of Array[5..6] of String;
begin
SetLength(ArrStr1, 2);
ArrStr1[1, 6]:= 'AAA';
end;
反过来则在SetLength处报错。
var
ArrStr1: Array[5..6] of Array of String;
begin
SetLength(ArrStr1, 2);
ArrStr1[6, 1]:= 'AAA';
end;
如果这样写,可以通过,且可以使每行的列数不一样。
var
ArrStr1: Array[5..6] of Array of String;
begin
SetLength(ArrStr1[5], 2);
ArrStr1[5, 1]:= 'AAA';
SetLength(ArrStr1[6], 4);
ArrStr1[6, 3]:= 'BBB';
end;
可以用Low、High和Length返回数组下标的最大最小值和长度。
例题:输入人数,录入姓名、语数英成绩,完成后做表。要求先弹出窗口输入人数,完成输入成绩前不出现表格。
InputBox函数,有三个参数:标题,提示信息和缺省值,如果不要缺省值将其设为’’。
注意中文的提示信息可以显示不全,可以在最后加一些空格
在FormCreate中设置InputBox,则在主窗口出现前,先出现InputBox窗口,点击OK后InputBox窗口消失,主窗口显示。
StringGrid先设置为隐藏,待输入完毕后在显示。
根据人数设置数组,设置StringGrid的行数和高度,注意高度要比行数X行高加一(因为网格线还占用1像素,高度和宽度要比要求的大一点,否则会滚动。implementation
{$R *.dfm}
var
i, j, n: Integer;
ArrStr: Array of Array of String;
procedure TForm1.FormCreate(Sender: TObject);
begin
n:= StrToInt(InputBox('请输入', '请输入人数 ', ''));
StringGrid1.RowCount:= n + 1;
StringGrid1.Height:= (StringGrid1.DefaultRowHeight + 1) * (n + 1) + 5;
SetLength(ArrStr, n, 4);
i:= 0;
Button1.Caption:= '成绩录入 ' + IntToStr(i + 1) + '/' + IntToStr(n);
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';
Edit4.Text:= '';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
r, c: Integer;
begin
ArrStr[i, 0]:= Edit1.Text;
ArrStr[i, 1]:= Edit2.Text;
ArrStr[i, 2]:= Edit3.Text;
ArrStr[i, 3]:= Edit4.Text;
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';
Edit4.Text:= '';
i:= i + 1;
Button1.Caption:= '成绩录入 ' + IntToStr(i + 1) + '/' + IntToStr(n);
if i >= n then
begin
Button1.Caption:= '录入完毕';
StringGrid1.cells[1, 0]:= '语文';
StringGrid1.cells[2, 0]:= '数学';
StringGrid1.cells[3, 0]:= '英语';
for r:= 1 to n do
for c:= 0 to 3 do
StringGrid1.cells[c, r]:= ArrStr[r - 1, c];
StringGrid1.Visible:= True;
end;
end;
|