2010-07-04 3 views
2

Ada에 익숙하지 않기 때문에 구문과 규칙을 연구 중이며 다음에 나오는 코드에 대해주의를 끌고 싶습니다. 여기서는 상수 값을 유지하기 위해 Actual_Stiffness 변수를 설정하려고합니다. Stiffness_Total가 정의 된Ada의 상수 선언

Actual_Stiffness := Stiffness_Ratio * 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는 올바른 가치를 얻지 못합니다. Stualness_Ratio가 이미 값을 얻었을 때 Actual_Stiffness를 (고정을 추가하지 않고) Long_Float로 정의한 다음 제품에서 값을 가져올 수있었습니다. Actual_Stiffness : = Stiffness_Ratio * Stiffness_Total 내 프로그램에서 BEGIN 이후. 이것은 옳은 일입니다.

내 질문은 : 나는 소정 값과 상수 Long_Float로 Stiffness_Total을 정의

. 사용자가 터미널에서 Stiffness_Ratio를 대화식으로 입력 할 수있는 능력을 유지하면서 Actual_Stiffness를 일정하게 정의하는 방법 (프로그램에서 변경되지 않음) 그것은 심지어 할 수 있습니까?

덕분에 많이 있습니다 .. 'Stiffness_Ratio이'런타임까지 결정되지 않기 때문에

답변

2

는, 컴파일시에 'Actual_Stiffness'의 값을 계산 할 수없는 컴파일러는 당신이 요구 한대로. 'Actual_Stiffness'를 상수가 아닌 변수로 만들고 'Stiffness_Ratio'에 값이있는 경우 계산으로 초기화해야합니다. (강성비가 실제 강성이 계산 될 때 값이있는 한 함수 내에서 상수로 유지할 수도 있습니다.)

이것은 대부분의 프로그래밍 언어에서 표준입니다. 원하는대로

  • 아니, 당신은 상수로 Actual_Stiffness를 정의 할 수 없습니다 :

    따라서, 귀하의 질문에 대답합니다.

  • 이 절차 외부의 Stiffness_Ratio 값을 적당히 가깝게 결정한 다음이 값을 프로 시저에 매개 변수로 전달하십시오. 그러나 Actual_Stiffness는 모든 시간이 아니라 절차 기간 동안 만 일정합니다.

반면에 이것은 더 유용 할 수 있습니다; 누군가 다른 시간에 강성비의 여러 값으로 프로그램을 실행할 수 있으므로 한 번의 실행으로 많은 시뮬레이션을 수행 할 수 있습니다.

+0

감사합니다. 이것이 올바른 일입니다. 나는 당신이 "당신은 Actual_Stiffness를 만들어야 할 것입니다 ..."를 의미했다고 생각합니다. – yCalleecharan

+0

@yCalleecharan : 예 - 저의 실수입니다. 나는 고칠 것이다. –

+0

고마워. – yCalleecharan