見出し画像

なでしこさんでBMIの計算

毎度おなじみ、日曜日が来てしまった。
ソレが始まるどころか終わってしまうが、今週も結局アレを書くための作業を怠ってしまった。
まあ、頭も使いたくないし雑プログラムで繋ぐか……

何を書こうかと思いながらSNSを見ていると、こんな投稿を見つけた。

よし、今回のテーマはこれにしよう。

今回やったこと

なでしこで、BMIの計算を行う。
身長・体重・BMIのうち2項目を入力すると、残った項目を計算して表示する。

プログラム

BMI計算 (プログラム貯蔵庫)

ポイント

UIを用意する

「BMI計算」のラベル作成。
それの「文字サイズ」に「250%」をDOMスタイル設定。
改行作成。
「2項目入力すると、残りの項目を計算します。」のラベル作成。
改行作成。
「身長:」のラベル作成。
身長欄は空のエディタ作成。
「cm」のラベル作成。
改行作成。
「体重:」のラベル作成。
体重欄は空のエディタ作成。
「kg」のラベル作成。
改行作成。
「BMI:」のラベル作成。
BMI欄は空のエディタ作成。

タイトルと、それぞれの項目の入力欄を用意する。

どこに入力したかの判別の準備をする

身長欄に1をDOMポケット設定。
体重欄に2をDOMポケット設定。
BMI欄に4をDOMポケット設定。

前回入力された欄は0。
今回入力された欄は0。

それぞれの入力欄にビットを割り当て、どこに入力したかを判別できるようにする。
さらに、どこに入力したかを保存する変数も用意する。

計算を実行する

●(AとBが)有効とは
  もし、AをNAN判定ならば、偽を戻す。
  もし、Aが0以下ならば、偽を戻す。
  もし、BをNAN判定ならば、偽を戻す。
  もし、Bが0以下ならば、偽を戻す。
  真を戻す。
ここまで。

計算時、入力された値が有効かをチェックする関数を用意する。
面倒なので、2個まとめて判定するようにした。

●計算処理とは
  定数の最新変化は対象のDOMポケット取得。
  もし、それが今回入力された欄と等しく無いならば
    前回入力された欄は今回入力された欄。
    今回入力された欄は最新変化。
  ここまで。

今入力された欄のIDを取得し、それが前回と異なるなら、入力状況を更新する。

  定数の身長は身長欄のテキスト取得して実数変換。
  定数の体重は体重欄のテキスト取得して実数変換。
  定数のBMIはBMI欄のテキスト取得して実数変換。
  定数のメートル身長は身長を100で割る。

複数の計算処理で使われる値を、共通の処理を行う部分で前もって計算しておく。

  定数の入力された欄は前回入力された欄と今回入力された欄のOR。
  もし、入力された欄が3と等しいならば
    # 身長と体重からBMIを求める
    もし、身長と体重が有効ならば
      BMI欄に体重÷メートル身長÷メートル身長をテキスト設定。
    違えば
      BMI欄に「エラー」をテキスト設定。
    ここまで。
  違えば、もし、入力された欄が5と等しいならば
    # 身長とBMIから体重を求める
    もし、身長とBMIが有効ならば
      体重欄にBMI×メートル身長×メートル身長をテキスト設定。
    違えば
      体重欄に「エラー」をテキスト設定。
    ここまで。
  違えば、もし、入力された欄が6と等しいならば
    # 体重とBMIから身長を求める
    もし、体重とBMIが有効ならば
      体重÷BMIの平方根を100倍して身長欄にテキスト設定。
    違えば
      身長欄に「エラー」をテキスト設定。
    ここまで。
  ここまで。
ここまで。

どの2個の欄に最後に入力したかに応じて、残りの欄の値を計算し、表示する。

入力時に計算をさせる

[身長欄, 体重欄, BMI欄]を反復
  {関数}計算処理で対象の変更された時。
ここまで。

それぞれの入力欄にイベントハンドラを設定し、値を入力 (後フォーカスを外し) た時に入力状態の更新や計算を行わせる。

おわりに

なでしこで、BMIの計算を行うことができた。
単に身長と体重からBMIを求めるだけではなく、任意の2項目から残りの項目を計算できるようにした。

しかし、BMI計算なんてよくあるテーマすぎる。
貯蔵庫で「BMI」で検索した結果だけでも15個もあった。
でもそんなの関係ねー!時事ネタなので……

いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
なでしこさんでBMIの計算|みけCAT
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1