• 締切済み

ultra Basic Ver.2 「IF THEN」について

今、高校で『ultra Basic Ver.2』のプログラミング実習をしています。 それで下記の問題がどうしてこうなるのか全く分かりません。詳しく分かる方はご指導お願いします。 (1) 1~1000までの合計値を求めるプログラムを作りなさい。      ちなみにプログラムは下記のようになるようです。 10 A=0 20 B=0 30 B=B+A 40 IF A=1000 THEN GOTO 70 50 A=A+1 60 GOTO 30 70 PRINT "合計";B 80 END 合計 500500

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

もう既にご回答は尽きている感じですが、敢えて付け加えます。 ポイントは (1)A=A+Bの部分でしょう。    A=A+1も同じパターン (2)30 B=B+A 40 IF A=1000 THEN GOTO 70 50 A=A+1 60 GOTO 30 とあり (2)の部分が無限繰り返しをする。しかし無限に繰り返しても仕方が無いので、ただしA=A+1で加える数が1づつ増えて行きますが、1000になったら繰り返しから脱出します。 それがIF A=1000 THEN GOTO 70です さて(1)ですがAと言うコンピュタのメモリの箱から、Aの値をレジスタなどと言う記憶場所に取り出して、その値にコンピュタの演算装置がBを加えて、結果の値をもう一度Aというメモリに戻すと考えてはどうでしょう。 Bは合計を表す変数なので、「T」(TotalのT)を使うことが多いようですが。 プログラムは (A)初期設定部 (B)グルグル回り(繰り返し処理部)   脱出のタイミング指定とだ脱出先 (C)脱出したあとのとじまい部 が基本原則です。

全文を見る
すると、全ての回答が全文表示されます。
  • kozo_k
  • ベストアンサー率29% (55/188)
回答No.2

10 A=0   →変数Aは最初(初期値)は0 20 B=0   →変数Bは最初(初期値)は0 30 B=B+A  →BとAを足してその答えをBに代入します。 40 IF A=1000 THEN GOTO 70   →もし次の行のAの値が1000になったら70行へジャンプ! 50 A=A+1   →最初0だったAに1を足してその答えをBに代入(ここでAは1になる繰り返して最終的に1000になる) 60 GOTO 30  →30行へジャンプ! 70 PRINT "合計";B   →合計を画面に表示 80 END   →プログラムお終い このプログラムは繰り返しを、GOTOで処理しているためちょっと分かりにくい構造になっています。 まだFOR~NEXTやDO~LOOPとかの構文を習っていないためと思います。 要は行30から行60までをAが1000になるまで繰り返しています。IF文はその条件が満足したら繰り返しをやめる判断をしています。 何か良く分からない説明ですが…。

serusasujp
質問者

お礼

早速のご回答ありがとうございます。とても参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • betagamma
  • ベストアンサー率34% (195/558)
回答No.1

順を追ってよくみてみましょう。 まず、題名にもなっている、 40 IF A=1000 THEN GOTO 70 ですが、IF ~ THEN ~というのは、「もし~ならば、~しなさい」という命令でしたね。ここでは、「もし、A=1000ならば、70行に飛びなさい」ということです。逆を言えば、A=1000でなければ、この行は何もしないので、無視してよい、ということです。 では、プログラムの流れを追って見ましょう. 10 A=0 20 B=0 30 B=B+A= 0+0 =0となります 40 A=1000でないので、無視しましょう。 50 A=A+1=0+1=1となります 60 GOTO 30 30に飛びます. ここで、A=1,B=0です。 30 B=B+A=0+1=1となります 40 A=1000でないので、無視しましょう。 50 A=A+1=1+1=2となります 60 GOTO 30 30に飛びます. ここで、A=2,B=1です。 30 B=B+A=1+2=3となります 40 A=1000でないので、無視しましょう。 50 A=A+1=2+1=3となります 60 GOTO 30 30に飛びます. ここで、A=3,B=3です。 30 B=B+A=3+3=6となります 40 A=1000でないので、無視しましょう。 50 A=A+1=3+1=4となります 60 GOTO 30 30に飛びます. ここで、A=4,B=6です。 30 B=B+A=6+4=10となります 40 A=1000でないので、無視しましょう。 50 A=A+1=4+1=5となります 60 GOTO 30 30に飛びます. ここで、A=4,B=10です。 ・・・という風です。Aは、1,2,3,4,5....と増えていき,Bには、B=B+Aなので、B=0+1=1,B=1+2=3,B=3+3=6,B=6+4=10...と足されていくのがわかると思います。 A=1000の時は、 30 B=B+A=499500+1000=500500となります 40 A=1000でなので、70に飛びます. 70 PRINT "合計";B 500500が表示されます. 80 END プログラムの終わり というわけです。

