昨日今日明日

きのうを思い、きょうを実感し、あすに想いを馳せよう。
若年性或いは老人性痴呆症にならない為にもね?

songzhaoのボケ封じ数学講座第86講

2009年01月31日 | Weblog
題名:座標のマジック

これは私の備忘録といった類のもので、測量のカテゴリーに属するプログラムです。入っているデータは昔私が測量して地形を座標表記したものです。側点の数の要求に対して58と入力すれば、プログラムの目的とするところがご理解いただけると思います。使用しているのはカシオ計算機のFX-890Pです。

1 DATA 0.618,-32.050
2 DATA-9.471,-26.076
3 DATA-15.667,-18.322
4 DATA-17.993,-13.621
5 DATA-20.058,-6.858
6 DATA-19.554,5.371
7 DATA-18.705,8.218
8 DATA-16.766,10.677
9 DATA 7.289,16.110
10 DATA 13.744,14.765
11 DATA 22.747,14.825
12 DATA 32.000,18.941
13 DATA 36.462,27.083
14 DATA 42.728,30.575
15 DATA 51.138,24.594
16 DATA 55.385,17.423
17 DATA 54.347,12.099
18 DATA 74.183,9.699
19 DATA 80.322,8.472
20 DATA 87.017,5.108
21 DATA 95.680,-0.815
22 DATA 104.339,-14.392
23 DATA 108.719,-19.350
24 DATA 113.000,-23.394
25 DATA 116.192,-25.628
26 DATA 131.687,-32.941
27 DATA 132.290,-36.897
28 DATA 135.786,-58.045
29 DATA 144.425,-107.865
30 DATA 145.403,-112.658
31 DATA 133.144,-166.427
32 DATA 113.747,-109.915
33 DATA 113.011,-109.222
34 DATA 111.756,-98.678
35 DATA 78.833,-86.484
36 DATA 73.525,-87.230
37 DATA 71.106,-83.925
38 DATA 68.124,-67.565
39 DATA 45.195,-53.565
40 DATA 38.187,-47.499
41 DATA 31.177,-43.133
42 DATA 27.418,-41.490
43 DATA 23.483,40.217
44 DATA 9.702,-36.238
45 DATA 5.720,-34.641
46 DATA 58.716,15.659
47 DATA 59.905,13.593
48 DATA 76.404,16.178
49 DATA 88.431,13.899
50 DATA 100.269,6.152
51 DATA 111.480,-11.520
52 DATA 114.263,-14.627
53 DATA 118.862,-18.750
54 DATA 133.186,-24.873
55 DATA 144.455,-29.563
56 DATA 157.681,-104.191
57 DATA 153.973,-108.657
58 DATA 146.837,-112.217

