10 REM ******* FAKULTET & ANNAT ****** 11 REM * * 12 REM * MICHAEL WIDENIUS 08-03-1982 * 13 REM * * 14 REM ******************************* 15 REM OMR]DE : MATEMATIK 16 REM 17 COMMON Meny$=16%,Qwerty$=16%,Highcolour%,Rambuffer%,Qwerty1%,Qwerty2%,Qwerty3% 18 DIM A$=160%,A$(40%)=100% 19 L{ngd%=90% 20 IF LEN(CVTF$(0%))=4% THEN 25 21 Dec$=".0000000000" : Dec%=10% 22 Maxim=9.9999999999998E+13 23 DIGITS 13% 24 GOTO 29 25 Dec$=".0000000" : Dec%=7% 26 Maxim=999987 27 DIGITS 6% 28 ! 29 ; CHR$(12%) RED DBLE TAB(13%) "FAKULTET" 30 ; : ; : ; 31 ; CYA "V[LJ \NSKAT R[KNES[TT:" 32 ; 33 ; GRN "!" WHT "el." GRN "!!" CYA "==> FAKULTETER" WHT " (!n=....)" 34 ; GRN "P" CYA "==> PERMUTATIONER" WHT " (Pn,m=....)" 35 ; GRN "C" CYA "==> KOMBINATIONER" WHT " (Cn,m=....)" 36 ; GRN "F" CYA "==> FAKTORER" WHT " (Fn=.....)" 37 ; 38 ; CYA "D[R 'n' OCH 'm' ST]R F\R TAL !" 39 ; : ; 40 Error%=0% 41 ON ERROR GOTO 62 42 ; YEL; : INPUT LINE A$ : ; 43 IF LEN(A$)=2% THEN 42 44 A$=LEFT$(A$,LEN(A$)-2%) 45 ; 46 IF LEN(A$)=1% THEN 54 47 IF A$="TEXT" THEN 29 48 IF A$="SLUT" THEN 83 49 IF INSTR(1%,A$,".") OR A$=STRING$(LEN(A$),33%) THEN 68 50 ! FLYTTA "!" F\RST 51 IF RIGHT$(A$,LEN(A$))="!" THEN A$="!"+LEFT$(A$,LEN(A$)-1%) : GOTO 51 52 B$=LEFT$(A$,1%) : A$=RIGHT$(A$,2%) : A%=INSTR(1%,"!PCF",B$) 53 B$=" "+B$ 54 IF A%=0% THEN 78 55 ON ERROR GOTO 66 56 ON A% GOSUB 125,139,139,89 57 ON Error%+1% GOTO 58,68,70,72,74,76 58 ; : ; CYA "ABC800" : GOTO 40 59 REM 60 REM *** ERRORMEDDELANDENA *** 61 REM 62 Skr%=SYS(6%) : GET Skr$ 63 IF ASCII(Skr$)=192% RESUME 29 64 IF ASCII(Skr$)=231% RESUME 83 65 ; CHR$(7%,13%); : RESUME 41 66 Error%=4%-(ERRCODE=130%) : RESUME 67 67 RETURN 68 ; CHR$(7%) RED "FELAKTIGT TAL" 69 GOTO 40 70 ; CHR$(7%) RED "FELAKTIGT TALOMR]DE" 71 GOTO 40 72 ; CHR$(7%) RED "TALF\RH]LLANDET OGILTIGT" 73 GOTO 40 74 ; CHR$(7%) RED "SYNTAX FEL !" 75 GOTO 40 76 ; CHR$(7%) RED "F\R STORT TAL" 77 GOTO 40 78 ; CHR$(7%) RED "FELAKTIG OPERATION" 79 GOTO 40 80 REM 81 REM *** SLUT *** 82 REM 83 ON ERROR GOTO 85 84 CHAIN Meny$ 85 END 86 REM 87 REM *** FAKTORERING *** 88 REM 89 IF LEN(A$)>50% OR A$="0" OR ABS(VAL(A$))=1% THEN Error%=2% : RETURN 90 ! 91 ! F\RST BER[KNAS MED DECIMALTAL 92 ! 93 B$="0" : Max=Maxim : B1%=0% 94 IF VAL(A$)<0% THEN I$="-1" : GOSUB 111 95 IF A$="2" THEN 117 96 I=3% : I$="2" 97 WHILE INSTR(1%,DIV$(A$,"2",1%),".0") : GOSUB 111 : WEND 98 M=SQR(VAL(A$))+1% : IF MM THEN 117 102 ! 103 ! OCH SEDAN "REN" STR[NGARITMETIK 104 ! 105 I$=NUM$(I-4%) 106 I$=ADD$(I$,"2",0%) 107 C$=DIV$(A$,I$,Dec%) : IF INSTR(1%,C$,Dec$) GOSUB 111 : GOTO 107 108 IF COMP%(C$,I$)<>-1% THEN 106 109 GOTO 117 110 ! SKRIVER FAKTORERNA 111 IF I$=B$ THEN Z%=Z%+1% : GOTO 115 112 IF B1%<>1% THEN ; " FAKTORER :" : ; : B1%=1% : GOTO 114 113 ; " " B$ " **" Z% 114 Z%=1% : B$=I$ 115 A$=DIV$(A$,I$,0%) : RETURN 116 ! F[RDIG 117 IF B1%<>1% THEN ; MAG "TALET [R ETT PRIMTAL" : RETURN 118 IF A$=B$ THEN ; " " B$ " **" Z%+1% : RETURN 119 ; " " B$ " **" Z% 120 IF A$<>"1" THEN ; " " A$ " ** 1" 121 RETURN 122 REM 123 REM *** FAKULTET *** 124 REM 125 IF LEFT$(A$,1%)="!" THEN A%=VAL(RIGHT$(A$+" ",2%)) : GOTO 151 126 N%=VAL(A$) : IF N%<0% OR N%>10000% THEN Error%=1% : RETURN 127 IF N%>33% THEN 132 128 A=1% : FOR A%=2% TO N% : A=A*A% : NEXT A% 129 ; N% "! =" A 130 RETURN 131 ! ** ENLIGT FORMEL ** 132 A=LOG10(SQR(2%*PI*N%))+N%*LOG10(N%/2.71828)+LOG10(EXP(1%/(12*N%))) 133 I=INT(A) : A=A-I 134 ; N% "! =" NUM$(10%^A) "E+" NUM$(I) 135 RETURN 136 REM 137 REM PERMUTATIONER OCH KOMBINATIONER 138 REM 139 N%=INSTR(1%,A$,",") 140 IF N%=0% OR N%=LEN(A$) THEN Error%=1% : RETURN 141 M%=VAL(LEFT$(A$,N%-1%)) : N%=VAL(RIGHT$(A$,N%+1%)) 142 IF M%<0% OR N%<0% OR M%M% THEN N%=M%-N% 145 FOR M%=M% TO M%-N%+1% STEP -1% 146 IF A%=2% THEN A=A*M% ELSE A=A*M%/N% : N%=N%-1% 147 NEXT M% 148 ; B$ "(" NUM$(M1%) "/" NUM$(N1%) ")=" NUM$(A) 149 RETURN 150 REM 151 REM * FAKULTET MED ALLA SIFFROR * 152 REM 153 IF A%<0% OR A%>1000% THEN Error%=2% : RETURN 154 A$(0%)="1" : Z%=0% 155 FOR I%=2% TO A% : B$="0" 156 FOR J%=0% TO Z% 157 A$(J%)=ADD$(MUL$(A$(J%),NUM$(I%),0%),B$,0%) 158 B$="0" 159 IF LEN(A$(J%))>L{ngd% THEN B$=LEFT$(A$(J%),LEN(A$(J%))-L{ngd%) : A$(J%)=RIGHT$(A$(J%),LEN(B$)+1%) 160 NEXT J% 161 IF B$<>"0" THEN A$(J%)=B$ : Z%=Z%+1% 162 NEXT I% 163 C%=0% : ; A% "! = " A$(Z%); 164 FOR I%=Z%-1% TO 0% STEP -1% 165 ; STRING$(L{ngd%-LEN(A$(I%)),48%);A$(I%); 166 ! ** BILDRUTAN FULL ? ** 167 C%=C%+L{ngd% : IF C%<700% THEN 171 168 ; : ; "- Forts{ttning f|ljer:"; 169 GET A$ COUNT 1%-(SYS(5%)<>0%) 170 C%=0% : ; CHR$(12%); 171 NEXT I% 172 ; : ; : ; " (";LEN(A$(Z%))+Z%*L{ngd% "siffror )" 173 RETURN