serusasujp
質問者

お礼

詳しい説明ありがとうございます。なんか分かってきたような気がしてきました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • If x < y Then 0 Then ←この書き方の意味は?

    VB6.0の出来たプログラムをVB.NETに移行する為にソースを見ているのですが If x < y Then 0 Then ~処理A~ Else ~処理B~ End If と記述されている部分がありました。 「0 Then」がなければ、xがyより小さい時、処理Aを行い、 それ以外の場合は、処理Bを行うというのはわかります。 この時のThen 0 Thenとはどういった意味になるのでしょうか?

  • 十進ベーシックのプログラムの間違いを教えてください。

    誰か次のプログラムの間違いを直してください。入力を間違えても次に進めるようにするにはどこをどう変えたらよいのですか? RESTORE 30 READ a$ 40 INPUT b$ IF a$=b$ THEN IF a$<>b$ THEN GOTO 40 PRINT a$ GOTO 30 DATA i,x,d,k,k,h,end END IF END

  • プログラムの組み方について

    ウインドウズ98とエクセルとワードを使っていますが、 かつてのBASICのようなプログラムを組んで実行 させることは可能なのでしょうか?例えば 10 A=1 20 A=A+1:IF A>9 THEN 50 30 FOR B=1 TO A:PRINT B 40 GOTO 20 50 PRINT A 60 END というような簡単なものでいいのですが・・・。 どなたか教えて下さい。よろしくお願いします。

  • サブルーチン

    下は身長の平均を求めるプログラムですけど、身長の高い順、低い順に並び替えしたいんですがどうしたらいいかわからないので、よかったら誰か教えていただけませんか                   REM プログラム     10            DIM A(12) 20 PRINT "メニュー” 30 PRINT "身長入力...1" 40 PRINT "身長出力...2" 50 PRINT "終了" 60 PRINT "どれにしますか" 70 INPUT B 80 IF B=1 THEN GOSUB300 ELSE 110 90 GOTO 30 100 IF B=2 THEN GOSUB500 ELSE 130 110 GOTO 30 120 IF B=3 THEN GOSUB700 ELSE 30 130 END 140 A(11)=B 300 FOR I=1 TO 10 310 PRINT i;: PRINT "人目" 315 INPUT C 320 A(I)=C 330 PRINT "これでいいですか?" 340 PRINT "1.YES 2.NO" 345 INPUT D 350 IF D=1 THEN 380 ELSE 370 360 IF D=2 THEN 315 ELSE 340 370 A(11)=A(11)+A(I) 380 NEXT I 390 RETURN 400 IF C=1 THEN 520 500 PRINT "先に入力してください" 510 GOTO 30 515 FOR I=1 TO 12 520 PRINT A(I) 530 NEXT I 540 RETURN 550 PRINT "これで身長の平均を求めるのを終わります"700 RETURN 710  

  • IF = 0 Then 空欄と認識してくれない

    下記のように、$B4:$B28セルが全て空欄の際にマクロ1を実行しないようにしたいのですが、うまくいきません。 Sub マクロ() If Application.WorksheetFunction.CountA(Sheets("一覧").Range("$B4:$B28")) = 0 Then Exit Sub End If マクロ1 End Sub $B4:$B28には、実際は空欄ではなくて、=IF(Sheet2!A1="","",Sheet2!A1)の関数がずらーっと入っています。 表示上は空欄の時でも空欄とは認識されず、マクロ1が実行されてしまうのです。 マクロを実行したい時は、$B4:$B28のセルの一部、または全てのセルに4桁の数字が表示された時だけです。 $B4:$B28のIF関数を消して完全に空セルにすると正常に動作して、マクロ1が実行されずに済みます。 $B4:$B28にIF関数を入れたままで表示上空欄に見える状態でマクロ1を実行させないような条件出し として、0 Thenが不適切なのでしょうか。 マクロ実行有無の条件設定として、他に適切な方法があるのでしょうか。 Win7 64bit エクセル2010 宜しくお願いします。

  • VBA if文の作法

    if a=1 then b=1 end if を if a=1 then b=1 と書けますよね。 しかし、以下のような書き方だとa=1がFALSEでもその次のif b=1 then c=1の判定をしに行きます。なぜこの書き方がいけないのでしょうか? if a=1 then if b=1 then c=1 end if

  • エクセル マクロ If then を作っていますが、エラーがでてしまいます。

    お世話になります。 マクロ初心者で初めてVBAを作っております。 本を読みながらコードを作ったのですが、作成中にエラーが出てしまい検索しても解決できませんでした。 誠に申し訳ありませんが、以下のご指導をお願いできますでしょうか。 どうぞよろしくお願いいたします。 以下の表のC列にGroup のコード数字に対応する製品名を入れる。 A  B     C 1 Group 製品 2  100 部品A 3 200    部品B 4 300    部品C 5 200    部品B 6 200    部品B 7 300    部品C Sub Product Group() With ActiveSheet .Range("C2").Select Do Until ActiveCell.Offset(0, -1).Value = "" With ActiveCell If .Offset(0, -1).Value = 100 Then .Value = "部品A" elself .Offset(0, -1).Value = 200 then .Value = "部品B" elself .Offset(0, -1).Value = 300 then .Value = "部品C" End If End With Loop End Sub 実際は複数のグループ数字が1つの部品#に相対しており行数が5000程ある為、何とかこのマクロを組みたいと思ったのですが、行き詰ってしまいました。 基本的な間違いがあるのだとは思いますが、何卒ご教示の程お願いします。

  • ifステートメント notと!は同じ意味ですか?

    VBAのifステートメントで、notと!は同じ意味ですか? 「a」で始まらない。 と言う意味で、下記のコードを作ったのですが、どちらも思い通りの結果が得られます。 If "あabc" Like "[!a-z]*" Then Debug.Print "OK" End If If Not "あabc" Like "[a-z]*" Then Debug.Print "OK" End If End Sub ネットからのサンプルをコピペしたので、いまいち理解できてないのですが notと!は同じ意味ですか?

  • 高校数学 「計算とコンピュータ」

    今、僕の学校ではセンター試験での選択範囲を狭めないように、「計算とコンピュータ」を授業してもらっています。例えば1から10まで掛けたらいくら?という問題なら、 100 A=1 110 B=2 120 A=A*B 130 IF B=10 THEN 160 140 B=B+1 150 GOTO 120 160 PRINT A 170 END と書くようなものです。ですが、いざ問題を出されて、プログラムを書いてと言われると書けません。理解力と発想力に乏しいです。そこでこんなことを解説したり説明したりしているHPはないでしょうか?あれば教えて下さい。

  • 「elseに対応するifがありません」と表示されます。

    If Range("a2") > 0 Then GoTo saisyo Else End End If saisyo: Range("a2").Select.Copy Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub とすると、質問タイトルのエラーが出ます。何がいけないのでしょうか?

このQ&Aのポイント
  • 久しぶりにカラー印刷をしたところ、モノクロのような変な色合いになりました。印刷チェックシートを刷り出したところ、マゼンタが黒で印刷されています(インク切れではありません)。
  • お使いの環境はMac OS 11.6.4で、接続はUSBケーブルです。
  • 質問はブラザー製品についてのものです。
回答を見る