The program uses mainly the stack to do all calculations. It makes heavily use of the Free42 FUNC statement to preserve the stack after usage. I used version 3.03 of free42.
You can either enter the values like this
numerator ENTER denominator ENTER numerator ENTER denominator XEQ function
or like this
numerator ENTER denominator COMPLEX numerator ENTER denominator COMPLEX XEQ function
The way the return values are shown depends on the way you've entered the input values: as X/Y value in the first version on the stack or as a "complex" in the X xstack in the second
Use XEQ "Frac" to start the program and display the menu.
"Q+", "Q-", "Q×", "Q÷" do exaclty what their name implies.
"Qreduc" reduces a fraction.
"Qshow" displays a pretty printed version of a fraction in the ALPHA register.
Click here to download the fractions.raw file.
00 { 532-Byte Prgm } 01▸LBL "GCD" 02 FUNC 21 03 ABS 04 X<>Y 05 ABS 06 X>Y? 07 X<>Y 08▸LBL 06 09 MOD 10 LASTX 11 X<>Y 12 X≠0? 13 GTO 06 14 X<>Y 15 RTN 16▸LBL "Qreduc" 17 CF 02 18 CPX? 19 SF 02 20 FC? 02 21 FUNC 22 22 FS? 02 23 FUNC 11 24 FS? 02 25 COMPLEX 26 XEQ "Qsign" 27 STO ST T 28 X<>Y 29 X=0? 30 GTO 01 31 STO ST Z 32 XEQ "GCD" 33 ÷ 34 X<>Y 35 LASTX 36 ÷ 37 FS?C 02 38 COMPLEX 39 RTN 40▸LBL 01 41 0 42 1 43 FS?C 02 44 COMPLEX 45 RTN 46▸LBL "Q×" 47 CF 02 48 CPX? 49 SF 02 50 FC? 02 51 FUNC 22 52 FS? 02 53 FUNC 21 54 FS? 02 55 XEQ 99 56 RCL× ST Z 57 X<>Y 58 RCL× ST T 59 X<>Y 60 FS?C 02 61 COMPLEX 62 XEQ "Qreduc" 63 RTN 64▸LBL 99 65 X<>Y 66 COMPLEX 67 RCL ST Z 68 COMPLEX 69 RTN 70▸LBL "Q÷" 71 CF 03 72 CPX? 73 SF 03 74 FC? 03 75 FUNC 22 76 FS? 03 77 FUNC 21 78 FS? 03 79 XEQ 99 80 X<>Y 81 XEQ "Q×" 82 FS?C 03 83 COMPLEX 84 RTN 85▸LBL "Q+" 86 CF 03 87 CPX? 88 SF 03 89 FC? 03 90 FUNC 22 91 FS? 03 92 FUNC 21 93 FS? 03 94 XEQ 99 95 R↓ 96 R↓ 97 XEQ "Qreduc" 98 LSTO "D" 99 R↑ 100 R↑ 101 XEQ "Qreduc" 102 STO× ST Z 103 STO× ST T 104 RCL× "D" 105 X<>Y 106 RCL× "D" 107 RCL+ ST T 108 X<>Y 109 XEQ "Qreduc" 110 FS?C 03 111 COMPLEX 112 RTN 113▸LBL "Q-" 114 CF 04 115 CPX? 116 SF 04 117 FC? 04 118 FUNC 22 119 FS? 04 120 FUNC 21 121 FS? 04 122 XEQ 99 123 +/- 124 XEQ "Q+" 125 FS?C 04 126 COMPLEX 127 RTN 128▸LBL "Qsign" 129 FUNC 22 130 RCL ST Y 131 RCL ST Y 132 ÷ 133 SIGN 134 RCL ST Z 135 ABS 136 × 137 RCL ST Y 138 ABS 139 RTN 140▸LBL "Qshow" 141 FUNC 00 142 CPX? 143 COMPLEX 144 "0" 145 X<>Y 146 X=0? 147 GTO 04 148 X<>Y 149 CLA 150 RCL ST Y 151 RCL ST Y 152 ÷ 153 X<0? 154 XEQ 03 155 IP 156 X≠0? 157 AIP 158 X≠0? 159 ├" " 160 R↓ 161 ABS 162 X<>Y 163 ABS 164 X<>Y 165 MOD 166 X=0? 167 GTO 04 168 AIP 169 ├"/" 170 LASTX 171 AIP 172▸LBL 04 173 AVIEW 174 RTN 175▸LBL 03 176 "-" 177 ABS 178 RTN 179▸LBL "Fract" 180▸LBL 00 181 CLMENU 182 "Q+" 183 KEY 1 XEQ "Q+" 184 "Q-" 185 KEY 2 XEQ "Q-" 186 "Q×" 187 KEY 3 XEQ "Q×" 188 "Q÷" 189 KEY 4 XEQ "Q÷" 190 "Qreduc" 191 KEY 5 XEQ "Qreduc" 192 "Qshow" 193 KEY 6 XEQ "Qshow" 194 KEY 7 GTO 02 195 KEY 8 GTO 02 196 KEY 9 GTO 05 197 MENU 198 RTN 199 GTO 00 200▸LBL 02 201 CLMENU 202 "Qsign" 203 KEY 1 XEQ "Qsign" 204 "GCD" 205 KEY 6 XEQ "GCD" 206 KEY 7 GTO 00 207 KEY 8 GTO 00 208 KEY 9 GTO 05 209 MENU 210 STOP 211 GTO 02 212▸LBL 05 213 RTN 214 END
This program is provided by Juergen Keil "as is" and "with all faults." Juergen Keil makes no representations or warranties of any kind concerning the safety, suitability, lack of viruses, inaccuracies, typographical errors, or other harmful components of this software.