第5講 もしもボックス(if文)
第2話 『そのときにしかない箱』と『常にある箱』

前話問題
解答例
初心者
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
  short a;
  srand(10);
  a=rand()%100;
  cout<<"発生データ "<<a<<endl;
  if(a>=60){
    cout<<"合格"<<endl;
  }
}

基礎
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
  short a;
  srand(2);
  a=rand()%100;
  cout<<"発生データ "<<a<<endl;
  if(a>=60){
    cout<<"合格"<<endl;
  }
}

いちいちプログラムの文章のsrandのシード値をいじるのでは芸がありません。
そこで、現在時刻から自動的にシード値を受け取ることができるように変更しましょう。
現在時刻を取得するためには、ctimeという読み込みファイル(インクルードファイル)
を読み込んでおく必要があります。
ctimeをインクルード(読み込み)すれば、time(0)で現在時刻を取得できますが、
time(0)は、06:25:36(6時25分36秒)のようなデータ形式をしていて、
シード値(乱数の種を指定する整数)の型であるunsigned int型(0~65535の整数)になっていませんので、
time(0)を正の整数の型に変身させる必要があります。
そこで、srandは
srand(static_cast<unsigned int>(time(0))); 
とような形を取ります。castは変身、強制的型変更でしたね。
static_ の部分はstaticが静的、_は『の』とか『な』を意味しますので、
『静的な』です。
『佐藤さん、静的って何よ?』
ですよね。
実は、箱には『いつでもある箱』と『そのときにしかない箱』の2種類あるのです。
『いつでもある箱』のことを専門用語で静的変数というのです。
そして、『そのときにしかない箱』を動的変数というのです。
???ですよね。
後に、独立の講をもうけて『いつでもある箱』と『そのときにしかない箱』について、
詳しく説明しますが、
箱は基本的には、すべて『そのときにしかない箱』です。
そのときにしかないとは、社員が働いているときしかないということです。
社員は実はいつでも存在しているのではなく、
main(親分)などに仕事を命じられたときのみに存在しているのです。
親分などが仕事を命じるには、社員の名前をコール(呼ぶ)すればよいのです。
社員は、コールされて(名前を呼ばれて)はじめてこの世に生まれるのです。
そして、任務が終わると社員はこの世から消滅してしまいます。
社員は、仕事をするときだけ誕生し仕事が終わると消滅してしまいます。
社員は、生成消滅を繰り返すのです。

この世に生まれるとか、この世から消滅すると比喩でいっていることの本当の姿は、
コンピュータのメモリー
(記憶装置の一つ、ハードディスクも記憶装置の一つですが、
メモリーの方は半導体記憶装置で、処理速度はハードディスクより遥かに速いのです。
ハードディスクは円盤を回転させてそれを読む方式に対して、
半導体は電子に速さ=光の速さで処理を行いますので、
処理速度が決定的に違うわけです。
それならば、すべてを半導体メモリーにすればよいのではとお考えになるでしょうが、
ハードディスクより非常に高価であるという問題があるのです。
そこで二つの記憶装置を組み合わせているわけです。)
に登場するか、メモリーから去るかです。
メモリーは、データを保存するだけでなく、
プログラムやソフトの働く場を提供するのです。
ソフトやプログラムはメモリーという舞台で踊るのです。
社員は、社長(親分)に呼ばれてはじめてメモリーという舞台に登場して、
そこで舞うのです。
そして、踊りが終わればメモリーという舞台から消えます。
社員は、踊っている間に必要であれば『箱よ生まれよ!』(int a;など)の呪文をいいます。
そのときにはじめて箱はメモリー上に存在します。
この箱は、今踊っている社員専用のものですから、
社員が舞台から降りれば、箱もメモリーという舞台から消えるのです。
『そのときにしかない箱』のそのときとは、
社長に舞台に上がれと命じられた社員が、
舞台の上で『箱よ生まれよ!』の呪文を唱えて箱を発生させてから舞台を降りるまでを指しています。
手品師が箱を手放さないように、常に社員が箱を手に持っているからです。

それに対して、『いつでもある箱』=静的変数の場合は、常に舞台の上にあるわけです。
つまり、常にメモリー上にあるわけです。
よくメモリーに常駐するソフトとかいいますますよね。
その言葉を使えば、
静的変数は、メモリーに常駐しているのです。
『そのときにしかない箱』は、必要なときにだけメモリー上に存在するのです。
ほとんどの箱は、必要なときにだけメモリー上に存在する動的変数です。


つまり、static_cast<unsigned int>(time(0))
は現在時刻time(0)を正の整数型で、静的な型(メモリーに常駐する型)に強制的に変更しているわけです。
どうして?
シード値が常駐型の変数だからです。
どうして?
それは私にもわかりません。
とにかくC言語の文法でそうなっているので従うしかありません。


さて、ではプログラムを変更してください。



第1話へ 第3話へ

a

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