魔王の憂鬱 -19ページ目

魔王の憂鬱

情報通信っぽいことを、分かりやすく述べているつもりです。

切れていたビールを買いにお店へ行ったところ、

以前から欲しかったお酒を見つけることができました。


「ねんがんの"上善如水"をてにいれたぞ!」


これは、飲み屋でしか飲んだことがなかったのですが、

名前の通り、水のように飲めてしまうほど

口当たりのよい清酒なのです。


まだ冷え切っていなかったものの、とりあえず一杯・・

おぉ、うまし!

2~3杯目まで行くと、ちょっとキツくなってきますな。


来週からの業務に支障がでないよう、この辺りでヤメておこう。



さて、本日は選挙でした。

どこがいいとか悪いだとか、どこに入れたとか、そういう事は置いといて。

選挙に使われている技術の話でもしましょう。


(今まさに、選挙速報の番組が始まりまして、

 今更書くなという内容かもしれませんが、すみませんね。)



不正防止という名目らしいですが、

未だに開票作業は人の手によって行われています。


多くの票数を確認するので、

少しでもムダになる時間は排除したいのですが、

その要素の一つが、「投票用紙を開く作業」らしいです。


今回の選挙に用いていた投票用紙。

触ってみると、少しスベスベしていませんでしたか?


これ、「折ってもすぐ開く」紙なのですよ。

材料は「ポリオレフィン」という合成樹脂。


合成樹脂なのですが、ちゃんと鉛筆書きできるよう、

表面には加工がしてあるみたいですね。


投票の際、四つ折りにしてみたのですが、

手を離すと元通りになって、思わずニヤっとしてしまいました。



参考文献にURLを載せますが、

これだけで開票作業が19分(全体のおよそ1/15)短縮されたとか・・。


確認してなかった!という方は、

次の選挙のときにでも、確認してみてください。


「だから、もっと早く教えろよ!」という方、どうもすみませんね。



いやぁ選挙速報、面白くなってきてますなぁ・・



参考文献:http://zatupedia.com/wiki/?title=%E9%81%B8%E6%8C%99%E3%81%AE%E6%8A%95%E7%A5%A8%E7%94%A8%E7%B4%99%E3%81%AF%E6%8A%95%E7%A5%A8%E7%AE%B1%E3%81%AE%E4%B8%AD%E3%81%A7%E8%87%AA%E7%84%B6%E3%81%AB%E9%96%8B%E3%81%8F

レンタルサーバーを借りまして、

ただいま、自作HPを作成中です。


覚えたてのHTMLを使ってみるも、悪戦苦闘しております。

スタイルシートについても調べ、作成してみたのですが・・

やっぱりよく分からないので、HTMLに直に書き込む始末です;


入力したデータを保持したり、掲示板を作成するのは、

HTMLやjavascriptではできないのかな?

検索すると、perlという単語が出てきます。


perlは大学時代に聞いた事があります。

ある先輩が推していました、プログラム言語の一つでしたね。確か。

まぁ、自作HPについては、気長にチマチマやっていくつもりです。



今日は、プログラムについての話です。

プログラムを勉強中の方に向けた話となっております。


プログラムによって記述は違うと思いますが、

if文とは、以下の感じの内容です。


if ( 条件 ) {

    処理;

}


↑<if文というのは>

( )の条件の内容が真(true:正しい)ならば、{ } の処理を行います。

( )の条件の内容が偽(false:正しくない)ならば、{ }はとばします。


記述例を少し挙げます。


例1)

int num = 1;

if ( num >= 0 ) {

    return num;

} else if ( num < 0 )

    return -num;

}


↑<絶対値を返す>

numが正数ならば、そのまま返し、

numが負数ならば、マイナス(-1)をかけて返します。


例2)

int flag = 2;

if ( flag == 1 ) {

    処理1;

} else if ( flag == 2 ) {

    処理2;

} else {

    return error;

}


↑<フラグによる条件分岐>

flagが1ならば、処理1を行い、

flagが2ならば、処理2を行います。

それ以外ならば、エラーを返します。



ここからが本題です。

例1に関しては、以下の記述でも書くことができます


例1’)

if ( num ) {

    return num;

} else {

    return -num;

}


処理内容は同じです。例2に関してですと、、


例2’)

if ( flag != 1 && flag != 2 ) {

    return error;

}

if ( flag == 1 ) {

    処理1;

} else if ( flag == 2 ) {

    処理2;

}


