第5講 関数の学習
第1話 関数とは?
for文、if文と同様に大切な学習が関数です。
実は、第2講に関数をもってくることを検討しましたし、
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
では第2講にもってきたほどです。
ですが、変数・for文・if文を学んでいないと、
各関数で魅力あるプログラムが組めませんから、
やむを得ず第5講にもってきたのです。
また、
配列やC++やC言語の大きな魅力の一つであるポインタも学習しておくと、
より面白いプログラムが組めるのですが、
なるべく早い時期に学んだ方が良い関数の学習が後回しになってしまいますので、
第5講に選んだのです。
関数・変数・配列・ポインタ・for文・if文などの重要な項目が、
有機的に連関し合っているのが、
プログラミングの特徴のひとつなのです。
もっとも、数学にしても哲学にしても社会科学にしても、
さらには日常で起こるすべての物事も、
いろいろな契機が複雑にかつ有機的に関連し合っています。
有機的に関連し合っているために本講義においても、
if文を学ぶ前のfor文の講で、if文が必要なプログラミングを組んだり、
後の独立の講である多次元ループ(for文の入れ子)を
第4講の最後に入れたりしています。
これは、講義の構成の仕方が悪いのではなく、
むしろ、有機的連関を強調するために、
必要なことであると考えています。
実際に、C言語・C++・VB・Javaなどの各種の
『初心者のための・・・基礎から応用まで』
の講義では、後の学習項目が前の学習項目に入らないように、
構成してきました。
物事は有機的に連関し合っていることを体系的に述べた最初の人は、
哲学者のヘーゲルです。
『右脳数学教育論』にしても、哲学や社会科学の論考にしても、
私は、ヘーゲルから多くの影響を受けています。
ごめんなさい。すこし、脱線しました。
本話のテーマに戻りましょう。
関数とは何が、本話のテーマでした。
『関数!?・・・、関数がプログラミングに必要なの?
嫌だな!、関数は苦手だよ。』
と思った方もいらっしゃると思います。
ですが、数学の関数が嫌いだった方も、
全然心配要りません。
関数とは、プログラミングの部品です。
プラモデルも様々なパーツを組み合わせて、
作ります。
そのパーツに相当するのが、関数です。
プログラムは、様々な関数を連結させて、
組むのです。
しかも、関数の結合はプラモデルやTVやパソコンなどと同じように、
単純な結びつきです。
TVなどは、規格さえ揃っていれば、どこのメーカの製品(部品)でも組み込むことができます。
電化製品といえば日本のお家芸であったのですが、
韓国や中国に追従されて、大苦戦しています。
世界のソニーや液晶TVをヒットさせたシャープなどが経営危機に陥っています。
韓国に先を越され、やがて中国にも勝てなくなってしまうであろう最大の原因は、
TVやパソコンは部品を単純に組み立てれば良く、
高度な技術が要らないのです。
自作パソコンが一時流行りましたが、
パソコンも各部品を単純に結合させれば良く、
簡単にできてしまうのです。
自動車は、すりあわせが難しく、
自動車を生産するには高度な技術が要るのとは、
対照的なのです。
先ほど、すべての物事は
有機的に複雑に関連し合っていると述べたばかりですが、
関数同士の結合はプラモデルの部品のように単純連結であり、
人間の臓器や脳細胞同士が有機的に絡み合っているのとは、
対照をなすのです。
人間の臓器は、簡単に取り替えることはできません。
特に、脳は最も複雑に連鎖・交差しているので、
脳の部分交換など、全く不可能です。
プログラミングも、TVと同様に誰が作った部品=関数でも組み込めるのです。
もうすでに、部品の組み込みを行ってきていますね。
そうです。
インクルードです。
インクルードファイルも関数であり、部品=パーツです。
#include<iostream>
using namespace std;
void main(){
int w=0,c=0; for(int i=2;;i=i+3){ |
w=w+i; c++; if(w>100)break; |
} cout<<"はじめて100を越える合計値は"<<w; cout<<"で越えるのは第"<<c<<"項です。"<<endl; |
}
のように冒頭に記述しただけで、
パーツの結合ができてしまうのです。
『関数とは部品である。』はご理解頂けたでしょうか。
関数を作る際の一つの原則があります。
それは、部品を大きくしないです。
実は、第4講第4話で組んだ
#include<iostream>
#include<stdlib.h>
#include <time.h>
using namespace std;
void main(){
srand(time(NULL)); int k,sy,sg,r,e,g; //kは国語、syは社会、sgは数学、rは理科、eは英語の点数を入れる整数型変数 k=rand()%101; sy=rand()%101; sg=rand()%101; r=rand()%101; e=rand()%101; cout<<"国語="<<k<<endl; cout<<"社会="<<sy<<endl; cout<<"数学="<<sg<<endl; cout<<"理科="<<r<<endl; cout<<"英語="<<e<<endl; g=k+sy+sg+r+e; cout<<"5教科の合計="<<g<<endl; cout<<"5教科の平均="<<(float)g/5<<endl; if(g>=300)cout<<"合格"<<endl; if(g<300)cout<<"不合格"<<endl; int w; w=0; if(w<k)w=k; if(w<sy)w=sy; if(w<sg)w=sg; if(w<r)w=r; if(w<e)w=e; cout<<"5教科の最高点は"<<w<<endl; w=100; if(w>k)w=k; if(w>sy)w=sy; if(w>sg)w=sg; if(w>r)w=r; if(w>e)w=e; cout<<"5教科の最低点は"<<w<<endl; |
}
は褒められたものではありません。
mainも実は関数です。
部品が大きすぎるのです。
このプログラムは、
void main(){
srand(time(NULL)); int k,sy,sg,r,e,g; //kは国語、syは社会、sgは数学、rは理科、eは英語の点数を入れる整数型変数 k=rand()%101; sy=rand()%101; sg=rand()%101; r=rand()%101; e=rand()%101; cout<<"国語="<<k<<endl; cout<<"社会="<<sy<<endl; cout<<"数学="<<sg<<endl; cout<<"理科="<<r<<endl; cout<<"英語="<<e<<endl; g=k+sy+sg+r+e; cout<<"5教科の合計="<<g<<endl; cout<<"5教科の平均="<<(float)g/5<<endl; if(g>=300)cout<<"合格"<<endl; if(g<300)cout<<"不合格"<<endl; int w; w=0; if(w<k)w=k; if(w<sy)w=sy; if(w<sg)w=sg; if(w<r)w=r; if(w<e)w=e; cout<<"5教科の最高点は"<<w<<endl; w=100; if(w>k)w=k; if(w>sy)w=sy; if(w>sg)w=sg; if(w>r)w=r; if(w>e)w=e; cout<<"5教科の最低点は"<<w<<endl; |
}
色を付けたところを独立の部品にすることができます。
なるべく関数は大きくしない・・・これが重要な原則です。
void main(){
データ入力; データ表示; 合計の算出と表示; 合否判定; 最高点算出; 最低点算出; |
}
とすると、プログラムが大変わかりやすくなります。
関数は、他の関数に仕事を命じることができます。
mainは絶対的な親分で、mainは他の関数に命じることはできますが、
他の関数はmainに仕事を命令することはできません。
今までのプログラムは、絶対的な親分=社長が全部一人で仕事をしていました。
void main(){
データ入力; データ表示; 合計の算出と表示; 合否判定; 最高点算出; 最低点算出; |
}
においては、仕事を6人の部下(子分)=関数に命じています。
これからは、たくさんの社員=関数を雇い、
仕事を分割し分業にして、効率的に進めていきます。
第4講第7話へ 第2話へ
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