このプログラムは何をするものか詳しく説明しなさい。
100 FOR x=1 TO 100
110 FOR y=x TO 100
120 LET a=x
130 LET b=y
140 DO
150 LET r=MOD(a,b)
160 IF r=0 THEN EXIT DO
170 LET a=b
180 LET b=r
190 LOOP
200 IF b=1 THEN
210 LET z=SQR(x^2+y^2)
220 IF INT(z)=z THEN PRINT x,y,z
230 END IF
240 NEXT y
250 NEXT x
プログラムに関して初心者で、120~230(ほとんどですが…)の部分で何をしようとしているのかが分かりません。何か参考になるHPや考え方だけでも教えていただけないでしょうか。
No.1ベストアンサー
- 回答日時:
一つずつコメントします。
120 LET a=x … xの値をaに代入する。
150 LET r=MOD(a,b) … aをbで割った余りをrに代入する
140 DO
150 LET r=MOD(a,b)
160 IF r=0 THEN EXIT DO
170 LET a=b
180 LET b=r
190 LOOP
…140から190まで処理するとまた140に戻る。
rがゼロなら、200へ行く
200 IF b=1 THEN
210 LET z=SQR(x^2+y^2)
220 IF INT(z)=z THEN PRINT x,y,z
230 END IF
… bが1なら、210と220を処理する
210は、斜辺がzの直角三角形で、xとyからzを算出する
220は、zがぴったり整数になる時に、x、y、zの書く値を出力する
たぶん、N88BASICだろうと思います。
このまま、入力し実行させてみたらいかがでしょうか。
http://e-words.jp/w/N88-BASIC.html
丁寧に説明していただきありがとうございます。とても勉強になりました。
ところで、「入力し実行させてみたらいかがでしょうか」というのはhttp://e-words.jp/w/N88-BASIC.html で出来るのでしょうか?このサイトに入ってみたのですが、分かりません。
もしよければ、そのことについても教えて下さい。
No.2
- 回答日時:
>#1さん
当方で実験してみましたが
N88互換Basicでは文法エラーで動作しませんでした。(140と190にDO LOOP構文があるから)
http://www.vector.co.jp/soft/win95/prog/se055956 …
他でも動くかもしれないけど
とりあえず
十進Basicで動作することを確認しました
http://www.vector.co.jp/soft/dl/win95/prog/se039 …
[実行]メニューの[ステップ実行]を見ながらやると動きがかなりわかりやすくなるかもしれません。
No.3
- 回答日時:
ぱっと見たところ
ピタゴラスの定理を満たすいっぺんが100以下の三角形の各辺の長さを求めているようです。
VB(A)に直すとこんな具合かな?
Private Sub Command1_Click()
For x = 1 To 100
For y = x To 100
a = x
b = y
Do
r = a Mod b
If r = 0 Then Exit Do
a = b
b = r
Loop
If b = 1 Then
z = Sqr(x ^ 2 + y ^ 2)
If Int(z) = z Then Debug.Print x & vbTab & y & vbTab & z
End If
Next y
Next x
End Sub
No.4
- 回答日時:
このコードは相当旧いBASICの仕様(JISBASIC?)ですね。
これは教科書か情報処理の問題集回答かに乗っていたのですか。
前者なら、先生の講義説明を良く聞いてください。宿題の説明のような質問は質問規約に反するかも。
手元がエクセルが使える環境なら下記をやってみてはどうですか。
ツールーマクローVBE-挿入ー標準モジュールで出てきた画面に質問の
コードを貼り付ける。
(1)まず今のマイクロソフト系のBASICは行番号を使いません。
行番号を全て消しましょう。たまたまGOTO 行番号などがないので
消しても大丈夫。
(2)最初の行の前ににSub test01()を挿入
最後の行の後にEnd Subを挿入
(3)letを全て削除します。
(4)mod=あまりを出す関数(演算子)の書き方がms系basicと違うので r = A Mod B にする。
(5)pRINTをDebug.Printに変える
結果は
Sub test01()
For x = 1 To 100
For Y = x To 100
A = x
B = Y
Do
r = A Mod B
If r = 0 Then Exit Do
A = B
B = r
Loop
If B = 1 Then
Z = Sqr(x ^ 2 + Y ^ 2)
If Int(Z) = Z Then Debug.Print x, Y, Z
End If
Next Y
Next x
End Sub
(6)実行(f5キーを押す)する。
(7)表示ーイミディエイトウインドウ でイミディエイトウインドウが出て
3 4 5
5 12 13
7 24 25
(中略)
65 72 97
で、100までの(正整数)のピタゴラス数(注)の組み合わせが列挙されている。(注)web照会のこと
ーーー
For x = 1 To 100
Xは1から100まで作業を繰り返す。
For Y = x To 100
YはXより大きい数をとり100まで。
同じ数で重複するのは意味ないのでYは、Xより繰り返しを開始している
A = x
B = Y
新たにx、yを変数a,bに代入(セット)している。以下で加工してチェックするので、X、Yを変化させてはまずいので、別変数に初期値として代入。
DO
lOOPまで繰り返し、囲まれた中を計算する
r = A Mod B
If r = 0 Then Exit Do
aをbでわり、割り切れる場合は
--
r = A Mod B
If r = 0 Then Exit Do
A = B
B = r
Loop
If B = 1 Then
---
ここは極く基礎の整数論の知識が要るところで、
ユークリッドの互助法で最大公約数を求めていると思う。
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC% …
の例参照。
そして「互いに素」かどうかを検証していると思う。
ーー
Z = Sqr(x ^ 2 + Y ^ 2)
xの2乗+Yの2条の平方根を求め、Zに入れている
Z = Sqr(x ^ 2 + Y ^ 2)
zが整数ならば印刷(表示)
Debug.Print x, Y, Z
イミディエイトウインドウ画面に、並べて表示し改行
End If
if処理の終わり
Next Y
Yが変わったときの繰り返し佐合の終わり行。
Next x
Yが変わったときの繰り返し佐合の終わり行
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
processing エラーで、 "cannot...
-
[VBS]変数を定数に変換する方法...
-
整数xxxが大き過ぎますというエ...
-
数値計算??
-
テキストボックスの値を変数に...
-
親ウィンドウの情報をインライ...
-
【VBA】複合代入演算子
-
umu *= 2;てどんな意味があるの...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
コマンドプロンプト バッチ|結...
-
C言語 アロー演算子について質...
-
VB2008でデリゲートの代わりに...
-
datagridviewに行...
-
Java認定試験3級の問題です。 ...
-
「%」を使って、偶数か奇数かを...
-
C言語 列挙型(enum型)変数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
EXCEL/VBA 変数の値をクリップ...
-
整数xxxが大き過ぎますというエ...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
python の 連鎖代入の文法
-
i++と++i ってどう違うのですか?
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
「%」を使って、偶数か奇数かを...
-
JavaScriptをURLから直接実行し...
-
VBA 1行で複数の代入を行った...
-
ExcelのVBAでをA列に第0〜19項...
-
無名関数のメリットがよくわか...
-
コマンドプロンプト バッチ|結...
おすすめ情報