こうしても、同じ処理にはなります。


では質問。

例1と例1’の違いは何でしょうか?

例2と例2’の違いは何でしょうか?


これだけで来週まで引っ張るのも申し訳ないので、

話を続けます。



例1)               例1’)

if ( num >= 0 ) {        if ( num ) {

    return num;           return num;

} else if ( num < 0 ) {      } else {

    return -num;          return -num;

}                   }


敢えて述べていませんでしたが、例1’の( )条件について、

プログラムを知っている人ならば、内容を理解することはできます。

では、numの型は分かりますか?

return -num; だから予想できますかね。


では、例1を見てみましょう。

numが数値型なのが分かりますよね。

else if の( )条件は、書かなくても例1’のように処理はするんですよ。

でも、敢えて書くことによって、処理が分かりやすくなっているように思いませんか?



では、例2にいきます。


例2)               例2’)

if ( flag == 1 ) {         if ( flag != 1 && flag != 2 ) {

    処理1;               return error;

} else if ( flag == 2 ) {     }

    処理2;           if ( flag == 1 ) {

} else {                  処理1;

    return error;       } else if ( flag == 2 ) {

}                      処理2;

                   }


ここで注目なのが、flag が 1 でも 2 でもないとき、

エラーとして、処理を終えているんですよね。

例2では、単純に flag の内容での条件分岐。

例2’では、まずエラー処理をして、

それ以降では、flag は 1 か 2 のどちらかであるという前提での

処理となっています。



ただのif文、されどif文。

自分で記述し、自分だけが使うのであれば、

どの記述でもいいでしょう。


ですが、未来の自分がプログラムを振り返ったとき、

どうなっていると内容が分かりやすいかな?と、考えてみてください。

それを意識するだけで、コメント文が書けるようになるかと思います。


プログラムを丁寧に書くことはいいことですが、

記述が多くなれば、その分だけ処理も時間がかかります。

このような関係を「トレードオフ」といいますが、

どちらも完全に満足させることは非常に難しいです。


例1も例2も、どちらがいいかなんて、

場合によってマチマチなんですよ。



その時々によって、どのように書けばよいのか、

プログラムの難しいところであり、面白いところでもありますね。


あ、もちろん、規約が第一優先ですよ。

今週は予告通り、

「なかったら自分でつくる!」の話です。

(「つくる」はひらがなにしました。)



「もの」には、大きな区分ですが、

「形のあるもの」「形のないもの」に分けられます。


前者は、本棚や犬小屋など、簡単に思い浮かべることができるかと思います。

これは、『本を置きたい』や『ペットの家が欲しい』などの直接的な要求を満たします。


よく分からないのが、後者ですよね。

例えば・・このブログ。

これは、『手軽にブログを作りたい』という、作る側の要求と、

『ブログを見たい』・・で、いいのかな?見る側の要求を満たします。


もう一つ、電卓を例に挙げます。

電卓自体には形がありますが、

「ケタ数」や「メモリー」などの機能に関しては、後者にあたるかと。



私の考えですが、後者の大きな特徴は、

「使用者の労力と時間」を短縮させる事ができることではないかと思います。


「ブログ作成ツール」があれば、知識がなくてもブログが手軽に作れ、

「電卓」があれば、手間と時間のかかる計算が瞬時に行われます。


「ゲーム」は例外ですなぁ・・;

あれは、ただただ時間と労力をかけるものですね(つくる側も使う側も)。


と、とにかく!

「使用者の時間と労力」を減らすために、

プログラマーなどは時間と労力をかけて作成している訳ですね。



余談ですが、

大学時代に「マージャンの得点計算プログラム」を作成していました。


マージャンって、ルールにもよりますが、

開始時の点数と、終了時の点数計算のボーダーが異なるんですね。

それによって1位の人が有利になるのですが・・


その計算が面倒!

そうそうないのですが、同じ点数の人が存在していた場合の

計算パターンが複雑だったんですね。


当時はまだ知識に乏しかったので、

このパターンを全通り記述していました;



あと、ゲーム用にですが、

敵の残りHP(HP:体力のこと。0になると倒れることを示す数値)計算用に、

数値を打ち込んでいくと、残りHPが表示されるプログラムを作ったのですが、


こちらに対しては、

初めから電卓を使えばよかったなぁと思いました。




あれ?余談の方が

タイトルに沿った内容のような気がする・・;