技術者が教える初心者さんのためのC言語

〜最小限の知識でプログラム〜


テーマ:

いつも感謝しています。Nです。


今回は”ポインタ理解のための初めの0.01歩”をお話ししたいと思います。


ポインタって聞くだけで

拒絶反応を起こしたり、C言語の勉強でポインタで

挫折しましたという人もいるかもしれませんね。


確かに、

ポインタという名前だけ何故英語を使うのって感じがしますよね。


なんか、それだけで特殊で難しいって思っちゃいますよね。


また、

色んな人からポインタは難しい、難しいと言うのを聞いてしまったりしているので、


ふーん、ポインタって難しいんだって先入観を持っていたりすると思います。


この先入観が、実は結構やっかいだったりするんですよね。


例えば、

第一印象がすごーく悪かったんだけど、ちょっとづつちょっとづつ会話をしていくことを続けていると

あれ?いい人じゃん!って感じの人に出会ったことってありませんか?


案外そういう人とすごく仲良くなったりして、「第一印象、お前すごーく悪かったんだよ(笑)」とかって言ったり、或いは逆に言われたりした経験ってありませんか?


これは、先入観が解けていって、実はいい奴じゃんって解釈が進化したってことだと思います。


もしかすると、ポインタにまとわり付いている先入観をとってみたら、実はポインタもすごいいい奴かもしれませんよ(笑)


なので、今回以降のお話しを読むときは、

「もしかしたら、ポインタっていい奴かもしれない」

と思って、読んでくれるといいなぁと願っています。


で、

今日のお話しはすごく短いです。そしてポインタの”ポ”の話しも出てきません。

だから、読み終わった後に、「なっ、なんだ??」って思われる方もいるかもしれません。

なかには、期待してたのと違う。。。て思うかたがいるかもしれません。


でも、ここはすごーく大事なので、あえて書きますね。

先入観を解くには、ちょっとづつちょっとづつが大事だと私は思っています。



では、ポインタを理解するための、初めの0.01歩のお話しをしますね。

それは、「家を想像してみること」です。



自分が住んでいる家を実際に思い浮かべて想像してみてください。


家の壁の色は何色ですか?白色ですか?

屋根の色は何色ですか?

どれくらいの大きさですか?

周りには何がありますか?

どれぐらいの大きさの土地にその家が建っていますか?、

郵便ポストありますか?、何色ですか?赤色?

家の住所言えますか?、何県?何市?何番地?郵便番号は?


ちょっと想像してみてください。










想像できましたか?


じゃ、次は友達の家について、同じことを想像してみてください。








想像できた人は、ポインタの先入観をとく最初の0.01歩クリアです。


ここで、お願いがあります。

できれば、上の質問に想像して答えてみてくださいね。

そうすることで、次回以降のお話しが分かりやすくなると思います。


次回は、今回想像してもらったことをもとに、お話ししていきます。


AD
いいね!(15)  |  コメント(0)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


この「番外編:Nのつぶやき」では、

私がいいなぁと思ったことなどを記載しています。


斎藤一人さんの本に


―-

自分が行動して、うまくいったことを他の人に教えるのは、

とてもいいことです。


でも中には、やる前から

「そんなのうまくいかないに決まっている」

とかいって、せっかくいいことを聞いてもやらない人もいます。


すると、そういう人はどうなるかというと、

「いいこと聞いて、それをやらないとどうなるか」

を体験するんです。


私たちは、とにかく学ぶことしかできません。


何もしない人は

「何もしない」という行動をとっているんです。

その結果、どうなるかを学んでいるわけなんですね。


と書かれています。


私はこの文章を読んだとき、特に


「何もしない人は、”何もしないという行動”をとっている。その結果、どうなるかを学んでいる」


という部分に衝撃を受けました。


なぜかというと、

何もしない人は、行動していないと私は考えていたのですが、


ひとりさんは、

何もしない人も、行動しているんだ、何もしないという行動を。

そして、その結果を得ているんだと言われています。


私自身も、せっかく人からいい話を聞いても、「あーいい話だなぁ」で終わって、何もしないことがあります。


このときって、せっかくのいい話をもらったのに、

何もしないという行動を選択して、その結果人生変わんないなぁとかって嘆いているのかなぁと感じました。


