对于那些了解Ada编程的人来说,有什么方法可以将文件中的数据导入到该程序中,以便在此算法中使用它?
使用Ada我正在尝试弄清楚如何从文件中读取一系列矩阵连接数据网格然后解析数据,保留字段名称以便稍后输出,同时使用算法中的0和1。
理想情况下,输入数据将如下所示(行数和列数将有所不同,输入文件中将有多个具有不同行和列名称的数据集(矩阵)。
示例:(忽略下划线)
________ Name1_Name2_Name3_NameN
姓名1 _____ 0_____1_____0_____0
名称2 _____ 0 0 _____ _____ 1 _____ 1
姓名3 _____ 0_____0_____1_____0
NameN _____ 0 _____ 1 _____ 0 0 _____
这是我到目前为止没有从文件读取和输出到文件实现的代码。
WITH Text_IO; USE Text_IO; -- This gets the IO facility.
WITH Ada.Integer_Text_IO; USE Ada.Integer_Text_IO; -- This gets the integer IO facility.
--****
-- use zero elements in array to store size 0,0 and row/column names?
-- read size
-- use size to read names of columns
-- store in array
-- use size to read first row of data?
-- as data is read convert from 0/1 to true false and store?
-- if value read = 0 => array2d(n,n) = false
-- if value read = 1 => array2d(n,n) = true
-- * main procedure *
PROCEDURE BooleanTest IS -- Main, but no special name is needed.BEGIN
N : Integer := 4; -- max size ** to be read
OutputConvertion : Integer;
Array2d: ARRAY (1..N, 1..N) OF boolean;
-- * main procedure starts begins*
BEGIN
-- read array size and column names
-- hard coded to be read from file
Array2d(1, 1) := false;
Array2d(1, 2) := false;
Array2d(1, 3) := false;
Array2d(1, 4) := false;
Array2d(2, 1) := false;
Array2d(2, 2) := true;
Array2d(2, 3) := false;
Array2d(2, 4) := true;
Array2d(3, 1) := false;
Array2d(3, 2) := true;
Array2d(3, 3) := false;
Array2d(3, 4) := true;
Array2d(4, 1) := true;
Array2d(4, 2) := false;
Array2d(4, 3) := true;
Array2d(4, 4) := false;
FOR I IN 1..N LOOP
FOR J IN 1..N LOOP
IF Array2d(J,I) = true THEN --true nodes connected
FOR K IN 1..N LOOP
Array2d(J,K) := Array2d(J,K) OR Array2d(I,K);
END LOOP;
END IF;
END LOOP;
END LOOP;
-- *********** output to screen ************
FOR I IN 1..N LOOP
FOR J IN 1..N LOOP
IF Array2d(I,J) = True THEN
OutputConvertion := 1;
ELSE
OutputConvertion := 0;
END IF;
Put( OutputConvertion);
Put(" ");
END LOOP;
New_Line(1);
END LOOP;
END BooleanTest;
-- * main procedure ends *
答案 0 :(得分:1)
我不确定你的问题是什么,但我感觉不仅有I / O,还有约束数组与无约束数组,布尔值表示,以及可能使用二进制I / O与文本I / O的混淆。如果您有行和列的标签,它们是随机分配的,还是行中的概念固定值,可以在您的程序中枚举,如下例所示:
类型名称是(Name_1,Name_2,Name_3,Name_4,Name_5,Name_6); 类型矩阵是布尔值的数组(名称范围<>,名称范围<>);
True和False的正确文本值为True和False,而不是1和0。 考虑读取和写入流文件的可能性,这将极大地简化矩阵类型实例的I / O,这可能具有不同的大小。