【VBA】鉛直投上のプログラム

  • [記事公開]2022.10.01
  • VBA

本日は、Yahoo!知恵袋からのVBAの問題です。私はこの質問でテーマとなっている鉛直投上の数式は初見ですが、答えが全部書いてある奇特な質問がありましたので、どうやって解答(回答)にいたるかを説明するために取り上げてみました。

質問の内容

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14268634789

このプログラミングの問題の答えを教えてください。

図のプログラムは、初速度50m/sで鉛直上向きに投げ上げた小物体の時刻tにおける位置yを計算するプログラムである。時間の刻み幅を0.1秒とした場合、この物体が投げ上げた位置を通過する(負になる)のは投げ上げられてから何秒後になるか、図の①、②、③の正しい組み合わせとともに選択しなさい。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14268634789
Public Sub 鉛直投上()

    Const v As Double = 50, g As Double = 9.8
    Dim t As Double
    Dim y As Double
    
    t = 0
    
    Do
        t = ①
        y = ②
    Loop Until ③
    
    Debug.Print t
End Sub
  • 選択肢1 ①t + 1 ②v * t – 0.5 * g * t ^ 2 ③ y = 0 ④10.5秒後
  • 選択肢2 ①t + 1 ②v * t – g / 2 * t ^ 2 ③ y <= 0 ④15.1秒後
  • 選択肢3 ①t + 0.1 ②v * t – 0.5 * g * t ^ 2 ③ y <= 0 ④10.3秒後
  • 選択肢4 ①0.1 ②v * t – g / 2 * t ^ 2 ③ y = 0 ④10.8秒後
物体の位置と時間の関係
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14268634789
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14268634789

解答にいたるまでの手法

こういう質問は学生さんがしているのでしょうか?

よく分かりません。

とりあえず、答えが全部問題文に載っていますので、4通りのプログラムを作って試してみればよいと思います。

でも明らかに、選択肢の中でプログラム的にこれはありえないだろうと思われるものもありますね。

選択肢1と選択肢4です。

y = 0となっていますが、Loop Until y = 0って、普通そんなちょうどよくゼロにはならないだろうと思います。

永久ループの罠ですね。

そうすると選択肢2か選択肢3か、どちらかということになりますが、tの型がDouble型なのに選択肢2ではt+1としている点に違和感を覚えます。

ということで、選択肢3かなあ・・・?とあたりをつけて、実際にコードに落とし込んで実験してみました。

実験してみた



Public Sub 鉛直投上3()

    Const v As Double = 50, g As Double = 9.8
    Dim t As Double
    Dim y As Double
    
    t = 0
    
    Do
        t = t + 0.1
        y = v * t - 0.5 * g * t ^ 2
    Loop Until y <= 0
    
    Debug.Print t
End Sub

元ネタのプログラムではDim i As Longがありましたが、処理内で使用していなかったので削除しました。

また、MsgBoxでtの値を表示していましたが、いちいちワークシート上で表示されるのも煩わしかったので、Debug.Printに変更しました。

ブレイクポイントを設けてF8キーでステップごとにループを試行したところ、tの値が10.3のときにyの値がマイナスとなり、ループを抜けました。

一応他の選択肢のもコーディングして実験してみましたが、tの答えが違ったり、永久ループになったりするので、やはり回答は選択肢3だと思います。

回答(解答)

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14268634789

まとめ

どうやって解答(回答)に至るかというと、実際にやってみることです。当たり前ですが。

この質問をした人は試してみる時間がなかったのですかね。

それとも実験する環境がなかったか。

スマホからの投稿っぽいので、後者かなと思います。

以上、何かのお役に立てば幸いです。

ここまでお読みくださりありがとうございました。