だから今後は、私自身、あーいい話だなと思って終わりにするのではなくて、

それを具体化して、どんな小さなことからでもいいから、ちょっと0.01歩でもいいから、

ちょっと行動へ移してみようって考えます。


こうやって、文章に書くのも、小さな小さな私にとって一歩前進の行動だ!っておもって、今回は、このお話を書きました。



読者の皆さん、いつも感謝しています。


読者の皆さんに、

すべての良きことがなだれのごとく

起きますように。


AD
いいね!(18)  |  コメント(0)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


前回の記事

配列の威力(面倒くさいという感覚と楽だという感覚)

で、配列を使うとプログラムが非常に短かくなり楽になるということをお話ししました。


今回は配列の基礎についてお話ししたいと思います。


配列とは、複数のデータを1つの変数名で管理したいときに用いるものと考えてください。


例えば、

生徒が10人いるとして、その成績を管理したい場合には配列をもちいることができます。


この場合、

複数のデータ・・・生徒10人の各々の成績

変数名・・・・・・seiseki

とすることができます。


配列も変数なので、宣言をする必要があります。


上記の例だと、以下のように宣言できます。


int  seiseki[10];


変数名の後に、大括弧[ ] を書き、その中に、いくつ分のデータを確保したいかの数字を記載します。

今回の例ならば、生徒10人分の成績データを確保したいので、大括弧の中に10と書いていますね。


次に、配列に値を入れる方法について述べますね。


これには、二通りあります。


1) 宣言時に値を入れる


int  seiseki[10] = { 80, 90, 100, 78, 55, 99, 100, 84, 88, 91};


上記のように、中括弧{ }を用いて、その中に10人分の成績を記載します。


2) プログラム中で一つ一つ変数の値を入れる


seiseki[0] = 80;

seiseki[1] = 90;

seiseki[2] = 100;

seiseki[3] = 78;

seiseki[4] = 55;

seiseki[5] = 99;

seiseki[6] = 100;

seiseki[7] = 84;

seiseki[8] = 89;

seiseki[9] = 91;


上記のように、大括弧[ ]の中の番号を指定して、各データを代入していきます。


例えば、1番目の生徒の成績80点を登録したい場合は、


seiseki[0] = 80;


とします。


2番目の生徒90点を登録したい場合は、


seiseki[1] = 90;


のように記載していきます。


ここで注意点としては、

配列の宣言時は、大括弧[ ] の数字はそのデータの最大個数になる。

一方、変数の値を入れるときは、大括弧[ ]の数字は0から始まるということです。


そのため、

1番目の生徒の場合は、大括弧[ ]の中の数字は0になっていますね。

2番目の生徒の場合は、大括弧[ ]の中の数字は1になっていますね。


ここは、よく間違うので注意してくださいね。


そして最後に、配列のデータを使うには、大括弧[ ]の中の番号を指定してその値を使います。


たとえば、10番目の生徒の成績データを表示したい場合は、


printf(“No10 student =%d”, seiseki[9]);


のようにします。


この場合も、大括弧[ ]の中の数字は0から始まると覚えておいてくださいね。

だから、10番目の生徒の場合は、大括弧[ ]の数字は9を指定していますね。


今回は、配列の基礎についてお話ししました。


大きく分けると、3つのポイントがあって、


1: 配列の宣言の仕方

2: 配列への値代入の仕方

3: 配列の値を使う方法


について述べました。



AD
いいね!(23)  |  コメント(0)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


今回は、配列というものを使うと、すごくプログラムが短くなる、楽になるということをお伝えしたいと思います。


配列についての、詳細は次回以降の説明になると思いますが、配列というものを使うと、こんなにプログラムが短くなるのか、楽になるのかというのを実感してもらいたいと考えています。


ですので、今回は配列とは何かがわからなくてもOKです。

ただ、その威力を感じ取ってみてくださいね。



では、具体的にお話ししていきますね。


たとえば、

生徒が10人いるクラスで、各々の成績を表示したいというプログラムを作りたいとします。


この場合、以下のようなサンプルプログラムを作れば表示できると思います。


#include <stdio.h>


int main( void )

