小林泰三「人獣細工」読了

小林泰三「人獣細工」を読了した。
中編3本。
どれもオチがきっちりありそれなりに面白かった。

やっぱり小林泰三面白いよ。
例によってグロありホラー小説なので万人にはお勧めできないが、そういうの平気な人には超オススメ。

ホラー小説が徐々に本棚に増えているが子どもにはあまり見せたくなかったり・・・。
人格がきっちり形成されるまではどっかに封印しとこう。
ジャジャガッチ | その他 | 22:15 | comments(0) | trackbacks(0) |

FizzBuzz問題(7)-テンプレート-

妻のナビはひどい。
右を差しながら「左!」と言うこともあれば、後部座席から「こっち!」と言うこともある。
最近は当てにせずあらかじめストリートビューで場所を確認してから出発することにしている。

ちなみに妻のナビをするときは「右折、右、right!」あるいは「左折、左、left!」などと言わないと言ってる方と逆に曲がることがあるので注意。

//////////////////
テンプレートの練習にFIzzBuzzをテンプレートで作ってみた。

#include <iostream>

template <class data_t> class FizzBuzz
{
private:
    data_t value;
    int N;
public:
    FizzBuzz(data_t N)
    {
        this->value = 1;
        this->N = N;
    }
    bool step()
    {
        if(value%3==0) std::cout << "Fizz";
        if(value%5==0) std::cout << "Buzz";
        if(value%3!=0 && value%5!=0) std::cout << value;
        std::cout << std::endl;
        value++;
        return (value<=N ? true : false) ;
    }
};

int main()
{
    FizzBuzz<unsigned short> fz(100);
    while(fz.step());
    return 0;
}
ジャジャガッチ | C/C++ | 21:33 | comments(0) | trackbacks(0) |

テンプレートクラスをライブラリ化して使う場合の注意(C++)

家は着々と出来上がっております。
土日や平日の昼に時々見に行っていたのだが、作業者に会えたのは結局1回だけ。
あまりにも誰もいないので深夜に妖精が作業してる説浮上。

一応、頻繁に作業報告みたいなのは電話きました。
これは妖精ではなくハウスメーカーの現場監督から。

先日ついに据え付けも行われ、あっという間に家が出来上がりました。
とは言っても中身はこれから。
でも外観はもう普通の家に見える。

中身の方も妖精が作るんだろうか。
一応現場監督は今週から大工が入ると言っていたが、大工という名の妖精という可能性もある。
妖精を捕まえて売ればもう一軒くらい家が建てられそうなので時々見に行くことにする。

/////////////////////////

テンプレートクラスをライブラリ化したい場合注意が必要。
例えばa.cppにテンプレートクラスが実装されている場合
実装の後に
template class Array<int>;
template class Array<float>;
のように書いておく必要があるらしい。
美しくないが仕方がないようだ。
ジャジャガッチ | C/C++ | 21:21 | comments(0) | trackbacks(0) |

テンプレートクラスの継承(C++)

この前の土曜日、親子三人で保育園の親子広場(?)に参加してきた。
講師の先生に教わりながら子供と簡単な体操をしてきた。
世のお父様方は忙しいのか男性の参加者は少なかった。

なかなか楽しかった。
そこで講師の先生に子供にメディア漬けの生活をさせるのはやめましょう、と言われた。
うちは子供にテレビを観せてはいないので大丈夫だな、と思っていたら、テレビがついているだけでもよくないとのこと。
音とかがよくないらしい。
うちは元々それほどテレビを観る家ではないのだが、最近は賑やかしにテレビがついていることが多い。
反省して子供が起きているときはテレビ止めました。
元々大して観ていないし問題無し。

子供の頃は両親が何でつまらない番組(ニュースとかね)ばかり観ているのか不思議でならなかったのだが、気がつけば自分もそういう番組ばかり観るようになっていた。
そういうものなのね。大人になると面白い番組ってのは変わってくるんだね。

///////////////////////////////////
テンプレートクラスの継承は次のような感じにすればよい。
基底クラスのメンバを参照するとき注意。

template <class data_t> class A
{
public:
    data_t v;
    data_t v2;
    A(data_t v)
    {
        this->v = v;
    }
};

template <class data_t> class B : public A<data_t>
{
public:
    B(data_t v) : A<data_t>(v)
    {
        A<data_t>::v2 = v;//基底クラスのメンバを参照するときはこうする
    }
};
ジャジャガッチ | C/C++ | 21:11 | comments(0) | trackbacks(0) |

テンプレート(C++)って便利かも

今日息子がつかまり立ちをした、と妻からメールがきた。
最近時々四つん這いの様子がおかしいので近いとは思っていた。
四つん這いは膝と手のひらをつくのが普通だと思うが最近は膝をつかずに四つん這いになっていることがあり、あれ?これ立つんじゃね?と思っていた。
まだ8ヶ月にもなっていないので中々早い。
巷ではあまり早く歩くようになるとよくないと言われているようなので少し心配。
でもこういう赤ちゃん関係の話は本当なのかよくわからない話も多いのでさほど気にしてはいない。
医療関係者でも人によって全く違うことを言っていて、初めのころは少し混乱させられた(例えば赤ちゃんは泣くことが仕事だと言う人もいれば、泣くことは仕事ではないという人もいる)。
科学的根拠があまりなく、経験則でものを言っている人も多いような気がする。
色々と意見を聞いて自分が納得できることを受け入れればよいと思う。

//////////////////////////
C++のお話。
教科書とかを見るとテンプレートは型に依存しない汎用的な処理を記述できるとか書いてある。
面白いけれど僕の仕事には役に立ちそうにないな、と長いこと放置していた。
でも最近になって、自作した配列クラスが要素の型が違うだけ(intとかfloatとか)で要素に対する処理はほぼ同じであることに気がついた。
これまで次のような感じになっていた。

class Array_int
{
private:
    int a[M][N];
public:
    void Method(){...}
};

class Array_float
{
private:
    float a[M][N];
public:
    void Method(){...}
};

いや、実は気がついてはいて、どうにかできないかと考えてはいたのだが
よい案が浮かばず、他にすることもあるので放置していたのだった。
型を引数で指定できればいいのになあ、とか考えてみたりした。
文字列で"int"とか"float"とか与える方法も考えたが
どう考えても処理が煩雑になるしきれいに書けそうにない。

ふと最近テンプレートが使えるんじゃないか、と思い試してみたらうまくいった。
テンプレートってかなり汎用的な処理に適用するイメージがあったので、intとfloat程度しか対象として想定していない自分のクラスにテンプレートを適用するという発想がなかった。
このクラスを紹介したいのだが結構複雑なクラスなのでもう少し単純な例を紹介する。

みんな大好きオイラー法でdf/dx=fをf(0)=1の初期条件の元で解くプログラムを例にとる。
したいことは値の精度をfloatとdoubleで切り替えることだ。

#include <iostream>

template <class data_t> class Euler
{
private:
    data_t x;
    data_t dx;
    data_t value;
public:
    Euler(data_t dx);
    void step();
};

template <class data_t> Euler<data_t>::Euler(data_t dx)
{
    x = 0;
    value = 1.0;
    this->dx = dx;
}

template <class data_t> void Euler<data_t>::step()
{
    std::cout << x << " " << value << std::endl;
    value += value * dx;
    x += dx;
}

int main()
{
    Euler<float> euler(0.01);
    for(int n=0;n<100;n++)
    {
        euler.step();
    }
    return 0;
}

上述のプログラムは単精度板。Euler<double>とすれば倍精度で計算できる。
テンプレートの面白いところは型に依存せず同様の処理を行えることだ。
例えば次のようなdoubleを拡張した自作クラスがあったとする。

class MyDouble
{
private:
    double value;
public:
    MyDouble(){}
    MyDouble(double value)
    {
        this->value = value;
    }
    double GetVal() const
    {
        return this->value;
    }
    MyDouble& operator=(const double &value)
    {
        this->value = value;
        return *this;
    }
    MyDouble operator+=(const MyDouble &obj)
    {
        this->value += obj.value;
        return *this;
    }
    MyDouble operator*(const MyDouble &obj)
    {
        MyDouble md;
        md.value = this->value * obj.value;
        return md;
    }
    friend std::ostream &operator<<(std::ostream &os , const MyDouble &obj)
    {
        os << obj.value;
        return os;
    }
};

こいつに対してオイラー法を適用することも可能。

int main()
{
    MyDouble md(0.01);
    Euler<MyDouble> euler(md);
    for(int n=0;n<100;n++)
    {
        euler.step();
    }
    return 0;
}

必要な演算子さえオーバーロードされていればよいのだ。
こういう精度の切り替えに使えるとなるといろんなところで使えそうだ。
例えばマイコンからPCでデータを受信する際、charで送られてくるかshortで
送られてくるかによって別個に関数やクラスを作る必要がなくなる。
テンプレート、いいやん。
ジャジャガッチ | C/C++ | 21:11 | comments(0) | trackbacks(0) |

FizzBuzz問題(6)

ここのところ暗くなるのが早くてなかなか散歩に行けない。
悲しい。
しかも寒い。
こまりまんぼ。

土日は散歩行けるかなあ。

////////////
FizzBuzz。条件文見直し。

