今回作るのは割り勘電卓です。グループでの会食で使える割り勘電卓を作ってみましょう。なでしこを使うと身近な計算を手軽に行うツールを手軽に作成できます。初心者でも分かりやすいプログラムなので、気軽に作ってみましょう。

割り勘は日本の文化?!

そもそも「割り勘」とは会食などの参加費を人数で均等に割って代金を払うことです。興味深いことに「割り勘」を表す言葉がない文化圏もあります。なお、中国や韓国では、年長の人や食事に誘った人が必ず奢る決まりになっているそうです。ですから、今回作る「割り勘電卓」は、日本人による日本人のためのプログラムと言えます。

割り勘電卓を作ってみよう

それでは、割り勘電卓を作ってみましょう。割り勘は、金額を人数で割るだけですから、原理的には簡単に計算できるでしょう。なでしこ3簡易エディタを使うと、Webブラウザ上でプログラムを実行できます。アクセスして、以下のプログラムを入力してみましょう。

金額=35000
人数=5
割り勘=金額÷人数
「金額は{金額}円。人数は{人数}人」と表示。
「支払額は、{割り勘}円」と表示。

そして、実行ボタンを押すと、プログラムが実行され、以下のように表示されます。

  • 基本的な割り勘電卓

    基本的な割り勘電卓

プログラムの最初の二行では、金額と人数を指定しています。そして、プログラムの三行目で、金額を人数で割った結果を計算します。そして、四行目と五行目で割り勘金額を表示します。

なでしこで、カギ括弧を使って「・・・」のように書くと、それが文字列として認識され、その内容がそのまま実行結果に出力されます。その際、「・・・{変数名}・・・」のように波括弧を書くと、文字列の中に変数の内容を埋め込んで表示します。

この時、プログラムの冒頭二行の数値を変更して実行すると、実行結果が変わるので試してみましょう。例えば、金額を23000、人数を10に変更して実行してみましょう。すると、予想通り、支払額は2300円となります。

  • 金額と人数を変えて実行したところ

    金額と人数を変えて実行したところ

ユーザーに質問するように改良してみよう

とは言え、プログラムを実行するたびに、プログラムを書き換える必要があるというのは、スマートな方法とは言えません。プログラムを実行すると、ユーザーに金額を尋ねるように、プログラムを変更してみましょう。

ユーザーに何かを質問するには『尋ねる』命令を使います。これを利用して割り勘電卓を作ってみましょう。

「金額は?」と尋ねて、金額に代入。
「人数は?」と尋ねて、人数に代入。
割り勘=金額÷人数
「金額は{金額}円。人数は{人数}人」と表示。
「支払額は、{割り勘}円」と表示。

プログラムを実行してみましょう。すると、入力ダイアログが出て、最初に金額、次いで人数を尋ねられます。値を入力して[OK]ボタンを押しましょう。最終的に、割り勘結果が表示されます。

  • 金額を尋ねられます

    金額を尋ねられます

  • 人数を尋ねられます

    人数を尋ねられます

  • すると結果が表示されます

    すると結果が表示されます

プログラムを確認しましょう。先ほどのプログラムと違うのは、最初の二行です。ここで、『「金額は?」と尋ねて、金額に代入。』のように記述しています。この場合、「金額は?」という入力ダイアログが表示されます。ユーザーが値を入力して[OK]ボタンを押すと、その入力結果が変数「金額」に代入されます。

割り勘電卓で100円単位を切り捨てよう

ところで、割り勘で会費を徴収する際に、一円単位で料金を徴収するのは面倒です。そこで、100円以下を切り捨てて徴収するようにしましょう。すると、その場合、幹事の支払金額が増えることになるので、その額も表示するようにしてみましょう。

以下のプログラムを実行してみて、例えば、金額を30000円、人数を7人で計算してみましょう。

「金額は?」と尋ねて、金額に代入。
「人数は?」と尋ねて、人数に代入。
正確な額=金額÷人数
支払額=FLOOR(正確な額÷100)×100
端数=金額 - 支払額×人数
幹事=支払額+端数
「金額は{金額}円。人数は{人数}人」と表示。
「支払額は、{支払額}円」と表示。
「幹事は、{幹事}円(端数:{端数}円)」と表示。

プログラムを実行すると、以下のように表示されます。

  • 端数切り捨て機能を実装した割り勘電卓

    端数切り捨て機能を実装した割り勘電卓

プログラムを見てみましょう。ポイントとなるのは四行目です。100円の単位で切り捨てを行うには、小数点以下を切り捨てるFLOOR()関数を使います。具体的には、100で割ってFLOOR()して100をかけます。そうすると、100円単位の切り捨てになります。

しかし、7人の会食で3万円支払う場合、100円単位を切り捨てると、幹事はなんと600円も損してしまうことになります。多くの人は喜んで幹事をする訳ではないので、「切り捨て」でなく「切り上げ」で計算するなら、少し幹事に謝礼を払うことになります。

ここで、切り捨てと、切り上げに関する算術関数をまとめてみましょう。切り捨てを行うにはFLOOR()関数を、切り上げする場合にはCEIL()関数を使います。また、丸めを行うにはROUND()関数を使います。簡単に、FLOOR()とCEIL()とROUND()の動作テストをしてみましょう。

# --- CEIL
CEIL(3.6)を表示。# → 4
CEIL(8.2)を表示。# → 9
CEIL(7.5)を表示。# → 8
# --- FLOOR
FLOOR(3.6)を表示。# → 3
FLOOR(8.2)を表示。# → 8
FLOOR(7.5)を表示。# → 7
# --- ROUND
ROUND(3.6)を表示。# → 4
ROUND(8.2)を表示。# → 8
ROUND(7.5)を表示。# → 8

それでは、100円単位で切り上げを行うよう、割り勘電卓を改良していましょう。具体的には、以下のように、前のプログラムの四行目の、FLOOR()をCEIL()に書き換えます。

「金額は?」と尋ねて、金額に代入。
「人数は?」と尋ねて、人数に代入。
正確な額=金額÷人数
支払額=CEIL(正確な額÷100)×100
端数=金額 - 支払額×人数
幹事=支払額+端数
「金額は{金額}円。人数は{人数}人」と表示。
「支払額は、{支払額}円」と表示。
「幹事は、{幹事}円(端数:{端数}円)」と表示。

同じく、3万円を7人で割って計算してみましょう。今度は、幹事が100円得するようになりました。

  • 幹事に優しい切り上げ割り勘電卓

    幹事に優しい切り上げ割り勘電卓

まとめ

以上、今回は、会食の多い皆さんに役立つ割り勘電卓を作ってみました。ただの割り勘ではなく、100円単位を切り捨てたり、切り上げたりと、実用的な機能をつけてみました。自分でプログラムを作るなら、このように自分が必要な機能を追加できるのが良いところです。今回のプログラムを参考にして自分の必要とする電卓を作ってみると良いでしょう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。