• ベストアンサー

Visual Basicを使って三平方の定理の計算式を表現するにはどうしたら良いのでしょうか?

Visual Basic.net 2003を使っているのですが、 For...Next loopなどをを使って、 三平方の定理のパターンを全部(A<300 B<300 H<300の条件で)だすという プログラムを作りたいのですが、どうしたらよいのかわからなくて困っています。 一応すべて整数でというのが条件なので、 dim A, B, H, as interger A^2 + B^2 = H^2 で、このときどこかに、 For nextなどをはさんで、 AやBの値を増やしていくと思うのですが…。。 もう5時間以上格闘しても答えが出なく、 ここに投稿してみました。 どなたか、回答よろしくお願いいたします。。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

'#3は、間違いでした、すみません。<(_ _)> Imports System Class Sample Shared Sub Main() '条件:A<300,B<300,H<300 でH*H=A*A+B*B の成り立つものを列挙する Dim A, B, H as Integer For A = 1 To 299 Dim maxB as Integer ' 上限としての仮のB maxB = CInt(Math.Sqrt(299*299 - A*A)) For B = 1 To maxB H = CInt(Math.Sqrt(A*A+B*B)) If H*H = A*A+B*B Then Console.WriteLine("A:{0},B:{1},H:{2}", A, B, H) End If Next Next End Sub End Class

yumikochan
質問者

お礼

では、こちらで試してみます。わざわざありがとうございました!

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

質問の意味がピタゴラス数(正整数の3組)を求めるとすると、下記でやって見ました。 3平方の定理が3辺に成り立つとA+B-C>0は成り立つ立ったと思うので。 テーマが違ってたら、無視してください。 C<299の条件はかけてません。 Sub test05() Dim A, B As Integer i = 1 For A = 1 To 299 For B = 1 To 299 If A < B Then Exit For h = A ^ 2 + B ^ 2 If Sqr(h) = Int(Sqr(h)) Then Cells(i, "A") = A Cells(i, "B") = B Cells(i, "C") = Sqr(h) i = i + 1 End If Next B Next A End Sub VBAでやりましたが、SQR関数をNETなら Math.Sqrtに変えればよいと思います。 表示をConsole.WriteLine等でやってみてください。

yumikochan
質問者

お礼

わかりにくい質問ですみませんでした。。。初心者なもので…。質問の意味は、私が意味しているものとは違うと思います。わざわざ回答していただいてありがとうございます。こんな私に対してたくさんの回答をしていただいて、本当に感謝しています。みなさん、本当にありがとうございます♪

  • Dipjp
  • ベストアンサー率0% (0/1)
回答No.5

Sub Main() FileOpen(1, "SampleFile.txt", OpenMode.Output) Dim A, B As Integer Dim H As Double For A = 1 To 299 For B = 1 To 299 H = Math.Sqrt(A ^ 2 + B ^ 2) If (H - Int(H) = 0.0) And (H < 300) Then Print(1, "A=", SPC(0), A, SPC(3 - A.ToString.Length)) Print(1, "B=", SPC(0), B, SPC(3 - B.ToString.Length)) Print(1, "H=", SPC(0), H) PrintLine(1) End If Next B Next A FileClose(1) End Sub SampleFile.txtに結果を出力します。 いかがでしょうか。

yumikochan
質問者

お礼

見るからに難しそうなプログラミングで少々びっくりしています。。。今、入門の授業をとっているのですが、プログラミングは奥が深いですね・・・。明日、学校で試してみようと思います。ありがとうございます!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

'こんな感じでどうでしょう '--------------------------------------------------------------- Imports System Class Sample Shared Sub Main() '条件:A<300,B<300,H<300 でH*H=A*A+B*B の成り立つものを列挙する Dim A, B, H as Integer For A = 1 To 299 Dim maxH as Integer ' 上限としての仮のH maxH = 299 - A*A If maxH < 1 Then Exit For maxH = CInt(Math.Sqrt(maxH)) For B = 1 To maxH H = CInt(Math.Sqrt(A*A+B*B)) If H*H = A*A+B*B Then Console.WriteLine("A:{0},B:{1},H:{2}", A, B, H) End If Next Next End Sub End Class

yumikochan
質問者

お礼

このような難しいプログラミングはまだやったことがないのですごく興味深いです。明日、学校に行って試してみようと思います。ありがとうございます!

回答No.2

No1です。 失礼しました。 A<300 B<300 ですので、 For A = 1 To 299 For B = 1 To 299 です。 A=300 or B=300の時は、H>300になりますので関係ないですが

回答No.1

手元に、VBAしかないものでVBAで作りました。 VB.NETでも問題ないと思います。 Sub aaa() Dim A As Long Dim B As Long Dim H As Long 'A^2 + B^2 = H^2 For A = 1 To 300 For B = 1 To 300 H = A ^ 2 + B ^ 2 If H ^ 0.5 < 300 Then Debug.Print A, B End If Next B Next A End Sub では?

yumikochan
質問者

お礼

回答してくださってありがとうございます。この方法は学校で習った形に近いので自分でも試してみることができると思います。明日、学校に行って試してみます。本当にありがとうございました。

yumikochan
質問者

補足

大分時間がたったのにまだまだできない初心者です。。。 すみませんが、この結果ををListBoxに表示したい場合はどうすればいいのか教えていただけませんか?お手数をおかけします。よろしくお願いします!!