第5講 もしもボックス(if文)
第1話 もしもボックス(if文)とは?

『もしもボックス』の名称は、何から借りてきているかおわかりですね。
そうです。
ドラえもんです。
この第5講で学ぶIf文は、ドラえもんの『もしもボックス』の考え方と同じです。
『もしもボックス』は、携帯の普及で最近少なくなってきた公衆電話ボックスと同じ形状をしています。
そのボックスに入り、『もしお金のない世界だったら』や『もし声のない世界だったら』などとお願いするのです。
私の記憶では、『もし声のない世界』では、確か話をすると漫画のように吹き出しが出てきました。
専門用語を用いないということで、『もしもボックス』という比喩を本講の講義名にしましたが、
第5講はドラえもんの『もしもボックス』を持ち出さなくても、
If文については、中学生のときに英語で学び皆さんがよくご存じのものです。
If文とは次のようなものでした。
If P Then A
もしPだったらAです。
ドラえもんの例なら、
If 声のない世界 Then 吹き出しが出てくる
です。

さて、同じことの繰り返しと『もしもボックス』は、
プログラミングの学習の中で最も大事なものであると
前講で申し上げました。
何故、『もしもボックス』が重要なのでしょうか。
実は、同じことの繰り返しを含めて今まで学んだプログラミングは直線的な流れでした。
コンピュータは、プログラムの文章を上から順に実行していくだけです。
A→B→C→・・・
性格診断のようにこれを次のように分岐させることができれば、
かなり内容豊かなプログラムを組むことができます。
l01
この分岐させるための命令文がif文なのです。
if文には2種類あって
if(条件式){
  A;
}
(または if(条件式)A;)

if (条件式){
  A; 

else {
   B;

(または if(条件式)A; else B;)
です。

1番目のif文は、条件式が正しいときだけ命令Aを実行します。
2番目のif文は、条件式が正しいとき命令Aを実行し、正しくないときは命令Bを実行します。
1番目のif文の流れ図(フローチャート)は、
l02
2番目のif文の流れ図は
l03
となります。
具体的には、
if(w < 100){
  w = w + i;
}
はwが100未満ならw = w + iを実行しなさいです。
if(w < 100){
  w = w + i
}
else{
  w =w * i
}
はwが100未満ならw = w + iそうでないならw = w * iを実行しなさいという命令になります。

尚、if文は複数の命令も実行させることができます。
if{条件式){
  A;
  B;
  C;
}
これは条件式が正しいとき、AとBとCの3つの命令を実行させる場合です。
また、
if(条件式){
  A;
  B;
  C;
}
else{
  D;
  E;
}
なら、条件式が正しいときはAとBとCを、正しくないときはDとEを実行しなさいとなります。

()の中で一度触れていますが、命令文が1文しかない場合は、
if(条件式)A;
if(条件式)A; else B;
と簡略に記述することもできます。
ですが、私は1文しか命令文がない場合でも、
if{条件式){
  A;
}
if(条件式){
  A;
}
else{
  D;
}
と記述と記述することをお勧めしています。
意味のまとまりごと段組をする習慣を付けていただきたいからです。

さて、もしもボックスの実際学ぶための課題に移りたいと思いますが、
その課題を実現するためには、準備が必要です。
次のように100未満のランダムな整数を発生させるプログラムを考えください。
c++
尚、≧はc言語&c++にはありませんので、>=で代用します。
解答例は30行下。





























解答例
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
  short a;
  a=rand()%100;
  cout<<"発生データ "<<a<<endl;
}
c
それで、もしもボックスを使って発生したデータを評価して、
60点以上なら合格、
60点未満なら何もしないプログラムを組んでみたいわけですが、
実は問題があります。
何度も『ソフトを構築して、ソフトを実行する』(ビルド、すなわちCtrl+F5)をしてみてください。
何回やっても同じ41しか表示されません。
ランダムデータといっても出る順番は決まっています。
実際にはrand()は、発生するデータの順番が決まっている疑似ランダムデータにすぎないのです。
表示されるデータがいつも41ではif文で評価する意味がありません。
乱数の発生順番=乱数系列を変えることはできるでしょうか。
C言語には、乱数系列を変えるためのsrand(乱数の種を指定する整数)をいう関数が用意されています。
乱数の種を指定する整数の範囲は0~65535の整数です。
専門用語では、乱数の種を指定する整数をシード値といいます。
0以上の整数、すなわち正の整数をunsigned intといいます。
したがって、シード値はunsigned int型の整数です。
例えば、
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
  short a;
  srand(2);
  a=rand()%100;
  cout<<"発生データ "<<a<<endl;
}
c言語
また、シード値を10にすると
入門

では皆さん、もしもボックスで60以上なら
初心者
未満なら
基礎
となるプログラムを組みましょう。

第4講第9話へ 
第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入門