HAMIchin仮面の土木・測量教室   Room 711  13回


    Hokokaku() の中身  続きの続き の続き 

 


  Hokokaku() 関数の構造。

       なぜ条件分岐のが必要かを 考える。




























13-1



























表13-2






  Function Hokokaku(dX, dY) As Double の内容



  Function Hokokaku(dX, dY) As Double

    Select Case dX
      Case Is > 0
         Select Case dY
           Case Is > 0
              Hokokaku = Atn(dY / dX)          条件番号 1
           Case Is = 0
              Hokokaku = 0                  条件番号 2
           Case Is < 0
              Hokokaku = 2 * pi + Atn(dY / dX)     条件番号 3
           End Select

      Case Is = 0

         Select Case dY
           Case Is > 0
              Hokokaku = 1 / 2 * pi             条件番号 4
           Case Is = 0
              Hokokaku = 0                   条件番号 5
           Case Is < 0
              Hokokaku = 3 / 2 * pi             条件番号 6
           End Select

      Case Is < 0

        Select Case dY
          Case Is > 0
             Hokokaku = pi + Atn(dY / dX)          条件番号 7
          Case Is = 0
             Hokokaku = pi                     条件番号 8
          Case Is < 0
             Hokokaku = pi + Atn(dY / dX)          条件番号 9
          End Select

     End Select

  End Function
 
 


       プログラム (13-1) の 単位円 (R=1) の 入力値 と 計算結果表
    






















   プログラム(13-1) は Hokokaku() の 完璧なプログラムです。 

   もしも 9種類の条件をふるい分けせずに dX, dY から

   方向角=tan-1(dY/dX) の方程式で 答えを出そうとしたら。

   プログラムは下のようになります。 

     プログラム(13-3) 一応 条件を9種類判定して 分岐していますが

     方向角を求める式がすべて Hokokaku = Atan(dY/Dx) で同じです。

     これではせっかく、条件分岐をしても意味がありません。


     プログラム(13-3) と全く同じ結果になるのが プログラム(13-4)のです。

     このプログラムは まったく 条件分岐がありません。 


   最初のプログラム(13-3)は 一生懸命 条件分岐をして、同じ結果を出そうとしています。 

   後のプログラム(13-4)は何にも考えずに、ただ結果を計算しただけです。 

   この二つは同じ結果になります。

  
























13-3
























