第7講 社員(子分)

第2話 仕事の分割

例えば、次のようなプログラムを考えてみましょう。
実行結果
C言語

プログラムの文章
#include<iostream>
using namespace std;
int main(){

  
cout<<"1から10までの和=";
  int w,i;
  w=0;
  for(i=1;i<11;i++){
    w+=i;
  }
  cout<<w<<endl<<endl;


  cout<<"1から10までの積=";
  w=1;
  for(i=1;i<11;i++){
    w*=i;
  }
  cout<<w<<endl<<endl;


}


明らかに、2つの仕事があります。
それをmain()(社長または親分)1人で行っています。
その2つの仕事を社員(子分)に依頼することにしましょう。
仕事を依頼するには、その社員の名前を呼べば良いのです。
和を計算する社員名をwa()
(C言語及びC++では社員名の最後は()で終わるという決まりになっていると理解してください。
社長の名前もmain()を()が付いていました。社長も会社を構成する社員の1人であるからです。
とし、積を計算する社員名をseki()であるとしますなら、
社長main()のプログラム内容は、
int main(){

  
wa();

  
seki();

}
と至ってシンプルなものになります。
さて、では社員wa()やseki()はどのように作ったら良いでしょうか。
社員wa()を作るには、
void wa(){

}
とタイピングすれば良いのです。
『voidって何よ?』
という疑問がありますよね。
第1講C++を体験しよう第4話プログラムの文章解説
において1度触れていますが、C言語およびC++の社員はすべて専門社員です。
専門の仕事しかできないのです。
その専門を示すのが型です。
数字や文字を入れる箱=変数にも型があったように、
社員(すなわち、関数)にも型があるのです。
つまり、wa()をvoid型として作ったと言うことです。
voidとは『何もない』とか『空』という意味です。
何が『空』なのでしょうか。
実は、C言語およびC++では基本的には、仕事を命じられた人に結果を報告することになっているのです。
仕事の結果を報告する内容がない場合voidを使うのです。
つまり、報告する内容が『空』というわけです。
仕事だけをして、その結果は上司に報告しなくて良い場合、
void型の社員を作れば良いのです。
さて、
void wa(){

}
の仕事は1から10までの和を求め答えを黒い画面に表示することでしたから、中身は
void wa(){
  cout<<"1から10までの和=";
  int w,i;
  w=0;
  for(i=1;i<11;i++){
    w+=i;
  }
  cout<<w<<endl<<endl;
}
とすれば良いのです。
そして、seki()の仕事は1から10までかけて答えを黒い画面に表示することでしたから、
void seki(){
  cout<<"1から10までの積=";
  
int w,i;
  w=1;
  for(i=1;i<11;i++){
    w*=i;
  }
  cout<<w<<endl<<endl;
}


記述の順番ですが、
#include<iostream>
using namespace std;

int main(){

  wa();

  seki();

}

void wa(){
  cout<<"1から10までの和=";
  int w,i;
  w=0;
  for(i=1;i<11;i++){
    w+=i;
  }
  cout<<w<<endl<<endl;
}

void seki(){
  cout<<"1から10までの積=";
  
int w,i;
  w=1;
  for(i=1;i<11;i++){
    w*=i;
  }
  cout<<w<<endl<<endl;
}
だとエラーします。
正しい順番は、
#include<iostream>
using namespace std;

void wa(){
  cout<<"1から10までの和=";
  int w,i;
  w=0;
  for(i=1;i<11;i++){
    w+=i;
  }
  cout<<w<<endl<<endl;
}

void seki(){
  cout<<"1から10までの積=";
  
int w,i;
  w=1;
  for(i=1;i<11;i++){
    w*=i;
  }
  cout<<w<<endl<<endl;
}

int main(){

  wa();

  seki();

}
です。つまり、親分(社長)であるmain()は最後に記述する決まりになっています。
ですが、社長が最後に登場では気持ちが悪いですよね。
なぜなら、main()はプログラム全体の設計書に相当します。
全体の構造がそこに書いてあるわけです。
やっぱり、先頭に持ってきたいですよね。
先頭に持ってくる場合は、
#include<iostream>
using namespace std;
void wa();
void seki();


int main(){

  wa();

  seki();

}

void wa(){
  cout<<"1から10までの和=";
  int w,i;
  w=0;
  for(i=1;i<11;i++){
    w+=i;
  }
  cout<<w<<endl<<endl;
}

void seki(){
  cout<<"1から10までの積=";
  
int w,i;
  w=1;
  for(i=1;i<11;i++){
    w*=i;
  }
  cout<<w<<endl<<endl;
}
とすれば良いのです。
void wa();
void seki();

を専門用語では関数プロトタイプ宣言といいます。
プロトタイプとは曖昧さ回避という意味です。
難しく考える必要はありません。
冒頭にプログラムで使う社員の一覧を示しておくのが、
関数プロトタイプ宣言です。
でも、なぜ社員の一覧の中にmain()入れないのでしょうか。
簡単です。C言語及びC++では必ずmain()は入ることになっていますので、
宣言する必要がないのです。


これからはすべて冒頭に社員一覧を示す方法を採用します。
指令書であるmain()は、先頭に示すべきであると思うからです。

ところで、重要な問題を示唆しておいたのですが、
お気づきになりましたか。



第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入門