プログラミングの基本 〜アルゴリズムの具体例:時刻の差分〜
プログラミングが学校で必修科目になりました。今後は世界で拡大するであろう「情報化社会」の中で、日本が存在感を発揮できることを期待する。そのための取り組みです。
プログラミングはどんな問題を扱うかで、使うべき言語が異なります。一方で、言語が異なれど必要な知識として共通する部分もあります。それは「アルゴリズム」および「データ構造」でした。
それぞれの基本的な話はこちらで紹介しました。
今回は「アルゴリズム」のイメージを具体的に膨らませるために、時刻の差分を求めるアルゴリズムについて紹介します。
時刻の差分を求める
どんなに複雑なアルゴリズムでも、基本単位のアルゴリズムの組み合わせであることには変わりありません。
これから紹介する小さくシンプルなアルゴリズムを学習することにより、アルゴリズムの考え方に慣れていきましょう。
手始めに、時間の差分を求めるアルゴリズムを取り上げます。私たちは、日常生活の中で「3時0分」と「4時5分」の間には「1時間5分」の開きがあることが、自然に分かります。
コンピュータで計算を行うには、きちんとした手続きに従い、アルゴリズムを構築する必要があります。
例えば、時間は0〜23、分と秒は0〜59で表されるため、単純に時刻同士を引き算しただけで差が得られる訳ではありません。
時刻を秒の単位に変換する
実際にアルゴリズムを考えていきます。先ほども説明した通り、単純に時刻同士で引き算してもNGでした。有効な方法としては、時間をすべて秒で表して差を求めた後に、再び「時間・分・秒」の単位に変換します。
■時間を秒に変換
まずは、時間を秒に変換する必要があります。変換しようとする時刻を「h時m分s秒」だとします。このとき1分は60秒ですから、m分の部分はmx60秒になります。h時間の部分はhx60分であり、さらに秒で表すとhx60x60となります。以上を踏まえると、変換式は以下のようになります。
■秒を時間に変換
今度は秒を時間に変換する方法を見てみます。秒への変換の逆をすれば良いので、以下の手順になります。与えられた秒数をtとします。
tを3600で割る。その答えをhに代入する。
余りを60で割る。その答えをmに代入する。
余りをsに代入する。
答えとして「h時間m分s秒」が得られる。
以上の2つのプロセスを使用すれば、このアルゴリズムは完成します。実際にプログラムで表現するには、上記の2つのプロセスを順序立てて、アルゴリズムの全体構成を考える必要があります。
アルゴリズムの流れを確認する
アルゴリズムの全体構成を作ります。比較する時間としては「h1時m1分s1秒」と「h2時m2分s2秒」です。
変数「time1」を用意し、h1×3600+m1×60+s1の計算結果を代入する。
変数「time2」を用意し、h2×3600+m2×60+s2の計算結果を代入する。
変数「diff」を用意し、time1>time2ならばtime1-time2を代入する。そうでなければ、time2-time1を代入する。
変数hとnを用意し、hにはdiffを3600で割った答えを代入し、余りをnに代入する。
変数mとsを用意し、mにはnを60で割った答えを代入し、余りをsに代入する。
結果として「時間差はh時間m分s秒」と出力する。
以上がこのアルゴリズムの全体の流れです。出力結果は例えばこんな感じです。
ここまで整理できると、プログラムを書くときに余計なことを考え込まずに進めることができます。
おわりに
今回は「アルゴリズム」の一例として、時刻の差分を求める問題を扱いました。こうして見ると、ひとつの問題だけでも長丁場になることが分かります。
これは慣れていくことで、少しずつ短縮できますが、まずは着実にひとつずつ理解しながら作業することをお勧めします。
他にも様々なアルゴリズムが存在します。それらも紹介できたらと思います。
-------------------------
最後まで読んでいただき、ありがとうございます。実際は非定期ですが、毎日更新する気持ちで取り組んでいます。あなたの人生の新たな1ページに寄り添えたら幸いです。何卒よろしくお願いいたします。
-------------------------
⭐︎⭐︎⭐︎ プロフィール ⭐︎⭐︎⭐︎
⭐︎⭐︎⭐︎ ロードマップ ⭐︎⭐︎⭐︎