300 REM***ザヒョウノマジック by songzhao
310 CLEAR:CLS:INPUT”ソクテン ノ スウ= ”;N
320 DIM S(N+10),A(N+10,1),C(N+10),L(3),D(1),Z(1)
330 FOR J=1 TO N:FOR K=0 TO 1:READ A(J,K):NEXT K,J
340 CLS:PRINT”(MENU)   キョリ=1: メンセキ=2: ヘンコウ=3: カニュウ=4: サンシャ=5: ヘイコウ=6: ヘイコウハバ=7: メンセキハバ=8: サクジョ=9: リスト=10: ヘイコウイドウ=11 END=12 ”;:INPUT DT
360 ON DT GOTO 400,500,600,700,800,900,1000,1100,1200,1300,1400,390
390 CLS:PRINT”ADIOS”:END
400 REM***キョリ
410 CLS:INPUT”テン No.= ”;A,”テン No.= ”;B
420 L=SQR((A(A,0)-A(B,0))^2+(A(A,1)-A(B,1))^2)
430 CLS:PRINT USING”&&###&&###”;”テン”;A;” -”;B:PRINT USING”&&&&####.###”;”キョリ=”;ROUND(L,-4);:LOCATE 20,0:PRINT”<Zデ オワリ>”
440 A$=INKEY$:IF A$=””THEN 440 
450 IF A$=”Z”THEN 340 ELSE GOTO 410
500 REM***メンセキ
510 CLS:I=1:PRINT”テン ニュウリョク    <- デ ケッテイ>”,
520 INPUT”No.= ”;C$:IF C$=”-”THEN I=I-1:GOTO 540
530 C(I)=VAL(C$):I=I+1:GOTO 520
540 V=0:FOR J=1 TO I
550 K=J-1:L=J+1:IF J=1 THEN K=I ELSE IF J=I THEN L=1
560 S(J)=A(C(J),0)*(A(C(K),1)-A(C(L),1)):V=V+S(J):NEXT J
570 CLS:PRINT”メンセキ =”;ABS(V/2):LOCATE 20,1:PRINT”<Zデ オワリ>”
580 A$=INKEY$:IF A$=””THEN 580 ELSE IF A$<>”Z” THEN 510 ELSE 340
600 REM***ヘンコウ 
610 CLS:INPUT”キテン    = ”;A,”ヘンコウテン = ”;B,”ヘンコウキョリ= ”;R
620 P=A:Q=B:GOSUB 2010
630 X=A(B,0)-R*G/L:Y=A(B,1)-R*H/L:A(B,0)=ROUND(X,-4):A(B,1)=ROUND(Y,-4)
640 CLS:PRINT”No.”;B;” <ヘンコウキョリ>”;R,”X=”;A(B,0),”Y=”;A(B,1):LOCATE 20,1:PRINT”<Zデ オワリ>”
650 A$=INKEY$:IF A$=””THEN 650 ELSE IF A$=”Z”THEN 340
660 GOTO 610
700 REM***テン カニュウ
710 CLS:INPUT”キテン  = ”;A,”タイテン = ”;B:IF B<=0 THEN 710 ELSE INPUT”キョリ  = ”;R
720 P=A:Q=B:GOSUB 2010:IF R>=L THEN BEEP:BEEP:GOTO 710
730 X=A(A,0)-R*G/L:Y=A(A,1)-R*H/L:X=ROUND(X,-4):Y=ROUND(Y,-4)
740 IF ABS(A-B)<>1 THEN N=N+1:C=N:GOTO 770
750 C=A:IF A<B THEN C=B
760 N=N+1:FOR H=N TO C+1 STEP-1:FOR I=O TO 1:A(H,I)=A(H-1,I):NEXT I,H
770 A(C,0)=X;A(C,1)=Y
780 CLS:PRINT”No.”;C,:PRINT USING”&&####.###”;”X=”;X:PRINT USING”&&####.###”;”Y=”;Y:LOCATE: 20,2:PRINT”<Zデ オワリ>”
790 A$=INKEY$:IF A$=””THEN 790 ELSE IF A$=”Z”THEN 340 ELSE 710
800 REM***サンシャ 
810 CLS:FOR J=1 TO 3:INPUT”テン No.=”;C(J):NEXT J:FOR J=1 TO 3:IF J<3 THEN K=J+1 ELSE K=1
820 L(J)=SQR((A(C(J),0)-A(C(K),0))^2+(A(C(J),1)-A(C(K),1))^2):NEXT J
830 D=L(J):FOR J=2 TO 3:IF D<L(J) THEN D=L(J)
840 NEXT J:U=0:FOR J=1 TO 3:K=J-1:L=J+1:IF J=1 THEN K=3 ELSE IF J=3 THEN L=1
850 T=A(C(J),0)*(A(C(K),1)-A(C(L),1)):U=U+T
860 NEXT J:D=ROUND(D,-4):H=ABS(U)/D:H=ROUND(H,-4):V=H*D
870 CLS:PRINT”テン”;C(1);” -”;C(2);”-”;C(3),:PRINT USING”&&&&&&####.###”;”テイヘン =”;D
880 PRINT USING”&&&&&&####.###”;” タカサ=”;H:PRINT USING”&&&&&&####.######”;”メンセキ=”;V/2;
890 A$=INKEY$:IF A$=””THEN 890 ELSE IF A$=”Z”THEN 340 ELSE 810
900 REM***ヘイコウテン
910 CLS:INPUT”イドウ ヘン  ”;A:LOCATE 13,0:INPUT”- ”;B:INPUT”イドウ ホウコウ”;C
920 LOCATE 13,1:INPUT”- ”;D:INPUT”イドウ リョウ ”;R
930 J=0:I=0:C(0)=A:P=A:Q=C:GOSUB 2010:IF R>L THEN BEEP:BEEP:GOTO 910
940 GOSUB 1620:GOSUB 2510:GOTO 340
1000 REM***ヘイコウ ハバ
1010 CLS:INPUT”イドウ ヘン  ”;A:LOCATE 13,0:INPUT”- ”;B:INPUT”イドウ ホウコウ”;C
1020 LOCATE 13,1:INPUT”- ”;D:INPUT”イドウ ハバ ”;W
1030 GOSUB 1810:GOSUB 2510:GOTO 340
1100 REM***メンセキ シテイ ハバ
1110 CLS:INPUT”イドウ ヘン  ”A:LOCATE 13,0:INPUT”- ”;B:INPUT”イドウ ホウコウ”;C
1120 LOCATE 13,1:INPUT”- ”;D:INPUT”メンセキ     ”;MN,”カリノ ハバ  ”;W
1130 GOSUB 1810:V1=V:MN=MN-V1:W=W+0.1:GOSUB 1810:V2=V:W=W+0.1:GOSUB 1810:V3=V
1140 E=V3-2*V2+V1:F=V2-V1:IF E=0 THEN Z=MN/F:GOTO 1160
1150 Z=(-2*F+E+SQR((2*F-E)^2+8*E*MN))/(2*E)
1160 W=W-0.2+0.1*Z:GOSUB 1810:GOSUB 2510:PRINT”(Z イガイ モウイチド)”
1170 A$=INKEY$:IF A$=””THEN 1170 ELSE IF A$=”Z”THEN 340 ELSE N=N-2:GOTO 1110
1200 REM***サクジョ
1210 CLS:PRINT”<オオキイ ジュン>(Zデ オワリ)”,
1220 INPUT”サクジョテン ”;Z:IF Z=N THEN N=N-1:GOTO 1250
1240 FOR J=Z TO N-1:FOR K=0 TO 1:A(J,K)=A(J+1,K):NEXT K,J:N=N-1
1250 A$=INKEY$:IF A$=””THEN 1250 ELSE IF A$=”Z”THEN 340
1260 GOTO 1220
1300 REM***リスト
1310 CLS:FOR J=1 TO N:PRINT”No.”;J,”X=”;:PRINT USING”####.###”;A(J,0)
1320 PRINT”Y=”;:PRINT USING”####.###”;A(J,1);
1330 A$=INKEY$:IF A$=””THEN 1330 ELSE CLS:NEXT J
1340 FOR J=1 TO I:K=J-1:L=J+1:IF J=1 THEN K=I ELSE IF J=I THEN L=1
1350 CLS:PRINT”No.”;C(J):PRINT USING”####.###&&”;A(C(J),0);” *”;:PRINT USING”&&####.###&&####.###&&”;”(”;A(C(K),1);”-”;A(C(L),1);”)”;
1360 PRINT USING”&&######.######”;”=”;S(J)
1380 A$=INKEY$:IF A$=””THEN 1380 ELSE NEXT J:CLS:PRINT”メンセキ =”;ABS(V/2)
1390 A$=INKEY$:IF A$=””THEN 1390 ELSE IF A$=”Z”THEN 340 ELSE 1310
1400 REM***ヘイコウ イドウ
1410 CLS:INPUT”X=0,Y=0 トスル テン ノ No.”;NN
1420 X=-A(NN,O):Y=-A(NN,1)
1430 FOR J=1 TO N:CLS:PRINT”No.”;J:LOCATE 7,1:PRINT USING”&&####.###”;”X=”;A(J,0)+X:LOCATE 7,2:PRINT USING”&&####.###”;”Y=”;A(J,1)+Y
1440 A$=INKEY$:IF A$=””THEN 1440 ELSE IF A$=”Z”THEN 340
1450 NEXT J:GOTO 1410
1600 REM***サブ ルーチン
1620 IF A(A,J)=A(B,J) THEN P=A:Q=C:GOTO 1640 ELSE IF J=0 THEN J=1:GOTO 1620
1630 M1=(A(A,0)-A(B,0))/(A(A,1)-A(B,1)):GOTO 1680
1640 GOSUB 2010:Y1=A(P,1)-H*R/L:X1=A(P,0)-G*R/L:XY=X1:IF J=1 THEN XY=Y1
1650 P=B:Q=D:GOSUB 2210:O=I:I=I+1:C(I)=B:IF J=1 THEN 1670
1660 X2=X1:Y2=Y:GOTO 1710
1670 Y2=Y1:X2=X:GOTO 1710
1680 IF A(A,1)=A(C,1) THEN P=A:Q=B:GOSUB 2010:Y1=A(A,1):X1=A(A,0)+SGN(G*R):GOTO 1700
1690 X1=A(A,0)-R*G/L:Y1=A(A,1)-R*H/L
1700 XX=X1:YY=Y1:O=I:I=I+1:C(I)=B:P=B:Q=D:GOSUB 2110:X2=X:Y2=Y
1710 GOSUB 2410:RETURN
1800 REM***サブルーチン
1810 J=0:I=0:C(0)=A
1820 IF A(A,J)=A(B,J) THEN 1840 ELSE IF J=0 THEN J=1:GOTO 1820
1830 GOTO 1900
1840 XY=A(A,J)+SGN(A(C,J)-A(A,J))*W:P=A:Q=C:GOSUB 2210:O=I:I=I+1:C(I)=B
1850 IF J=1 THEN 1870
1860 X1=XY:X2=XY:Y1=Y:P=B:Q=D:GOSUB 2210:Y2=Y:GOTO 1880
1870 Y1=XY:Y2=XY:X1=X:P=B:Q=D:GOSUB 2210:X2=X
1880 GOTO 1970
1900 G=A(A,0)-A(B,0):H=A(A,1)-A(B,1)
1910 M1=G/H:MR=-H/G
1920 Y=(A(A,0)-M1*A(A,1)-A(C,0)+MR*A(C,1))/(MR-M1):X=M1*Y+A(A,0)-M1*A(A,1)
1930 S=SQR((X-A(C,0))^2+(Y-A(C,1))^2):XX=-W*(X-A(C,0))/S+X
1940 YY=-W*(Y-A(C,1))/S+Y:P=A:Q=C:GOSUB 2110:X1=X:Y1=Y
1950 O=I:I=I+1:C(I)=B:P=B:Q=D:GOSUB 2110:X2=X:Y2=Y
1970 GOSUB 2410:RETURN
2000 REM***サブルーチン
2010 G=A(P,0)-A(Q,0):H=A(P,1)-A(Q,1):L=SQR(G^2+H^2):RETURN
2100 REM***サブルーチン
2110 G=A(P,0)-A(Q,0):H=A(P,1)-A(Q,1)
2120 IF G=0 THEN X=A(P,0):Y=(X-XX)/M1+YY:GOTO 2160
2130 IF H=0 THEN Y=A(P,1):X=M1*(Y-YY)+XX:GOTO 2160
2140 M2=G/H:Y=(M2*A(P,1)-A(P,0)+XX-M1*YY)/(M2-M1)
2150 X=M2*(Y-A(P,1))+A(P,0)
2160 Z(0)=X:Z(1)=Y:GOSUB 2310:IF E$=”1”THEN 2110
2170 RETURN
2200 REM***サブルーチン
2210 IF(XY-A(P,J))*(XY-A(Q,J))<=0 THEN 2220 ELSE GOSUB 235O:GOTO 2210
2220 G=A(P,0)-A(Q,0):H=A(P,1)-A(Q,1):IF J=1 THEN 2250
2230 Y=H*(XY-A(P,J))/G+A(P,1):RETURN
2250 X=G*(XY-A(P,J))/H+A(P,0):RETURN
2300 REM***ヘン チェック
2310 E$=””:K=0:IF A(P,K)=A(G,K) THEN K=1
2330 IF (Z(K)-A(P,K))*(Z(K)-A(Q,K))<=0 THEN RETURN
2340 E$=”1”
2350 U=Q-P+Q:P=Q:Q=U:IF Q>N THEN Q=Q-N ELSE IF Q<1 THEN Q=Q-N ELSE IF Q<1 THEN Q=Q+N
2360 I=I+1:C(I)=P:RETURN
2400 REM***メンセキ
2410 DIM B(10,1):X1=ROUND(X1,-4):Y1=ROUND(Y1,-4):X2=ROUND(X2,-4):Y2=ROUND(Y2,-4)
2420 J=0:B(J,0)=X1:B(J,1)=Y1:FOR K=O TO 0 STEP-1:J=J+1:FOR H=0 TO 1:B(J,H)=A(C(K),H)
2430 NEXT H,K:FOR K=O+1 TO I:J=J+1:FOR H=0 TO 1:B(J,K)=A(C(K),H):NEXT H,K
2440 J=J+1:B(J,0)=X2:B(J,1)=Y2:V=0:FOR I=0 TO J:K=I-1:L=L+1
2450 IF I=O THEN K=J ELSE IF I=J THEN L=0
2460 V=V+B(I,0)*(B(K,1)-B(L,1)):NEXT I:V=ABS(V/2):RETURN
2500 REM***サブルーチン 
2510 N=N+1:A(N,0)=X1:A(N,1)=Y1
2520 N=N+1:A(N,0)=X2:A(N,1)=Y2:CLS
2530 FOR J=N-1 TO N:PRINT”No.”;J;:LOCATE 7,0:PRINT USING”&&&####.###”;”X=”;A(J,0),
2540 LOCATE 7,1:PRINT USING”&&&####.###”;”Y=”;A(J,1)
2550 LOCATE 4,2:PRINT USING”&&&&&&####.######”;”メンセキ=”;V,:IF W=0 THEN 2560 ELSE LOCATE 4,3:PRINT USING”&&&&&&####.######”;” ハバ=”;W;
2560 A$=INKEY$:IF A$=””THEN 2560 ELSE CLS:NEXT J:RETURN