前回以下のようにプログラミングして
このような結果になった。
BMIを知るという最低限の機能はあるのだがあまりにもそっけない。
修正していこう。
[文字列連結]
まずはBMIの結果表示
この「20.76」を「BMIは[20.76]です!!」に変更しよう。
文字列をつくるのは[演算]にある「helloとworld」ブロックだ。
これをまずドラッグして持ってくる。
図のように操作し
このような複合ブロックを作る。
上で作った複合ブロックを挿入して図のようにし、実行してみよう。
なんか無駄に正確に表示されている!!
[Scracthの仕様]
先ほどまで20.76と小数点二桁で表示されていたのになぜ突然桁が増えてしまったのであろうか?
どうやらScratchでは「〜と言う」ブロックに小数を渡すと自動的に小数点2桁に丸めて表示されるようだ。
なので最初は20.761245・・・・・が丸められて20.76と表示されていた。
ただ、その次やった作業では「BMIは[」という文字列と連結した。
結果
「BMIは[20.761245・・・]でした!!」
という一つの文字列になってしまったのだ。
少数なら2桁に丸めることができるが文字列ではどうしようもない。
なので実行結果のようにやたら詳細な数値が表示されてしまったのだ。
[任意の桁での丸め]
正確といえば正確なのだが、BMIの判定にここまでの精度はいらない。
やはり小数点1桁か2桁あたりの表示が適当だろう。なので文字列連結をしても20.76となるように修正を加えよう。
まずはbmiの加工の為に「bmiを0にする」ブロックを差し込む。
そして
[演算]にある「四捨五入」ブロックの活用を考える。
四捨五入というのは言うまでもなく小数点第一位の値が5以上だったら切り上げ、そうでなければ切り捨てをする処理だ。
いきなりこうやってしまっては「20.761245・・・・・」の小数点第一位で四捨五入されて21になってしまう。
なので
まずbmiに100をかけた後四捨五入してそのあと100で割れば良い。
100をかけると
20.761245・・・・・*100=2076.1245・・・・・
それを四捨五入
2076
最後に100で割る
20.76
これで欲しかった20.76が手に入った。
このテクニックは任意の桁で丸めたい場合に有効なので覚えておくと良い。
で図のようにして実行すると。小数点2桁でBMIが表示される。
これをパッと見てすぐに納得できる人はプログラム経験のある人だろう。
そうでない人にとっては結構難しい。
だがとても大切な部分を含んでいるのでもう一度詳しく解説する。
青い矢印で示す処理の流れに注目して見ていただきたい。
まず最初にやることは体重と身長をもとにBMIを計算することだ。
そこでの計算結果20.761245を変数bmiに代入する。
20.761245に丸め処理をして20.76を得る。
それを再びbmiに代入
最後にbmiを出力
bmiという変数が変わっていく様をご確認いただきたい。
プログラミングの核となる部分といっても過言ではない、とても大事な部分なのでしっかりと処理の流れを確認してほしい。
[if文]
さて、無事にBMI測定もできたので最後に太っているのか痩せているのかを判定しよう。
判定 | やせ | 普通 | 肥満度1 | 肥満度2 | 肥満度3 | 肥満度4 |
BMI | 18.5未満 | 18.5~25 | 25~30 | 30~35 | 35~40 | 40以上 |
BMIの値によってこのように判定される。これをプログラムに落とし込んでいこう。
if~else文と呼ばれている[もし〜なら~でなければ]ブロックを配置しよう。
もしBMIが40以上だったら肥満度4だ。
[演算]にある[□>□]ブロックをおく
bmi>40とする。これで「もしbmiが40より大きかったら」というif文ができた。
その時は肥満度4の出力をしよう。
ここで一つ確認しておくが世界中全員のBMIを判定しても全員40より大きいかそうでないかのどちらかに当てはまる。
つまりif~else文というのは必ずどちらか一方のルートを通る処理だということを確認しておこう。
私は40以下だったのでこの後書く「でなければ」のルートを通ることとなる。
if〜elseを入れ子にする。
同様に繰り返していく。
こんな感じでいいだろう。
誰がやってもどこかに判定されることを確認して欲しい。
以上でBMI判定アプリは完成だ。
変数の扱いや四則演算、if〜else文などプログラミングを学ぶ上ではとても大切な部分がぎゅーっと凝縮されている。初心者の人はわからない部分がないように繰り返し練習して欲しい。
ちなみにBMIは22が一番長生きするという統計が出ているそうだ。身長を入力すると適正体重を教えてくれるアプリを作ってみるのもちょうど良い練習になるだろう。
コメント