消費税(8%)が30円のときの販売金額を求めよ。(プログラミング的思考が身につけば、プログラムは組める)
とあるエッセイでスクラッチ言語が叩かれてたけどさ?
別にCやJavaやアセンブリ言語だけがプログラミング言語ってわけじゃないんだよ?
今回は『プログラミング的思考が身につけば、プログラムは組める』ってことを例をあげて説明しよう。
『消費税(8%)が30円のときの販売金額を求めよ』という問題があったとします。
例えばね。例えば、プログラミング的思考を持っている人は、こんなふうに考えます。
『販売金額が1 円から 500円までの間、販売金額の8%の消費税額を計算し、もし消費税額が30円なら販売金額を画面に表示する』
僕はプログラマじゃないし独学なので、あんまりスマートな例になってなかったらごめんね。
最初の『販売金額が1円から500円までの間』っていうのは、500円の8%は40円だからです。つまりね。消費税が30円ならば、販売金額が500円未満なのは明白でしょ? ってことです。スタートが1円なのは、1円未満の販売金額が無いためです。
別に 多めにとって『1円~1,000円の間』でもいいよ? 実際、この例では『1円から100,000円の間』だろうと、計算速度に大差はないでしょう。
もっと狭く『400円から500円の間』でやってもいいし、そこらへんはご自由にどうぞ。
言語はスクラッチでもいいんだけど、僕はjuliaを選んだ。
理由はfloor(小数点以下を切り捨てる関数)が最初から用意されているのと、ワンラインで書けそう(説明が簡単そう)だと思ったため。
非常に簡単な計算なので、他の言語でも内容はそう大して変わらない。ちなみにスクラッチだと消費税の切り捨て部分(の説明)がちょっとだけめんどい。
じゃあ初めましょうか。
まず、変数を決めないといけないね。
販売金額をx、消費税額をyとしようか?
それでは、プログラミング的思考をプログラムに変えてみよう。
『販売金額が1 円から 500円までの間、販売金額の8%の消費税額を計算し、もし消費税額が30円なら販売金額を画面に表示する』
販売金額(x)が1円から500円までの間->for x = 1:500
販売金額(x)の8%の消費税額(y)を計算し->y = floor(8x/108);
もし消費税額(y)が30円なら->if y == 30
販売金額(x)を画面に表示する->println(x) end end
以下解説。
消費税額は切り捨てだから、floorで小数点以下を切り捨てる。
消費税(8%)の計算式は、8をかけて108で割る(国税庁による)。
endは句点に相当する。ifが終わりましたよ。forが終わりましたよ。って合図。
セミコロンは読点みたいなもん。
続けるとこうなる。
julia> for x=1:500 (y=floor(8x/108));if y==30 println(x) end end
結果が、
405
406
・
・
・
417
418
とでればOK。簡単でしょ?
つまり、『消費税(8%)が30円のときの販売金額を求めよ』。これの答えは405円以上418円以下ってわけ。
プログラミング的思考が身につけば、
『例えば、130円の缶コーヒーの消費税は、約30円(8%)です。というのは自販機だと130円にしないといけないからです』
なんていうような、恥ずかすぃいいいい間違いは犯さずに済む。
ちなみにfloor(30.~以下浮動小数点)は、30以上31未満と言い換えることができるので、
julia> for x=1:500 (y=8x/108);if 30<=y<31 println(x) end end
こうも書ける。こっちならスクラッチへの移植が容易かな?