2016年1月24日日曜日

C言語:ポインタ

問題1.
変数aの内容と変数bの内容を入れかえるプログラムを、ポインタを用いて作成してください。

問題2.
1から100までの和を求めるプログラムを、ポインタを用いて作成してください。

問題3.
キーボードから10個の整数を配列に入れ、その中の最大値を求めるプログラムを
ポインタを用いて作成してください。

問題4.
下記のソーティングプログラムを、ポインタを用いたものに書き換えてください。

[プログラム説明]
適当な整数を10個キーボードから入力し、そのソート前とソート後の結果を表示するプログラム。

[プログラム]
int main() {
    int a[10], i, j, w;
    printf("整数を10個入力しなさい\n");
    for(i=0; i<=9; i++)
        scanf("%d", &a[i]);
    printf("ソート前… ");
    for(i=0; i<=9; i++)
        printf("%d ", a[i]);
    for(i=0; i<=9; i++)
        for(j=0; j<=9-1; j++)
            if(a[j] > a[j+1]){
                w = a[j];
                a[j] = a[j+1];
                a[j+1] = w;
            }
    printf("\nソート後… \n");
    for(i=0; i<=9; i++)
        printf("%d ", a[i]);
}
問題5.
下記のプログラムにおいて、データにない頭文字が入力されてきたとき
"該当するデータはありません"
と出力されるように、修正を加えてください。

[プログラム説明]
適当に5人の名前を選び、それらの名前をローマ字でポインタ型の配列に初期設定する。
キーボードから英大文字1字を入力し、その英字を名前の先頭にもつ人だけを出力するプログラム。

[プログラム]
int main() {
    char head, *name[5]={"Shibasaki", "Usami", "Muto", "Miyaichi", "Kushibiki"};
    int i;
    printf("英大文字を1字入力しなさい\n");
    scanf("%c", &head);
    printf("%cを先頭に持つ名前は…", head);
    for(i=0; i<=4; i++)
        if(*name[i] == head)
            printf("%s ", name[i]);
    printf("\n");
}

問題1のプログラム
int main(void){
  int *pa,*pb,*x;
  int a = 1,b = 2;
  printf("変数:a=%d  b=%d\n", a,b);
  pa = &a;
  pb = &b;
  printf("入れ替え前:ポインタpa=%d  ポインタpb=%d\n", *pa,*pb);
  x  = pa;
  pa = pb;
  pb = x;
  printf("入れ替え後:ポインタpa=%d  ポインタpb=%d\n", *pa,*pb);
  return 0;
}

問題2のプログラム
int main(void){
  int a = 1,x = a;
  int *pa;
  for (a=2;a<=100;a++){
     x = x + a;
     pa = &x;
  }
  printf("1から100までの和は%d\n",*pa);
}

問題3のプログラム
int main(void){
  int a[10],i,max;
  int *p,*s;
  for(i=0;i<10 i="" p="">    printf("整数を10個入力してください:");
    scanf("%d",&a[i]);
  }
  p = a;
  for(i=1,max=*p;i<10 i="" p="">    if(max<*(p+i)){
      max = *(p+i);}
  }
 printf("最大値は%d",max);
}

問題4のプログラム
int main() {
    int a[10], i, j, w;
    int *p;
    printf("整数を10個入力しなさい\n");
    for(i=0; i<=9; i++)
        scanf("%d", &a[i]);
    //ポインタに配列を代入
    p = a;
    printf("ソート前… ");
    for(i=0; i<=9; i++)
        printf("%d ", *(p+i));
    for(i=0; i<=9; i++)
        for(j=0; j<=9-1; j++)
            if(*(p+j) > *(p+j+1)){
                w = *(p+j);
                *(p+j) = *(p+j+1);
                *(p+j+1) = w;
            }
    printf("\nソート後… ");
    for(i=0; i<=9; i++)
        printf("%d ", *(p+i));
}

問題5のプログラム(これはもっと良い方法があると思うな...)
int main() {
    char head, *name[5]={"Shibasaki", "Usami", "Muto", "Miyaichi", "Kushibiki"};
    int i,j=0;
    printf("英大文字を1字入力しなさい\n");
    scanf("%c", &head);
    printf("%cを先頭に持つ名前・・・", head);
    for(i=0; i<=4; i++){
        if(*name[i] == head){
            printf(" %s", name[i]);
            j++;
        }
      }
        if(j==0)printf("該当するデータはありません");
    printf("\n");
}

2016年1月16日土曜日

Mosaik - Rubik

The man is absorbed in thought on the subject of flow.HNY2016;-)

2016年の12分の1の半分ほどが過ぎてしまったけど、
あらためまして、あけましておめでとうございます。

2015年、27歳になった年は瞬く間に過ぎました。

甥っ子がもうすぐ2歳になる。その甥っ子にとっての一年は人生のほとんどだったわけで、
27年も生きていると、自分の人生を構成する時間がだんだんと薄まっていくのは同然のことのようにも思える。
かと言って、この一年は無下にはしないし、すくすく育つ甥っ子とも仲良くやっていきたい。

おかげさまで、季節の変わり目に風邪を引きつつも、おおむね健康な一年を過ごせたと思う。