13-4



  Function Hokokaku(dX, dY) As Double

    Select Case dX
      Case Is > 0
         Select Case dY
           Case Is > 0
              Hokokaku = Atn(dY / dX)     条件番号 1
           Case Is = 0
              Hokokaku = Atn(dY / dX)     条件番号 2
           Case Is < 0
              Hokokaku = Atn(dY / dX)     条件番号 3
           End Select

      Case Is = 0

         Select Case dY
           Case Is > 0
              Hokokaku = Atn(dY / dX)      条件番号 4
           Case Is = 0
              Hokokaku = Atn(dY / dX)      条件番号 5
           Case Is < 0
              Hokokaku = Atn(dY / dX)      条件番号 6
           End Select

      Case Is < 0

        Select Case dY
          Case Is > 0
             Hokokaku = Atn(dY / dX)        条件番号 7
          Case Is = 0
             Hokokaku = Atn(dY / dX)         条件番号 8
          Case Is < 0
             Hokokaku = Atn(dY / dX)        条件番号 9
          End Select

     End Select

  End Function 




  Function Hokokaku(dX, dY) As Double

    Hokokaku = Atn(dY / dX
          
  End Function 











































表13-5


   プログラム(13-3)かプログラム(13-4)のプログラムをエクセルで実際に

   作って試してみてください。 まずは、 プログラム(13-4)が簡単で実験しやすいでしょう。

   作り方は 9回目、10回目 を参考にして下さい。

   Function Hokokaku(dX, dY) が できましたら。

   エクセルのシートで 任意のセルに.

            ”=Hokokaku ( 0.785398 , 0.785398 )”  ”Enter” で

   同じセルに 方向角が表示されます。(単位はラジアンです。)

   次々と (表13-5)の 9つの条件の dX, dY の値を入れて

   どのような結果になるか 試してみてください。

   同じようにプログラム(13-3)で 方向角を求めても同じ結果になります。

   注意! プログラム(13-3) の 漢字 条件番号1 〜条件番号9 は参考のために

   入れてありますので。 これらの文字を 書き込まないで下さい。 エラーになります。

   下の (表13-5) に結果をまとめました。 




   




   (表13-5) からわかることは、 方向角の計算結果が

    0.785398、 0.000 、 -0.785398、と #VALUE! の4種類があります。 

    条件番号1以外は 正しい答えではありません。

    正しい計算値 (表13-2)の結果には、ほど遠いものです。

    方向角計算 方程式は 正しいのですが。コンピューターではどうもうまく働いていません。 

    どうしても条件分岐によって答えを正しく導く必要が生じます。 

    そこで、 プログラム(13-1)のような 条件分岐が出来たわけです。


    プログラムを作るとき 最初から プログラム(13-1)のような条件分岐を予想して

    考えるわけではありません。 初めは方程式に従ってプログラム(13-4)のような

    単純なプログラムを作ります。 そして、単位円のような単純なモデルで答えを予想して、

    プログラムを働かせてみて.、答えをテストします。 

    結果は (表13-5) になりますのであらかじめ用意した結果 (表13-2) にならないことが

    すぐにわかります。 次に原因を調べます、慣れてくるとおおよその見当がつきますが。

    普段は、一つずつ条件を考えて 丹念に解決していきます。 

    こうして出来たのが プログラム(13-1)です。


    コンピュータは万能の機械と思われがちですが、実際は融通の利かない石頭です。 

    何から何まで、人間が命令を細かく教えないと 全く使い物になりません。

    しかし、いったん正しい命令を教えると 疲れを知らない忍耐力 と きっちりきちべえが

    正確な答えをはじき出してくれます。 

    「コンピューターに人間が使われる時代が来る。」と解ったようなことを言う人いますが、

    そんなことは決してありません。 

    むしろ 「いい加減なプログラム」と 「いい加減な理論」によって。

    人々が 振り回される可能性は大いにあります。 

    コンピューターのせいではありません。 人災です。 






  エクセルのファイル 「座標計算シート」 (有料) を用意しました。 


  このファイルで ToraX、 ToraY 関数のマクロが完全に表示されます。

      トラバー計算、逆トラバー計算を一つの画面で処理する標準フォーム

      標準フォームページを即、使うための解説

      VBA による 座標関連関数 のリソース(プログラム)の公開 

     ● Hokokaku(dX, dY)の完全な動作, と記述を含みます。 

      リソースの解説のための計算例

      プログラム作成のための補足説明

                      が含まれています。

   この講座は 順次回を重ねていくと 最終的には 「座標計算シート」が出来上がります。

   前もって 「座標計算シート」を手元に置かれて 参考にしながら 実際に作動させて
     確認していただくと よりいっそう理解しやすいです。

   また、本講座と 「座標計算シート」があれば 本格的な、座標計算やVBAの教材としても
     十分に活用できるものと考えております。


     テキストファイル入手方法は下欄でお確かめ下さい。




    ”エクセル” ファイル 「座標計算シート」 申し込み方法

      ファイル代金 ¥2,000円 を下記の銀行に振り込んで下さい。

   恐れいりますが、 メールにて

        ファイルの送り先のメールアドレス

        あなたの名前 (お名前がわからないと振込みの確認ができません)

                   以上をお知らせください。

    確認ができしだい メールにてファイルを送らせていただきます。
    もし、1週間経ってもファイルが届かない場合、お叱りのメールを下さい。直ちに対処いたします。

     連絡先メール   mt7116@mandala.ne.jp

     振込み先

         阿波銀行山川支店(店番号406)
         普通預金
         口座番号  1034509
         永井 俊   (ナガイ タカシ)

         ファイル代金 ¥2,000円



   back to  room 711 top     goto e-school top