home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1987-09-30 | 9.0 KB | 259 lines |
- 10 '================================================
- 32 KEY OFF:CLS:DIM X(200),Y(200):DEFINT Z
- 40 PRINT "PLTPTS - SCIENTIFIC PLOTTING PROGRAM"
- 42 PRINT "BY EARL MASON, MODIFIED BY A. KATZ (9/10/87)"
- 100 'GRAPH XY PROGRAM===============================
- 200 PRINT "Program reads a sequence of points (X1,Y1)"
- 202 PRINT "etc from the keyboard or from a sequential "
- 204 PRINT "text file (up to 200 points) and plots the "
- 206 PRINT "points."
- 208 PRINT "After data entry max and min X and Y and number "
- 210 PRINT "of data pairs will be output. The user will"
- 212 PRINT "then be required to choose the range of x and y "
- 214 PRINT "values for the graph. Other sets of x and y "
- 216 PRINT "values may then be graphed on the same screen."
- 218 PRINT "REMINDER - RUN GRAPHICS.COM form DOS if you want to use PrtSc. "
- 219 PRINT "REMINDER - ALL ENTRYS MUST BE IN UPPER CASE.
- 220 PRINT "REMINDER - COMPUTER MUST BE IN COLOR GRAPHICS MODE
- 290 M=0
- 292 ZS=1
- 300 LOCATE 22,1 : PRINT "KEYBOARD ENTRY (K) OR SEQUENTIAL FILE (F)";
- 310 A$=INKEY$:IF A$="" THEN 310
- 320 IF A$="F" THEN 1000
- 330 IF A$<>"K" THEN 300
- 331 'KEYBOARD ENTRY------------------------------------------
- 332 LOCATE 22,1:PRINT " "
- 336 LOCATE 22,1 : INPUT "ENTER NUMBER OF DATA PAIRS";NPAIRS
- 340 FOR Z=1 TO NPAIRS
- 345 LOCATE 23,1:PRINT " "
- 350 LOCATE 23,1 : PRINT "ENTER DATA PAIR NUMBER ";Z;"X,Y";
- 360 INPUT X(Z),Y(Z)
- 370 IF Z=1 THEN XMA=X(1):XMI=X(1):YMA=Y(1):YMI=Y(1)
- 380 IF X(Z)>XMA THEN XMA=X(Z)
- 390 IF X(Z)<XMI THEN XMI=X(Z)
- 400 IF Y(Z)>YMA THEN YMA=Y(Z)
- 410 IF Y(Z)<YMI THEN YMI=Y(Z)
- 415 NEXT Z: IF M=1 THEN 5000
- 416 PRINT: INPUT "WANT TO CHECK VALUES (Y/N)"; B$
- 417 IF B$<>"Y" THEN 429
- 418 CLS: PRINT "POINT NUMBER", "X VALUE", "Y VALUE"
- 419 FOR Z=1 TO NPAIRS: PRINT Z, X(Z), Y(Z): NEXT
- 420 PRINT : INPUT "WANT TO CHANGE VALUE (Y/N)"; Q$
- 421 IF Q$<>"Y" THEN IF M=1 THEN 5000 ELSE 429
- 422 PRINT: INPUT "ENTER POINT NUMBER AND NEW X, Y"; Z, X(Z), Y(Z)
- 424 IF X(Z)>XMA THEN XMA=X(Z)
- 425 IF X(Z)<XMI THEN XMI=X(Z)
- 426 IF Y(Z)>YMA THEN YMA=Y(Z)
- 427 IF Y(Z)<YMI THEN YMI=Y(Z)
- 428 GOTO 420
- 429 PRINT "DATA VALUES:"
- 430 PRINT NPAIRS;" DATA VALUES"
- 440 PRINT "MAX X= ";XMA;" MIN X= ";XMI
- 450 PRINT "MAX Y= ";YMA;" MIN Y= ";YMI
- 460 GOTO 1500
- 999 'SEQUENTIAL FILE ENTRY------------------------------------
- 1000 LOCATE 23,2:INPUT "ENTER SEQUENTIAL FILE NAME";A$
- 1100 OPEN A$ FOR INPUT AS #1
- 1102 NPAIRS=0
- 1104 FOR Z=1 TO 200
- 1106 IF EOF(1) THEN 1165
- 1108 INPUT #1, X(Z),Y(Z)
- 1110 IF Z=1 THEN XMA=X(1):XMI=X(1):YMA=Y(1):YMI=Y(1)
- 1120 IF X(Z)>XMA THEN XMA=X(Z)
- 1130 IF X(Z)<XMI THEN XMI=X(Z)
- 1140 IF Y(Z)>YMA THEN YMA=Y(Z)
- 1150 IF Y(Z)<YMI THEN YMI=Y(Z)
- 1155 NPAIRS=NPAIRS+1
- 1160 NEXT Z
- 1165 CLOSE #1:IF M=1 THEN 5000
- 1170 PRINT "DATA VALUES:"
- 1180 PRINT NPAIRS;" DATA VALUES"
- 1190 PRINT "MAX X= ";XMA;" MIN X= ";XMI
- 1200 PRINT "MAX Y= ";YMA;" MIN Y= ";YMI
- 1210 GOTO 1500
- 1500 'SET GRAPH MAX AND MIN VALUES----------------------------
- 1510 INPUT "ENTER DESIRED MIN AND MAX X VALUES (XMIN, XMAX)";XMIN,XMAX
- 1515 IF XMIN>XMAX THEN 1510
- 1520 INPUT "ENTER DESIRED MIN AND MAX Y VALUES (YMIN, YMAX)";YMIN,YMAX
- 1525 IF YMIN>YMAX THEN 1520
- 1530 PV=(YMAX-YMIN)/40
- 1532 PH=(XMAX-XMIN)/64
- 2000 'CREATE WINDOW--------------------------------------------
- 2010 CLS:SCREEN 2,0
- 3000 WINDOW (XMIN,YMIN)-(XMAX,YMAX)
- 4000 VIEW (126,1)-(638,160),,1
- 4999 'PLOT LINES---------------------------------------------------
- 5000 LOCATE 22,1:PRINT " "
- 5001 PRINT " "
- 5002 LOCATE 22,1:PRINT "PLOT DATA POINTS (Y/N) ON SCREEN? ";
- 5003 A$=INKEY$:IF A$="" THEN 5003
- 5004 IF A$="N" THEN 6000
- 5005 IF A$<>"Y" THEN 5000
- 5006 LOCATE 22,1:PRINT " "
- 5007 PRINT " "
- 5008 FOR Z=1 TO NPAIRS
- 5010 ON ZS GOSUB 18000,18010,18020,18030,18000,18010,18020,18030
- 5020 NEXT Z
- 5025 ZS=ZS+1
- 6000 LOCATE 22,1:PRINT " "
- 6001 PRINT " "
- 6002 LOCATE 22,1:PRINT "PLOT LINES (Y/N) ON SCREEN? ";
- 6003 A$=INKEY$:IF A$="" THEN 6003
- 6004 IF A$="N" THEN 7000
- 6005 IF A$<>"Y" THEN 6000
- 6006 LOCATE 22,1:PRINT " "
- 6007 PRINT " "
- 6010 FOR Z=2 TO NPAIRS
- 6015 LINE (X(Z-1),Y(Z-1))-(X(Z),Y(Z)),1
- 6020 NEXT Z
- 7000 'DATA VALUES TO FILE ==========================================
- 7010 LOCATE 22,1:PRINT " "
- 7020 PRINT " "
- 7030 LOCATE 22,1:PRINT "SAVE DATA TO DISK FILE (Y/N)? ";
- 7040 A$=INKEY$:IF A$="" THEN 7040
- 7050 IF A$="N" THEN GOSUB 19000 : GOTO 8000
- 7060 IF A$<>"Y" THEN 7040
- 7070 GOSUB 19000
- 7100 LOCATE 22,1:INPUT "ENTER NAME FOR SEQUENTIAL FILE ";A$
- 7110 GOSUB 19000
- 7120 'CHECK FOR EXISTENCE OF FILE
- 7130 ON ERROR GOTO 7220
- 7140 OPEN A$ FOR INPUT AS #1
- 7150 LOCATE 22,1: PRINT A$;" ALREADY EXISTS IN DIRECTORY "
- 7160 PRINT "CONTINUE(C) OR NEW FILENAME (F)? ";
- 7170 B$=INKEY$:IF B$="" THEN 7170
- 7180 GOSUB 19000
- 7190 IF B$="F" THEN CLOSE #1:GOTO 7030
- 7200 IF B$<>"C" THEN 7150
- 7210 GOTO 7230
- 7220 IF ERR=53 THEN RESUME 7230
- 7230 CLOSE #1
- 7240 OPEN A$ FOR OUTPUT AS #1
- 7250 FOR Z=1 TO NPAIRS
- 7260 WRITE #1,X(Z),Y(Z)
- 7270 NEXT Z
- 7280 CLOSE #1
- 7950 'SET AXES------------------------------------------------------
- 8000 IF SGN(XMIN)=SGN(XMAX) THEN 8050
- 8020 LINE (0,YMIN)-(0,YMAX),1
- 8050 IF SGN(YMIN)=SGN(YMAX) THEN 9000
- 8070 LINE (XMIN,0)-(XMAX,0),1
- 8950 'LABEL AXES----------------------------------------------------
- 9000 IF SGN(YMIN)=SGN(YMAX) THEN 9050
- 9010 YX=(160-(ABS(YMIN)/(YMAX-YMIN))*160)/160*20
- 9020 LOCATE YX,79:PRINT " X"
- 9030 GOTO 9060
- 9050 LOCATE 20,79:PRINT " X"
- 9060 IF SGN(XMIN)=SGN(XMAX) THEN 10000
- 9070 XY=17+(ABS(XMIN)/(XMAX-XMIN))*63
- 9080 LOCATE 1,XY:PRINT "Y"
- 9090 GOTO 10010
- 10000 LOCATE 1,17:PRINT "Y"
- 10005 LOCATE 23,1
- 10010 LOCATE 1,13:PRINT YMAX
- 10120 LOCATE 20,13:PRINT YMIN
- 10125 LOCATE 21,14:PRINT XMIN
- 10130 LOCATE 21,75:PRINT XMAX
- 10140 M=1
- 11000 ' ZERO ARRAYS--------------------------------------------------
- 11010 FOR Z=1 TO 200
- 11020 X(Z)=0:Y(Z)=0
- 11030 NEXT Z
- 16000 ' ANOTHER GRAPH-------------------------------------------------
- 16005 LOCATE 22,1:PRINT " "
- 16006 PRINT " "
- 16010 LOCATE 22,1:PRINT "ANOTHER POINT SET (Y/N) ON SCREEN? ";
- 16020 A$=INKEY$:IF A$="" THEN 16020
- 16030 IF A$="N" THEN 16800
- 16040 IF A$<>"Y" THEN 16010
- 16042 LOCATE 22,1:PRINT " "
- 16044 PRINT " "
- 16050 GOTO 300
- 16800 LOCATE 22,1:PRINT " "
- 16810 PRINT " "
- 16820 'GRID LINES? ====================================================
- 16830 LOCATE 22,1:PRINT "DO YOU WISH GRID LINES? (Y/N) "
- 16840 A$=INKEY$:IF A$="" THEN 16840
- 16850 IF A$="N" THEN 17130
- 16860 IF A$<>"Y" THEN 16840
- 16870 LOCATE 22,1:PRINT " "
- 16880 PRINT " "
- 16890 LOCATE 22,1:PRINT "X=CONSTANT GRID LINE? ";
- 16900 A$=INKEY$:IF A$="" THEN 16900
- 16910 IF A$="N" THEN 17000
- 16920 IF A$<>"Y" THEN 16900
- 16930 LOCATE 22,1:PRINT " "
- 16940 PRINT " "
- 16950 LOCATE 22,1:INPUT "X VALUE OF GRID LOCATION = ";G
- 16960 IF G=XMAX OR G=XMIN OR G=0 THEN 16870
- 16970 LINE (G,YMIN)-(G,YMAX),1,,&HCCCC
- 16980 LOCATE 21,16+((G-XMIN)/(XMAX-XMIN))*64:PRINT G
- 16990 GOTO 16870
- 17000 LOCATE 22,1:PRINT " "
- 17010 PRINT " "
- 17020 LOCATE 22,1:PRINT "Y=CONSTANT GRID LINE? ";
- 17030 A$=INKEY$:IF A$="" THEN 17030
- 17040 IF A$="N" THEN 17130
- 17050 IF A$<>"Y" THEN 17030
- 17060 LOCATE 22,1:PRINT " "
- 17070 PRINT " "
- 17080 LOCATE 22,1 : INPUT "Y VALUE OF GRID LOCATION = ";G
- 17090 IF G>=YMAX OR G<=YMIN OR G=0 THEN 17060
- 17100 LINE (XMIN,G)-(XMAX,G),1,,&HCCCC
- 17110 LOCATE ((YMAX-G)/(YMAX-YMIN))*20,14:PRINT G
- 17120 GOTO 17000
- 17130 LOCATE 22,1:PRINT " "
- 17140 PRINT " "
- 17150 LOCATE 22,1:INPUT "ENTER Y AXIS LABEL (10 Characters Max) ";TI$
- 17160 L=LEN(TI$)
- 17165 LOCATE 10,10-L:PRINT TI$
- 17170 LOCATE 22,1:PRINT " "
- 17180 PRINT " ";
- 17190 LOCATE 22,1:INPUT "ENTER NAME (10 Characters Max) ";TI$
- 17200 LOCATE 3,1:PRINT TI$
- 17210 LOCATE 22,1:PRINT " "
- 17220 LOCATE 23,1:PRINT " ";
- 17222 LOCATE 22,1:INPUT "ENTER DATE (10 Characters Max) ";TI$
- 17224 LOCATE 5,1:PRINT TI$
- 17226 LOCATE 22,1:PRINT " "
- 17228 LOCATE 23,1:PRINT " ";
- 17230 LOCATE 22,1:INPUT "ENTER X AXIS LABEL (60 Characters Max) ";TI$
- 17240 L=LEN(TI$)
- 17250 LOCATE 22,1:PRINT " "
- 17260 LOCATE 23,1:PRINT " ";
- 17270 LOCATE 22,44-(L/2):PRINT TI$
- 17280 LOCATE 22,1:PRINT "ENTER GRAPH TITLE"
- 17282 INPUT;"(60 Char Max)";TI$
- 17285 L=LEN(TI$)
- 17290 LOCATE 22,1:PRINT " "
- 17300 LOCATE 23,1:PRINT " ";
- 17310 LOCATE 23,44-L/2:PRINT TI$;
- 17320 LOCATE 21,1 :GOTO 17320: END
- 18000 'Square plot point
- 18001 XS=X(Z)-(PH/2) : YS=Y(Z)+(PV/2)
- 18002 LINE (XS,YS)-(XS+PH,YS),1
- 18003 LINE (XS+PH,YS)-(XS+PH,YS-PV),1
- 18004 LINE (XS+PH,YS-PV)-(XS,YS-PV),1
- 18005 LINE (XS,YS-PV)-(XS,YS),1
- 18008 RETURN
- 18010 'Triangle plot point
- 18012 XS=X(Z):YS=Y(Z)+(PV/2)
- 18014 LINE (XS,YS)-(XS+(PH/2),YS-PV),1
- 18016 LINE (XS+(PH/2),YS-PV)-(XS-(PH/2),YS-PV),1
- 18018 LINE (XS-(PH/2),YS-PV)-(XS,YS),1
- 18019 RETURN
- 18020 'Cross plot point
- 18022 XS=X(Z):YS=Y(Z)+(PV/2)
- 18024 LINE (XS,YS)-(XS,YS-PV),1
- 18026 LINE (XS-(PH/2),YS-(PV/2))-(XS+(PH/2),YS-(PV/2)),1
- 18028 RETURN
- 18030 'X plot point
- 18032 XS=X(Z)-(PH/2):YS=Y(Z)+(PV/2)
- 18034 LINE (XS,YS)-(XS+PH,YS-PV),1
- 18036 LINE (XS,YS-PV)-(XS+PH,YS),1
- 18038 RETURN
- 19000 'BLANK BOTTOM LINES
- 19010 LOCATE 22,1:PRINT " "
- 19020 PRINT " "
- 19030 RETURN
-