10 REM-BASCAL-BASE CALCULATOR 15 REM HP 36847A, 6/74 20 REM-PETER KATZ, 10,30,73, RAVENSWOOD 30 PRINT "DO YOU WANT INSTRUCTIONS"; 40 INPUT B$[1,1] 50 IF B$[1,1]="N" THEN 170 60 PRINT "THIS PROGRAM IS A BASE CALCULATOR" 70 PRINT "FIRST YOU TELL THE COMPUTER YOUR COMMAND;" 80 PRINT "EITHER ADD, SUBTRACT, MULTIPLY, OR DIVIDE," 90 PRINT "THEN INPUT ANY TWO NUMBERS AND THEIR RESPECTIVE BASES (2-10)," 100 PRINT "AND THE BASE IN WHICH YOU WANT THE ANSWER PRINTED." 110 PRINT "THE COMPUTER WILL FIGURE OUT THE ANSWER AND PRINT IT" 120 PRINT "IN THAT BASE." 130 PRINT "NEGATIVE NUMBERS ARE ACCEPTABLE, BUT NOT FRACTIONS" 140 PRINT "OR DECIMALS." 150 PRINT "IN DIVISION, THE QUOTIENT IS ROUNDED OFF TO THE NEAREST" 160 PRINT "WHOLE NUMBER. (.5 AND UP IS ROUNDED TO 1)" 170 PRINT 180 DIM A$[4],R$[15] 190 A$="ASMD" 200 PRINT "ENTER YOUR COMMAND"; 210 INPUT F$[1,1] 220 FOR F=1 TO 4 230 IF F$[1,1]=A$[F,F] THEN 270 240 NEXT F 250 PRINT "INVALID COMMAND" 260 GOTO 200 270 PRINT "ENTER FIRST NUMBER"; 280 INPUT B[1] 290 PRINT "AND ITS BASE"; 300 INPUT Q[1] 310 PRINT "INPUT THE SECOND NUMBER"; 320 INPUT B[2] 330 PRINT "AND ITS BASE"; 340 INPUT Q[2] 350 PRINT "ENTER DESIRED BASE"; 360 INPUT Z 370 REM ****FOR NEXT LOOP CHECKS IF NUMBER AND BASE ARE ACCEPTABLE 380 REM ****AND PUTS THE NUMBER INTO BASE 10 390 FOR D=1 TO 2 400 N[D]=ABS(B[D]) 410 IF Q[D]<2 OR Q[D]>10 OR Z<2 OR Z>10 THEN 1090 420 IF Q[D]#INT(Q[D]) OR Z#INT(Z) OR N[D]#INT(N[D]) THEN 1090 430 M=0 440 A=1 450 IF N[D]<10^A THEN 480 460 A=A+1 470 GOTO 450 480 A=A-1 490 IF A=0 THEN 560 500 W=INT(.1^A*N[D]+.00005) 510 IF W >= Q[D] THEN 1090 520 X=W*Q[D]^A 530 N[D]=N[D]-10^A*W 540 M=M+X 550 GOTO 480 560 IF N[D] >= Q[D] THEN 1090 570 P[D]=SGN(B[D])*(M+N[D]) 580 NEXT D 590 GOTO F OF 610,650,690,730 600 REM ****ADD ROUTINE**** 610 R=P[1]+P[2] 620 R$="SUM" 630 GOTO 820 640 REM ****SUBTRACT ROUTINE**** 650 R=P[1]-P[2] 660 R$="DIFFERENCE" 670 GOTO 820 680 REM ****MULTIPLY ROUTINE**** 690 R=P[1]*P[2] 700 R$="PRODUCT" 710 GOTO 820 720 REM ****DIVISION ROUTINE**** 730 R=P[1]/P[2] 740 R$="QUOTIENT" 750 IF R=INT(R) THEN 820 760 IF R-INT(R) >= .5 THEN 800 770 R=INT(R) 780 IF R=0 THEN 1130 790 GOTO 820 800 R=INT(R)+1 810 REM ****COMPUTER PUTS THE RESULT INTO DESIRED BASE 820 X=0 830 A=1 840 P=ABS(R) 850 IF PP THEN 950 930 B=B+1 940 GOTO 910 950 B=B-1 960 IF B>9 THEN 1090 970 J=B*Z^A 980 Y=B*10^A 990 X=X+Y 1000 P=P-J 1010 GOTO 880 1020 E=SGN(R)*(X+P) 1030 PRINT 1040 PRINT "THE "R$" IN BASE "Z" IS "E 1050 PRINT 1060 PRINT 1070 GOTO 200 1080 REM ****ERROR ROUTINES 1090 PRINT 1100 PRINT "SOMETHING IS WRONG, START OVER" 1110 PRINT 1120 GOTO 200 1130 PRINT 1140 PRINT "QUOTIENT TOO SMALL TOO BE COMPUTED" 1150 PRINT 1160 GOTO 200 1170 END