-1

これを行う方法がわかりません。ユーザーがコンソールで導入され、空白で区切られた90個の数値を挿入し、それらを2次元配列(10x9)に保持する必要があるプログラムをパスカルで実行したいと思います。誰もがこれを実装する方法を知っていますか?どうもありがとう。

4

2 に答える 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;

2 つのインデックスを使用して配列を反復処理し、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 に答える