新しく発言する EXIT インデックスへ
goto文について

  goto文について 初心者 2006/06/21 05:43:31 
  とりあえず,繰り返しはすべてDO〜LOOPに記... 白石 和夫 2006/06/21 07:17:01 
  まず,200行のEXITDOを削除 白石 和夫 2006/06/21 08:40:47 
  │└繰り返しをDO〜LOOPで記述 白石 和夫 2006/06/21 08:46:45 
  │ └250行のGOTO文の意味は240行〜270行の繰り返... 白石 和夫 2006/06/21 08:49:40 
  │  └無駄にできてしまったDO〜LOOPを除去 白石 和夫 2006/06/21 08:55:45 
  │   └ロジックを見直すと,多分,下のようなアル... 白石 和夫 2006/06/21 09:03:55 
  丁寧なご返事をいただき、恐縮しています。 初心者 2006/06/21 19:18:55 

  goto文について 初心者 2006/06/21 05:43:31  ツリーへ

goto文について 返事を書く
初心者 2006/06/21 05:43:31
アルゴリズムの勉強に 十進ベーシックを使わせて頂いております。
他の言語と違い、プログラムが簡単に組めるので、助かっています。

初歩的な質問で、恐縮です。
その昔、basicには、ラベル ※xx などのようなものがあり、
goto  ※xx 
で、そこに移動できましたが、full basicには、ないのでしょうか。

行番号を使って goto 110 などのようにするのは
あまり、気が進まないのですが、これ以外の方法はないのでしょうか。

goto を使わずに、do loop と、exit do で、やってみていますが、どうしても、goto 文を使わなければならないことがあります、

長くなって恐縮ですが、配列kから、素数の個数を求めるプログラムをしたにつけます。
goto 文を使わずに掛ける方法がありましたら、ご教示をお願いします。

100 REM エーアイ出版
110 REM 秘伝のアルゴリズムp45の、流れ図より
115 REM 配列に格納された数字から素数の個数を求める
120 REM ----------------------------------------------------
130 DIM k(10)
140 DATA 2,3,4,5,6,7,8,9,10,11
150 MAT READ k
160 LET m=0
170 LET i=0
180 DO
190 LET i=i+1
200 IF i>10 THEN EXIT DO
210 IF k(i) <= 0 THEN GOTO 190
220 LET m=m+1
230 LET j=i
240 LET j=j+k(i)
250 IF j>10 THEN GOTO 190
260 LET k(j)=0
270 GOTO 240
280 LOOP
285 MAT PRINT k
286 PRINT m
290 END

  とりあえず,繰り返しはすべてDO〜LOOPに記... 白石 和夫 2006/06/21 07:17:01  ツリーへ

Re: goto文について 返事を書く
白石 和夫 2006/06/21 07:17:01
とりあえず,繰り返しはすべてDO〜LOOPに記述しなおした上で,
http://hp.vector.co.jp/authors/VA008683/QA_LOOP.htm
を参照してください。
例外状態処理を利用すれば,DO〜LOOPのネストの深いところからも抜けることが可能です。

  まず,200行のEXITDOを削除 白石 和夫 2006/06/21 08:40:47  ツリーへ

Re: goto文について 返事を書く
白石 和夫 2006/06/21 08:40:47
まず,200行のEXIT DOを削除
100 REM エーアイ出版
110 REM 秘伝のアルゴリズムp45の、流れ図より
115 REM 配列に格納された数字から素数の個数を求める
120 REM ----------------------------------------------------
130 DIM k(10)
140 DATA 2,3,4,5,6,7,8,9,10,11
150 MAT READ k
160 LET m=0
170 LET i=0
175 WHEN EXCEPTION IN
180 DO
190 LET i=i+1
200 IF i>10 THEN CAUSE EXCEPTION 999
210 IF k(i) <= 0 THEN GOTO 190
220 LET m=m+1
230 LET j=i
240 LET j=j+k(i)
250 IF j>10 THEN GOTO 190
260 LET k(j)=0
270 GOTO 240
280 LOOP
281 USE
282 END when
285 MAT PRINT k
286 PRINT m
290 END


  │└繰り返しをDO〜LOOPで記述 白石 和夫 2006/06/21 08:46:45  ツリーへ

