2016 Update

This commit is contained in:
Tina Müller 2016-12-05 22:15:40 +01:00
parent 948b86eafa
commit dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions

View file

@ -1,16 +1,16 @@
/*REXX pgm converts an integer (or a range)──►van der Corput # in base 2*/
numeric digits 1000 /*handle anything the user wants.*/
parse arg a b . /*obtain the number(s) [maybe]. */
if a=='' then do; a=0; b=10; end /*if none specified, use defaults*/
if b=='' then b=a /*assume a "range" of a single #.*/
/*REXX program converts an integer (or a range) ──► a Van der Corput number in base 2.*/
numeric digits 1000 /*handle almost anything the user wants*/
parse arg a b . /*obtain the optional arguments from CL*/
if a=='' then parse value 0 10 with a b /*Not specified? Then use the defaults*/
if b=='' then b=a /*assume a range for a single number.*/
do j=a to b /*traipse through the range. */
_=vdC(abs(j)) /*convert ABS value of integer.*/
leading=substr('-',2+sign(j)) /*if needed, elide leading sign.*/
say leading || _ /*show number (with leading - ?)*/
do j=a to b /*traipse through the range of numbers.*/
_=VdC( abs(j) ) /*convert absolute value of an integer.*/
leading=substr('-', 2 + sign(j) ) /*if needed, elide the leading sign. */
say leading || _ /*show number, with leading minus sign?*/
end /*j*/
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────VDC [van der Corput] subroutine─────*/
vdC: procedure; y=x2b(d2x(arg(1)))+0 /*convert to hex, then binary. */
if y==0 then return 0 /*handle special case of zero. */
else return '.'reverse(y) /*heavy lifting by REXX*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
VdC: procedure; y=x2b( d2x( arg(1) ) ) + 0 /*convert to hexadecimal, then binary.*/
if y==0 then return 0 /*handle the special case of zero. */
else return '.'reverse(y) /*heavy lifting is performed by REXX. */

View file

