- ベストアンサー
「for next」文と「if then else」文
両方とも「くり返し」をさせるものですけど、 for nextにできてif then elseにできないことって ありますでしょうか? 僕は無いと思うのです。 その理由は for next文は等差数列に関係したくり返しをさせるものであり if then else文は等差数列とは関係の無い繰り返しもできるし、等差数列に関係あるくり返しもできるからです。 for nextの「等差数列に関係のあるくり返し」とは 例えば for i=1 to 100 step 2 のような場合、 これは、初項1、公差2、末項100 の等差数列を用意したことを意味しますよね? つまりfor next文では「等差数列を使ったくり返し」しか出来ないのに対し、 if then else文は等差数列に関係なく、「一般的なくり返し」が出来るものだと思うのです。 つまり、for next文は存在理由が無いと思うのです。 こういう理解であっていますでしょうか? よろしくおねがいします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
長文で、まことにすみません。 自分の意見としては、あなたの言うとおり、for next文が存在しなくてもプログラムは組めます。 とは、言っても実際に「ソフトウェアを作りたい」というときには、for next文を使用しないで作ると、かなりわかりにくくなってしまうのでfor next文が存在しているのです。 (例)「1」から「変数N(値:1~100)」までの値をすべて足した時の答えを出すプログラムです。((1)と(2)は同じプログラム) (1)for next文を使わない場合 10 S = 0 20 I = 1 30 N = 0 40 N = N + 1 40 S = S + I 50 I = I + 1 60 IF I <= N THEN 40 ELSE 70 70 PRINT S 80 IF N <= 100 THEN 40 90 END (1)for next文を使う場合 10 S = 0 20 I = 1 30 N = 0 40 FOR N = 1 TO 100 50 FOR I = 1 TO N 60 S = S + I 70 NEXT I 80 PRINT S 90 NEXT N 90 END ///////////////////////////// >for next文では「等差数列を使ったくり返し」しか出来ない (例) 10 FOR I = 1 TO 3 20 INPUT"あなたの名前は";N$ 30 NEXT I 40 END ↑絶対に3回までしか繰り返しができない。 >if then else文は等差数列に関係なく、「一般的なくり返し」が出来るもの (例1)等差数列を使用する場合 10 I = 1 20 INPUT"あなたの名前は";N$ 30 I = I + 1 40 IF I <= 3 THEN 20 50 END ↑3回までしか繰り返しができない。 (例2)等差数列を使用しない場合 10 INPUT"あなたの名前は";N$ 20 IF N$ = "END" THEN 30 ELSE 10 30 END ↑とある条件が発生するまで(上のは「END」が入力されるまで)繰り返す。
その他の回答 (8)
> としますと、プログラミングの世界ではほとんどが等差数列的なくり返しで事足りてしまうということなんでしょうか? あのですねえ。そんな風に書いたつもりは無かったんですが。 「繰り返し構文をすべてIf文だけで書く人は少ないし、自分以外が使うソフトに『Iループはf文だけ』というルールを適用すべきではない」と言いたかったんですけどね。 私も当然「If文」を使います。逆に「If文の嵐」というときもありますよ。
> つまり、for next文は存在理由が無いと思うのです。 > こういう理解であっていますでしょうか? 質問者さんがそう思われるなら、For Nextなしのコードを書けばよいでしょう。 ただし、質問者さんだけが使うアプリケーションに限って行うべきです。 一般的には繰り返し構文には、If文でなくFor Next等を使うでしょうから、別の人が見たとき可読性は落ちますし、「何でIf文なんだろう。なにか必要があってわざとやっているのか?」など、解析等に無駄な時間が費やされます。 「機能が限られている」=「劣っている。存在意義がない」と結びつけてしまうのは早計です。 むしろ「単純化」という方向性も必要ですし...
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>50 if i<=100 then 30 いわゆるGOTOによる分岐ですね。 行き先が自由に設定できる反面、 行き先が自由であるということが構造をわかりにくくしますので、 適当な構造を表す構造文がある時はそちらを使った方が良いです。
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 他の方も書かれているとおり。ifは「繰り返し」ではなくて「分岐」です。 if (とある条件) then とある条件がtrueなら走る処理 else とある条件がfalseなら走る処理 endif であり、 for(繰り返し条件) 繰り返される処理 next ですから。 if elseの連打に近しいものとしてはswithが、forに類似するものとしてはwhile、do while、処理系によってはforeachあたりがむしろこういった議論に乗るのではないかと思うのですが、いかがでしょうか?
お礼
>ifは「繰り返し」ではなくて「分岐」です。 それはそうなんですが、くり返しもできるのです。 例えば1から100までの和を求めるときですけど 10 s=0 20 i=1 30 s=s+i (←ここを繰り返している) 40 i=i+1 (←ここで公差1の等差数列を作っている) 50 if i<=100 then 30 60 print s そしてさらにif thenは等差数列に無関係のくり返しもできます。 しかしfor nextは等差数列の呪縛に縛られたくり返ししかできないのです。
- shobon
- ベストアンサー率66% (14/21)
貴方の言っている事を例えるならば 「1円玉さえあれば、100円玉が無くても100円を表現できるし、37円とか半端な数も表現できるから、100円玉の価値がない」 とおっしゃられているようなものです。 途中までの展開はあってますが、結論として存在理由がないとおっしゃるには無理があるでしょう。 実際に100円玉があった方が、便利なのは明らかですから。 FOR文もそんなものです。無くてもやろうと思えば表現できるけど、あった方が色々楽だと言う事です。
お礼
なるほど。1円だまのたとえはわかりやすいです。 電車がなくても歩けばいいじゃん、ということですものね^^; ありがとうございました。
- onlyrom
- ベストアンサー率59% (228/384)
>For next文は等差数列に関係したくり返しをさせるものであり if then else文は等差数列とは関係の無い繰り返しもできるし、等差数列に関係あるくり返しもできるからです これは質問者の完全な理解不足! もっと勉強せんかぃ!(^^;;; if then elseで繰り返しをさせると goto文、ラベルを使わなければならなくなるので コードに纏まりがなくなる コードが汚くなる、 結果、可読性が低くなる よって、 >for next文は存在理由が無いと思うのです。 >こういう理解であっていますでしょうか? これは即、却下!(^^;;; 何れにしろ質問の件は両方のコードを書いてみれば一目瞭然でしょう。 だからと言って、2,3行のコードではありませんよ。少なくとも数十行のコードで確認してみること。
お礼
数十行で今度書いて見ます。 ところで >For next文は等差数列に関係したくり返しをさせるものであり >if then else文は等差数列とは関係の無い繰り返しもできるし、 >等差数列に関係あるくり返しもできるからです >これは質問者の完全な理解不足! とのことですがこの理解は間違っているのでしょうか? ここの説明は僕はあってると思うのですが。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
"if then else" による繰り返しとは、 "if then else" + goto による繰り返しということでしょうか? 例えば、for 文は、同等のDo while 文(一般的な繰り返し)で書き直すことができると思いますが、 そうであっても、for 文を使うのは、全体的な見通しを良くするというようなことだと思います。(例えば、質問でも書かれているような典型的な等差数列的なループをwhile で表した場合、わかりにくくなる) なので、他で代用できるからといって存在理由がないとまでは言えないと思います。
お礼
>"if then else" による繰り返しとは 例えば1から100までの和を求めるときですけど 10 s=0 20 i=1 30 s=s+i 40 i=i+1 (←ここで公差1の等差数列を作っている) 50 if i<=100 then 30 60 print s こういうことです。
- don_go
- ベストアンサー率31% (336/1059)
根本的な間違い。 "if then else"は繰り返しをさせるものではありません!! "while wend", "do loop" 等との間違いではありませんか? それと for next の存在理由は、むしろ単機能な事に あります。
お礼
>一般的には繰り返し構文には、If文でなくFor Next等を使うでしょうから とのことですが、としますと、プログラミングの世界ではほとんどが等差数列的なくり返しで事足りてしまうということなんでしょうか? 確かに、ものごとの大部分は等差数列で語れてしまうような気もしないでもないです。 エクセルのオートフィルも等差数列ですし、 等比数列だってar^iのi乗の部分が等差数列になってますし。(初項a、公比r) この世の現象は等差数列がかなりの部分、関係しているものなのでしょうか?