_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

EFACTORIALS

FILE INFORMATION

FILENAME(S): EFACTORIALS

FILE TYPE(S): SEQ

FILE SIZE: 1.5K

FIRST SEEN: 2025-11-30 21:07:03

APPEARS ON: 1 disk(s)

FILE HASH

a5d81252e8ae7bda2d2285f0cde00b6565a31a41a9eef44c6a06aff13c1b13e9

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
UTILITY PET 02 EFACTORIALS SEQ DuncanTwain 30 5 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL