第3講 繰り返し処理for文
第1話 for文とは?
1+2+3+4+5+6+7+8+9+10
を計算させるには、
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
class Program //初心者はお呪い=決まり事と思い一切気にしない
{
static void Main(string[] args) //私は社長だ。
{
int a; //整数を入れる箱aを用意
//以下計算
a = 0;
a = a + 1;
a = a + 2;
a = a + 3;
a = a + 4;
a = a + 5;
a = a + 6;
a = a + 7;
a = a + 8;
a = a + 9;
a = a + 10;
//以上計算
Console.WriteLine("1+2+3+4+5+6+7+8+9+10={0:d}",a); //箱aの中身を表示
}
}
}
実行結果
1+2+3+4+5+6+7+8+9+10=55
で良いわけですが、余りに芸のないプログラミングですね。
a = a + 1;
a = a + 2;
a = a + 3;
a = a + 4;
a = a + 5;
a = a + 6;
a = a + 7;
a = a + 8;
a = a + 9;
a = a + 10;
は10行にわたって同じようなことを繰り返します。
同様なことを繰り返して処理することを繰り返し処理といいます。
その繰り返し処理の一つにfor文があります。
for文を使ってこの芸のないコードを書き直すと、
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
class Program //初心者はお呪い=決まり事と思い一切気にしない
{
static void Main(string[] args) //私は社長だ。
{
int a,i; //整数を入れる箱a,iを用意
//以下計算
a = 0;
for (i = 1;i<= 10; i++) //繰り返し処理
{
a = a + i;
}
//以上計算
Console.WriteLine("1+2+3+4+5+6+7+8+9+10={0:d}",a); //箱aの中身を表示
}
}
}
となります。
i++はi = i + 1の簡略表現です。
for (i = 1;i<= 10; i++)の中は3文で構成されていますが、
iを1からはじめてひとつずつ増やしながらiが10になるまで{}内を繰り返しなさいという命令になります。
1つ目のi = 1;が1から始めを意味し、
3つ目のi++がひとつずつ増やしていくことを意味して、
2つ目のがi <= 10;が10までを意味しているからです。
この処理が優れているのは、
for(i = 1;i <= 10; i++)をfor(i = 1; i<=10000; i++)と変更するだけで、
1から10000までの和を求めるプログラムに変更できることです。
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
class Program //初心者はお呪い=決まり事と思い一切気にしない
{
static void Main(string[] args) //私は社長だ。
{
int a,i; //整数を入れる箱a,iを用意
//以下計算
a = 0;
for (i = 1;i<= 10000; i++) //繰り返し処理
{
a = a + i;
}
//以上計算
Console.WriteLine("1から10000までの和={0:d}",a); //箱aの中身を表示
}
}
}
実行結果
1から10000までの和=50005000
どうです。急に面白くなったのではないでしょうか。
ちょっと変えただけで
1+2+3+・・・+9999+10000
が計算できるようになったのです。しかも、一瞬です。
for文の基本的な形は、
for(i = 0;i < 10; i++){
A;
B;
・・・・
・・・・
}
ですが、{}内の命令文が1つしかない場合には、
for(i = 0;i < 10; i++)A;
と書くことも出来ます。
尚、C言語では冒頭で変数の宣言をしなければなりませんが、
C#の場合は好きな場所で宣言して、
さらに、変数の有効な範囲を{}に限定することも出来ます。
例えば、
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
class Program //初心者はお呪い=決まり事と思い一切気にしない
{
static void Main(string[] args) //私は社長だ。
{
int a,i; //整数を入れる箱aを用意 箱iを削除
//以下計算
a = 0;
for (int i = 1;i<= 10000; i++) //繰り返し処理
{
a = a + i;
}
//以上計算
Console.WriteLine("1から10000までの和={0:d}",a); //箱aの中身を表示
}
}
}
とすると、変数iの有効な範囲は
図の}内に限定されます。
変数を箱と比喩していますが、
正確には一定のメモリを変数用に割り当て、
そのメモリにデータを書き込んでいます。
変数の適応範囲=スコープを{}内に限定できるのは、
メモリが節約できるという大きなメリットがあります。
尚、for (i = 1; i <= 10000; i++) のiを制御変数といいます。
これは1万回同じ処理を繰り返しますが、
for (i = 0; i = 10000; i++) としても同じ1万回処理します。
iは
0,1,2,・・・,9999
の値を取りますが、0もカウントしなければなりませんので、
1万種類の値を取りますよね。
i++はi = i + 1の簡略表現であると説明しました。
C#にはこのような簡略表現がたくさん用意されています。
i--;
a+=5;
w*=3;
x/=6;
のそれぞれは、
i=i-1;
a=a+5;
w=w*3;
x=x/6;
の簡略表現です。
w*3はw×3です。
×はキーボードにないので*で代用します。
また、x/6はx÷6を意味します。
÷もキーボードにないので、/で代用するのです。
*と/の代用は、私が知っているすべてのプログラム言語で共通です。
私が知っているのは、C#・C言語・C++・Java・Visual Basic・パスカル・Ruby・Parl等です。
簡略表現使用例
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
class Program //初心者はお呪い=決まり事と思い一切気にしない
{
static void Main(string[] args) //私は社長だ。
{
int a; //整数を入れる箱aを用意 箱iを削除
//以下計算
a = 0;
for (int i = 1; i <= 10000; i++) a += i; //繰り返し処理
//以上計算
Console.WriteLine("1から10000までの和={0:d}",a); //箱aの中身を表示
}
}
}
ではこれを頭に留めて、
次の問題に取り組んでください。
@ 2+3+4+・・・+99
A 3+5+7+・・・+101