
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時間以上格闘しても答えが出なく、
ここに投稿してみました。
どなたか、回答よろしくお願いいたします。。
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
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等でやってみてください。
わかりにくい質問ですみませんでした。。。初心者なもので…。質問の意味は、私が意味しているものとは違うと思います。わざわざ回答していただいてありがとうございます。こんな私に対してたくさんの回答をしていただいて、本当に感謝しています。みなさん、本当にありがとうございます♪
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に結果を出力します。
いかがでしょうか。
見るからに難しそうなプログラミングで少々びっくりしています。。。今、入門の授業をとっているのですが、プログラミングは奥が深いですね・・・。明日、学校で試してみようと思います。ありがとうございます!
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
このような難しいプログラミングはまだやったことがないのですごく興味深いです。明日、学校に行って試してみようと思います。ありがとうございます!
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
では?
この回答への補足
大分時間がたったのにまだまだできない初心者です。。。 すみませんが、この結果ををListBoxに表示したい場合はどうすればいいのか教えていただけませんか?お手数をおかけします。よろしくお願いします!!
補足日時:2006/05/07 15:05回答してくださってありがとうございます。この方法は学校で習った形に近いので自分でも試してみることができると思います。明日、学校に行って試してみます。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++でのテキストファイル読み込...
-
Windowsで複数のファイルを同じ...
-
FindFirstFileとFindNextFileで...
-
DOSコマンドで、標準出力を出力...
-
パスから最後のディレクトリだ...
-
drtファイルはどうしたら開...
-
Perl 時間同士の差
-
空白文字 \\f と\\v の違いに...
-
テキストファイルから日本語部...
-
C言語で特定の行を抽出する方法...
-
タブの色を変更する方法
-
chdirがうまくできない
-
awkスクリプトでダブルクォーテ...
-
エラーログ「\\x8ew\\x92\\xe8...
-
JavaでCSVファイルを高速に読む...
-
並び方、
-
Perl Vlookupみたいに
-
csvファイルの横方向への改行に...
-
大量メールの任意のヘッダだけ...
-
VBAでCSVファイルを途中行まで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルの各行を配列...
-
【Javascript】改行されていな...
-
連番のファイルを何個も開きたい
-
特定のデータを更新する
-
Perlのワンライナーをスクリプ...
-
Perl Grepについて
-
「パスが見つかりません」とい...
-
Pythonでegrep機能をつかいたい
-
C++でのテキストファイル読み込...
-
ファイルから検索条件を読み込...
-
perlでCSVをソートする方法につ...
-
ファイル読み込みマッチングに...
-
どなたか教えて下さい。
-
VBSの処理について
-
Perl テキスト処理について
-
***.cgiの中身は第三者から見ら...
-
バッチファイルでテキストファ...
-
ファイル名に日付を入れてアッ...
-
perl での文章の取得について
-
ファイル名を複数個配列で確保...
おすすめ情報