{

   int  seiseki0;

   int  seiseki1;

   int  seiseki2;

   int  seiseki3;

   int  seiseki4;

   int  seiseki5;

   int  seiseki6;

   int  seiseki7;

   int  seiseki8;

   int  seiseki9;


   seiseki0 = 60;

   seiseki1 = 70;

   seiseki2 = 100;

   seiseki3 = 65;

   seiseki4 = 89;

   seiseki5 = 95;

   seiseki6 = 40;

   seiseki7 = 50;

   seiseki8 = 80;

   seiseki9 = 30;


   printf(“seiseki0=%d¥n”,seiseki0);

   printf(“seiseki1=%d¥n”,seiseki1);

   printf(“seiseki2=%d¥n”,seiseki2);

   printf(“seiseki3=%d¥n”,seiseki3);

   printf(“seiseki4=%d¥n”,seiseki4);

   printf(“seiseki5=%d¥n”,seiseki5);

   printf(“seiseki6=%d¥n”,seiseki6);

   printf(“seiseki7=%d¥n”,seiseki7);

   printf(“seiseki8=%d¥n”,seiseki8);

   printf(“seiseki9=%d¥n”,seiseki9);


   return( 0 );

}


実行結果:

seiseki0=60;

seiseki1=70;

seiseki2=100;

seiseki3=65;

seiseki4=89;

seiseki5=95;

seiseki6=40;

seiseki7=50;

seiseki8=80;

seiseki9=30;


私は、このサンプルプログラムを作っていて、面倒くさいなぁと思いました(笑)。


皆さんはどう感じましたか?


では、生徒が100人いるクラスで、各々の成績を表示したいというプログラムを作ってください。

と言われたら、上のサンプルプログラムと同じように作るとしたなら、私は「やめます!撤退!」と言ってしまいそうなぐらい嫌です。


では、何が面倒くさいと感じるのでしょうか?


同じようなプログラムを何度も書いているのが、とても面倒くさいなぁと私は感じます。

しかも、短くしたいのに、for文を使おうと思っても使えない。。。うーん嫌だなって感じます。


では、どうしようか


短くしたいですよね。短くするには、for文を使えるようにするにはどうすればいいのでしょうか?


そう、このサンプルプログラムでは、seiseki0, seiseki1, seiseki2, ・・・・・seiseki9と変数が10個あるために、

短くしようとしても、for文を使おうとしても、できないわけです。


ここをなんとかすれば、もっと楽にプログラムが作れそうですね。


ここで、配列というものを使うと非常に楽にプログラムが作れます


今日は、配列とは何かを言わずに、

配列というものを使っったら上のサンプルプログラムがどうなるかを書いてみますね。


#include <stdio.h>


int main( void )

{

   int  ii;

   int seiseki[10] = { 60, 70, 100, 65, 89, 95, 40, 50, 80, 30 };


   for( ii = 0; ii < 10; ii++ )

   {

     printf( “seiseki%d=%d¥n”, ii, seiseki[ii] );

   }


   return( 0 );

}


実行結果:

seiseki0=60;

seiseki1=70;

seiseki2=100;

seiseki3=65;

seiseki4=89;

seiseki5=95;

seiseki6=40;

seiseki7=50;

seiseki8=80;

seiseki9=30;


どうでしょうか?、配列というものを使うとこんなにもプログラムの量が減りました。


このように、配列というものをもちいることで、プログラムがすごく短くなるということがわかると思います。


そして、プログラムを書いている最中の感情にも変化があると思います。


今回は、配列というものは何かについては説明しませんでした。

配列とは何かが今回の時点では、分からなくてOKです。


ただし、今回のサンプルプログラム2つを、実際に書いてみて、実行してみてください。

そして、面倒くさいという感覚と、これは楽だという感覚の両方を感じるようにしてみてくださいね。


この「面倒くさいという感覚」と「これは楽だという感覚」を育てていくことが、プログラムの上達の上で非常に重要なことですまずはこの感覚を知ってもらいたくて、今回はこのような書き方をしました。

そして、この感覚を知ることが大事と私は考えています。


次回以降で、配列について詳しく述べていきますので楽しみにしていてくださいね。

いいね!(28)  |  コメント(1)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


変数の有効範囲1(ローカル変数)
グローバル変数の性質とその危険性


で、変数を有効範囲という視点から分類してお話ししました。


