- ベストアンサー
プログラミングの問題:プログラムの詳細な説明と参考情報
- 100行のプログラムで、初心者にとって難解な部分を解説します。
- プログラムは数学的な処理を行い、条件を満たす値を出力します。
- 参考になるHPや考え方についても紹介します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一つずつコメントします。 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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
このコードは相当旧い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%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95 の例参照。 そして「互いに素」かどうかを検証していると思う。 ーー 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が変わったときの繰り返し佐合の終わり行
ぱっと見たところ ピタゴラスの定理を満たすいっぺんが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
- himajin100000
- ベストアンサー率54% (1660/3060)
>#1さん 当方で実験してみましたが N88互換Basicでは文法エラーで動作しませんでした。(140と190にDO LOOP構文があるから) http://www.vector.co.jp/soft/win95/prog/se055956.html 他でも動くかもしれないけど とりあえず 十進Basicで動作することを確認しました http://www.vector.co.jp/soft/dl/win95/prog/se039185.html [実行]メニューの[ステップ実行]を見ながらやると動きがかなりわかりやすくなるかもしれません。
お礼
丁寧に説明していただきありがとうございます。とても勉強になりました。 ところで、「入力し実行させてみたらいかがでしょうか」というのはhttp://e-words.jp/w/N88-BASIC.html で出来るのでしょうか?このサイトに入ってみたのですが、分かりません。 もしよければ、そのことについても教えて下さい。