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才、今度、基本情報処理技術者試験を受けるべく、 独習で頑張っています。 また、ご教示をいただくことがあろうかと思いますが、よろしくお願いします。 |