Hofstadter Q sequence: Difference between revisions
Content added Content deleted
m (→{{header|Quackery}}: simplified bounds check in qpeek) |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 2,634: | Line 2,634: | ||
TALLY= 49798; |
TALLY= 49798; |
||
</pre> |
</pre> |
||
=={{header|PL/M}}== |
|||
<lang plm>100H: |
|||
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS; |
|||
EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT; |
|||
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT; |
|||
PRINT$NUMBER: PROCEDURE (N); |
|||
DECLARE S (7) BYTE INITIAL ('..... $'); |
|||
DECLARE (N, P) ADDRESS, C BASED P BYTE; |
|||
P = .S(5); |
|||
DIGIT: |
|||
P = P - 1; |
|||
C = N MOD 10 + '0'; |
|||
N = N / 10; |
|||
IF N > 0 THEN GO TO DIGIT; |
|||
CALL PRINT(P); |
|||
END PRINT$NUMBER; |
|||
DECLARE Q (1001) ADDRESS; |
|||
DECLARE N ADDRESS; |
|||
Q(1)=1; |
|||
Q(2)=1; |
|||
DO N=3 TO LAST(Q); |
|||
Q(N) = Q(N-Q(N-1)) + Q(N-Q(N-2)); |
|||
END; |
|||
CALL PRINT(.'THE FIRST 10 TERMS ARE: $'); |
|||
DO N=1 TO 10; |
|||
CALL PRINT$NUMBER(Q(N)); |
|||
END; |
|||
CALL PRINT(.(13,10,'THE 1000TH TERM IS: $')); |
|||
CALL PRINT$NUMBER(Q(1000)); |
|||
CALL EXIT; |
|||
EOF</lang> |
|||
{{out}} |
|||
<pre>THE FIRST 10 TERMS ARE: 1 1 2 3 3 4 5 5 6 6 |
|||
THE 1000TH TERM IS: 502</pre> |
|||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |