電子書籍の厳選無料作品が豊富!

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時間以上格闘しても答えが出なく、
ここに投稿してみました。
どなたか、回答よろしくお願いいたします。。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/06 00:24

質問の意味がピタゴラス数(正整数の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等でやってみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/06 00:23

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に結果を出力します。
いかがでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/06 00:20

'こんな感じでどうでしょう


'---------------------------------------------------------------
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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/06 00:17

No1です。



失礼しました。
A<300 B<300 ですので、
For A = 1 To 299
For B = 1 To 299
です。

A=300 or B=300の時は、H>300になりますので関係ないですが
    • good
    • 0

手元に、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に表示したい場合はどうすればいいのか教えていただけませんか?お手数をおかけします。よろしくお願いします!!

補足日時:2006/05/07 15:05
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/05/06 00:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!