Re: まず,200行のEXITDOを削除 返事を書く
白石 和夫 2006/06/21 08:46:45
繰り返しをDO〜LOOPで記述
100 REM エーアイ出版
110 REM 秘伝のアルゴリズムp45の、流れ図より
115 REM 配列に格納された数字から素数の個数を求める
120 REM ----------------------------------------------------
130 DIM k(10)
140 DATA 2,3,4,5,6,7,8,9,10,11
150 MAT READ k
160 LET m=0
170 LET i=0
175 WHEN EXCEPTION IN
180 DO
190 DO
191 DO
192 LET i=i+1
200 IF i>10 THEN CAUSE EXCEPTION 999
210 LOOP WHILE k(i) <= 0
220 LET m=m+1
230 LET j=i
240 DO
241 LET j=j+k(i)
250 IF j>10 THEN GOTO 190
260 LET k(j)=0
270 LOOP
280 LOOP
281 LOOP
282 USE
283 END WHEN
285 MAT PRINT k
286 PRINT m
290 END


  │ └250行のGOTO文の意味は240行〜270行の繰り返... 白石 和夫 2006/06/21 08:49:40  ツリーへ

Re: 繰り返しをDO〜LOOPで記述 返事を書く
白石 和夫 2006/06/21 08:49:40
250行のGOTO文の意味は240行〜270行の繰り返しから抜けることと読めるので(正しいかどうかは未検証)
100 REM エーアイ出版
110 REM 秘伝のアルゴリズムp45の、流れ図より
115 REM 配列に格納された数字から素数の個数を求める
120 REM ----------------------------------------------------
130 DIM k(10)
140 DATA 2,3,4,5,6,7,8,9,10,11
150 MAT READ k
160 LET m=0
170 LET i=0
175 WHEN EXCEPTION IN
180 DO
190 DO
191 DO
192 LET i=i+1
200 IF i>10 THEN CAUSE EXCEPTION 999
210 LOOP WHILE k(i) <= 0
220 LET m=m+1
230 LET j=i
240 DO
241 LET j=j+k(i)
250 IF j>10 THEN EXIT DO
260 LET k(j)=0
270 LOOP
280 LOOP
281 LOOP
282 USE
283 END WHEN
285 MAT PRINT k
286 PRINT m
290 END


  │  └無駄にできてしまったDO〜LOOPを除去 白石 和夫 2006/06/21 08:55:45  ツリーへ

Re: 250行のGOTO文の意味は240行〜270行の繰り返... 返事を書く
白石 和夫 2006/06/21 08:55:45
無駄にできてしまったDO〜LOOPを除去
100 REM エーアイ出版
110 REM 秘伝のアルゴリズムp45の、流れ図より
115 REM 配列に格納された数字から素数の個数を求める
120 REM ----------------------------------------------------
130 DIM k(10)
140 DATA 2,3,4,5,6,7,8,9,10,11
150 MAT READ k
160 LET m=0
170 LET i=0
175 WHEN EXCEPTION IN
180 DO
190 DO
192 LET i=i+1
200 IF i>10 THEN CAUSE EXCEPTION 999
210 LOOP WHILE k(i) <= 0
220 LET m=m+1
230 LET j=i
240 DO
241 LET j=j+k(i)
250 IF j>10 THEN EXIT DO
260 LET k(j)=0
270 LOOP
280 LOOP
282 USE
283 END WHEN
285 MAT PRINT k
286 PRINT m
290 END


  │   └ロジックを見直すと,多分,下のようなアル... 白石 和夫 2006/06/21 09:03:55  ツリーへ

Re: 無駄にできてしまったDO〜LOOPを除去 返事を書く
白石 和夫 2006/06/21 09:03:55
ロジックを見直すと,多分,下のようなアルゴリズムを想定して書かれたプログラムかと想像できます。
120 REM 配列に格納された数字から素数の個数を求める
130 REM ----------------------------------------------------
140 DIM k(10)
150 DATA 2,3,4,5,6,7,8,9,10,11
160 MAT READ k
170 LET m=0
180 LET i=0
190 FOR i=1 TO 10
200 IF k(i)>0 THEN
210 LET m=m+1
220 FOR j=i+k(i) TO 10 STEP k(i)
230 LET k(j)=0
240 NEXT j
250 END IF
260 NEXT i
270 MAT PRINT k
280 PRINT m
290 END

  丁寧なご返事をいただき、恐縮しています。 初心者 2006/06/21 19:18:55  ツリーへ

Re: goto文について 返事を書く
初心者 2006/06/21 19:18:55
丁寧なご返事をいただき、恐縮しています。
いただいたメッセージを元に、研究してみます。
ありがとうございました。
まずは、お礼まで。
ちなみに、当方56才、今度、基本情報処理技術者試験を受けるべく、
独習で頑張っています。
また、ご教示をいただくことがあろうかと思いますが、よろしくお願いします。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。