今回は、変数を有効期限という視点から分類してお話ししたいと思います。


私は、

思考する上で、分類という方法を用いるのは非常に重要であると考えています。


分類というのは、日常生活でもおそらく皆さんもごく自然にやっていることだと思います。


たとえば、人をどうやって分類していますか?


性別で分類すると、男の人、女の人

年齢で分類すると、10代、20代、30代、40代、50代、60代・・・

血液型で分類すると、A型、B型、AB型、O型

などなど。


そして、

何かを学ぶとき、思考するときは、このような分類を意識的に行っていくことで比較的楽に学習していくことができます。


是非、皆さんも日常生活で体験していることを、分類してみる練習をしてみてくださいね。


そうすることで、「あっ、私はこんな分類傾向にあるんだ」とかがわかってきます。


そしてこの能力は、プログラムをする上でも非常に重要なものです。


さて、話をもどして、

変数の有効期限について具体的にお話ししていきますね。


まず、有効期限とはどういう意味か?


字のごとく、有効である期限・期間という意味ですね。


たとえば、電車の定期券を有効期限から分類すると、1ヶ月、2ヶ月、3ヶ月という風に分類できますね。


これと同じで、変数も有効期限から分類することが出来て、大きく分けると2つに分類できます。


自動変数”と”静的変数


です。


まずは、

自動変数からサンプルプログラムを用いて説明しますね。



#include <stdio.h>


void myFunc(void);


int main( void )

{

    myFunc();

    myFunc();

    myFunc();


    return( 0 );

}


void myFunc( void )

{

    int   a = 0;


    a++;

    printf(“a=%d¥n”,a);

}


実行結果:

a = 1

a = 1

a = 1


このサンプルプログラムは、

変数aをa++して表示する自作関数myFuncをmain関数から3回呼んでいるものです。


ここで、

int  a = 0; の部分と実行結果に注目してください


これは、今までにも出てきた変数の宣言の仕方ですね。


このように今まで通り変数を宣言すると、変数の期限という分類の仕方では、自動変数と呼ばれるものになります。


で、この自動変数が値を保持できる有効期限は、

関数に実行が移って生成されてから、その関数を抜けるまでです。


サンプルプログラムでいうと、

myFunc関数に実行が移って、抜けると自動変数は値をもう保持できないので、


実行結果としては、a = 1が3回表示されるということになります。


では、次に

静的変数についても、サンプルプログラムを用いて説明しますね。


#include <stdio.h>


void myFunc(void);


int main( void )

{

    myFunc();

    myFunc();

    myFunc();


    return( 0 );

}


void myFunc( void )

{

    static int   a;


    a++;

    printf(“a=%d¥n”,a);

}


実行結果:

a = 1

a = 2

a = 3


さて、今度は

static int   a; と実行結果の部分に注目していください。


先ほどの自動変数のサンプルプログラムとの違いは、変数の宣言のところで、staticという文字が追加されていますね。


このように、staticを付け加えて宣言した変数を静的変数と呼びます


しかし、実行結果がだいぶ異なりましたね。


もう結果から分かった方もいると思いますが、


この静的変数が値を保持できる有効期限は、プログラムの実行が始まってから終わるまでです。


そのため、サンプルプログラムでは、

静的変数は前の値を保持しているので、myFunc関数が呼ばれるたびに足し算されて、実行結果のようになるということです。


ここで、もう一点注意があります。


静的変数の場合、変数宣言で値をあえて明示的に初期化しない場合は、0に初期化されるという点です。

つまり、static int a; と書くと、static int a = 0; とプログラムが自動的にしてくれるということです。


以上、今回は変数を有効期限という視点の分類からお話ししました。

実際にサンプルプログラムを書いて確かめてみてくださいね。



いいね!(13)  |  コメント(0)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


前回の記事「
変数の有効範囲1(ローカル変数)」で

ローカル変数の有効範囲についてお話ししました。


おさらいをすると、

1: 変数には有効範囲がある

2: 変数の宣言される場所によって有効範囲は変わる

3: 有効範囲から分類すると、変数はローカル変数とグローバル変数に分類できる

4: 関数の括弧{ }の中で宣言された変数はローカル変数という

5: ローカル変数の使用出来る範囲は、それが宣言されている関数の括弧{ }の中でした。


