読者です 読者をやめる 読者になる 読者になる

Sinatraのあらかると

記録することで、環境構築で悩まない。

Ruby/TkでBMI指数を計るGUIプログラムを作ってみた

require 'tk'

class Bmi

attr_accessor :bmi, :taijyu , :sincho

end

def sum(a,b)

    x = a/(b*b)

    return x

end

puts "BMI指数を図ります....."

c = Bmi.new

c.bmi = "BMI指数"

c.taijyu = "体重"

c.sincho = "身長"


TkLabel.new(nil,
        :text => "(#{c.bmi})=(#{c.taijyu})/(#{c.sincho}*#{c.sincho})です。",
            :fg => "blue",
            :bg => "white").pack

#ラベルを付与

TkLabel.new(nil,
        :text => "私の体重は93kg,身長は175cmです。",
            :fg => "black",
            :bg => "white").pack

message = TkLabel.new.pack

#sum(体重,身長)

n = sum(93, 1.75)

case n 

when 10..17

TkLabel.new(nil,
        :text => "ちゃんと食べてますか。",
            :fg => "white",
            :bg => "black").pack

when 18..24

TkLabel.new(nil,
        :text => "[標準] 健康体型です。",
            :fg => "white",
            :bg => "black").pack
when 25..29

TkLabel.new(nil,
        :text => "肥満度[1] ダイエットしましょう。",
            :fg => "blue",
            :bg => "black").pack
when 30..34

TkLabel.new(nil,
        :text => "肥満度[2] ダイエットを頑張ろう。",
            :fg => "yellow",
            :bg => "black").pack
when 35..39

TkLabel.new(nil,
        :text => "肥満度[3] とにかく運動しましょう。",
            :fg => "red",
            :bg => "black").pack
when 40..50

TkLabel.new(nil,
        :text => "肥満度[4] メタボ対策をとりましょう。",
            :fg => "red",
            :bg => "black").pack
end


# ボタンを作成
b = TkButton.new(:text => "計算").pack
b.command proc {message.text("BMI is #{n.round}.")}

c = TkButton.new(:text => "終了").pack
c.command proc {exit}

Tk.mainloop

[考察]

TkEntryで数値が扱えると入力をした数字で評価できるはずです。ただ、文字列として認識している"#{a}"のように入れ子にすると想ったような結果が出力されず、エラーに悩まされました。うまくいったなーというところは、数値により変化するメッセージのところです。欲をいえば、ボタンを押した後に表示されるとよりよいように想いますが、こだわりのようなのでまた機会があるときにでも。BMIの特集を昨日のNHK放送でしていたので、この記事を掘り起こしてみました。

それでは、また。

[追記]

Ruby/Tkでputs ""を使うとそのまま端末に表示されるのを知りました(当たり前といえば当たり前)

過去ログ

Javaで実装されたBMIを見直すと。

Copyright © 2007-2017 Takayuki Kamiyama. All Rights Reserved.