BASIC言語で整数を素因数分解するプログラム

このQ&Aのポイント
  • BASIC言語を使用して整数を素因数分解するプログラムを教えてください。
  • プログラムの実行結果が表示されない場合、間違い箇所を教えてください。
  • 使用するコマンドはbwbasicです。
回答を見る
  • ベストアンサー

BASIC言語で整数を素因数分解するプログラムを教えてください

結果が表示されません。間違い箇所を教えてください 使用コマンドはbwbasicです 100 PRINT "N? (N>2)" 101 waru=2 102 kazuhantei=0 103 pastwaru=0 104 kaisu=1 105 hatsu=1 110 INPUT object 120 DO 130 IF object<2 THEN 140 PRINT "N? (N>2)" 150 INPUT object 160 ELSE 170 kazuhantei=1 180 END IF 190 IF kazuhantei<>0 THEN 200 GO TO 250 210 ELSE 220 GO TO 130 230 END IF 240 LOOP 250 PRINT "soinsubunkai suruto" 260 object=0 270 DO WHILE object<>1 280 IF object MOD waru=0 THEN 290 IF pastwaru=waru THEN 300 kaisu=kaisu+1 310 END IF 320 IF kaisu>1 THEN 330 PRINT "^";kaisu 335 END IF 340 kaisu=1 350 IF hatsu=0 THEN 360 PRINT "*";waru 370 pastwaru=waru 380 END IF 390 hatsu=0 400 object=object/waru 410 END IF 420 ELSE 430 waru=waru+1 440 object=object+1 445 LOOP 450 IF kaisu>1 THEN 460 PRINT "^";kaisu 465 END IF 470 END

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス ・『bwbasic』ってフリーソフトですか?  昔の N88-BASIC を思い出しますね。特に行番号があるので。 >結果が表示されません。間違い箇所を教えてください  ↑これって全く表示されないのか?もしそうなら無限ループしていないか。 ・もう一度、素因数分解のアルゴリズムを紙にでも書いて整理すべきです。  私ならば次のようにプログラミングします。  (1)object に数を入力する。  (2)sosu という名前の素数を用意して 2 から順番にステップアップします。→DO WHILE などを使う。  (3)sosu で割ったあまりが、0 以外なら sosu カウンタを +1 にします。   このときに、PRINT sosu;"^";kazu を表示します。  (4)object の数を sosu で割って 1 になったら処理を終了します。→ここを間違うと無限ループするよ。  (5)(1)へ戻る。  ↑この方法をプログラミングすればよいのです。 ・間違いの箇所を探るよりも、もう一度プログラミングしなおした方が早い気がします。  下にサンプルを載せます。 サンプル: 100 '2 以上を入力 110 DO WHILE object <= 2 120  PRINT "N? (N>2)" 130  INPUT object 140 LOOP 150 '素因数分解を開始 160 sosu = 2 170 PRINT "soinsubunkai suruto" 180 DO WHILE object <> 1 190  kazu = 0 200  WHILE (object MOD sosu)=0 210   object = object / sosu 220   kazu = kazu + 1 230  WEND 240  IF kazu>0 THEN 250   PRINT sosu;"^";kazu 260   IF object>1 THEN 270    PRINT "*" 280   END IF 290  END IF 300  sosu = sosu + 1 310 LOOP 間違い箇所: >260 object=0  ↑object って素因数分解する『数』ですよね。0 を代入していいの?入力した意味ないよ。 >420  ELSE  ↑無駄な ELSE が存在する。削除すべきだ。 ・サンプルを試して見て下さい。→私は試す環境を持っていないので確認して下さい。 ・以上。参考に!

kuma_apple
質問者

お礼

さっそくのアドバイスありがとうございます 明日学校へ行って、試してみたいと思います

