今までのおさらい:
意外にもこのコーナーは地味な人気に支えられて、底堅いものがあるようで素朴に感動している。素数とは何か?素因数分解とは?最大公約数とは?或いは最小公倍数とはどういうものか?といった数学の基礎の基礎を再認識していただけたことと思う。その延長線上で連立方程式を解くという動機づけがなされた教育が行われてきたかということを考えると甚だ疑問である。
年配者は年配者で、このような整数の美しさを教えられた上で、方程式の解法を学んでいたら、もっと数学が好きになっていたかも知れない、本当は「数学」とは興味深いものであったと大いに再認識してくださっても、或いは柔らかい脳を持ったこれからの少年に「数学への興味を喚起」する一助にでもなれば、それはそれでそれで私としては十分である。
起源一世紀頃、古代ギリシャの国に「へロン」という数学者だか技術者だか奇術師だか分らぬような人物がいました。そのへロンが残した偉大な三角形の面積を求める公式というのがあります。この公式はイギリスが誇るニュートンが十七世紀になって発見したと大喜びしていたところ、既に起源一世紀にへロンによって発見済みということを知るところとなり、ガッカリしたといういわくつきの公式である。
この公式というのは、三角形の三辺の長さを測って面積を求めるというものです。「三辺法」とか「へロンの公式」という名称で親しまれています。
へロンの公式:三角形の辺の長さを使って、その面積を計算する公式。
三つの辺の長さをa、b、cとし、2s=a+b+cとおけば、面積は、SQR(s(s-a)(s-b)(s-c))デ与えられる。「SQRとはスクウェア・ルート、平方根という意味である」
今日は、この「へロンの公式」をプログラミングして、今迄このコーナーに付き合ってくださいました方々に感謝したいと思います。
今までのプログラムは「songzhaoのライブラリー」として、ひとまとめにしたいと思いますので、1000行目から打ち込んでください。
1000 REM***へロンノコウシキ
1020 CLEAR:CLS:PRINT”<ヘロン ノ コウシキ>”:INPUT”サンカクケイノスウ”;N
1030 DIM L(N-1,2),S(2,N-1),T(2,1),H(N,-1),B(N-1)
1040 INPUT”データPrg. ”;DTP:GOSUB#DTP:FOR J=0 TO N=1:PRINT”*”;
1050 L=0:A=L(J,0):FOR K=0 TO 2:IF A<L(J,K) THEN A=L(J,K)
1060 L=L+L(J,K):NEXT K:B(J)=A:IF L-A=<A THEN PRINT J+1;”エラー チェック”:END
1070 M=L/2:S(0,J)=SQR(M*(MーL(J,0))*(M-L(J,1))*(M-L(J,2)))
1080 S(1,J)=EXP((LN M+LN(M-L(J,0))+LN(M-L(J,1))+LN(M-L(J,2)))/2)
1090 H(J)=ROUND(S(0,J)/B(J),-4):S(2,J)=H(J)*B(J)
1100 FOR K=0 TO 2
1110 T(K,0)=T(K,0)+INT S(K,J):T(K,1)=T(K,1)+FRAC S(K,J)
1120 NEXT K,J
1130 FOR J=0 TO 2
1140 T(J,0)=T(J,0)+INT T(J,1):T(J,1)=FRAC T(J,1)
1150 NEXT J
1200 REM**リスト
1210 FOR J=0 TO N-1
1220 CLS:PRINT”No.”;J+1;”(ヘロン キュウセキ)”:PRINT USING”a=###.### b=###.### c=###.###”;L(J,0);L(J,1);L(J,2)
1230 PRINT USING”(sqr)####.######m2”;S(0,J):PRINT USING”(log)####.######m2”;S(1,J);
1240 GOSUB 1350:NEXT J
1250 CLS:PRINT”(ヘロン メンセキ ゴウケイ)”
1260 PRINT USING”sqr:######.######m2”;T(0,0)+T(0,1)
1270 PRINT USING”log:######.######m2”;T(1,0)+T(1,1)
1280 GOSUB 1350
1300 REM**テイヘン*タカサ メンセキ リスト
1310 FOR J=0 TO N-1:CLS:PRINT”No.”;J+1;”(サンシャ キュウセキ)”:PRINT USING”テイヘン= ###.###m”;B(J):PRINT USING”タカサ = ###.###m”;2*H(J);
1320 PRINT USING”メンセキ=####.######m2”;S(2,J);
1330 GOSUB 1350:NEXT J
1340 CLS:PRINT”(サンシャ メンセキ ゴウケイ)”:PRINT USING”######.######m2”;T(2,0)+T(2,1):GOSUB 1350:GOTO 1200
1350 Z$=INKEY$:IF Z$=””THEN 1350
1360 IF Z$=”Z”THEN 1 ELSE RETURN
それでは続けて次のようにプログラムを打ち込んで下さい。
1 CLS:PRINT”<songzhao ノ スウガク アラカルト>”,”ソスウヲモトメル=1: ソインスウ ブンカイ=2”,"コウヤク コウバイスウ=3: ホウテイシキ=4”,”ヘロンノコウシキ=5 ”;
2 INPUT DT:ON DT GOTO 10,100,300,500,1000
そして、今迄のプログラムを次のように書き改めてください。
80 Z$=INKEY$:IF Z$=”” THEN 80 ELSE IF Z$=”Z” THEN 1 ELSE 20
210 Z$=INKEY$:IF Z$=”” THEN 210 ELSE IF Z$=”Z” THEN 1 ELSE 120
490 Z$=INKEY$:IF Z$=”” THEN 490 ELSE IF Z$=”Z” THEN 1 ELSE 320
680 Z$=INKEY$:IF Z$=”” THEN 680 ELSE IF Z$=”Z” THEN 1
こうしておけば、「Z]以外のキーを押した場合にはそのプログラムを繰り返すし、「Z]を押した場合には最初のメニュー画面に戻ります。
このへロンの公式のプログラムにおいては、データ入力用のプログラムを本体以外のプログラム・エリアに組むこととします。P0~P9までの間の空いているエリアに次のプログラムを書き込んでください。
1 DATA 3,4,5
2 DATA 4,5,6
3 DATA 10,14,17
4 DATA 13,16,22
5 DATA 22,25,28
6 DATA 18,22,28
7 DATA 24,28,35
8 DATA
9 DATA
10 DATA
11 DATA
12 DATA
13 DATA
500 REM**ヘロン ノ コウシキ データ
510 FOR J=0 TO N-1:FOR K=0 TO 2:READ L(J,K):NEXT K,J:RETURN
これでプログラム自体の書き込みは終了しました。思いどおりに作動するかチェックします。例によって、RUN ENTERとします。
<songzhao ノ スウガク アラカルト>
ソスウヲモトメル=1: ソインスウ ブンカイ=2
コウヤク コウバイスウ=3: ホウテイシキ=4
ヘロンノコウシキ=5 ?
このような表示が出力されます。5 ENTERとしてください。
<へロン ノ コウシキ>
サンカクケイノスウ? このように聞いてきますので7を入力してください。すると、
データPrg. ? と聞いてきますので、先ほど作成したデータプログラムの番号を入力してください。
*印が7個表示され、
a= 3.000 b= 4.000 c= 5.000
(sqr) 6.000000m2
(log) 6.000000m2
と表示されます。次々に「Z]以外のきーを押していくと、各々7個の三角形の面積と合計が示され、基本的な三角形の面積=底辺*高さ/2の換算値が示されます。
このプログラムは、プログラム自体をデータの入力方法として使用しています。行番号に続いて、数値データを書き込み(,)コンマで区切って、一行を一個の三角形の辺のデータとしています。何個でも書き込むことができます。表計算のデータの書き込みと同じ感覚で入力できるところがとてもよい。
さて、それではこのプログラムを何のために使うかといえば、主に土地の面積を測るのに使います土地を三角形の集合体と考えて要領よく区切ります、区切った三角形ごとに面積を求めて全体の面積を測ります。
土地の面積とは水平投影面積ですので、斜面をそのまま計測しても正しい面積は求められませんが、平地で障害物がない場合には、このプログラムが威力を発揮します。鋼巻尺を使い所定の張力を掛けて測量するのですが、基礎知識を学んでから挑戦してみてください。1万平方メートル未満の測量なら、十分な精度があります。三角形に区切る際には、できるだけ正三角形に近い区切り方をしてください。さもないと誤差が大きくなってしまいます。
意外にもこのコーナーは地味な人気に支えられて、底堅いものがあるようで素朴に感動している。素数とは何か?素因数分解とは?最大公約数とは?或いは最小公倍数とはどういうものか?といった数学の基礎の基礎を再認識していただけたことと思う。その延長線上で連立方程式を解くという動機づけがなされた教育が行われてきたかということを考えると甚だ疑問である。
年配者は年配者で、このような整数の美しさを教えられた上で、方程式の解法を学んでいたら、もっと数学が好きになっていたかも知れない、本当は「数学」とは興味深いものであったと大いに再認識してくださっても、或いは柔らかい脳を持ったこれからの少年に「数学への興味を喚起」する一助にでもなれば、それはそれでそれで私としては十分である。
起源一世紀頃、古代ギリシャの国に「へロン」という数学者だか技術者だか奇術師だか分らぬような人物がいました。そのへロンが残した偉大な三角形の面積を求める公式というのがあります。この公式はイギリスが誇るニュートンが十七世紀になって発見したと大喜びしていたところ、既に起源一世紀にへロンによって発見済みということを知るところとなり、ガッカリしたといういわくつきの公式である。
この公式というのは、三角形の三辺の長さを測って面積を求めるというものです。「三辺法」とか「へロンの公式」という名称で親しまれています。
へロンの公式:三角形の辺の長さを使って、その面積を計算する公式。
三つの辺の長さをa、b、cとし、2s=a+b+cとおけば、面積は、SQR(s(s-a)(s-b)(s-c))デ与えられる。「SQRとはスクウェア・ルート、平方根という意味である」
今日は、この「へロンの公式」をプログラミングして、今迄このコーナーに付き合ってくださいました方々に感謝したいと思います。
今までのプログラムは「songzhaoのライブラリー」として、ひとまとめにしたいと思いますので、1000行目から打ち込んでください。
1000 REM***へロンノコウシキ
1020 CLEAR:CLS:PRINT”<ヘロン ノ コウシキ>”:INPUT”サンカクケイノスウ”;N
1030 DIM L(N-1,2),S(2,N-1),T(2,1),H(N,-1),B(N-1)
1040 INPUT”データPrg. ”;DTP:GOSUB#DTP:FOR J=0 TO N=1:PRINT”*”;
1050 L=0:A=L(J,0):FOR K=0 TO 2:IF A<L(J,K) THEN A=L(J,K)
1060 L=L+L(J,K):NEXT K:B(J)=A:IF L-A=<A THEN PRINT J+1;”エラー チェック”:END
1070 M=L/2:S(0,J)=SQR(M*(MーL(J,0))*(M-L(J,1))*(M-L(J,2)))
1080 S(1,J)=EXP((LN M+LN(M-L(J,0))+LN(M-L(J,1))+LN(M-L(J,2)))/2)
1090 H(J)=ROUND(S(0,J)/B(J),-4):S(2,J)=H(J)*B(J)
1100 FOR K=0 TO 2
1110 T(K,0)=T(K,0)+INT S(K,J):T(K,1)=T(K,1)+FRAC S(K,J)
1120 NEXT K,J
1130 FOR J=0 TO 2
1140 T(J,0)=T(J,0)+INT T(J,1):T(J,1)=FRAC T(J,1)
1150 NEXT J
1200 REM**リスト
1210 FOR J=0 TO N-1
1220 CLS:PRINT”No.”;J+1;”(ヘロン キュウセキ)”:PRINT USING”a=###.### b=###.### c=###.###”;L(J,0);L(J,1);L(J,2)
1230 PRINT USING”(sqr)####.######m2”;S(0,J):PRINT USING”(log)####.######m2”;S(1,J);
1240 GOSUB 1350:NEXT J
1250 CLS:PRINT”(ヘロン メンセキ ゴウケイ)”
1260 PRINT USING”sqr:######.######m2”;T(0,0)+T(0,1)
1270 PRINT USING”log:######.######m2”;T(1,0)+T(1,1)
1280 GOSUB 1350
1300 REM**テイヘン*タカサ メンセキ リスト
1310 FOR J=0 TO N-1:CLS:PRINT”No.”;J+1;”(サンシャ キュウセキ)”:PRINT USING”テイヘン= ###.###m”;B(J):PRINT USING”タカサ = ###.###m”;2*H(J);
1320 PRINT USING”メンセキ=####.######m2”;S(2,J);
1330 GOSUB 1350:NEXT J
1340 CLS:PRINT”(サンシャ メンセキ ゴウケイ)”:PRINT USING”######.######m2”;T(2,0)+T(2,1):GOSUB 1350:GOTO 1200
1350 Z$=INKEY$:IF Z$=””THEN 1350
1360 IF Z$=”Z”THEN 1 ELSE RETURN
それでは続けて次のようにプログラムを打ち込んで下さい。
1 CLS:PRINT”<songzhao ノ スウガク アラカルト>”,”ソスウヲモトメル=1: ソインスウ ブンカイ=2”,"コウヤク コウバイスウ=3: ホウテイシキ=4”,”ヘロンノコウシキ=5 ”;
2 INPUT DT:ON DT GOTO 10,100,300,500,1000
そして、今迄のプログラムを次のように書き改めてください。
80 Z$=INKEY$:IF Z$=”” THEN 80 ELSE IF Z$=”Z” THEN 1 ELSE 20
210 Z$=INKEY$:IF Z$=”” THEN 210 ELSE IF Z$=”Z” THEN 1 ELSE 120
490 Z$=INKEY$:IF Z$=”” THEN 490 ELSE IF Z$=”Z” THEN 1 ELSE 320
680 Z$=INKEY$:IF Z$=”” THEN 680 ELSE IF Z$=”Z” THEN 1
こうしておけば、「Z]以外のキーを押した場合にはそのプログラムを繰り返すし、「Z]を押した場合には最初のメニュー画面に戻ります。
このへロンの公式のプログラムにおいては、データ入力用のプログラムを本体以外のプログラム・エリアに組むこととします。P0~P9までの間の空いているエリアに次のプログラムを書き込んでください。
1 DATA 3,4,5
2 DATA 4,5,6
3 DATA 10,14,17
4 DATA 13,16,22
5 DATA 22,25,28
6 DATA 18,22,28
7 DATA 24,28,35
8 DATA
9 DATA
10 DATA
11 DATA
12 DATA
13 DATA
500 REM**ヘロン ノ コウシキ データ
510 FOR J=0 TO N-1:FOR K=0 TO 2:READ L(J,K):NEXT K,J:RETURN
これでプログラム自体の書き込みは終了しました。思いどおりに作動するかチェックします。例によって、RUN ENTERとします。
<songzhao ノ スウガク アラカルト>
ソスウヲモトメル=1: ソインスウ ブンカイ=2
コウヤク コウバイスウ=3: ホウテイシキ=4
ヘロンノコウシキ=5 ?
このような表示が出力されます。5 ENTERとしてください。
<へロン ノ コウシキ>
サンカクケイノスウ? このように聞いてきますので7を入力してください。すると、
データPrg. ? と聞いてきますので、先ほど作成したデータプログラムの番号を入力してください。
*印が7個表示され、
a= 3.000 b= 4.000 c= 5.000
(sqr) 6.000000m2
(log) 6.000000m2
と表示されます。次々に「Z]以外のきーを押していくと、各々7個の三角形の面積と合計が示され、基本的な三角形の面積=底辺*高さ/2の換算値が示されます。
このプログラムは、プログラム自体をデータの入力方法として使用しています。行番号に続いて、数値データを書き込み(,)コンマで区切って、一行を一個の三角形の辺のデータとしています。何個でも書き込むことができます。表計算のデータの書き込みと同じ感覚で入力できるところがとてもよい。
さて、それではこのプログラムを何のために使うかといえば、主に土地の面積を測るのに使います土地を三角形の集合体と考えて要領よく区切ります、区切った三角形ごとに面積を求めて全体の面積を測ります。
土地の面積とは水平投影面積ですので、斜面をそのまま計測しても正しい面積は求められませんが、平地で障害物がない場合には、このプログラムが威力を発揮します。鋼巻尺を使い所定の張力を掛けて測量するのですが、基礎知識を学んでから挑戦してみてください。1万平方メートル未満の測量なら、十分な精度があります。三角形に区切る際には、できるだけ正三角形に近い区切り方をしてください。さもないと誤差が大きくなってしまいます。