10  REM ***  HP TIME-SHARED BASIC PROGRAM LIBRARY  *********************
11  REM
12  REM         CXARTH:  VECTOR ARITHMETIC
13  REM
14  REM  HEWLETT-PACKARD 36118B, 6/74
15  REM
16  REM ***  CONTRIBUTED PROGRAM  **************************************
17  REM
100  P1=(4*ATN(1))/180
102  PRINT "INSTRUCTIONS (NO=0, YES=1)";
104  INPUT A
106  IF A=0 THEN 250
110  PRINT "THIS PROGRAM WILL PERFORM ARITHMETIC OPERATIONS"
120  PRINT "ON VECTORS EXPRESSED IN EITHER POLAR OR CARTESIAN SYSTEMS"
130  PRINT 
140  PRINT "WHEN ASKED 'MODE?' TYPE 1 FOR POLAR COORDINATES"
150  PRINT "                   TYPE 2 FOR CARTESIAN COORDINATES"
160  PRINT "WHEN ASKED 'OPERATION?' TYPE 1 FOR ADDITION"
170  PRINT "                        TYPE 2 FOR SUBTRACTION"
180  PRINT "                        TYPE 3 FOR MULTIPLICATION"
190  PRINT "                        TYPE 4 FOR DIVISION"
200  PRINT "WHEN ASKED 'AGAIN' TYPE 0 TO STOP THE PROGRAM"
210  PRINT "                    TYPE 1 TO CONTINUE THE PROGRAM"
220  PRINT "ALL ANGLES INPUT AND OUTPUT ARE IN DEGREES"
230  PRINT "ANSWERS ARE GIVEN IN BOTH POLAR AND CARTESIAN FORMS"
240  PRINT 
250  PRINT "MODE";
260  INPUT M
270  IF M=1 THEN 310
280  IF M=2 THEN 500
290  PRINT "YOU GOOFED! TRY AGAIN!"
300  GOTO 250
310  PRINT "MAGNITUDE #1";
320  INPUT A
330  PRINT "ANGLE #1";
340  INPUT B
350  PRINT "MAGNITUDE #2";
360  INPUT C
370  PRINT "ANGLE #2";
380  INPUT D
390  LET S=A
400  LET T=B
410  GOSUB 1010
420  LET X1=U
430  LET Y1=V
440  LET S=C
450  LET T=D
460  GOSUB 1010
470  LET X2=U
480  LET Y2=V
490  GOTO 680
500  PRINT "X #1";
510  INPUT X1
520  PRINT "Y #1";
530  INPUT Y1
540  PRINT "X #2";
550  INPUT X2
560  PRINT "Y #2";
570  INPUT Y2
580  LET U=X1
590  LET V=Y1
600  GOSUB 1040
610  LET A=S
620  LET B=T
630  LET U=X2
640  LET V=Y2
650  GOSUB 1040
660  LET C=S
670  LET D=T
680  PRINT "OPERATION";
690  INPUT O
700  IF O<1 THEN 870
710  IF O>1 THEN 750
720  GOSUB 1130
730  GOSUB 1040
740  GOTO 890
750  IF O>2 THEN 790
760  GOSUB 1160
770  GOSUB 1040
780  GOTO 890
790  IF O>3 THEN 830
800  GOSUB 1190
810  GOSUB 1010
820  GOTO 890
830  IF O>4 THEN 870
840  GOSUB 1250
850  GOSUB 1010
860  GOTO 890
870  PRINT "YOU GOOFED! TRY AGAIN!"
880  GOTO 680
890  PRINT 
900  PRINT "RESULTANT X = ";U
910  PRINT "RESULTANT Y = ";V
920  PRINT "RESULTANT MAGNITUDE = ";S
930  PRINT "RESULTANT ANGLE = ";T
940  PRINT 
950  PRINT "AGAIN";
960  INPUT Z
970  IF Z=0 THEN 1310
980  IF Z=1 THEN 250
990  PRINT "YOU GOOFED! TRY AGAIN!"
1000  GOTO 950
1010  LET U=S*COS(P1*T)
1020  LET V=S*SIN(P1*T)
1030  RETURN 
1040  IF U#0 THEN 1080
1050  LET S=ABS(V)
1060  LET T=SGN(V)*90
1070  RETURN 
1080  LET S=SQR(U^2+V^2)
1090  LET T=ATN(V/U)/P1
1100  IF U>0 THEN 1120
1110  LET T=T+180
1120  RETURN 
1130  LET U=X1+X2
1140  LET V=Y1+Y2
1150  RETURN 
1160  LET U=X1-X2
1170  LET V=Y1-Y2
1180  RETURN 
1190  LET S=A*C
1200  LET T=B+D
1210  IF S>0 THEN 1240
1220  LET S=-S
1230  LET T=T+180
1240  RETURN 
1250  LET S=A/C
1260  LET T=B-D
1270  IF S>0 THEN 1300
1280  LET S=-S
1290  LET T=T+180
1300  RETURN 
1310  END 
