使用ADA编程语言从文件中读取整数填充矩阵数组

时间:2016-02-09 10:02:31

标签: arrays matrix ada

我需要一些帮助,试图在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;

1 个答案:

答案 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

我希望这至少接近你的预期输出(你还没有真正定义过......)。