こんにちは私はベクトル成分を計算するプログラムを作っています。 2Dベクトルは、デカルト空間内にの水平との垂直の成分を持っているので、私はのレコードを使用することに決めました。Ada:レコード変数にアクセス
プログラムは、まず基底ベクトルを計算します。これは以下のとおりです。 の水平,の垂直のコンポーネントと、の角度の入力が求められます。 の角度は、デフォルトのデカルト座標系から元のデカルト座標系への反時計回りの正の角度を指します。
A
が元のデカルト座標系と
C
の
水平コンポーネントが新しいデカルト座標系の間の回転を表す角度である
D.Horz := A * Cos (C);
:ファイルProjections.adb
もし計算が表示されますで
と古いシステム。 メインプログラムGet_projections.adb
、呼び出し手順で
は
Vector_basis_r (Component_Horz, Component_Vert, theta, Basis_r);
Ada
である私は、コマンドを発行したときに文句:
Ada.Long_Float_Text_IO.Put (Item => Basis_r.Horz, Fore => 3, Aft => 3, Exp => 0);
私は水平コンポーネントを取得したいとき基底ベクトルの。
苦情は次のとおりです。
*選択したコンポーネントに無効な接頭辞 "Basis_r" *。
私が間違っていることは何ですか?
必要なファイルはここにダウンしている:メインファイルがGet_Projections.adb
ある
:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Long_Float_Text_IO;
with Ada.Float_Text_IO;
with Projections; Use Projections;
with Ada.Numerics.Long_Elementary_Functions;
use Ada.Numerics.Long_Elementary_Functions;
procedure Get_Projections is
Component_Horz, Component_Vert, theta : Long_Float;
Basis_r : Rectangular;
begin
Ada.Text_IO.Put("Enter the horizontal component ");
Ada.Long_Float_Text_IO.Get (Item => Component_Horz);
Ada.Text_IO.New_Line (1);
Ada.Text_IO.Put("Enter the vertical component ");
Ada.Long_Float_Text_IO.Get (Item => Component_Vert);
Ada.Text_IO.New_Line (1);
Ada.Text_IO.Put("Enter the angle ");
Ada.Long_Float_Text_IO.Get (Item => theta);
Vector_basis_r (Component_Horz, Component_Vert, theta, Basis_r);
Ada.Text_IO.New_Line;
Ada.Text_IO.Put("rx = ");
Ada.Long_Float_Text_IO.Put (Item => Basis_r.Horz, Fore => 3, Aft => 3, Exp => 0);
end Get_Projections;
と伴うパッケージは仕様Projections.ads
です:
package Projections is
type Rectangular is private;
procedure Vector_basis_r (A, B, C : in Long_Float; D : out Rectangular);
private
type Rectangular is
record
Horz, Vert: Long_Float;
end record;
end Projections;
とパッケージ本体Projections.adb
:
with Ada.Numerics.Long_Elementary_Functions;
use Ada.Numerics.Long_Elementary_Functions;
package body Projections is
procedure Vector_basis_r (A, B, C : in Long_Float; D : out Rectangular) is
begin
D.Horz := A * Cos (C);
D.Vert := B * Sin (c);
end Vector_basis_r;
end Projections;
おかげでたくさん...
をマルク・C @本当にありがとうございました。私は単に私的な部分を取り除いただけです。レコードのコンポーネント*とやりとりするために* Get/Setアクセサを提供しなければならない場合、どうすればいいですか?あなたは例を見せていただけますか? 1票アップ。 – yCalleecharan
@yCalleecharan "Get/Setアクセサ"とは、Rectangleパラメータを受け取り、そのメンバにアクセスする関数だけを意味します。例えば。 "関数Get_Horz(R:Rectangle)はLong_Floatを返します;" "Set_Horz(R:in Rectangle; H:Long_Float);" –
@ Marc Cありがとうございます。私はこれにはかなり新しいです。関数として 'adb'ファイルに関数を書くことができますGet_Horz(R:Rectangular)return Long_Floatは begin return R.Horzです。 end Get_Horz ;.この部分はOKです:私は 'Set_Horz ...プロシージャ 'を理解していません。あなたはそれを私のために完全に書き留めていただけますか?どうもありがとうございます。 – yCalleecharan