![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
両方とも「くり返し」をさせるものですけど、
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文は存在理由が無いと思うのです。
こういう理解であっていますでしょうか?
よろしくおねがいします。
No.6ベストアンサー
- 回答日時:
長文で、まことにすみません。
自分の意見としては、あなたの言うとおり、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」が入力されるまで)繰り返す。
No.9
- 回答日時:
> としますと、プログラミングの世界ではほとんどが等差数列的なくり返しで事足りてしまうということなんでしょうか?
あのですねえ。そんな風に書いたつもりは無かったんですが。
「繰り返し構文をすべてIf文だけで書く人は少ないし、自分以外が使うソフトに『Iループはf文だけ』というルールを適用すべきではない」と言いたかったんですけどね。
私も当然「If文」を使います。逆に「If文の嵐」というときもありますよ。
No.8
- 回答日時:
> つまり、for next文は存在理由が無いと思うのです。
> こういう理解であっていますでしょうか?
質問者さんがそう思われるなら、For Nextなしのコードを書けばよいでしょう。
ただし、質問者さんだけが使うアプリケーションに限って行うべきです。
一般的には繰り返し構文には、If文でなくFor Next等を使うでしょうから、別の人が見たとき可読性は落ちますし、「何でIf文なんだろう。なにか必要があってわざとやっているのか?」など、解析等に無駄な時間が費やされます。
「機能が限られている」=「劣っている。存在意義がない」と結びつけてしまうのは早計です。
むしろ「単純化」という方向性も必要ですし...
>一般的には繰り返し構文には、If文でなくFor Next等を使うでしょうから
とのことですが、としますと、プログラミングの世界ではほとんどが等差数列的なくり返しで事足りてしまうということなんでしょうか?
確かに、ものごとの大部分は等差数列で語れてしまうような気もしないでもないです。
エクセルのオートフィルも等差数列ですし、
等比数列だってar^iのi乗の部分が等差数列になってますし。(初項a、公比r)
この世の現象は等差数列がかなりの部分、関係しているものなのでしょうか?
No.7
- 回答日時:
#2>50 if i<=100 then 30
いわゆるGOTOによる分岐ですね。
行き先が自由に設定できる反面、
行き先が自由であるということが構造をわかりにくくしますので、
適当な構造を表す構造文がある時はそちらを使った方が良いです。
No.5
- 回答日時:
がると申します。
他の方も書かれているとおり。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は等差数列の呪縛に縛られたくり返ししかできないのです。
No.4
- 回答日時:
貴方の言っている事を例えるならば
「1円玉さえあれば、100円玉が無くても100円を表現できるし、37円とか半端な数も表現できるから、100円玉の価値がない」
とおっしゃられているようなものです。
途中までの展開はあってますが、結論として存在理由がないとおっしゃるには無理があるでしょう。
実際に100円玉があった方が、便利なのは明らかですから。
FOR文もそんなものです。無くてもやろうと思えば表現できるけど、あった方が色々楽だと言う事です。
なるほど。1円だまのたとえはわかりやすいです。
電車がなくても歩けばいいじゃん、ということですものね^^;
ありがとうございました。
No.3
- 回答日時:
>For next文は等差数列に関係したくり返しをさせるものであり
if then else文は等差数列とは関係の無い繰り返しもできるし、等差数列に関係あるくり返しもできるからです
これは質問者の完全な理解不足!
もっと勉強せんかぃ!(^^;;;
if then elseで繰り返しをさせると
goto文、ラベルを使わなければならなくなるので
コードに纏まりがなくなる
コードが汚くなる、
結果、可読性が低くなる
よって、
>for next文は存在理由が無いと思うのです。
>こういう理解であっていますでしょうか?
これは即、却下!(^^;;;
何れにしろ質問の件は両方のコードを書いてみれば一目瞭然でしょう。
だからと言って、2,3行のコードではありませんよ。少なくとも数十行のコードで確認してみること。
数十行で今度書いて見ます。
ところで
>For next文は等差数列に関係したくり返しをさせるものであり
>if then else文は等差数列とは関係の無い繰り返しもできるし、
>等差数列に関係あるくり返しもできるからです
>これは質問者の完全な理解不足!
とのことですがこの理解は間違っているのでしょうか?
ここの説明は僕はあってると思うのですが。
No.2
- 回答日時:
"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
こういうことです。
No.1
- 回答日時:
根本的な間違い。
"if then else"は繰り返しをさせるものではありません!!
"while wend", "do loop" 等との間違いではありませんか?
それと for next の存在理由は、むしろ単機能な事に
あります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
日付の重複
-
FORTRAN77でプログラミング
-
FPGAのシミュレーションに関して
-
EXCEL VBA 文字 アドレス 検...
-
C言語のプログラムで...
-
MATLABの質問
-
エクセルVBAついて ①if•••••the...
-
整順リスト形式の英単語辞書(pa...
-
ドラゴン曲線を再帰で書く
-
他のフォームから別のフォーム...
-
VBA public変数はどのようなこ...
-
ボールが壁に当たって跳ね返る...
-
エクセルVBAでテキストボッ...
-
VBAでcallで呼び出したsubを終...
-
チェックボックスを操作できな...
-
C言語のサフィックスについて
-
マウスポインタの変更
-
画像処理について。(移動)
-
[VB6] SQLの作成について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タイムアウトする仕組みを作りたい
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
日付の重複
-
verilogのcase文
-
Verilog-HDLによる設計において
-
Verilogの文法
-
リスト間のアイテム移動について
-
Rubyプログラミングの課題につ...
-
EXCEL VBA 文字 アドレス 検...
-
Delphiでコンポーネント名を変...
-
delphi
-
TreeViewのTag情報取得
-
pascalでの二分探索(バイナリ...
-
エクセルVBAついて ①if•••••the...
-
「for next」文と「if then els...
-
整順リスト形式の英単語辞書(pa...
-
直線検出のハフ変換プログラム(...
-
Matlab
-
【FPGA】VHDLのprocessとevent
おすすめ情報