今回はグローバル変数についてお話しをしますね。


グローバル変数は、一見非常に便利に思えるのですが、思わぬバグを引き起こす原因になりやすいです。

なので、あまり私はグローバル変数の多用は推奨しません。


しかし、グローバル変数がどういうものかを知っておくことは必要だと思います。


なぜなら

1: 他人の書いたプログラムにグローバル変数があった場合、知識として必要

2: グローバル変数の性質を知っておくことで、バグが生じたときに「もしかして?」という考えをもてる

からです。


では、具体的にお話ししますね。


グローバル変数で押さえておくことしては、

1: 宣言される場所が、関数の外側

2: グローバル変数の使える範囲は、プログラム全体

です。


サンプルプログラムで説明しますね。


#include <stdio.h>


void myFunc( void );


int  a;


int main( void )

{

   a = 0;

   printf(“a[main]=%d¥n”,a);

   myFunc();


   return( 0 );

}


void myFunc( void )

{

   a++;

   printf(“a[myFunc]=%d¥n”,a);

}


実行結果:

a[main]=0

a[myFunc]=1


まず、

int a; の場所に注目してください。関数の外で変数宣言がされていますね。


このように、関数の外で宣言された変数をグローバル変数といいます。


次に、この変数aが使われている場所に注目してくだい。main関数、自作関数myFuncの中でも使えていますね。


つまり、グローバル変数はどこでも使えるという性質をもっています。


もしかすると、ローカル変数よりもグローバル変数の方が便利だなぁと思われた方がいるかもしれません。

確かに、グローバル変数はどこでも使えるので便利だと思います。


しかし、この「どこでも使える」というのがクセ者です。


今回のサンプルプログラムのように、非常に短いプログラムであれば


どこで、どのグローバル変数を使ったか

どのようなタイミングでどのグローバル変数が動作するか


を把握できるのですが、


これが、

1: 数万行のプログラム

2: 複数のソースファイルにまたがる

3: 他人と共同してプログラムをつくる

のようになってくると、


どこで、どのグローバル変数を使ったか

どのようなタイミングでどのグローバル変数が動作するか


を把握するのが、どこでも使えてしまうので、非常に難しくなってきます。


たとえば、ちょっと極端な例ですが、

A君とB君がプログラムを分担して作っていたとします。


A君は、グローバル変数が一つづつプラスされる関数を作っていたとします。


次に、

B君の関数が出来上がったので、それをA君が用いたとします。


しかし、B君のプログラムに、グローバル変数を2倍する仕組みが組み込まれてA君はそれを知らなかった場合、

これは、バグになります。


極端なサンプルプログラムですが、以下のような感覚です。


#include <stdio.h>


void A_func( void );

void B_func( void );


int a = 0;


int main( void )

{

   /* A君の自作関数 */

 A_func();

   /* B君の自作関数 */

   B_func();


   /* A君は驚くだろう。。。(バグにつながる) */

   printf(“a=%d¥n”,a);


   return( 0 );

}


void A_func( void )

{

   a++

}


void B_func( void )

{

   /* B君の自作関数処理色々 */

 ・・・・・・・・


 /* グローバル変数aを2倍する処理(A君知らない) */

 a = a * 2;


   /* B君の自作関数処理色々 */

 ・・・・・・・・

}



以上、今回はグローバル変数の性質とその危険性についてお話ししました。


いいね!(13)  |  コメント(1)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


今回は、変数の有効範囲についてお話します。


特に初心者さんは、この変数の有効範囲についてあまり意識をしていないかもしれませんが、これをきちんと把握していないと、少し大きなプログラムになってくると、バグだらけのプログラムになってしまいます。


ですので、

初めの段階のうちに理解しておくことで、少し大きなプログラムを書き出したときに、バグで悩む必要が軽減されますので、是非マスターしておいてくださいね。


では具体的にお話ししていきます。


まず、

有効範囲とは、どういう意味なのでしょうか?


有効範囲とは字のごとく、それが有効である範囲のことです。

つまり、それが使用できる範囲のことですね。


たとえば、

東京から大阪までの新幹線の切符を買ったとします。

この切符の有効範囲は、もちろん東京から大阪ですね。

それ以外の範囲ではこの切符は使えませんね。