#include <stdio.h>

int main()
{
    int n3 = 3 , n5 = 5;
    int i = 1;

BEGIN:        bool flag = false;
    
        if(i/n3 && printf("Fizz") && (n3+=3) && (flag=!flag));
        if(i/n5 && printf("Buzz") && (n5+=5) && !flag && (flag=!flag));
        if(!flag && printf("%d",i));
        printf("¥n");
        i++;
        if(i<=100) goto BEGIN;
    
    return 0;
}
ジャジャガッチ | C/C++ | 21:53 | comments(0) | trackbacks(0) |

AIZU ONLINE JUDGE

最近僕が気に入っている息子の行動:ヴヴヴーッ!と唾を飛ばす
かわいい。
今日はめちゃくちゃこしょばしてやったぜ!

////////////////////////
昨日からAIZU ONLINE JUDGEを始めた。
これは会津大学が提供しているプログラミングのオンライン採点システムだ。
計算にかかる時間なども算出してくれて規定時間以内に計算が終わらないとだめみたい。
実際に競技プログラミングの大会で出題された問題が出されているようだ。
まだ3問しか解いていないがなかなか面白そうだ。
ちょくちょく解いていく予定。
ジャジャガッチ | C/C++ | 22:24 | comments(0) | trackbacks(0) |

FizzBuzz問題(5)

妻に軍師官兵衛で次回秀吉が死ぬことを告げられた。
ネタバレだと主張したが不服の様だ(にゃにゃにゃっち2014.11.5の記事)。
官兵衛が如水になると告げられたときは怒らなかったのでセーフだと思ったらしい。
それならタイトルの"軍師"官兵衛もネタバレレベルじゃん!とのことだが、タイトルは仕方ないだろ。
それに官兵衛が軍師なのは放送前から知っている。
軍師官兵衛放送開始前に大阪城で官兵衛の鎧を身に付けて記念撮影をしたのは官兵衛が名軍師だと知っていたからです。
官兵衛が如水になるってのも官兵衛がしばしば如水と呼ばれているのを知っていたのでぎりぎりセーフです。
でもたまたま知っていただけなので本来はアウトです。
とにかく放送内容については一切話さないでください。
よろしくお願いいたします。

///////////////////////////////////////////////////
FizzBuzz。ifに色々詰め込んでみる
#include <stdio.h>

int main()
{
    int n3 = 1 , n5 = 1;
    int i = 1;

BEGIN:        bool flag = false;
    
        if(i/3==n3 && printf("Fizz") && n3++ && (flag=!flag));
        if(i/5==n5 && printf("Buzz") && n5++ && !flag && (flag=!flag));
        if(!flag && printf("%d",i));
        printf("¥n");
        i++;
        if(i<=100) goto BEGIN;
    
    return 0;
}

2番目のifに注目。
ここは!flag && (flag=!flag)をflag=trueに置き換えてもよいのだが、少しトリッキーな書き方にしてみた。
flag=trueと書くのを避け、!で論理反転を行うことにした。
ただ、3の倍数かつ5の倍数の時最初のifでflag=trueとなるのでそのまま2番目のifでも反転するとflag=falseとなってしまう。
これを避けるため、!flagを入れ、flag=trueのときは!flagで条件判断を打ち切るようにしてある。
ジャジャガッチ | C/C++ | 23:38 | comments(0) | trackbacks(0) |

FizzBuzz問題(4)

軽い風邪をひいた。
ひさしぶりだ。季節の変わり目にやられたか。

学生時代はよくひいていたのだが社会人になってからはそれほど風邪をひかなくなった。
規則正しい生活のおかげか。

息子はマスクが珍しいのか剥ぎ取ろうとしてくる。
うつさないように注意せねば。

妻は僕が体調を崩すと職人魂を発揮して聴診したがる。
聴診器がひんやりして嫌なのだが断れないのでいつもされるがままである。
まあでも色々と心配してくれるのはありがたい。ありがとう。

//////////////////////////////////
FizzBuzz問題。
繰り返しにfor文を使わないパターン

#include <stdio.h>

int main()
{
    int n3 = 1 , n5 = 1;
    int i = 1;
   
BEGIN:        bool flag = false;
        if(i/3 == n3)
        {
            printf("Fizz");
            n3++;
            flag = true;
        }
        if(i/5==n5)
        {
            printf("Buzz");
            n5++;
            flag = true;
        }
        if(flag==false)
        {
            printf("%d" , i);
        }
        printf("¥n");
        i++;
        if(i<=100) goto BEGIN;
    
    return 0;
}
ジャジャガッチ | C/C++ | 21:01 | comments(0) | trackbacks(0) |
1/1PAGES | |

11
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH