RosettaCodeData/Task/Trigonometric-functions/ALGOL-W/trigonometric-functions.alg
2023-07-01 13:44:08 -04:00

62 lines
2.9 KiB
Text

begin
% Algol W only supplies sin, cos and arctan as standard. We can define %
% arcsin, arccos and tan functions using these. The standard functions %
% use radians so we also provide versions that use degrees %
% convert degrees to radians %
real procedure toRadians( real value x ) ; pi * ( x / 180 );
% convert radians to degrees %
real procedure toDegrees( real value x ) ; 180 * ( x / pi );
% tan of an angle in radians %
real procedure tan( real value x ) ; sin( x ) / cos( x );
% arcsin in radians %
real procedure arcsin( real value x ) ; arctan( x / sqrt( 1 - ( x * x ) ) );
% arccos in radians %
real procedure arccos( real value x ) ; arctan( sqrt( 1 - ( x * x ) ) / x );
% sin of an angle in degrees %
real procedure sinD( real value x ) ; sin( toRadians( x ) );
% cos of an angle in degrees %
real procedure cosD( real value x ) ; cos( toRadians( x ) );
% tan of an angle in degrees %
real procedure tanD( real value x ) ; tan( toRadians( x ) );
% arctan in degrees %
real procedure arctanD( real value x ) ; toDegrees( arctan( x ) );
% arcsin in degrees %
real procedure arcsinD( real value x ) ; toDegrees( arcsin( x ) );
% arccos in degrees %
real procedure arccosD( real value x ) ; toDegrees( arccos( x ) );
% test the procedures %
begin
real piOver4, piOver3, oneOverRoot2, root3Over2;
piOver3 := pi / 3; piOver4 := pi / 4;
oneOverRoot2 := 1.0 / sqrt( 2 ); root3Over2 := sqrt( 3 ) / 2;
r_w := 12; r_d := 5; r_format := "A"; s_w := 0; % set output format %
write( "PI/4: ", piOver4, " 1/root(2): ", oneOverRoot2 );
write();
write( "sin 45 degrees: ", sinD( 45 ), " sin pi/4 radians: ", sin( piOver4 ) );
write( "cos 45 degrees: ", cosD( 45 ), " cos pi/4 radians: ", cos( piOver4 ) );
write( "tan 45 degrees: ", tanD( 45 ), " tan pi/4 radians: ", tan( piOver4 ) );
write();
write( "arcsin( sin( pi/4 radians ) ): ", arcsin( sin( piOver4 ) ) );
write( "arccos( cos( pi/4 radians ) ): ", arccos( cos( piOver4 ) ) );
write( "arctan( tan( pi/4 radians ) ): ", arctan( tan( piOver4 ) ) );
write();
write( "PI/3: ", piOver4, " root(3)/2: ", root3Over2 );
write();
write( "sin 60 degrees: ", sinD( 60 ), " sin pi/3 radians: ", sin( piOver3 ) );
write( "cos 60 degrees: ", cosD( 60 ), " cos pi/3 radians: ", cos( piOver3 ) );
write( "tan 60 degrees: ", tanD( 60 ), " tan pi/3 radians: ", tan( piOver3 ) );
write();
write( "arcsin( sin( 60 degrees ) ): ", arcsinD( sinD( 60 ) ) );
write( "arccos( cos( 60 degrees ) ): ", arccosD( cosD( 60 ) ) );
write( "arctan( tan( 60 degrees ) ): ", arctanD( tanD( 60 ) ) );
end
end.