第4講 同じこと(同様なこと)の繰り返し(for文)

第1話 同じこと(同様なこと)の繰り返しとは?

プログラミングの学習において、
最も大事な考え方は、
この第4講で学ぶ『同じこと(同様なこと)の繰り返し(ループ処理=for文)』と
第5講で学ぶ『もしもボックス(もし~だったら~=if文)』です。
どうしてかと申しますと、
for文とif文があれば、どんなプログラミングでも組めることが証明されているからです。
つまり、基本的には第4講と第5講さえ学べば、
チェスの世界チャンピオンを破るプログラムの開発が可能なのです。
今年4月に行われた将棋電王戦は、ソフト側が3勝1敗1分けで勝利しています。
今年の将棋電王戦最終局は、ソフト側がA級棋士
(プロ将棋は、A級・B級1組・B級2組・C級1組・C級2組の5つの実力別リーグによって構成されています。)
の三浦八段に勝っています。
来年度はおそらく、森内名人(羽生名人?)をソフトが破るでしょう。
将棋ソフトは、年を追うごとに飛躍的に強くなっているからです。

このような強いソフトが理論的にはfor文とif文のみで組めるのです。
また、現在のCGは実写と区別がつかないほどよくできていますが、
そういったCGもfor文とif文のみでプログラムできるのです。

さて、第3講第10話で
#include<iostream>
using namespace std;
int main(){
  short w;
  w=0;
  w=w+1;
  w=w+2;
  w=w+3;
  w=w+4;
  w=w+5;
  w=w+6;
  w=w+7;
  w=w+8;
  w=w+9;
  w=w+10;
  cout<<"1+2+3+4+5+6+7+8+9+10="<<w<<endl;
}
という芸のないプログラミングをしました。
芸がないというのは、コンピュータの特徴をまったく生かしていないからです。
コンピュータは、命じられたことを永遠と不平不満も言わず繰り返してくれます。
どんなに単純作業であろうと、
どんなに同じような作業を繰り返そうと、
黙々と作業を続けてくれるわけです。
まさに1+2+3+4+5+6+7+8+9+10の計算のような処理は、
コンピュータにぴったりの課題です。
このような処理をfor文で処理しようというのがこの講の話題です。

本講では、for文=ループ処理を同じこと(同様なこと)の繰り返しと名付けます。
for文は次のようになっています。
for(i =1;i<4;i++){
    ・
    ・
    ・
}
i =1;i<4;i++は3つの文からなっています。
i =1;i<4;i++は
i=1;
i<4;
i++;
と同じです。
C言語&C++では、;があれば文の終わりを示していますので、改行しなくてもよいのです。
3つの文があるなら、for(i =1;i<4;i++;)なのではとお思いになると思いますが、
残念ながら、こちらはエラーします。
どうして?
C言語開発者の気まぐれだと思います。
開発者が文法をそう決めてしまったのですから、それに従いfor(i =1;i<4;i++)とするしかありません。
i =1;i<4;i++は、最初の文はiの始まりを示します。
2番目の文i<4;はiの範囲を示しています。
i<4はiは4より小さいですから、iの範囲は3までということになります。
最後の文i++はC言語&C++特有の書き方で、
i=i+1の簡略表現です。
i++は++iとも書きます。
C言語&C++の特徴の1つは、簡略に表現できることです。
結局、3つの文i=1;i<4;i++は、iを1からはじめて3まで変化させなさいと命じています。
ですから、
for(i =1;i<4;i++){
    ・
    ・
    ・
}
は{}の中を3回繰り返しなさいという意味になるのです。

入門
この場合なら、3回回転(ループ)しますので、
ループ処理ともいいます。

for文の基本構造は、
for(繰り返しを数える数を入れる箱=はじめの数;繰り返しを数える数の範囲;繰り返しを数える数の変化の方法){
    ・
    ・
    ・
}
となっています。
最後が、繰り返しを数える数の変化の方法となっているのは、
変化の幅は自由に設定できるからです。例えば、i=i+2
とすれば1,3,5,・・・などと変化させることができます。
本講義で、繰り返しを数える数(コントロールする数)を入れる箱 と呼ぶものは、専門用語で制御変数といいます。

例えば、
#include<iostream>
using namespace std;
int main(){
  short i;
  for(i=1;i<4;i++){
    cout<<i<<endl;
  }
}
と組むと、
c++
となります。
iが1,2,3と変わりながら、cout<<i<<endl; が3回繰り返されるからです。
iが1のとき、
    cout<<i<<endl;
  すなわち、
    cout<<1<<endl;
iが2のとき、
    cout<<i<<endl;
  すなわち、
    cout<<2<<endl;
iが3のとき、
    cout<<i<<endl;
  すなわち、
    cout<<3<<endl;
となるでしょう。

さて、皆さんfor文を用いて
#include<iostream>
using namespace std;
int main(){
  short w;
  w=0;
  w=w+1;
  w=w+2;
  w=w+3;
  w=w+4;
  w=w+5;
  w=w+6;
  w=w+7;
  w=w+8;
  w=w+9;
  w=w+10;
  cout<<"1+2+3+4+5+6+7+8+9+10="<<w<<endl;
}
を改良してください。
といいまして、結構難しい課題ですから、
ヒントとして
1行目だけ書いておきましょう。
  short w,i;
そうです。
箱は、2つ用意するのです。
そして、2つ目の箱iが、繰り返しを数える(コントロール)数を入れる箱すなわち制御変数です。

専門用語を覚えよう!
繰り返しを数える(コントロール)数の専門用語は、
制御変数です。


第3講第10話へ 第2話へ

a

初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門