00000000: 0D 0D 0D 20 50 52 4F 47 52 41 4D 3A 0D 20 20 20 |... PROGRAM:. |
00000010: 20 20 46 41 43 54 4F 52 49 41 4C 53 20 2E 0D 0D | FACTORIALS ...|
00000020: 0D 0D 20 46 41 43 54 4F 52 49 41 4C 53 3A 0D 20 |.. FACTORIALS:. |
00000030: 20 20 20 20 45 58 50 4C 41 49 4E 20 3B 0D 20 20 | EXPLAIN ;. |
00000040: 20 20 20 4D 41 4B 45 20 52 4F 4F 4D 20 46 4F 52 | MAKE ROOM FOR|
00000050: 20 32 30 20 44 49 47 49 54 53 20 3B 0D 20 20 20 | 20 DIGITS ;. |
00000060: 20 20 53 54 41 52 54 20 41 54 20 4F 4E 45 20 3B | START AT ONE ;|
00000070: 0D 20 20 20 20 20 50 52 49 4E 54 20 41 4C 4C 20 |. PRINT ALL |
00000080: 46 41 43 54 4F 52 49 41 4C 53 20 3B 0D 20 20 20 |FACTORIALS ;. |
00000090: 20 20 50 55 54 20 28 20 22 53 4F 52 52 59 2C 53 | PUT ( "SORRY,S|
000000A0: 50 41 43 45 20 45 58 48 41 55 53 54 45 44 22 20 |PACE EXHAUSTED" |
000000B0: 29 20 3B 0D 20 20 20 20 20 4C 49 4E 45 20 28 20 |) ;. LINE ( |
000000C0: 31 20 29 20 2E 0D 0D 0D 0D 20 45 58 50 4C 41 49 |1 ) ..... EXPLAI|
000000D0: 4E 3A 0D 20 20 20 20 20 50 55 54 20 28 20 22 74 |N:. PUT ( "t|
000000E0: 48 49 53 20 50 52 4F 47 52 41 4D 20 43 4F 4D 50 |HIS PROGRAM COMP|
000000F0: 55 54 45 53 20 4E 20 46 41 43 54 4F 52 49 41 4C |UTES N FACTORIAL|
00000100: 20 49 4E 22 20 29 20 3B 0D 20 20 20 20 20 4C 49 | IN" ) ;. LI|
00000110: 4E 45 20 3B 0D 20 20 20 20 20 50 55 54 20 28 20 |NE ;. PUT ( |
00000120: 22 41 54 20 4D 4F 53 54 20 32 30 20 44 49 47 49 |"AT MOST 20 DIGI|
00000130: 54 53 2C 49 54 20 53 48 4F 57 53 20 48 4F 57 20 |TS,IT SHOWS HOW |
00000140: 52 55 4E 22 20 29 20 3B 0D 20 20 20 20 20 4C 49 |RUN" ) ;. LI|
00000150: 4E 45 20 3B 0D 20 20 20 20 20 50 55 54 20 28 20 |NE ;. PUT ( |
00000160: 22 54 49 4D 45 20 45 52 52 4F 52 53 20 4C 45 41 |"TIME ERRORS LEA|
00000170: 44 20 54 4F 20 41 20 54 52 41 43 45 20 42 41 43 |D TO A TRACE BAC|
00000180: 4B 2E 22 20 29 20 3B 0D 20 20 20 20 20 4C 49 4E |K." ) ;. LIN|
00000190: 45 20 28 20 32 20 29 20 3B 0D 20 20 20 20 20 50 |E ( 2 ) ;. P|
000001A0: 55 54 20 28 20 22 20 20 20 20 4E 20 44 49 47 49 |UT ( " N DIGI|
000001B0: 54 53 20 4E 21 20 22 20 29 20 3B 0D 20 20 20 20 |TS N! " ) ;. |
000001C0: 20 4C 49 4E 45 20 28 20 32 20 29 20 2E 0D 0D 0D | LINE ( 2 ) ....|
000001D0: 0D 20 4D 41 4B 45 20 52 4F 4F 4D 20 46 4F 52 20 |. MAKE ROOM FOR |
000001E0: 32 30 20 44 49 47 49 54 53 3A 0D 20 20 20 20 20 |20 DIGITS:. |
000001F0: 72 6F 77 20 32 30 20 69 6E 74 20 76 61 72 20 4E |row 20 int var N|
00000200: 46 41 43 20 2E 0D 0D 0D 0D 20 53 54 41 52 54 20 |FAC ..... START |
00000210: 41 54 20 4F 4E 45 3A 0D 20 20 20 20 20 69 6E 74 |AT ONE:. int|
00000220: 20 76 61 72 20 4E 20 3A 3A 20 31 20 3B 0D 20 20 | var N :: 1 ;. |
00000230: 20 20 20 4E 46 41 43 20 5B 20 31 20 5D 20 3A 3D | NFAC [ 1 ] :=|
00000240: 20 31 20 3B 0D 20 20 20 20 20 69 6E 74 20 76 61 | 1 ;. int va|
00000250: 72 20 4D 41 58 20 3A 3A 20 31 20 2E 0D 0D 0D 0D |r MAX :: 1 .....|
00000260: 20 50 52 49 4E 54 20 41 4C 4C 20 46 41 43 54 4F | PRINT ALL FACTO|
00000270: 52 49 41 4C 53 3A 0D 20 20 20 20 20 72 65 70 0D |RIALS:. rep.|
00000280: 20 20 20 20 20 20 20 43 4F 4D 50 55 54 45 20 4E | COMPUTE N|
00000290: 45 58 54 20 46 41 43 54 4F 52 49 41 4C 20 3B 0D |EXT FACTORIAL ;.|
000002A0: 20 20 20 20 20 20 20 50 52 49 4E 54 20 49 54 0D | PRINT IT.|
000002B0: 20 20 20 20 20 75 6E 74 69 6C 0D 20 20 20 20 20 | until. |
000002C0: 20 20 46 41 4C 53 45 0D 20 20 20 20 20 65 6E 64 | FALSE. end|
000002D0: 72 65 70 20 2E 0D 0D 0D 0D 20 43 4F 4D 50 55 54 |rep ..... COMPUT|
000002E0: 45 20 4E 45 58 54 20 46 41 43 54 4F 52 49 41 4C |E NEXT FACTORIAL|
000002F0: 3A 0D 20 20 20 20 20 4E 20 69 6E 63 72 20 31 20 |:. N incr 1 |
00000300: 3B 0D 20 20 20 20 20 69 6E 74 20 76 61 72 20 43 |;. int var C|
00000310: 41 52 52 59 20 3A 3A 20 30 20 3B 0D 20 20 20 20 |ARRY :: 0 ;. |
00000320: 20 69 6E 74 20 76 61 72 20 49 20 3B 0D 20 20 20 | int var I ;. |
00000330: 20 20 66 6F 72 20 49 20 66 72 6F 6D 20 31 20 75 | for I from 1 u|
00000340: 70 74 6F 20 4D 41 58 0D 20 20 20 20 20 72 65 70 |pto MAX. rep|
00000350: 0D 20 20 20 20 20 20 20 43 4F 4D 50 55 54 45 20 |. COMPUTE |
00000360: 49 54 48 20 50 4F 53 49 54 49 4F 4E 0D 20 20 20 |ITH POSITION. |
00000370: 20 20 65 6E 64 72 65 70 20 3B 0D 20 20 20 20 20 | endrep ;. |
00000380: 50 52 4F 43 45 53 53 20 43 41 52 52 59 20 2E 0D |PROCESS CARRY ..|
00000390: 0D 0D 0D 20 50 52 49 4E 54 20 49 54 3A 0D 20 20 |... PRINT IT:. |
000003A0: 20 20 20 50 55 54 20 28 20 4E 20 29 20 3B 0D 20 | PUT ( N ) ;. |
000003B0: 20 20 20 20 50 55 54 20 28 20 4D 41 58 20 29 20 | PUT ( MAX ) |
000003C0: 3B 0D 20 20 20 20 20 50 55 54 20 28 20 22 20 20 |;. PUT ( " |
000003D0: 20 22 20 29 20 3B 0D 20 20 20 20 20 69 6E 74 20 | " ) ;. int |
000003E0: 76 61 72 20 4A 20 3B 0D 20 20 20 20 20 66 6F 72 |var J ;. for|
000003F0: 20 4A 20 66 72 6F 6D 20 4D 41 58 20 64 6F 77 6E | J from MAX down|
00000400: 74 6F 20 31 0D 20 20 20 20 20 72 65 70 0D 20 20 |to 1. rep. |
00000410: 20 20 20 20 20 50 55 54 20 28 20 4A 54 48 20 44 | PUT ( JTH D|
00000420: 49 47 49 54 20 29 0D 20 20 20 20 20 65 6E 64 72 |IGIT ). endr|
00000430: 65 70 20 3B 0D 20 20 20 20 20 4C 49 4E 45 20 2E |ep ;. LINE .|
00000440: 0D 0D 0D 0D 20 43 4F 4D 50 55 54 45 20 49 54 48 |.... COMPUTE ITH|
00000450: 20 50 4F 53 49 54 49 4F 4E 3A 0D 20 20 20 20 20 | POSITION:. |
00000460: 69 6E 74 20 76 61 72 20 46 49 47 55 52 45 20 3A |int var FIGURE :|
00000470: 3A 20 28 20 28 20 4E 46 41 43 20 5B 20 49 20 5D |: ( ( NFAC [ I ]|
00000480: 20 29 20 2A 20 4E 20 29 20 2B 20 43 41 52 52 59 | ) * N ) + CARRY|
00000490: 20 3B 0D 20 20 20 20 20 43 41 52 52 59 20 3A 3D | ;. CARRY :=|
000004A0: 20 46 49 47 55 52 45 20 64 69 76 20 31 30 20 3B | FIGURE div 10 ;|
000004B0: 0D 20 20 20 20 20 4E 46 41 43 20 5B 20 49 20 5D |. NFAC [ I ]|
000004C0: 20 3A 3D 20 46 49 47 55 52 45 20 2D 20 28 20 31 | := FIGURE - ( 1|
000004D0: 30 20 2A 20 43 41 52 52 59 20 29 20 2E 0D 0D 0D |0 * CARRY ) ....|
000004E0: 0D 20 4A 54 48 20 44 49 47 49 54 3A 0D 20 20 20 |. JTH DIGIT:. |
000004F0: 20 20 22 30 31 32 33 34 35 36 37 38 39 22 20 73 | "0123456789" s|
00000500: 75 62 20 28 20 28 20 4E 46 41 43 20 5B 20 4A 20 |ub ( ( NFAC [ J |
00000510: 5D 20 29 20 2B 20 31 20 29 20 2E 0D 0D 0D 0D 20 |] ) + 1 ) ..... |
00000520: 50 52 4F 43 45 53 53 20 43 41 52 52 59 3A 0D 20 |PROCESS CARRY:. |
00000530: 20 20 20 20 77 68 69 6C 65 0D 20 20 20 20 20 20 | while. |
00000540: 20 43 41 52 52 59 20 3E 20 30 0D 20 20 20 20 20 | CARRY > 0. |
00000550: 72 65 70 0D 20 20 20 20 20 20 20 46 49 47 55 52 |rep. FIGUR|
00000560: 45 20 3A 3D 20 43 41 52 52 59 20 3B 0D 20 20 20 |E := CARRY ;. |
00000570: 20 20 20 20 43 41 52 52 59 20 3A 3D 20 46 49 47 | CARRY := FIG|
00000580: 55 52 45 20 64 69 76 20 31 30 20 3B 0D 20 20 20 |URE div 10 ;. |
00000590: 20 20 20 20 4D 41 58 20 69 6E 63 72 20 31 20 3B | MAX incr 1 ;|
000005A0: 0D 20 20 20 20 20 20 20 4E 46 41 43 20 5B 20 4D |. NFAC [ M|
000005B0: 41 58 20 5D 20 3A 3D 20 46 49 47 55 52 45 20 2D |AX ] := FIGURE -|
000005C0: 20 28 20 31 30 20 2A 20 43 41 52 52 59 20 29 0D | ( 10 * CARRY ).|
000005D0: 20 20 20 20 20 65 6E 64 72 65 70 20 2E 0D | endrep .. |
... PROGRAM:. FACTORIALS ..... FACTO
RIALS:. EXPLAIN ;. MAKE ROOM FOR
20 DIGITS ;. START AT ONE ;. PR
INT ALL FACTORIALS ;. PUT ( "SORRY,S
PACE EXHAUSTED" ) ;. LINE ( 1 ) ....
. EXPLAIN:. PUT ( "THIS PROGRAM COMP
UTES N FACTORIAL IN" ) ;. LINE ;.
PUT ( "AT MOST 20 DIGITS,IT SHOWS HOW
RUN" ) ;. LINE ;. PUT ( "TIME ER
RORS LEAD TO A TRACE BACK." ) ;. LIN
E ( 2 ) ;. PUT ( " N DIGITS N! "
) ;. LINE ( 2 ) ..... MAKE ROOM FOR
20 DIGITS:. ROW 20 INT VAR NFAC ....
. START AT ONE:. INT VAR N :: 1 ;.
NFAC [ 1 ] := 1 ;. INT VAR MAX ::
1 ..... PRINT ALL FACTORIALS:. REP.
COMPUTE NEXT FACTORIAL ;. P
RINT IT. UNTIL. FALSE. END
REP ..... COMPUTE NEXT FACTORIAL:. N
INCR 1 ;. INT VAR CARRY :: 0 ;.
INT VAR I ;. FOR I FROM 1 UPTO MAX.
REP. COMPUTE ITH POSITION.
ENDREP ;. PROCESS CARRY ..... PRIN
T IT:. PUT ( N ) ;. PUT ( MAX )
;. PUT ( " " ) ;. INT VAR J ;.
FOR J FROM MAX DOWNTO 1. REP.
PUT ( JTH DIGIT ). ENDREP ;.
LINE ..... COMPUTE ITH POSITION:.
INT VAR FIGURE :: ( ( NFAC [ I ] ) * N )
+ CARRY ;. CARRY := FIGURE DIV 10 ;
. NFAC [ I ] := FIGURE - ( 10 * CARR
Y ) ..... JTH DIGIT:. "0123456789" S
UB ( ( NFAC [ J ] ) + 1 ) ..... PROCESS
CARRY:. WHILE. CARRY > 0.
REP. FIGURE := CARRY ;. CARR
Y := FIGURE DIV 10 ;. MAX INCR 1 ;
. NFAC [ MAX ] := FIGURE - ( 10 *
CARRY ). ENDREP ..
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL