6

私は Ada を初めて使用するので、その構文と規則を調べています。次に示すコードに注意を向けたいと思います。ここでは、変数 Actual_Stiffness を設定して定数値を保持しようとしています。その値は製品によって与えられます。

Actual_Stiffness := Stiffness_Ratio * Stiffness_Total

ここで、Stiffness_Total は、仕様ファイル Material_Data.ads で定数 Long_Float として定義されており、Stiffness_Total の値は ads ファイルで既に設定されています。

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 として (CONSTANT を追加せずに) 定義し、プログラムの BEGIN の後で Actual_Stiffness := Stiffness_Ratio * Stiffness_Total の積からその値を取得することができました。これは正しいことです。

私の質問は:

Stiffness_Total を、所定の値を持つ定数 Long_Float として定義しました。ユーザーが端末で Stiffness_Ratio をインタラクティブに入力できるようにしながら、Actual_Stiffness を一定に定義する方法 (プログラムで変更されないため) は? それは可能ですか?

どうもありがとう..

4

2 に答える 2

3

「Stiffness_Ratio」は実行時まで決定されないため、コンパイラは、要求どおりにコンパイル時に「Actual_Stiffness」の値を計算できません。「Actual_Stiffness」を非定数変数にし、「Stiffness_Ratio」に値が設定された後に計算で初期化する必要があります。(実際の剛性が計算される時点で剛性比が値を持っている限り、関数内で定数として保持することもできます。)

これは、ほとんどのプログラミング言語で標準です。

だから、あなたの質問に答えるには:

  • いいえ、必要に応じて Actual_Stiffness を定数として定義することはできません。

  • 適度に近い概算は、このプロシージャの外で Stiffness_Ratio 値を決定し、その値をパラメータとしてプロシージャに渡すことです。ただし、Actual_Stiffness は、すべての時間ではなく、プロシージャの期間中のみ一定です。

一方、これはより有用である可能性があります。誰かが異なる時間に剛性比の複数の値を使用してプログラムを実行できるため、1 回の実行で多くのシミュレーションを実行できます。

于 2010-07-04T11:50:29.763 に答える