• ベストアンサー

VBAで正三角形の面積はいくつになるか求めるコード

VBA初心者です。 OS:XP Accessss Version:2007 問.(For Next/Exit Forステートメントを使い) 1辺が100センチの正三角形の直角から斜辺に対して垂直に線を引き2等分します。2等分を10回繰り返した最小の正三角形の面積はいくつになるか? 100*100*0.5から面積が0.5倍ずつになることを10回繰り返すコードを教えて下さい。 出来ることでしたら途中、簡単な注訳もあると助かります。 質問解りにくいようなら補足します。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.3

間違いがありましたね、失礼いたしました。 sqr関数をみて気づきました。 基本的には補足で記述していただいたやり方で問題ないと思います。 やり方を変えた理由は、2の平方根が無限小数であるためです。 丸め誤差(切捨てによる誤差)が発生してしまうため、Sqr関数の使用を行わない処理を回等させていただいたのです。 誤差は気にしないのであれば、問題ないと思います。 手直しするのであれば、 Num = 5000 HEN = 1 を Num = 5000 / 2 ^ 10 HEN = 1 / 2 ^ 10 にしてループを使わないようにする。 この程度でしょうか。 蛇足ですが、ループカウンタはInteger型を使うよりもLong型を使用したほうが、処理が早くなります。 For 構文で使用するループカウンタの型がLong型であるため、ループカウンタにInteger型の変数を使用すると、Long型への自動型変換を行うためです。 Sub MathSquare() Dim side As Integer '等しい2辺の1辺の長さ Dim i As Long 'ループカウンタ 'ルート2は無限小数であるため変数に格納すると誤差を生じるためフラグ化する。 Dim RootFlag As Boolean Dim Square(9) As Double '面積を配列0~9の計10メンバに格納 RootFlag = False side = 100 '手動入力したい場合は以下のコメントを解除してください。 'side = InputBox("直角二等辺三角形の等しい二辺の長さを入力してください。", "MathSquare") For i = 0 To 9 '10回ループ If RootFlag = False Then Square(i) = side * side * 0.5 '面積計算 Else 'sideにルート2が含まれる場合 Square(i) = side * side 'ルート2*ルート2=2, 2 * 0.5 = 1 End If '2分割後の等しい2辺の長さを算出 If RootFlag = False Then 'ルート2がつく場合 RootFlag = True side = side / 2 Else 'ルート2*ルート2=2 side = (side / 2) * 2は変化無し RootFlag = False End If Next i MsgBox ("答え=" & Square(9)) End Sub

byr8y8
質問者

お礼

回答ありがとうございます。 今回もお礼が遅れてしまってすいませんでした。 手直し頂いたコードでも問題なく、そして分かりやすく教示頂き、 理解が深りました。 私は元々算数が苦手でコードを使ってPCに命令を与えていくのが、どうもうまくいっていません。 とはいえ、AKARI0418さんの分かりやすい回答を頂き、本当に感謝しています。 ありがとうございました。 

その他の回答 (2)

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

直角二等辺三角形の2分で良いのでしょうか? Sub MathSquare() Dim side As Integer '等しい2辺の1辺の長さ Dim i As Long 'ループカウンタ   'ルート2は無限小数であるため変数に格納すると誤差を生じるためフラグ化する。 Dim RootFlag As Boolean Dim Square(9) As Double '面積を配列0~9の計10メンバに格納 RootFlag = False side = 100 '手動入力したい場合は以下のコメントを解除してください。 'side = InputBox("直角二等辺三角形の等しい二辺の長さを入力してください。", "MathSquare") For i = 0 To 9 '10回ループ Square(i) = side * side * 0.5 '面積計算 '2分割後の等しい2辺の長さを算出 If RootFlag = False Then 'ルート2がつく場合 RootFlag = True side = side / 2 Else 'ルート2*ルート2=2 side = (side / 2) * 2は変化無し RootFlag = False End If Next i MsgBox ("答え=" & Square(9)) End Sub

byr8y8
質問者

補足

AKARI0418さん、回答ありがとうございます。 返事が遅くなってしまい本当にすいませんでした。 丁寧な解説・コメントもつけて頂き理解がとてもし易かったです!! 私なりにも Private Sub コマンド0_Click() Dim Num As Double Dim i As Integer Dim HEN As Double Num = 5000 HEN = 1 For i = 1 To 10 Num = Num / 2 HEN = HEN / 2 Next i HEN = HEN * (200 + 100 * Sqr(2)) End Sub としてみました。 かなり下手なりに武骨に作ってみましたが、 AKARI0418さんからみて是非(お時間ある時で構いません‥) 意見を聞かせて頂ければ嬉しいです。 おこがましいようですがご教示お願い致します。 取り急ぎ、お礼まで。  ありがとうございます。

noname#77845
noname#77845
回答No.1

補足してください。 「1辺が100センチの正三角形の直角から斜辺に対して垂直に線を引き2等分します。」 正三角形の何処に直角があるの? もし、頂角の間違いなら頂角から斜辺にどうやって垂線を引くの?

byr8y8
質問者

補足

スイマセンとても解り難いですね‥(^^ヅ 補足します。 2辺が100センチの直角二等辺三角形の頂角から底辺に対して垂直に線を引き2等分します。 △の形の直角二等辺三角形を縦に2等分していく。 ですね。 繰り返し処理です。 宜しくお願いします。

関連するQ&A