2010-07-04 3 views
2

Будучи новой для Ada, я изучаю ее синтаксис и правила, и я хотел бы обратить внимание на приведенный ниже код. Здесь я пытаюсь установить переменную Actual_Stiffness для сохранения постоянного значения. Его значение определяется произведением:Постоянная декларация в Ada

Actual_Stiffness := Stiffness_Ratio * Stiffness_Total 

где Stiffness_Total была определена как константа Long_Float в спецификации файла Material_Data.ads и 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 (без добавления CONSTANT), а затем получить его значение от продукта Actual_Stiffness: = Stiffness_Ratio * Stiffness_Total после BEGIN в моей программе, когда 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

+0

@yCalleecharan: да - моя ошибка. Я исправлю. –

+0

Спасибо за исправление. – yCalleecharan

Смежные вопросы