with Gada.Text_IO ;
procedure Mission2B0 is
package Txt renames GAda.Text_IO ;
Angle_Tour : constant Float := 360.0 ;
Demi_Tour : constant Float := Angle_Tour / 2.0 ;
function Delta_Cap (Cap_Actuel : Float ; Cap_Voulu : Float) return Float is
Resultat : Float ;
begin
Resultat := Cap_Voulu - Cap_Actuel ;
if Resultat > Demi_Tour then Resultat := Resultat - Angle_Tour ;
elsif Resultat < - Demi_Tour then Resultat := Resultat + Angle_Tour ;
end if ;
return Resultat ;
end Delta_Cap ;
procedure Tester_Delta_Cap (CapA : Float ; CapV : Float) is
begin
Txt.Put_Line (Aff => "Delta_Cap " & Float'Image( CapA ) & ", " &
Float'Image( CapV ) & " = " &
Float'Image( Delta_Cap(Cap_Actuel => CapA, Cap_Voulu => CapV)) ) ;
end Tester_Delta_Cap ;
function Caps_Egaux (Cap1 : Float ; Cap2 : Float) return Boolean is
Tolerance : constant Float := 5.0 ;
begin
return abs (Delta_Cap ( Cap_Actuel => Cap1, Cap_Voulu => Cap2)) < Tolerance ;
end Caps_Egaux ;
procedure Tester_Caps_Egaux (Cap1, Cap2 : Float) is
begin
Txt.Put (Aff => "Les caps " & Float'Image(Cap1) & " et " &
Float'Image(Cap2) & " ") ;
if Caps_Egaux(Cap1, Cap2) then
Txt.Put_Line (Aff => " sont égaux (à 5 degrés près).") ;
else
Txt.Put_Line (Aff => " ne sont pas égaux (à 5 degrés près).") ;
end if ;
end Tester_Caps_Egaux ;
begin
Tester_Delta_Cap (CapA => 0.0, CapV => 45.0) ;
Tester_Delta_Cap (CapA => 45.0, CapV => 0.0) ;
Tester_Delta_Cap (CapA => 350.0, CapV => 10.0) ;
Tester_Delta_Cap (CapA => 10.0, CapV => 350.0) ;
Tester_Delta_Cap (CapA => 30.0, CapV => 285.0) ;
Tester_Caps_Egaux (Cap1 => 0.0, Cap2 => 10.0) ;
Tester_Caps_Egaux (Cap1 => -10.0, Cap2 => 0.0) ;
Tester_Caps_Egaux (Cap1 => 358.0, Cap2 => 2.0) ;
end Mission2B0 ;