Привет, я делаю программу для расчета векторных компонентов. Поскольку в двухмерных векторах в декартовом пространстве есть горизонтальный и вертикальный компонент, я решил использовать конструкцию 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" *.
Есть предложения, что я делаю не так?
Здесь находятся необходимые файлы:
Файл main равен 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;
Большое спасибо ...