所以我被赋予了一个读取文件的赋值,将数字放入两个矩阵中,乘以矩阵,最后将输出放入.txt文件中。
我之前从未使用过Ada,我认为这将是一个很好的挑战。我被困在试图确定两个独立数组的边界。
这就是我目前所拥有的:
currentSpread := I;
g := Ada.Numerics.Generic_Complex_Elementary_Functions.Sqrt(I);
while J < g loop
if(I mod J = 0) THEN
if(currentSpread > ((I/J - J)/2)) THEN
currentSpread := ((I/J - J)/2);
arrayBounds := J;
end if;
end if;
J := J + 1;
end loop;
我遇到的问题是sqrt功能。我想找到矩阵乘法最佳边界的因子,这是我认为实现它的唯一方法。
我得到的错误是:
invalid prefix in selected component "Ada.Numerics.Generic_Complex_Elementary_Functions"
非常感谢您的帮助。
- 更新
要求的完整代码:
with Ada.Text_IO;use Ada.Text_IO;
with Ada.Integer_Text_IO;
with Ada.Numerics.Generic_Complex_Elementary_Functions;
with Ada.Numerics.Generic_Elementary_Functions;
with Ada.Numerics.Complex_Elementary_Functions;
with Ada.Numerics.Generic_Complex_Types;
procedure Main is
dataFile : File_Type;
resultFile : File_Type;
value : Integer;
I : Integer := 0;
J : Integer;
currentSpread : Integer;
arrayBounds : Integer;
g : Integer;
begin
Ada.Text_IO.Open(File => dataFile, Mode => Ada.Text_IO.In_File, Name =>"C:\Users\Jeffrey\Desktop\data.txt");
while not End_Of_File(dataFile) loop
Ada.Integer_Text_IO.Get(File => dataFile, Item => value);
Ada.Integer_Text_IO.Put(Item => value);
Ada.Text_IO.New_Line;
I := I + 1;
end loop;
Ada.Integer_Text_IO.Put(I);
I := I/2;
J := 1;
currentSpread := I;
g := Ada.Numerics.Generic_Complex_Elementary_Functions.Sqrt(I);
while J < g loop
if(I mod J = 0) THEN
if(currentSpread > ((I/J - J)/2)) THEN
currentSpread := ((I/J - J)/2);
arrayBounds := J;
end if;
end if;
J := J + 1;
end loop;
declare
type newArray is array(Integer range <>, Integer range<>) of Integer;
X : Integer := J;
Y : Integer := I/J;
Arr1 : newArray(1..Y, 1..X);
Arr2 : newArray(1..X, 1..Y);
finAnswer : newArray(1..X, 1..X);
begin
for z in 1 .. X loop
for k in 1 .. Y loop
Ada.Integer_Text_IO.Get(File => dataFile, Item => value);
Arr1(z, k) := value;
end loop;
end loop;
for z in 1 .. Y loop
for k in 1 .. X loop
Ada.Integer_Text_IO.Get(File => dataFile, Item => value);
Arr2(z, k) := value;
end loop;
end loop;
for l in 1 .. X loop
for m in 1 .. Y loop
for n in 1 .. X loop
finAnswer(l, n) := finAnswer(l, n) + Arr1(l, n)* Arr2(n, m);
end loop;
end loop;
end loop;
end;
Ada.Text_IO.Close(File => dataFile);
end Main;
我只使用平方根来计算出数字的因素。我现在如何设置它将达到平方根然后它将采用最小的因子扩散。我不关心舍入错误或其他任何事情,如果它不是一个完美的方形,它可以绕任何一种方式。
感谢。
答案 0 :(得分:5)
Generic_Complex_Elementary_Functions
是一个通用包。它不能直接使用。这就是编译器在这一行上给你一个错误的原因:
Ada.Numerics.Generic_Complex_Elementary_Functions.Sqrt(I);
要使用它,您必须使用要使用的浮点类型实例化通用Generic_Complex_Types
,然后使用Generic_Complex_Elementary_Functions
实例实例化Generic_Complex_Types
。幸运的是,如果您愿意使用内置类型Float
,则不必完成所有这些操作;该语言为您提供Ada.Numerics.Complex_Elementary_Functions
,使用Float
作为浮点类型,或者Ada.Numerics.Long_Complex_Elementary_Functions
使用Long_Float
,如果您的编译器供应商支持它。
但是,我认为您不想使用Complex
任何内容。这涉及复杂的数字,我怀疑你想要使用那些。使用Ada.Numerics.Elementary_Functions
(或Long_Elementary_Functions
)来处理实数。
最后,即使这不起作用:
Ada.Numerics.Elementary_Functions.Sqrt(I)
如果I
是整数,因为参数类型必须是Float
。您必须使用类型转换。
Ada.Numerics.Elementary_Functions.Sqrt(Float(I))