去年の年始に達磨を買った。ちゃんと片方の黒目だけ塗って、
目標を定めていたんだけど、完全な形ではないにしても達成することが出来た。
今年はもうひと回り大きな達磨を買う予定。

2015年2月に掲げたやりたいことは↓だった。

  1. 自分の持っていたいビジョンに沿って、仕事・ライフスタイルを再考する。行動する。
  2. 知人のサービスを手伝う。ノウハウを学習する。個人としての能力を高める。
  3. 個人の能力で何かしら成果物を世に出し、お金を稼ぐ。
5点満点で上から、
3.5点
4点
3.5点
という印象。振り返るとなかなかよくやったんじゃないかとも思えるし、
まだまだ出来ることがあったようにも思える。
世話になってる人に迷惑掛けてしまったこともあって、もっともっと自分自身の能力を高めていきたい。

あと、2015年の特に後半は、運動にも意識して時間を割くことが出来た。運動は素晴らしい。
気持ちもポジティブになるし、肉体を稼働させると心体ともに好循環。

かくして、2012年あたりから精進路線として、
楽しいと思える努力をしようとか、個人の能力を高めて所属組織以外でも役に立つ能力を研鑽しようとか、一応はブレない方針で月日を過ごしている。

2016年の目標としては、

  1. ゾーン、フローに入る時間を増加させる
  2. やらないことを決める
  3. 頼る、アウトソースする
と、考えてる。
おそらく今年は自分史上もっとも時間的制約を受けながら、
自分が達成したいスキルや勉学などいくつか重なる年になると思う。


  • ゾーン、フローに入る時間を増加させる
普段の仕事とか資格をとるとかぐうたら過ごす時間とか、自分の時間を切り売りして生活してるわけだけど、
時間の質を高めて、短い時間でもっと成果をあげることができたら、余った時間で休んだり他に回したりすることができる。
特にフローの状態に入れれば、目の前のやるべきことに自我を意識せず没入できる。

(フローについてはwikiから)
フローとは、人間がそのときしていることに、完全に浸り、精力的に集中している感覚に特徴づけられ、完全にのめり込んでいて、その過程が活発さにおいて成功しているような活動における、精神的な状態をいう。
チクセントミハイが見たところによれば、明確に列挙することができるフロー体験の構成要素が存在する。彼は8つ挙げている。
  1. 明確な目的(予想と法則が認識できる)
  2. 専念と集中、注意力の限定された分野への高度な集中。(活動に従事する人が、それに深く集中し探求する機会を持つ)
  3. 自己に対する意識の感覚の低下、活動と意識の融合。
  4. 時間感覚のゆがみ - 時間への我々の主体的な経験の変更
  5. 直接的で即座な反応(活動の過程における成功と失敗が明確で、行動が必要に応じて調節される)
  6. 能力の水準と難易度とのバランス(活動が易しすぎず、難しすぎない)
  7. 状況や活動を自分で制御している感覚。
  8. 活動に本質的な価値がある、だから活動が苦にならない。
フローを経験するためにこれら要素のすべてが必要というわけではない。フローに入るためのもう一つの重要な条件に、他者に妨害されない環境がある。電話がかかってきたり、だれかが部屋に入ってきたりといったいかなる妨害であっても、おそらくフロー経験から引きずり出され、それに対応するモードに移行してしまうだろう。
誰もがフローを経験したことがあると思う。
僕の場合だと学生時代のほうがより深く状態に入れていた記憶があって、
歳を重ねてから、背景事情とか邪念とか諸々の事情とか取り組むべき事柄に対して真っ向から集中できないことが多いように思う。
でも、昨今だと習慣がついてきたのか、このフローの精神状態により多くの時間入っていけるような気がしている。もっとこの時間を増やしたい。

  • やらないことを決める
もともとエンジニアとしてスタートしたのが遅かったこともあって、何かを学ぶことに対して抵抗がない。というか3年間出遅れた分ひとより多く吸収しなければっていう焦りの気持ちも強かった。
なんでも好き嫌いなく食べなければならないという強迫観念に囚われていた。

でも、すべからく中途半端に放り出してしまうこともあるわけで、今年は「自分はこれをやらない」と明確に定めることを意識したい。
特にIT界隈の分野だと、学習すべき幅と深さが途方も無い。今の段階では手を出すべきことでなければ、それはやらない。

  • 頼る、アウトソースする
ひとりで完結したがり。ひとりで閉じることの出来る世界をつくっていくのが好きだ。
自分の趣味や興味の範囲で完結させることは良いことだと思うけど、
仕事のやりがいに対しても同じような姿勢を求めようとすると、
どうしても、ボロがでたり、効率的でなかったり、なにかとうまくまわらない。

2つ目にも関連するけど、自分がやらないと決めたことや、誰かにお願いしたほうが最終的なアウトプットがより良いものになるのなら、その選択肢をとろう。


以上、本年もよろしくです。
フローに関しては、ミハイ・チクセントミハイさんのTEDのプレゼンテーションを貼っておきます。
ぜひ楽しんで下さい。
(´-`).。oO(このミハイ・チクセントミハイって名前は田中太郎田中的な入れ子なの...?)