関連するQ&A

  • VB.NETで素因数分解のプログラムを作成する

    2以上の整数が与えられたとき、それを素数の積に分解するプログラムを作成したいのです。 例えば、TextBox1に24と打ち込んで、Button1をクリックすると、TextBox2に2×2×2×3が表示されるといった具合です。 ↓ここからどうすれば良いか、ご教授お願い致します。 Private Sub IntegerButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, a As Integer n = TextBox1.Text Do back: If n Mod 2 = 0 Then n = n Mod 2 = 0 Else n = n Mod 3 = 0 End If GoTo back Loop Until n = n + 1 TextBox2.Text = n & "×" End Sub End Class

  • プログラム (BASIC) 教えてください

    コンピュータが 3桁の整数(100~999) n をランダムに生成。 「3桁の整数(100~999) n を当ててください」と表示。 解答者はキーボードで整数 x を入力。 x > n なら「もっと小さい数です.再入力してください」と表示してゲームを継続( 3. に戻り,x を再入力)、 x < n なら「もっと大きい数です.再入力してください」と表示してゲームを継続( 3. に戻り,x を再入力)、 x = n となったら ループを抜ける。 「正解です」と表示して,ゲーム終了。 100 RANDOMIZE 110 PRINT "3桁の整数(100~999) n を当ててください" 120 LET n=100+INT (900*RND) 130 DO 140 INPUT x 150 IF x=n THEN EXIT DO 160 IF x>n THEN 170 PRINT "もっと小さい数です.再入力してください" 180 ELSEIF x<n THEN 190 PRINT "もっと大きい数です.再入力してください" 200 END IF 210 LOOP 220 PRINT "正解です" 230 END このプログラムをIF、END IFを一回のみ使うプログラムに変える方法を教えてください。

  • 1から入力された数までの素因数を数えるプログラム

    こんにちは 1から入力された数(N)までの素因数を数えるプログラムを 作成したいのですが、うまくいきません。 たとえば10と入力すると2と表示されてしまいます。 どこがおかしいのかわかりません。 どなたか教えてください。おねがいします。 N個の配列を用意し、1を入れていき、 素因数でない数の要素には0をいれて、 最終的に1が入っている配列の数を数えて1~Nまでの 素因数の数を数える方法を考えています。 Dim M As Integer Dim N As Integer Dim i As Integer Dim j As Integer Dim sum As Integer Dim L(1000) As Double N = Val(TextBox1) M = N i = 1 Do Until i > N L(i) = 1 i = i + 1 Loop i = 2 Do Until i > M j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop i = i + 1 Loop sum = 0 For i = 2 To N If L(i) = 1 Then sum = sum + 1 End If Next i

  • このプログラムが動くようにするには

    python 超初心者です。 やる気を出すプログラムを作ったのですが動きません。 動くように最小の修正を教えてください。 よろしくお願いいたします。 input_yn = input("Are you doing what you have to do?:") if input_yn == y: print ("Keep doing! Go on!") else: print ("do what you have to do!!!")

  • 整数でないとき

    10 INPUT X 20 IF X=0 THEN END 30 C=X-2*INT(X/2) 40 IF C=0 THEN PRINT”偶数” ELSE PRINT”奇数” 50 GOTO 10 というプログラムはXが整数でなければ奇数と判定してしまいます。20行と30行の間に命令を追加して、Xが整数でないときは”整数でない”と表示して、次の入力を待つように修正し、整数のときだけ奇数か偶数かを判定するようにするには、 25 IF X^2>INT(X^2) THEN PRINT”整数でない”:GOTO 10 を追加する。 でよいのでしょうか? ぜひ教えてください。 

  • rubyのプログラムについて

    rubyのプログラムで2~1000までの素数を列挙のものなんですがどこか違ってますか汗 考えたんですがよくわからなくて汗すみませんどなたかお願いします i=2 print "素数は\n" while i<=1000 do warukazu=2 flag=0 while warukazu<i do if i%warukazu==0 then flag=flag+1 warukazu=warukazu+1 else warukazu=warukazu+1 end end if (flag==0) then print i print"\n" end i=i+1 end

  • 小町算のプログラムについて

    小町算のプログラムについて 100 DIM s(9) 110 FOR i=1 TO 9 120 LET s(i)=-1 130 NEXT i 140 DO 150 LET sum=0 160 LET num=0 170 LET sign=1 180 FOR i=1 TO 9 190 IF s(i)<>0 THEN 200 LET sum=sum+sign*num 210 LET sign=s(i) 220 LET num=i 230 ELSE 240 LET num=10*num+i 250 END IF 260 NEXT i 270 LET sum=sum+sign*num 280 IF sum=100 THEN 290 FOR i=1 TO 9 300 IF s(i)= +1 THEN PRINT " + "; 310 IF s(i)= -1 THEN PRINT " - "; 320 PRINT i; 330 NEXT i 340 PRINT " = 100" 350 END IF 360 LET i=9 370 LET sign=s(i)+1 380 DO WHILE ( sign > 1 ) 390 LET s(i)=-1 400 LET i=i-1 410 LET sign=s(i)+1 420 LOOP 430 LET s(i)=sign 440 LOOP WHILE ( s(1) < 1) 450 END というものですが、このプログラム中にあるsum、num、signとはどういう意味があるのでしょうか?

  • 十進BASICのプログラムについて

    十進BASICのプログラムについて 小町算のプログラムですが、 100 DIM s(9) 110 FOR i=1 TO 9 120 LET s(i)=-1 130 NEXT i 140 DO 150 LET sum=0 160 LET num=0 170 LET sign=1 180 FOR i=1 TO 9 190 IF s(i)<>0 THEN 200 LET sum=sum+sign*num 210 LET sign=s(i) 220 LET num=i 230 ELSE 240 LET num=10*num+i 250 END IF 260 NEXT i 270 LET sum=sum+sign*num 280 IF sum=100 THEN 290 FOR i=1 TO 9 300 IF s(i)= +1 THEN PRINT " + "; 310 IF s(i)= -1 THEN PRINT " - "; 320 PRINT i; 330 NEXT i 340 PRINT " = 100" 350 END IF 360 LET i=9 370 LET sign=s(i)+1 380 DO WHILE ( sign > 1 ) 390 LET s(i)=-1 400 LET i=i-1 410 LET sign=s(i)+1 420 LOOP 430 LET s(i)=sign 440 LOOP WHILE ( s(1) < 1) 450 END というものですが、このプログラム中にあるsum、num、signとはどういう意味があるのでしょうか?

  • サンプルプログラムでエラーが出てしまいます、対処法を教えて下さい。

    Sub test写真の連続挿入()   Dim myDir As String   Dim myFile As String   Dim i As Integer   Dim n As Integer   n = 10   myDir = "D:\写真\" myFile = Dir(myDir, vbNormal)   Application.ScreenUpdating = False   Do Until myFile = ""   If myFile <> "." And myFile <> ".." Then   If (GetAttr(myDir & myFile) And 16) <> 16 Then   i = i + 1   With ActiveSheet.OLEObjects("Image" & i)    .Object.PictureSizeMode = 3    .Object.Picture = LoadPicture(myDir &myFile)   End With   If i = n Then Exit Do   End If   End If   myFile = Dir   Loop   Application.ScreenUpdating = True End Sub このWith ActiveSheet.OLEObjects("Image" & i)の行でエラーが出てしまいます、対処法を教えて下さい。( 実行時エラー'1004'OLEObjects プロパティを取得できません)

  • オブジェクトが必要???

    Excel VBAで以下のコードを作成しました。 データを比較して、抽出する簡単なモノです。 ですが、いざ実行すると、「実行エラー:424 オブジェクトが必要です」と表示され動きません・・・。 自分なりに調べて、Rangeの前にシート名を付け加えたりしたのですが、どうにもウマく行きません・・・ どうしたらよいのでしょうか? コード: Dim i Dim j Dim n i = 2 j = 2 n = 1 Do While whois.Range("Ai") <> "END" Do While j <> "END2" If whois.Range("Ai") = totalpass.Range("Aj") Then If whois.Range("Ci") <> totalpass.Range("Ej") Then whois.Range("Ai:Ii").Copy ansdiff.Range("An:In").Paste n = n + 1 End If Else j = j + 1 End If Loop j = 2 i = 2 Loop

専門家に質問してみよう