2010-07-04 61 views
2

作为Ada的新手,我正在探索它的语法和规则,我想提请注意接下来给出的代码。在这里,我试图设置一个变量Actual_Stiffness来保存一个常量值。它的价值是由产品给出:Ada中的常量声明

Actual_Stiffness := Stiffness_Ratio * Stiffness_Total 

其中Stiffness_Total已经被定义为在规范文件Material_Data.ads恒定Long_Float和Stiffness_Total在广告文件中已设置的值。

WITH Ada.Text_IO; 
WITH Ada.Long_Float_Text_IO; 
WITH Material_Data; 
USE Material_Data; 

PROCEDURE sample IS 

    Stiffness_Ratio : Long_Float; 
    Actual_Stiffness : CONSTANT Long_Float := Stiffness_Ratio * Stiffness_Total; 

BEGIN -- main program 
    Ada.Text_IO.Put("Enter stiffness ratio: "); 
    Ada.Long_Float_Text_IO.Get(Item => Stiffness_Ratio); 
    Ada.Long_Float_Text_IO.Put(Item => Stiffness_Ratio); 

    --Ada.Text_IO.New_Line; 
    --Ada.Long_Float_Text_IO.Put(Item => Actual_Stiffness); 
    --Ada.Text_IO.New_Line; 
    --Ada.Long_Float_Text_IO.Put(Item => Stiffness_Total); 
END sample; 

在编译我得到

警告的警告信息: “Stiffness_Ratio” 可以参考它有一个值之前

和运行程序Actual_Stiffness没有得到正确的值。我可以定义Actual_Stiffness是只是一个Long_Float(不增加常量),然后获得从产品Actual_Stiffness其值:= Stiffness_Ratio * Stiffness_Total后开始,在我的计划时Stiffness_Ratio将已经得到的值。这是正确的做法。

我的问题是:

我已经定义Stiffness_Total为常数Long_Float与一个预定值。如何将Actual_Stiffness定义为常量(因为它在程序中不会改变),同时保持用户交互式地在终端输入Stiffness_Ratio的能力?这甚至有可能做到吗?

非常感谢..

回答

2

因为“Stiffness_Ratio”没有确定,直到运行时,编译器在编译时无法计算“Actual_Stiffness”的价值,你问它。您必须将'Actual_Stiffness'变为非常量变量,并在'Stiffness_Ratio'具有值后通过计算将其初始化。 (你甚至可以把它作为函数内的恒定只要刚度比具有实际的刚度计算的时间值。)

这是大多数编程语言标准。

因此,要回答你的问题:

  • 不,你不能根据需要定义Actual_Stiffness为常数。

  • 适度接近的近似是,你确定此过程之外Stiffness_Ratio值,并通过该值到程序作为一个参数。但是,Actual_Stiffness只在程序的持续时间内保持不变,而不是一直保持不变。

另一方面,这可能更有用;有人可以在不同的时间用多个刚度比值来运行该程序,从而在单次运行中进行多次模拟。

+0

谢谢。这是正确的。我想你的意思是“你必须让Actual_Stiffness ......”。 – yCalleecharan 2010-07-04 11:57:15

+0

@yCalleecharan:是的 - 我的错误。我会解决的。 – 2010-07-04 11:58:38

+0

感谢您的更正。 – yCalleecharan 2010-07-04 12:01:26