これと同じように、

変数にもそれを使える範囲があるのです。


そして

変数の範囲は、その変数が宣言されている場所で変わる

ということを押さえておいてください。


次に、

有効範囲には応じて、変数を「ローカル変数」と「グローバル変数」に分けることができる

ということを知っておいてください。


では、今回は「ローカル変数」についてお話ししていきますね。


1: ローカル変数

 変数が宣言される場所:関数の括弧{ }の中

 有効範囲      :その変数が宣言された関数内


有効範囲が「その変数が宣言された関数内」とはどういうことでしょうか?


サンプルプログラムを用いて説明しますね。


#include  <stdio.h>


void myFunc( void );


int main( void )

{

   myFunc( );


   return( 0 );

}


void myFunc( void )

{

    int   a;


    a = 3;

    printf(“a=%d¥n”, a);

}


実行結果:

a=3


このサンプルプログラムで、myFunc関数の括弧{ }の中で、int a; と変数を定義していますね。

だから、この関数はローカル変数と呼ばれるものです。


そして、

myFunc関数内でa = 3; と変数に値を入れたりして使うことが可能です。

なぜなら、このローカル変数の有効範囲は、その変数が宣言された関数内だからです。


では、

サンプルプログラムを少し変えてみましょう。

a = 3; とその変数を使う場所を、myFunc関数の外にしてみましょう。


#include  <stdio.h>


void myFunc( void );


int main( void )

{


 a = 3;

   myFunc( );


   return( 0 );

}


void myFunc( void )

{

    int   a;


    printf(“a=%d¥n”, a);

}



どうなりましたか?


コンパイルをすると、以下のようなエラーが出現したと思います。


error: use of undeclared identifier 'a'


これを日本語に訳すと「エラー:不明瞭な識別名 ‘a’の使用」となります。


つまり、「’a’なんて知らないよ、何使ってるんだ?」と言われています。


何故このようなエラーが出現したのでしょうか?




もう、分かりますね?


そう、

変数aは、myFunc関数内で宣言したローカル変数です。そして、その有効範囲は「宣言された関数内」なわけです。


しかし、

このサンプルプログラムでは、宣言された関数外で a=3 と使用してしまいました。


つまり、ローカル変数の範囲外で使用してしまいまいした


そのため、

コンピュータからすると「’a’なんて知らないよ、何使ってるんだ?」となってしまったということです。



以上、ローカル変数について今回は述べてきました。


まとめると、ローカル変数とは

変数が宣言される場所は、関数の括弧{ }内で、その変数の有効範囲(使える範囲)は、その変数が宣言された関数内のみということになります。


次回は、グローバル変数についてお話ししますね。


余談)

プログラムをする上で、英語は大事です。

何故かというと、コンパイルエラーが生じたとき英語でメッセージが出てきたりします。

また、プログラムをする上で、最新の技術動向等を知るには、やはり海外の文献等を調べることも多々出てきます。

その時に、英語が使える方がやはり便利だと思います。

英語が苦手と思われている方も、小さなことから少しずつ英語を勉強していってみてはどうでしょうか。


実はそう言う私も英語が得意ではありません(苦笑)。

そこで、英語のブログを自分自身で立ち上げ英語の勉強をしています。

そのブログでは、私は教える立場ではなくて、学ぶ立場のブログになっています。


学校で習ったような、英語の勉強の仕方はしたくないので、

今の私にできる英語の勉強で具体的な最初の一歩は何かなっと考えて、好き勝手にやっています(笑)。


もし興味ある方は、そちらのブログも覗いてみてくださいね。

URLはこちらです↓。

http://ameblo.jp/learn-english-word-withn/

いいね!(13)  |  コメント(1)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


この「番外編:Nのつぶやき」では、

私がいいなぁと思ったことなどを記載しています。


斎藤一人さんの本に


――

よく、親やまわりの人から反対されたことを理由に

行動しない人がいます。


それって本当は、親の問題じゃないんです。


簡単に言えば、私がその人に


「あなたは行動したほうがいいです」


と言ったとします。


それで、じゃあしますかって言うとしないんだよね。


だからその人は、


「人のせいにして行動しない性格」なんだっていうことです。


今はその程度にしかできない人なんです。


それが悪いって言っているのではありません。


