Привет, я делаю программу для расчета векторных компонентов. Поскольку двумерные векторы имеют горизонтальную и вертикальную компоненты в декартовом пространстве, я решил использовать конструкцию record.
Программа сначала вычисляет базисный вектор, и это показано ниже. В качестве входных данных запрашиваются горизонтальные, вертикальные компоненты, а также угол. угол относится к положительному углу против часовой стрелки от декартовой системы координат по умолчанию к другой повернутой декартовой системе координат от исходной.
В файле Projections.adb
вы увидите расчет:
D.Horz := A * Cos (C);
где A
— это горизонтальная составляющая исходной декартовой системы координат, а C
— это угол, обозначающий поворот между новой декартовой системой координат и старой системой.
В основной программе 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;
Большое спасибо...