過去ログ 7
過去ログは下にいくほど新しい記事となっております。
※注意:このサイトにあるプログラムのソースコードや、その他の情報はすべて無保証です。やばいと思ったら実行しないでください。コンパイル、実行などによって生じた損害に対する責任は負いませんので、ご了承ください。
スクリーンショットの整理
28-5-2009
を、していたのだけど(昨日の記事参照)、おそらく相手がEasyレベルのものと思われる途中までのスクリーンショットが見つかった。世界の先進技術ランキングが自分を除いて全員横並びというおもしろいことに・・・。普通にやっていて横並びはさすがにないだろう。どれだけ弱いんだ!
今日のSDL C言語
ちょっと足踏み
関数ポインタに関する補足です。
関数ポインタとは、関数に対するポインタで、関数そのものを変数として扱えてしまう、なんとも不思議なものです。
あまり好き好んで使うような人はいないかもしれませんが、使えると色々プログラミングの幅が広がり、便利になったりします。
ポインタ60例を参考に、ちょっと見てみましょう。
関数のポインタはfunc54からfunc60までです。
void func54_sub(){ printf("ABC\n"); } void func54(){ void (*func)(); printf("Function : %s\n",__func__); func = func54_sub; func(); }
func54のprintfはただの関数名出力なので無視します。(以下、同じ)
関数ポインタをセットする変数funcを定義 → funcに関数func54_subをセット → funcを実行というまあ、単純な流れになっています。
最後でfuncを実行すると、当然funcにはfunc54_subがセットされているので、func54_subが実行されます。
まあ、こんな使い方をするぐらいならそのままfunc54_subを実行した方がいいでしょうが。
func55は引数が関数に引数がついただけなので、説明は割愛します。
int func56_sub1(int a){ return a*a; } int func56_sub2(int a){ return a*7; } void func56(){ int (*func[])(int) = {func56_sub1, func56_sub2}; printf("Function : %s\n",__func__); printf("%d, %d\n", func[0](3), func[1](3)); }
func56は配列を使っています。こうすると番号で関数が管理できるので、ちょっと意義のあるものになったといえます。
ポインタ60例のサンプルプログラムのメイン関数もこの手法をおもいっきり使っています。
int main(){ char c[10]; unsigned int a; int cont = 1; pchar p = &c[0]; void (*func[])() = { func1, func2, func3, func4, func5, func6, func7, func8, func9, func10, func11, func12, func13, func14, func15, func16, func17, func18, func19, func20, func21, func22, func23, func24, func25, func26, func27, func28, func29, func30, func31, func32, func33, func34, func35, func36, func37, func38, func39, func40, func41, func42, func43, func44, func45, func46, func47, func48, func49, func50, func51, func52, func53, func54, func55, func56, func57, func58, func59, func60 }; while(cont){ fgets(c, sizeof(c), stdin); a = (unsigned int)atoi(p); a--; if(a < sizeof(func)/sizeof(func[0])){ func[a](); printf("--------\n\n"); } else { cont = 0; } } return 0; }
func57はちょっと使い方を変えています。
void func57_subsub(int a){ printf("a: %d\n", a); } void func57_sub(void (*func)(), int a){ func(a * 5); } void func57(){ printf("Function : %s\n",__func__); func57_sub(func57_subsub, 8); }
関数を引数にセットしています。引数の型が関数ポインタなので、OKです。セットした関数は呼び出された関数内で実行、となっています。
こういう使い方は関数ポインタならではですね。
なお、func58〜60は無駄に複雑にしただけなので省略します。
まあ、難しく考えず、とりあえず、「関数を引数にセットすることがある」ということを覚えておいてください。
※メール、リンクは適当に。
五月最終日です
31-5-2009
ちょっと間があいたか。
重音テトに百人一首を21首ほどよんでもらいました。ご自由にお使いください(数が中途半端なので使い道がないですが・・・)。
音の高低は昔聞いた学習テープのうろ覚えで。間違っていたらごめん。
番号 | 作者 | mp3 | ogg |
---|---|---|---|
2 | 持統天皇 | ● | ● |
9 | 小野小町 | ● | ● |
19 | 伊勢 | ● | ● |
38 | 右近 | ● | ● |
53 | 右大将道綱母 | ● | ● |
54 | 儀同三司母 | ● | ● |
56 | 和泉式部 | ● | ● |
57 | 紫式部 | ● | ● |
58 | 大弐三位 | ● | ● |
59 | 赤染衛門 | ● | ● |
60 | 小式部内侍 | ● | ● |
61 | 伊勢大輔 | ● | ● |
62 | 清少納言 | ● | ● |
65 | 相模 | ● | ● |
67 | 周防内侍 | ● | ● |
72 | 祐子内親王家紀伊 | ● | ● |
80 | 待賢門院堀河 | ● | ● |
88 | 皇嘉門院別当 | ● | ● |
89 | 式子内親王 | ● | ● |
90 | 殷富門院大輔 | ● | ● |
92 | 二条院讃岐 | ● | ● |
UTAU使いとしてはまだまだですね。ちょっとなめらかさに欠ける。
でもせっかくなので、そのうちに100首全部つくってupしたいですね。
絵も描きました
これが今の私にとって精一杯。
絵も描いたので、口パクプログラムを作りたいな。
追加)
そういえばFedoraまた延期になったのね。
※メール、リンクは適当に。
漢字変換ネタ
1-6-2009
なぜか変換できる言葉
デフォルト状態で一発でこんな変換ができました(辞書登録したわけではないです)。
- ふぇどーら → Fedora
- うぶんとぅ → Ubuntu
- すずみやはるひのゆううつ → 涼宮ハルヒの憂鬱
- らきすた → らき☆すた
- にこどう → ニコ動
はじめからオタク辞書が登録されているのでしょうか?おもしろいです。
昨日の百人一首の圧縮ファイルを用意しました。
(mp3 : 3MBぐらい、ogg : それぞれ2MBぐらい)
mp3 / ogg (1) / ogg (2) / ogg (3)
圧縮してもサイズはほとんど変わっていません。ogg重いな。
※メール、リンクは適当に。
Copyright (c) 2008, 2009 greencap