第5講 関数の学習
第10話 怪我の功名・・・自分が自分に仕事を依頼する?

うっかりタイピングミスの結果は?
#include<iostream>
using namespace std;
void f(char c);
void g(char c);
void main(){
   f(0);
}
void f(char c){
   cout<<"gさんお仕事お願いします。"<<endl;
   if(c+1<10)
f(c+1);
}
void g(char c){
   cout<<"fさんお仕事お願いします。"<<endl;
   if(c+1<10)f(c+1);
}
の結果は?
i
なんと、自分に自分が仕事を依頼できる!・・・
もちろん、このプログラムの場合g()は仕事をしていませんから、
#include<iostream>
using namespace std;
void f(char c);
void main(){
   f(0);
}
void f(char c){
   cout<<"gさんお仕事お願いします。"<<endl;
   if(c+1<10)f(c+1);
}
でよいのです。
まさに怪我の功名です。
タイピングミスが、大きな発見を導きました。
自分が自分に仕事を依頼することを関数の再帰的使用というといいます。
この偶然が発見した関数の再帰的使用は、
プログラミングの世界を一気に広げることになるのです。
私の魔方陣自動生成プログラムや数独自動生成アプリにおいて、
核をなすのがこの再帰的使用なのです。
関数の再帰的使用は、第9講で本格的に学ぶ予定になっています。
本話は、第9講の予告です。

尚、魔方陣の作成を関数の再帰的使用を使って行うというアイディアは、
25年にわたる私のプログラミングにおける歴史で最大の事件です。

アイディアは、車を運転しているときに生まれました。
その問題を考えていないときに、突然発見が生まれる!・・・
これは偶然のように見えますが、
決して偶然ではありません。
関数の再帰的使用によって魔方陣を作り出すという考えは、
車の運転と必然的な連関があります。

第6講では配列に進む前の最後の課題を出します。

第3講第3話のプログラム

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(){

      データ入力;
データ表示;

合計の算出と表示;

合否判定; 
最高点算出;
最低点算出;

}
としてプログラムを見通しの良いものに変更して下さい。
もちろん、

      データ入力;
データ表示;

合計の算出と表示;

合否判定; 
最高点算出;
最低点算出;

はこのままではエラーしますよ。
内容を考えて下さい。
ただし、また配列やポインタを学んでいませんので、
int k,sy,sg,r,e,g;
はグローバル変数にして下さい。



第9話へ 第11話へ

a

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