今はまだ、だれかのせいにして

行動しないぐらいの行動力なんだよ。


第一、親やまわりに言われたぐらいで行動をやめるって、


「あなたはいつからそんなに素直な性格になったんですか?」


っていうことなんです。


それに、親やまわりの人たちは失敗して欲しくないから言うの。

心配してくれているんです。


中にはたんなる”やっかみ”で反対する人がいるかもしれないけど、それくらい抵抗されたくらいで行動しないんだとしたら、


やっぱりその程度の行動力なんだよね。


だからまずは、


「自分はまだ、

 まわりから反対されたらできない程度の行動力なんだ」


ということを知る。


それがわかったら、次はその性格を改良すればいいんです。

――


と書かれています。


私はこの文章を読んだとき、正直


「痛った!、グサッ」


って感じました。


自分の体験、経験を思い出してみると、

まわりの人から言われたぐらいで行動をやめたりしてることがある。。。


そして、そのときの自分の心をよーく探ってみると、


「~さんのせいで、俺は行動しないんだよ」


みたいに、自分が行動しないのを他人のせいにして、

自己正当化をしている。。。


そんな自分がいることに気づきました。


そして、

「あなたはいつからそんなに素直な性格になったんですか?」

を読んだときに、


「あっ確かに、そんな素直な性格じゃないよなぁ、俺って」

「でも、まわりから反対されると、素直になって行動しなくなってるな(笑)」


って気づかされました。


さらに、


「そうか~、俺ってまだ、

 まわりから反対されたらできない程度の行動力なのか。。。」


って感じました。


しかし、

これを自分自身で認めたとき、不思議と自分の気持ちに変化が生じました。


「その程度の行動力しかもっていないんだから、今は。

 だったら、それを改善していけば、いいだけじゃん!」


って。


なにか、すごく心が軽くなった感じがし、自分の行動力を客観的に見れるようになった気がしました。


この文章に出会えたことに、感謝です。


皆さんも、皆さん自身の行動力について考えるきっかけに

この文章がなれば、いいなぁと思いました。




読者の皆さん、いつも感謝しています。


読者の皆さんに、

すべての良きことがなだれのごとく

起きますように。



いいね!(16)  |  コメント(0)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


記事

引数「関数に情報を渡そう!」
引数パート2「関数に複数の情報を渡そう」
引数パート3「おおもとの情報は勝手には変えられない&近日メルマガ発行予定のお知らせ」
で、関数に情報を渡すには引数を使うんだよということをお話してきました。


今回は、関数の返り値についてお話しますね。


たとえば、あなたが計算が苦手だったとします。

学校の授業で、先生から「1~100までの和と5051の値どっちが大きい?」と聞かれたとします。


こんなときに、そろばんをやっている友達がいたら助かりますよね(笑)。


友達に「1~100までの和を教えて!」って言えばその友達がパッって暗算して教えてくれる。

そして、その答えと、5051どっちが大きいが比較して、答えればいいですから(笑)


実は、このような仕組みが関数の返り値というのを使うことで出来てしまいます。


使い方次第では非常に便利な機能ですので、是非マスターしてくださいね。


では、具体的にお話します。


上の例

「友達に「1~100までの和を教えて!」って言えばその友達がパッって暗算して教えてくれる」を分析してみると、


この場合の友達・・・和を計算してくれる関数

1~100まで ・・・・情報(つまり、引数)

友達からの返答・・・返り値(返答)


のようになります。


つまり関数の返り値とは、友達関数君?が返答してくれる値と言えます。


まずは先に、

実際に上の例を実現する自作関数のサンプルを記載してみますね。


int  friend( int  start,  int  end  )

{

    int  ii;

    int  sum;


    sum = 0;


    for( ii = start; ii <= end; ii++ )

    {

         sum += ii;

    }


    return(  sum );

}


引数のお話のときに、出てきた関数とよく似ていますね。

では、違うところはどこでしょうか?


そう、return( sum ); の部分ですね。

(関数名は、今回のストーリと関連付けるためfriendにしています)


関数からの返答(返り値)させるには、returnの後の( )の中に返したい値をいれることでOKです。


この例の場合は、合計値を返したいので、sumを入れていますね。


そして、ここでもう一つ大事な点があります。