@ -1,56 +1,52 @@
/*REXX pgm converts an integer (or a range) ──► van der Corput number */
/*in base 2, or optionally, any other base up to and including base 90.*/
numeric digits 1000 /*handle anything the user wants.*/
parse arg a b r . /*obtain the number(s) [maybe]. */
if a=='' then do; a=0; b=10; end /*if none specified, use defaults*/
if b=='' then b=a /*assume a "range" of a single #.*/
if r=='' then r=2 /*assume a radix (base) of 2. */
z= /*placeholder for a list of nums.*/
do j=a to b /*traipse through the range. */
_=vdC(abs(j), abs(r)) /*convert ABS value of integer.*/
_=substr('-', 2+sign(j))_ /*if needed, keep leading - sign.*/
if r>0 then say _ /*if positive base, just show it.*/
else z=z _ /* ··· else build a list· */
/*REXX program converts an integer (or a range) ──► a Van der Corput number, */
/*─────────────── in base 2, or optionally, any other base up to and including base 90.*/
numeric digits 1000 /*handle almost anything the user wants*/
parse arg a b r . /*obtain optional arguments from the CL*/
if a=='' | a=="," then parse value 0 10 with a b /*Not specified? Then use the defaults*/
if b=='' | b=="," then b=a /* " " " " " " */
if r=='' | r=="," then r=2 /* " " " " " " */
z= /*a placeholder for a list of numbers. */
do j=a to b /*traipse through the range of integers*/
_=VdC( abs(j), abs(r) ) /*convert the ABSolute value of integer*/
_=substr('-', 2+sign(j) )_ /*if needed, keep the leading - sign.*/
if r>0 then say _ /*if positive base, then just show it. */
else z=z _ /* ··· else append (build) a list. */
end /*j*/
if z\=='' then say strip(z) /*if list wanted, then show it. */
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────BASE subroutine (up to base 90)─────*/
base: procedure; parse arg x,toB,inB /*get a number, toBase, inBase */
/*┌────────────────────────────────────────────────────────────────────┐
Input to this subroutine (all must be positive whole numbers):
x (is required).
toBase the base to convert X to.
inBase the base X is expressed in.
toBase or inBase can be omitted which causes the default of
10 to be used. The limits of both are: 2 90.
*/
@abc='abcdefghijklmnopqrstuvwxyz' /*Latin lowercase alphabet chars.*/
@abcU=@abc; upper @abcU /*go whole hog and extend chars. */
@@@=0123456789 || @abc || @abcU /*prefix 'em with numeric digits.*/
@@@=@@@'<>[]{}()?~!@#$%^&*_+-=|\/;:~' /*add some special chars as well,*/
/*spec. chars should be viewable.*/
numeric digits 1000 /*what the hey, support biggies. */
maxB=length(@@@) /*max base (radix) supported here*/
parse arg x,toB,inB /*get a number, toBase, inBase */
if toB=='' then toB=10 /*if skipped, assume default (10)*/
if inB=='' then inB=10 /* " " " " " */
/*══════════════════════════════════convert X from base inB ──► base 10.*/
#=0; do j=1 for length(x)
_=substr(x,j,1) /*pick off a "digit" from X. */
v=pos(_,@@@) /*get the value of this "digits".*/
if v==0 | v>inB then call erd x,j,inB /*illegal "digit" ? */
#=#*inB + v - 1 /*construct new num, dig by dig. */
end /*j*/
/*══════════════════════════════════convert # from base 10 ──► base toB.*/
y=; do while #>=toB /*deconstruct the new number (#).*/
y=substr(@@@,(#//toB)+1,1)y /* construct the output number. */
#=# % toB /*··· and whittle # down also. */
end /*while*/
if z\=='' then say strip(z) /*if a list is wanted, then display it.*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
base: procedure; parse arg x, toB, inB /*get a number, toBase, and inBase. */
/*┌───────────────────────────────────────────────────────────────────┐
Input to this function: x (is required & must be an integer).
toBase the base to convert X to.
inBase the base X is expressed in.
toBase or inBase can be omitted which causes the default of 10
to be used. Both have a limit of: 2 90.
*/
@abc= 'abcdefghijklmnopqrstuvwxyz' /*the Latin lowercase alphabet chars. */
@abcU=@abc; upper @abcU /*go whole hog and extend characters. */
@@@= 0123456789 || @abc || @abcU /*prefix them with some numeric digits.*/
@@@= @@@'<>[]{}()?~!@#$%^&*_+-=|\/;:`' /*add some special characters as well, */
/*special characters should be viewable*/
numeric digits 1000 /*what the hey, support biggy numbers.*/
maxB=length(@@@) /*maximum base (radix) supported here. */
if toB=='' then toB=10 /*if skipped, then assume default (10)*/
if inB=='' then inB=10 /* " " " " " " */
#=0 /* [↓] convert base inB X ──► base 10*/
do j=1 for length(x)
_=substr(x, j, 1) /*pick off a "digit" (numeral) from X.*/
v=pos(_, @@@) /*get the value of this "digit"/numeral*/
if v==0|v>inB then call erd x,j,inB /*is it an illegal "digit" (numeral) ? */
#=#*inB + v - 1 /*construct new number, digit by digit.*/
end /*j*/
y= /* [↓] convert base 10 # ──► base toB.*/
do while #>=toB /*deconstruct the new number (#). */
y=substr(@@@, #//toB + 1, 1)y /* construct the output number, ··· */
#=# % toB /* ··· and also whittle down #. */
end /*while*/
return substr(@@@,#+1,1)y
/*──────────────────────────────────VDC [van der Corput] subroutine─────*/
vdC: return '.'reverse(base(arg(1),arg(2))) /*convert, reverse, append.*/
return substr(@@@, #+1, 1)y
/*──────────────────────────────────────────────────────────────────────────────────────*/
VdC: return '.'reverse(base(arg(1), arg(2))) /*convert the #, reverse the #, append.*/