第3講 for文の学習

第1話 for文に入るための準備 

for文と名何か、という説明から入るのが普通ですが、
ここではその説明をするための簡単な課題を提示したいと思います。
簡単でありますが、コンピュータの特長を生かすのに優れた課題です。
コンピュータは同じようなことを不平をいわず永遠に繰り返してくれます。
私が初めて6次魔方陣(魔方陣の研究を参照してください。)の作成に成功したときは、
真夏の暑い盛りのときに、コンピュータを3日間も連続で走らせ(プログラムを実行させて起動させることを走らせるといいます。)ました。
3日目の朝に、画面上に6次魔方陣が1個作成されていることを見たときには、大変感動しました。
本当に暑い時期でしたから、コンピュータが壊れてしまうのではないかと心配しながら、
コンピュータに計算を続けさせました。
毎朝、学校に行く前に画面をチェックしていてついに3日目にディスプレイにたった1個ですが表示されていたのです。
今とはコンピュータのCPUの能力が桁違いに劣っていたとはいえ、
6次魔方陣をたった1個発揮させるのに、70時間程度を要したのです。
現在の最速のプログラムなら6次魔方陣を1秒で何万という単位でコンピュータは6次魔方陣を見つけてしまいます。
26次魔方陣あたりでも1秒で数百個というレベルでコンピュータは作り出してしまいます。
プログラムの良し悪しが計算速度を決定づけてしまうのです。
私が最初に作ったプログラムと現在の最速のプログラム(といっても作ったのはもう5年ぐらい前ですが)と比較すると、
70×24×3600×20000≒120000000000倍です。
これほどプログラムの腕が、計算速度に影響を与えるのです。
少し話が脱線しましたが、
コンピュータは3日間どころか1年でも2年でも黙々と計算を続けてくれます。
ほとんど同じ作業を何の不平不満も愚痴も弱音も言わず働き続けてくれます。

さて、その課題とは
1+2+3+4+5+6+7+8+9+10
を計算させることです。
どうやったらよいでしょうか。

もちろん

int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,w;
a1=1;
a2=2;
a3=3;
a4=4;
a5=5;
a6=6;
a7=7;
a8=8;
a9=9;
a10=10;
w=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10;
label1->Text=w.ToString();

ではあまりにも芸がありません。
このプログラムなら打つのに大変ですから、手で計算した方がよっぽど速いわけです。
まして、
1+2+3+・・・+100000
のような計算では手も足も出ません。
プログラムを考えるときは、汎用性(応用範囲あるいは適応範囲)や普遍(一般=あまねく)性が広いプログラムを考える習慣をつけましょう。

実は、
1+2+3+4+5+6+7+8+9+10
の計算は、変数が1個でも計算可能です。
int w;
私は普通の変数をa,b,c等と表し、計算させる変数をwとさせることにしています。
wは仕事workからとっています。

前に=は実は数学の=とは違うということを前に話ししたことを覚えていらっしゃるでしょうか。
a=8とは、
代入
8をaの箱に入れなさいという命令です。
a=8はむしろa←8とイメージした方がよいのです。
代入というよりは、箱にものを入れるという感じです。

1+2+3
を計算せよという課題なら、プログラムは次のように組むことができます。
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int w;
           
           w=0;
           w=w+1;
           w=w+2;
           w=w+3;

           label1->Text=w.ToString();

        }
  };
}
(label1に表示させるプログラム)

皆さんの頭の中には、当然?が浮かんでいます。
『w=w+1; こんなこと数学的にあり得ないではないか。』
そうです。=が数学の=ならあり得ません。
wを左辺に移項して計算すれば、
0=1になってしまうのですから、数学的にはあり得ません。

で、もうおわかりですね。=は数学の=とは違うのです。
w=w+1;はw←w+1;なのです。
つまり、最初に右辺を計算しその計算結果をwという名の箱に入れなさいということなのです。

トレース(コンピュータの動きを追うこと)してみましょう。
トレース
w←0
で最初はwには0が入っています。
次に
w←w+1;

w←0+1;で
wには1が入ります。
箱には1個の値しか入りませんから0は追い出さ消滅します。
以下同様にして、
w←1+2からwは3
w←3+3からwは6となって、
1+2+3=6の計算ができるわけです。

では皆さん、最初の課題
1+2+3+4+5+6+7+8+9+10
を考えてみましょう。
もちろん、今の方法で組むプログラムはfor文によってより合理的で簡単なものに置き換えられることになりますが、
今は忍耐強くタイピングして下さい。







第2講第7話へ 第3講第2話へ

025


vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る