10 REM ************ BR]K ************* 11 REM * * 12 REM * MICHAEL WIDENIUS 19-09-1981 * 13 REM * * 14 REM ******************************* 15 REM 16 COMMON Meny$=16,Qwerty$=16,Highcolour,Rambuffer,Qwerty1,Qwerty2,Qwerty3 17 DIM A$(50,1)=130,A(60),C$(2)=40,A$=160,B$=1,Z$=130,Z1$=130,Z2$=130,C(7) 18 FOR I=1 TO 7 19 READ C(I) 20 NEXT I 21 DATA 2,2,3,3,1,1,0 22 REM 23 REM *** INSTRUKTIONER *** 24 REM 25 ; CHR$(12) TAB(16) RED DBLE "BR]K" 26 ; 27 ; "Med detta program kan du r{kna de fyra" 28 ; "enkla r{knes{tten +, -, * och / med" 29 ; "br}k." 30 ; 31 ; "Ett br}k betecknas enligt m|nstret:" 32 ; YEL "HELTALSDEL:T[LJARE:N[MNARE" WHT "s} t.ex." 33 ; "2 2/3 betecknas 2:2:3." 34 ; 35 ; "Ett {kta br}k t.ex. 1/2 betecknas 1:2," 36 ; "medan ett heltal skrivs som vanligt." 37 ; 38 ; "Mellan talen skrivs r{knes{tten enligt" 39 ; "normalt m|nster." 40 ; 41 ; CYA "Exempel:" WHT "2:3:4+3:4*(5:6-4:7)" 42 ; 43 ; "Programmet {r nu redo. Skriv utr{kning-" 44 ; "arna nedan! (Programmet stannas med kom-" 45 ; "mandot" RED "SLUT" WHT ")." 46 REM 47 REM *** ANV[NDARMOD *** 48 REM 49 N9=10 ! NOGGRANHETEN 50 N9$="."+STRING$(N9,48) 51 ON ERROR GOTO 136 52 ; 53 INPUT " "A$ 54 IF A$="" THEN 52 55 IF A$="SLUT" OR A$="slut" THEN 141 56 IF INSTR(1,A$,"/0")=0 AND INSTR(1,A$,":0")=0 AND ASCII(A$)<>41 THEN 58 57 ; : ; YEL NWBG RED "FELAKTIG OPERATION " BLBG CHR$(7) : GOTO 105 58 IF LEN(A$)>130 THEN 57 59 REM 60 REM *** S\KER OPERATIONERNA *** 61 REM 62 A=0 : A(0)=0 : B=0 : F=0 : A$=A$+"!" 63 A=A+1 : GOSUB 119 : IF F 57 64 I=INSTR(1,"+-/*()!",B$) : C=C(I) 65 IF I=0 THEN 57 66 A(A)=C+SWAP%(I) : IF I=5 THEN 63 67 IF A=1 THEN IF I=6 THEN 76 ELSE IF I<>7 THEN 63 68 IF (A(A-1) AND 255)0 THEN 76 ELSE 73 71 GOSUB 80 72 IF (SWAP%(A(A)) AND 255)<5 THEN 68 73 IF C=0 IF A<>1 68 ELSE 96 74 IF A=1 THEN 76 75 IF (SWAP%(A(A-1)) AND 255)<>5 THEN 68 ELSE A=A-1 76 B$=LEFT$(A$,1) : A$=RIGHT$(A$,2) : GOTO 64 77 REM 78 REM *** UTR[KNINGAR *** 79 REM 80 S=SWAP%(A(A-1)) AND 255 : B=B-2 : S1=B+1 81 IF B<0 THEN 57 82 IF S>2 THEN 89 83 REM *** '+' OCH '-' *** 84 Z$=MUL$(A$(B,0),A$(S1,1),0) 85 Z1$=MUL$(A$(S1,0),A$(B,1),0) 86 IF S=1 THEN Z$=ADD$(Z$,Z1$,0) ELSE Z$=SUB$(Z$,Z1$,0) 87 A$(B,0)=Z$ : GOTO 91 88 REM *** '*' OCH '/' *** 89 IF S=3 Z$=A$(S1,0) : A$(S1,0)=A$(S1,1) : A$(S1,1)=Z$ 90 A$(B,0)=MUL$(A$(B,0),A$(S1,0),0) 91 A$(B,1)=MUL$(A$(S1,1),A$(B,1),0) 92 GOSUB 109 : B=S1 : A=A-1 : A(A)=A(A+1) : RETURN 93 REM 94 REM *** SVAR *** 95 REM 96 Z$=DIV$(A$(0,0),A$(0,1),4) : Z$=LEFT$(Z$,LEN(Z$)-5) 97 ; : ; CYA "SVAR = "; 98 IF Z$="-0" THEN Z$="0" 99 A$(0,0)=SUB$(A$(0,0),MUL$(A$(0,1),Z$,0),0) 100 IF A$(0,0)="0" ; Z$ : GOTO 105 101 IF Z$="0" ; A$(0,0) ":" A$(0,1) : Z$="" : GOTO 104 102 IF VAL(A$(0,0))<0 THEN A$(0,0)=RIGHT$(A$(0,0),2) 103 ; Z$ ":" A$(0,0) ":" A$(0,1) 104 ; : ; CYA "I DECIMALFORM = " Z$ RIGHT$(DIV$(A$(0,0),A$(0,1),N9),2) 105 GOTO 52 106 REM 107 REM *** F\RKORTAR TALET *** 108 REM 109 Z$=A$(B,0) : Z1$=A$(B,1) 110 IF Z$="0" OR Z$="1" OR Z1$="1" 115 111 Z2$=DIV$(Z$,Z1$,N9) : IF INSTR(1,Z2$,N9$) THEN 113 112 Z$=Z1$ : Z1$=MUL$(RIGHT$(Z2$,LEN(Z2$)-N9),Z$,0) : GOTO 111 113 A$(B,0)=DIV$(A$(B,0),Z1$,0) 114 A$(B,1)=DIV$(A$(B,1),Z1$,0) 115 RETURN 116 REM 117 REM *** S\KER N[STA TAL *** 118 REM 119 A1$="" : S=0 120 FOR I1=1 TO 40 : B$=LEFT$(A$,1) : A$=RIGHT$(A$,2) 121 IF B$>="0" AND B$<="9" OR B$="-" AND A1$="" AND S=0 A1$=A1$+B$ : NEXT I1 : GOTO 132 122 IF A1$="" IF B$="(" AND S=0 OR B$=")" RETURN ELSE 132 123 IF A1$="-" THEN 132 124 C$(S)=A1$ : A1$="" : IF B$=":" S=S+1 : IF S<3 THEN 120 ELSE 132 125 ON S+1 GOTO 126,127,128 126 C$(1)="1" 127 A$(B,0)=C$(0) : A$(B,1)=C$(1) : GOTO 131 128 IF VAL(C$(0))>=0 Z$="" ELSE Z$="-" : C$(0)=RIGHT$(C$(0),2) 129 A1$=Z$+ADD$(MUL$(C$(0),C$(2),0),C$(1),0) 130 A$(B,0)=A1$ : A$(B,1)=C$(2) 131 IF B$<>"(" GOSUB 109 : B=B+1 ELSE F=1 132 RETURN 133 REM 134 REM *** ERRORHANTERING *** 135 REM 136 IF ERRCODE=53 THEN 138 137 RESUME 57 138 S=SYS(6) : GET A$ 139 IF ASCII(A$)=231 THEN RESUME 141 140 ; CHR$(7,13); : RESUME 141 REM END 142 ON ERROR GOTO 144 143 CHAIN Meny$ 144 END