Angle difference between two bearings: Difference between revisions

Added solution for Action!
(→‎JS ES6: Tidied)
(Added solution for Action!)
Line 131:
29.4803 -88.6361 -118.1164
-78.3251 -159.0360 -80.7109
</pre>
 
=={{header|Action!}}==
{{libheader|Action! Tool Kit}}
<lang Action!>INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
 
INT FUNC AngleI(INT a1,a2)
INT r
 
r=a2-a1
WHILE r>180 DO r==-360 OD
WHILE r<-180 DO r==+360 OD
RETURN (r)
 
PROC TestI(INT a1,a2)
INT r
 
r=AngleI(a1,a2)
PrintF("%I .. %I = %I%E",a1,a2,r)
RETURN
 
BYTE FUNC GreaterOrEqual(REAL POINTER left,right)
REAL diff
BYTE ARRAY x
 
RealSub(left,right,diff)
x=diff
IF (x(0)&$80)=$00 THEN
RETURN (1)
FI
RETURN (0)
 
PROC AngleR(REAL POINTER r1,r2,r)
REAL tmp,r180,rm180,r360
 
ValR("180",r180)
ValR("-180",rm180)
ValR("360",r360)
 
RealSub(r2,r1,r)
WHILE GreaterOrEqual(r,r180)
DO
RealSub(r,r360,tmp) RealAssign(tmp,r)
OD
WHILE GreaterOrEqual(rm180,r)
DO
RealAdd(r,r360,tmp) RealAssign(tmp,r)
OD
RETURN
 
PROC TestR(CHAR ARRAY s1,s2)
REAL r1,r2,r
 
ValR(s1,r1) ValR(s2,r2)
AngleR(r1,r2,r)
PrintR(r1) Print(" .. ") PrintR(r2)
Print(" = ") PrintRE(r)
RETURN
 
PROC Main()
Put(125) PutE() ;clear screen
TestI(20,45)
TestI(-45,45)
TestI(-85,90)
TestI(-95,90)
TestI(-45,125)
TestI(-45,145)
TestR("29.4803","-88.6381")
TestR("-78.3251","-159.036")
TestR("-70099.74233810938","29840.67437876723")
TestR("-165313.6666297357","33693.9894517456")
TestR("1174.8380510598456","-154146.66490124757")
TestR("60175.77306795546","42213.07192354373")
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Angle_difference_between_two_bearings.png Screenshot from Atari 8-bit computer]
<pre>
20 .. 45 = 25
-45 .. 45 = 90
-85 .. 90 = 175
-95 .. 90 = -175
-45 .. 125 = 170
-45 .. 145 = -170
29.4803 .. -88.6381 = -118.1184
-78.3251 .. -159.036 = -80.7109
-70099.7423 .. 29840.6743 = -139.5834
-165313.666 .. 33693.9894 = -72.3446
1174.83805 .. -154146.664 = -161.502
60175.773 .. 42213.0719 = 37.2989
</pre>
 
Anonymous user