Anonymous user
Fractran: Difference between revisions
m
→{{header|REXX}}: added whitespace and changed some comments, used templates for the output sections.
m (→{{header|REXX}}: added whitespace and changed some comments, used templates for the output sections.) |
|||
Line 2,763:
numeric digits 2000 /*be able to handle larger numbers. */
parse arg N terms fracs /*obtain optional arguments from the CL*/
if N=='' | N=="," then
if terms=='' | terms=="," then terms=
if fracs='' then fracs= '17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23,',
'77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1'
/* [↑] The default for the fractions. */
f= space(fracs, 0)
do #=1 while f\==''; parse var f n.# '/' d.# "," f
end /*#*/
#= # -
say # 'fractions:' fracs /*display number and actual fractions. */
say 'N is starting at ' N /*display the starting number N. */
Line 2,780:
if N//d.k\==0 then iterate /*Not an integer? Then ignore it. */
say right('term' j, 35) "──► " N /*display the Nth term with the N. */
N= N % d.k * n.k
iterate j /*go start calculating the next term. */
end /*k*/ /* [↑] if an integer, we found a new N*/
end /*j*/ /*stick a fork in it, we're all done. */</lang>
<pre style="height:63ex">
14 fractions: 17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23, 77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1
Line 2,894:
Programming note: if the number of terms specified (the 2<sup>nd</sup> argument) is negative, then only powers of two are displayed.
<lang rexx>/*REXX program runs FRACTRAN for a given set of fractions and from a specified N. */
numeric digits 999;
parse arg N terms fracs /*obtain optional arguments from the CL*/
if N=='' | N=="," then
if terms=='' | terms=="," then terms=
if fracs='' then fracs= '17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23,',
'77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1'
/* [↑] The default for the fractions. */
f=space(fracs, 0) /*remove all blanks from the FRACS list*/
do #=1 while f\==''; parse var f n.# '/' d.# "," f
end /*#*/
#= # -
tell= terms>0 /*flag: show number or a power of 2.*/
!.= 0;
if \tell then do p=1 until length(_)>digits(); _= _ + _; !._= 1
if p==1 then @._= left('', w + 9)
else @._= '(prime' right(p, w)") 2**"left(p, w) ' '
end /*p*/ /* [↑] build powers of 2 tables. */
L= length(N)
say # 'fractions:' fracs /*display number and actual fractions. */
say 'N is starting at ' N /*display the starting number N. */
if tell then say terms ' terms are being shown:'
else say 'only powers of two are being shown:'
q='(max digits used:' /*a literal used in the SAY below. */
<br>(negative fifty million)
<pre>
|