100 !' ************************************************** 110 !' * * 120 !' * 定義域・値域イメージ化 プログラム * 130 !' * * 140 !' * "S1p104ES01.bas" * 150 !' * 数T/030(数研)演習問題A1(p104) * 160 !' * * 170 !' * 2008/8/28/Tue. by YO * 180 !' * * 190 !' ************************************************** 200 !' 定数・配列の定義 210 LET cx$="Red" 220 LET cy$="Yellow" 230 DIM xx(2) 240 DIM yy(2) 250 DIM xd(2) 260 DIM yd(2) 270 DIM xo(2) 280 DIM yo(2) 290 DIM pn$(2) 300 LET pn$(1)="A" 310 LET pn$(2)="B" 320 LET xd(1)=-0.12 330 LET yd(1)=-0.2 340 LET xd(2)=0.03 350 LET yd(2)=0.02 490 !' 500 !' 関数の定義 510 DECLARE EXTERNAL FUNCTION f 590 !' 600 !' 外部副プログラムの定義 610 DECLARE EXTERNAL SUB draw_function 620 !' DECLARE EXTERNAL SUB draw_xy 630 !' DECLARE EXTERNAL SUB erase_xy 640 !' DECLARE EXTERNAL SUB plot_text 790 !' 800 !' 変数の定義 810 LET xs=1 820 LET xe=3 830 LET ys=-1 840 LET ye=4 850 LET xz=0.02 990 !' 1000 REM 主プログラム開始 1010 SET WINDOW -2,6,-2,6 1020 SET POINT STYLE 3 1030 SET LINE width 3 1040 DRAW Grid 1050 SET LINE STYLE 3 1060 SET LINE COLOR cx$ 1070 PLOT LINES : xs,ys;xe,ys 1080 PLOT LINES : xs,ye;xe,ye 1090 SET LINE COLOR cy$ 1100 PLOT LINES : xs,ys;xs,ye 1110 PLOT LINES : xe,ys;xe,ye 1970 SET LINE COLOR "Black" 1980 SET LINE STYLE 1 1990 !' 2000 !' Main 2010 MOUSE POLL x,y,l,r 2020 IF l<>1 THEN 2030 GOTO 2010 2040 END IF 2050 LET xa=x 2060 LET ya=y 2070 DRAW disk WITH SCALE(0.02)*SHIFT(xa,ya) 2080 PLOT TEXT ,AT xa-0.12,ya-0.2:"A" 2090 !' 2100 mouse poll x,y,l,r 2110 IF l<>0 THEN 2120 GOTO 2100 2130 END IF 2140 !' 2200 !' 2210 mouse poll x,y,l,r 2220 IF l<>1 THEN 2230 GOTO 2210 2240 END IF 2250 LET xb=x 2260 LET yb=y 2270 DRAW disk WITH SCALE(0.02)*SHIFT(xb,yb) 2280 PLOT TEXT ,AT xb+0.03,yb+0.02:"B" 2290 !' 2300 mouse poll x,y,l,r 2310 IF l<>0 THEN 2320 GOTO 2300 2330 END IF 2340 !' 2400 !' 2410 IF xa=xb THEN 2420 LET xb=xb+xz 2430 END IF 2500 !' 2510 LET p=(yb-ya)/(xb-xa) 2520 LET q=ya-p*xa 2530 SET LINE width 1 2540 CALL draw_function(-2,6,0.1,p,q) 2550 !' 2800!' 2810 LET xx(1)=xa 2820 LET yy(1)=ya 2830 LET xx(2)=xb 2840 LET yy(2)=yb 2890 LET pt=0 2900 !' Old Data Record 2910 LET pto=pt 2920 FOR i=1 TO 2 2930 LET xo(i)=xx(i) 2940 LET yo(i)=yy(i) 2950 NEXT i 2960 LET po=p 2970 LET qo=q 2980 !' 3000 !' 3010 LET k=0 3020 IF getkeyState(13)<0 THEN 3030 LET k=13 3040 END IF 3050 IF getkeyState(37)<0 THEN 3060 LET k=37 3070 END IF 3080 IF getkeyState(38)<0 THEN 3090 LET k=38 3100 END IF 3110 IF getkeyState(39)<0 THEN 3120 LET k=39 3130 END IF 3140 IF getkeyState(40)<0 THEN 3150 LET k=40 3160 END IF 3170 IF getkeyState(65)<0 THEN 3180 LET k=65 3190 END IF 3200 IF getkeyState(66)<0 THEN 3210 LET k=66 3220 END IF 3230 IF k=0 THEN 3240 GOTO 3020 3250 END IF 3260 !' 3500 !' [Return]キーの処理 3510 IF k=13 THEN 3520 GOTO 9980 3530 END IF 3540 !' 3600 !' 点([A],[B])指定の処理 3610 IF k=65 THEN 3620 LET pt=1 3630 GOTO 8000 3640 END IF 3650 IF k=66 THEN 3660 LET pt=2 3670 GOTO 8000 3680 END IF 3690 !' 3700 IF pt=0 THEN 3710 GOTO 9000 3720 END IF 3730 !' 3800 !' 移動の処理 3810 IF K=37 THEN 3820 LET xx(pt)=xx(pt)-xz 3830 END IF 3840 IF K=39 THEN 3850 LET xx(pt)=xx(pt)+xz 3860 END IF 3870 IF K=40 THEN 3880 LET yy(pt)=yy(pt)-xz 3890 END IF 3900 IF K=38 THEN 3910 LET yy(pt)=yy(pt)+xz 3920 END IF 3930 !' 4000 !' 境界の処理 4010 IF xx(pt)<-2 THEN 4020 LET xx(pt)=-2 4030 END IF 4040 IF xx(pt)>6 THEN 4050 LET xx(pt)=6 4060 END IF 4070 IF yy(pt)<-2 THEN 4080 LET yy(pt)=-2 4090 END IF 4100 IF yy(pt)>6 THEN 4110 LET yy(pt)=6 4120 END IF 4130 !' 4500 !' 4510 SET LINE COLOR "White" 4520 SET LINE width 1 4530 CALL draw_function(-2,6,0.1,po,qo) 4540 FOR i=1 TO 2 4550 SET AREA COLOR "White" 4560 DRAW disk WITH SCALE(0.02)*SHIFT(xo(i),yo(i)) 4570 SET TEXT COLOR "White" 4580 PLOT TEXT ,AT xo(i)+xd(i),yo(i)+yd(i):pn$(i) 4590 NEXT i 4600 !' 4610 SET LINE width 3 4620 DRAW Grid 4630 SET LINE STYLE 3 4640 SET LINE COLOR cx$ 4650 PLOT LINES : xs,ys;xe,ys 4660 PLOT LINES : xs,ye;xe,ye 4670 SET LINE COLOR cy$ 4680 PLOT LINES : xs,ys;xs,ye 4690 PLOT LINES : xe,ys;xe,ye 4700 SET LINE STYLE 1 4710 !' 4800 !' 4810 SET LINE width 1 4820 LET p=(yy(2)-yy(1))/(xx(2)-xx(1)) 4830 LET q=yy(1)-p*xx(1) 4840 SET LINE COLOR "Black" 4850 SET LINE width 1 4860 CALL draw_function(-2,6,0.1,p,q) 4870 !' 8000 !' 8010 FOR i=1 TO 2 8020 SET AREA COLOR "Black" 8030 IF pt=i THEN 8040 SET AREA COLOR "Green" 8050 END IF 8060 DRAW disk WITH SCALE(0.02)*SHIFT(xx(i),yy(i)) 8070 SET TEXT COLOR "Black" 8080 IF pt=i THEN 8090 SET TEXT COLOR "Green" 8100 END IF 8110 PLOT TEXT ,AT xx(i)+xd(i),yy(i)+yd(i):pn$(i) 8120 NEXT i 8130 !' 9000 !' キーバッファ消去 9010 IF getkeyState(37)<0 THEN 9020 GOTO 9010 9030 END IF 9040 IF getkeyState(38)<0 THEN 9050 GOTO 9040 9060 END IF 9070 IF getkeyState(39)<0 THEN 9080 GOTO 9070 9090 END IF 9100 IF getkeyState(40)<0 THEN 9110 GOTO 9100 9120 END IF 9130 IF getkeyState(65)<0 THEN 9140 GOTO 9130 9150 END IF 9160 IF getkeyState(66)<0 THEN 9170 GOTO 9160 9180 END IF 9880 GOTO 2900 9890 ' 9980 ' 9990 END 10000 !' 関数の定義 10010 EXTERNAL FUNCTION f(x,p,q) 10020 LET f=p*x+q 10030 END FUNCTION 10040 !' 10200 !' 関数表示ルーチン 10210 EXTERNAL SUB draw_function(a,b,s,p,q) 10220 FOR xx=a TO b STEP s 10230 PLOT LINES: xx,f(xx,p,q); 10240 NEXT xx 10250 END SUB 10260 !' 11000 !' 直線表示ルーチン 11010 EXTERNAL SUB draw_line(a,b,s,xa) 11020 FOR xx=a TO b STEP s 11030 PLOT LINES: xa,xx; 11040 NEXT xx 11050 END SUB 11060 !'