我需要一些帮助,试图在Ada编程中从外部文件中读取数字,填充大小为3×5的矩阵。 外部文件包含两行15位数字:
1 3 8 4 10 2 4 38 43 4 8 12 32 16 6
23 8 9 9 18 41 11 21 12 2 1 6 33 11 22
这是我到目前为止的代码。我知道我可以在从文件中读取数据时填充数组,但是我无法正确获取语法。需要说明的是,有两个矩阵需要从外部文件中每3x5填充一次。任何帮助是极大的赞赏。
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;
procedure lab06 is
package Flt_IO is new Ada.Text_IO.Float_IO(FLOAT);
use Flt_IO;
MAX_ROW1 : constant := 3;
MAX_COL1 : constant := 5;
MAX_ROW2 : constant := 3;
MAX_COL2 : constant := 5;
n: NATURAL := 0;
I: INTEGER := 0;
type MATRIX_1 is array(INTEGER range 1..MAX_ROW1, INTEGER range 1..MAX_COL1) of INTEGER;
type MATRIX_2 is array(INTEGER range 1..MAX_ROW2, INTEGER range 1..MAX_COL2) of INTEGER;
First : MATRIX_1;
inf : FILE_TYPE;
begin
Open(inf, In_File, "lab06.in");
loop
exit when End_Of_File(inf);
Get(inf,n);
First(I) := n;
I := I + 1;
end loop;
Put(n);
Close(inf);
end Lab06;
答案 0 :(得分:0)
不是很漂亮,但这是一个可能的解决方案:
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
procedure lab06 is
MAX_ROW : constant := 3;
MAX_COL : constant := 5;
type MATRIX is array(NATURAL range 1..MAX_ROW, NATURAL range 1..MAX_COL) of NATURAL;
Inf : FILE_TYPE;
Matrix_1 : MATRIX;
Matrix_2 : MATRIX;
procedure PopulateMatrix(Inf : in FILE_TYPE; Result : out MATRIX) is
I: INTEGER := 0;
begin
loop
declare
N : NATURAL;
Row : Natural;
Column : Natural;
begin
Ada.Integer_Text_IO.Get(inf,N);
Column := (I rem MAX_COL) +1;
Row := (I - Column-1) / MAX_ROW +1;
Result(Row, Column) := N;
I := I + 1;
exit when I = MAX_ROW * MAX_COL;
end;
end loop;
end PopulateMatrix;
procedure PrintMatrix(Input : in MATRIX) is
begin
for Row in MATRIX'Range(1) loop
for Column in MATRIX'Range(2) loop
Ada.Integer_Text_IO.Put(Input(Row, Column));
end loop;
Put_Line("");
end loop;
end PrintMatrix;
begin
Open(Inf, In_File, "lab06.in");
PopulateMatrix(Inf, Matrix_1);
PopulateMatrix(Inf, Matrix_2);
Close(Inf);
PrintMatrix(Matrix_1);
Put_Line("");
PrintMatrix(Matrix_2);
end Lab06;
这会给你:
1 3 8 4 10
2 4 38 43 4
8 12 32 16 6
23 8 9 9 18
41 11 21 12 2
1 6 33 11 22
我希望这至少接近你的预期输出(你还没有真正定义过......)。