関数名friendの前に、intという「変数の型」が記載されている点です。


ここの変数の型は、返り値の型と一致させる必要があります

ここでは、返り値sumの変数の型はintですので、intとしています。

もし仮に、sumがdouble型ならば、double friend( int start , int end )のようになります。



では、

次にこの新しい自作関数friendをmain関数から呼んであげることにしましょう。


まずは、サンプルプログラムを書いてみます。


#include <stdio.h>


/* プロトタイプ宣言(変わりますよ~) */

int friend( int first,  int end );


int  main( void )

{

     /* friendからの返り値を受けるための変数 */

     int  answer;

 

     /*  friendからの返り値を受ける方法 */

     answer = friend( 1, 100 );


     /*  先生に対して答えましょう */

     if( answer < 5051 )

     {

          printf("maxValu is 5051¥n"); 

      }

     else if( answer > 5051 )

     {

          printf("maxValu is sum¥n"); 

      }

      else

      {

          printf("Those value is equal¥n");

       }


      /* 友達にありがとうって言いましょう(笑) */

      printf("Thank you!, friend!!¥n");


       return( 0 );

}


/* 自作関数 */

int  friend( int  start,  int  end  )

{

    int  ii;

    int  sum;


    sum = 0;


    for( ii = start; ii <= end; ii++ )

    {

         sum += ii;

    }


    return(  sum );

}


実行結果:

maxValu is 5051

Thank you!, friend!!


自作関数friendをmain関数から呼んであげて、その返り値を受ける方法は、


answer = friend( 1, 100 );


のようになります。


つまり、

main関数の中で呼ぶ自作関数は、返り値を発言していると捉えることができます。


なので、

それを answer = friend( 1, 100 )のように記載すると、自作関数からの返り値がanswerに代入されその値が自作関数の返り値になります。


今回は、関数の返り値に関して述べました。


返り値が必要かどうかを判断するには、


先の例「友達に「1~100までの和を教えて!」って言えばその友達がパッって暗算して教えてくれる。

そして、その答えと、5051どっちが大きいが比較して、答えればいい」


のイメージを掴むと分かりやすいかもしれませんよ。


是非、イメージしながら今日のサンプルプログラムを実際に書いて試して確認してくださいね。



いいね!(10)  |  コメント(0)  |  リブログ(0)

テーマ:

いつも感謝しています。Nです。


この「番外編:Nのつぶやき」では、

私がいいなぁと思ったことなどを記載しています。



今回は、技術者として、

すごく共感したとても素晴らしい動画をご紹介します。


この動画に出演されている方は、植松 努さんという方で

北海道の田舎で宇宙開発に取り組んでいらっしゃる技術者です。


私はこの動画を見るのは、初めてだったのですが、

たまたまネットサーフィンをしていて、見つけました。


この中で語られていることは、

すごく技術者として共感できるものでした。


また、私が常日頃から思っていることとも

すごく似ているなぁと思いました。


動画の中で、植松 努さんは


「”どうせ、無理”という言葉は、人の自信と可能性を奪う言葉ですよ。」

「出来ない理由を探すのでは無くて、出来る理由を探しましょうね!」

「思うは、招くですよ!」


ということを、自分の経験談、ユーモアを交えて語られています。


私はこの動画を見て、


「どうせ無理って」思っているときって、

「出来ない理由を、探している」
「出来ないことに目を向けている」


ということに気づかされました。


なので今後、


「どうせ無理」と思うような状況に出くわしたときは、


「いかん、いかん、出来ないことに目を向け、

出来ない理由を俺は、今探しちゃっている。。。


そうじゃなくて、自分が出来ることに目を向よう!」


と考えるようにしようと、凄く改めて思いました。



この動画では、

他にも色々と心に響くことを語られています。

本当に見る価値があると思います。


URL:http://youtu.be/gBumdOWWMhY


お時間があれば、見てくださいね。


読者の皆さん、いつも本当に感謝しています。


読者の皆さんに、

すべての良きことがなだれのごとく

起きますように。


いいね!(19)  |  コメント(0)  |  リブログ(0)

AD

Amebaおすすめキーワード

Ameba人気のブログ

Amebaトピックス

ランキング

  • 総合
  • 新登場
  • 急上昇
  • トレンド

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。