我不知道该怎么做:我想用 pascal 编写一个程序,用户必须在其中插入 90 个由控制台引入并用空格分隔的数字,并将它们保存在二维数组 (10x9) 中。任何人都知道如何实现这一点?非常感谢。
问问题
601 次
2 回答
1
var the_array:array[1..10] of array[1..9] of integer;
var i:integer; var j:integer;
...
i:=1; j:=1;
while i<=10 do begin
while j<=9 do begin
read(the_array[i,j]);
inc(j);
end;
j:=1;
inc(i);
end;
您只需使用两个索引来遍历数组,同时通过调用 read() 填充它。
于 2012-10-05T10:57:17.103 回答
0
您写道您使用 FreePascal,因此您可以在此处使用 SScanF。
该程序允许您输入一些由空格分隔的数字行。完成后,它会打印数字。
不过,我永远不会把这样的东西交给最终用户。为什么不提供图形用户界面呢?
program Project1;
uses
SysUtils;
const
Lines = 10;
type
TNumberArray = array[0..Lines-1,0..9] of integer;
procedure GetNumbers(var nums:TNumberArray);
var Line:Integer; s:String;
begin
for Line := Low(nums) to high(nums) do
begin
Write('Enter line ',Line, ': ');
ReadLn(S);
SScanf(s,'%d %d %d %d %d %d %d %d %d %d',
[
@nums[Line,0],
@nums[Line,1],
@nums[Line,2],
@nums[Line,3],
@nums[Line,4],
@nums[Line,5],
@nums[Line,6],
@nums[Line,7],
@nums[Line,8],
@nums[Line,9]
]
);
end;
end;
procedure ShowNumbers(nums:TNumberArray);
var Line,Col:Integer;
begin
for Line := Low(nums) to high(nums) do
begin
for Col:=Low(nums[Line]) to High(nums[Line]) do
Write(nums[Line,Col], ' ');
WriteLn;
end;
end;
var
Numbers: TNumberArray;
begin
WriteLn('Enter 10 numbers');
GetNumbers(Numbers);
ShowNumbers(Numbers);
WriteLn('Done. Press a key to continue.');
ReadLn;
end.
使用 TStringList 解析行更简洁,因此您不必对列数进行硬编码,但这应该可以。
于 2012-10-05T11:09:38.727 回答