はじめに
情報を扱うときは、表形式のデータを扱う必要があることがよくあります。最近のプログラムは、そのようなデータを扱うことが非常に多いです。最も単純な例は、三目並べ、チェス、チェッカーなどの市松模様のボード上でゲームをプログラミングすることです。
数学ではこのような構造を行列と呼び ます。
行列は、同じタイプの要素 (数値、文字列など) で構成される長方形のテーブルです。 .)< /div>
Pascal のこのようなデータは、2 次元配列、つまり「配列の配列」として保存および処理できます。
表内のデータを処理するには、各セル(セル)の状態を記憶する必要があります。各セルには行番号と列番号という 2 つの数字が含まれています。
行列では、各要素には 2 つのインデックスがあります。最初に行番号が示され、次に列番号が示されます。行と列の番号はゼロから始まります 。
たとえば、要素 A[1][2] は 2 行 3 列目にある要素です。
通常の配列 (リスト) と同様に、行列を操作するには、行列の作成、入力、処理、表示の方法を学ぶ必要があります。
マトリックスの作成
タスク
指定されたサイズのゼロで埋められた行列をメモリ内に作成します。
行列を正しく作成するには、コンパイラに強制的にすべての文字列をメモリ内に別のオブジェクトとして作成させる必要があります。
これを行うには、まず空の配列を作成し、次に行列の行数を指定してから、ループ内の setLength() メソッドを使用して各行の要素の数を指定する必要があります。
N := 3
M := 2
setLength(A, N);
for i := 0 ~ N - 1 を実行します
setLength(A[i], M);
行列に任意の値を入力する
マトリックスを作成した後、任意の値を入力できます。各要素には 2 つのインデックスがあるため、ネストされたループを使用する必要があります
for i := 0 ~ N が始まります
for j := 0 ~ M は始まります
A[i][j] := ...
終わり;
終わり;
プレ>
マトリックスの表示
通常、リストの処理と表示には 2 つのネストされたループが使用されます。最初のサイクルは行番号によって決まり、2 番目のサイクルは行内の要素によって決まります。
マトリックスを 1 行ずつ表示するには、1 行内で数値をスペースで区切って、次のフラグメントを記述する必要があります。
for i := 0 to length(A) - 1 do begin // length(A) - 行列 A の行数を返す
for j := 0 to length(A[i]) - 1 do // length(A[i]) - 文字列 i の要素の数を返します
write(a[i][j], ' ');
writeln(); // 行が表示された後に改行を実行します
終わり;
プレ>
同じですが、インデックスではなくリスト値によって循環します (for ループはリスト (配列)、文字列内のすべての要素を反復処理できます):
for row in a do begin // 行列 a のすべての行を反復処理します
for elem in row do // 行内のすべての要素をループします
write(elem, ' ');
writeln();
終了;
|
キーボードからの値で行列を埋める
プログラムが、 m で区切られた m 数値を含む n 行の形式で、入力として2次元配列を受け取るようにします。スペース。このようなデータは、次のように 2 次元配列に保存できます。
読み取り (n、m);
長さを設定します(a、n);
for i:= 0 to n - 1 do begin
setlength(a[i], m);
for j := 0 to m - 1 do read(a[i][j]);
終了;
|
行列の各要素には 2 つのインデックスがあるため、ネストされたループを使用してすべての要素を反復処理する必要があります。
通常、行列は行ごとに反復されます。外側のループは行インデックスを反復し、内側のループは列インデックスを反復します。
ただし、必要に応じて、行列と列を反復処理すると、サイクルが逆になります。
|