52 lines
1.6 KiB
Ada
52 lines
1.6 KiB
Ada
-----------------------------------------------------------------------
|
|
-- Angle difference between two bearings
|
|
-----------------------------------------------------------------------
|
|
with Ada.Text_IO; use Ada.Text_IO;
|
|
|
|
procedure Bearing_Angles is
|
|
type Real is digits 8;
|
|
Package Real_Io is new Ada.Text_IO.Float_IO(Real);
|
|
use Real_IO;
|
|
type Angles is record
|
|
B1 : Real;
|
|
B2 : Real;
|
|
end record;
|
|
type Angle_Arr is array(Positive range <>) of Angles;
|
|
|
|
function fmod(Left, Right : Real) return Real is
|
|
Result : Real;
|
|
begin
|
|
Result := Left - Right*Real'Truncation(Left / Right);
|
|
return Result;
|
|
end fmod;
|
|
|
|
The_Angles : Angle_Arr := ((20.0,45.0),(-45.0, 45.0), (-85.0, 90.0),
|
|
(-95.0, 90.0), (-14.0, 125.0), (29.4803, -88.6381),
|
|
(-78.3251, -159.036),
|
|
(-70099.74233810938, 29840.67437876723),
|
|
(-165313.6666297357, 33693.9894517456),
|
|
(1174.8380510598456, -154146.66490124757),
|
|
(60175.77306795546, 42213.07192354373));
|
|
Diff : Real;
|
|
|
|
begin
|
|
|
|
for A of The_Angles loop
|
|
Diff := fmod(A.b2 - A.b1, 360.0);
|
|
If Diff < -180.0 then
|
|
Diff := Diff + 360.0;
|
|
elsif Diff > 180.0 then
|
|
Diff := Diff - 360.0;
|
|
end if;
|
|
|
|
Put("Difference between ");
|
|
Put(Item => A.B2, Fore => 7, Aft => 4, Exp => 0);
|
|
Put(" and ");
|
|
Put(Item => A.B1, Fore => 7, Aft => 4, Exp => 0);
|
|
Put(" is ");
|
|
Put(Item => Diff, Fore => 4, Aft => 4, Exp => 0);
|
|
New_Line;
|
|
end loop;
|
|
|
|
end Bearing_Angles;
|