2010-07-04 62 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