- ベストアンサー
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時間以上格闘しても答えが出なく、 ここに投稿してみました。 どなたか、回答よろしくお願いいたします。。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
'#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
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
質問の意味がピタゴラス数(正整数の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等でやってみてください。
お礼
わかりにくい質問ですみませんでした。。。初心者なもので…。質問の意味は、私が意味しているものとは違うと思います。わざわざ回答していただいてありがとうございます。こんな私に対してたくさんの回答をしていただいて、本当に感謝しています。みなさん、本当にありがとうございます♪
- Dipjp
- ベストアンサー率0% (0/1)
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に結果を出力します。 いかがでしょうか。
お礼
見るからに難しそうなプログラミングで少々びっくりしています。。。今、入門の授業をとっているのですが、プログラミングは奥が深いですね・・・。明日、学校で試してみようと思います。ありがとうございます!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'こんな感じでどうでしょう '--------------------------------------------------------------- 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
お礼
このような難しいプログラミングはまだやったことがないのですごく興味深いです。明日、学校に行って試してみようと思います。ありがとうございます!
- chibita_papa
- ベストアンサー率60% (127/209)
No1です。 失礼しました。 A<300 B<300 ですので、 For A = 1 To 299 For B = 1 To 299 です。 A=300 or B=300の時は、H>300になりますので関係ないですが
- chibita_papa
- ベストアンサー率60% (127/209)
手元に、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 では?
お礼
回答してくださってありがとうございます。この方法は学校で習った形に近いので自分でも試してみることができると思います。明日、学校に行って試してみます。本当にありがとうございました。
補足
大分時間がたったのにまだまだできない初心者です。。。 すみませんが、この結果ををListBoxに表示したい場合はどうすればいいのか教えていただけませんか?お手数をおかけします。よろしくお願いします!!
お礼
では、こちらで試してみます。わざわざありがとうございました!