↓↓クリックして頂けると励みになります。
【17 | 日付、時間、曜日の利用】 << 【ホーム】 >> 【19 | 二次元配列】
Rubyでグラフを表示させるプログラムを作成し、Rubyプログラミングの理解を深めます。
Visual Studio Codeで以下のプログラムを作ってみましょう。
新規作成 【graph1.rb】
class Graph def draw( names, data ) newdata = scaling( data ) for i in 0..(data.length-1) do drawLine( names[i], data[i], newdata[i] ) end end def drawLine( name, value, count ) print name+"\t" for i in 0..count-1 do print '*' end puts '(' + value.to_s + ')' end def scaling( data ) max = max( data ) newdata = Array.new(data.length) for i in 0..data.length-1 do newdata[i] = (data[i]*60)/max end return newdata end def max( data ) max = data[0] for i in 1..data.length-1 do if (data[i] > max) then max = data[i] end end return max end end #ここから a = [ 10, 25, 4, 52, 30, 16, 42, 22, 36, 8, 19, 100 ] s = [ '1:', '2:', '3:', '4:', '5:', '6:', '7:', '8:', '9:', '10:', '11:','12:'] puts " \t---------+---------+---------+---------+---------+---------+" d = Graph.new() d.draw( s, a ) puts " \t---------+---------+---------+---------+---------+---------+"
グラフを表示するプログラムです。
では内容を見ていきましょう。
グラフの目盛をプリントするときに "\t"
というのを使っています。
これは、キーボードのTabキーを入力したのと同じ役割をします。
使うときはダブルコーテーション("
)で囲みます。
これはエスケープ処理と呼ばれるものです。
その他にも、"\n"
がよく使われます。
これは、改行すると言う意味です。
変数 = Array.new(配列の個数)
これは、Arrayクラスを使って配列の入れ物だけを用意する方法です。
new演算子を使用し、配列のメモリを確保します。
これによって、まだデータの入っていない箱だけを作成することができます。
newdata[i] = (data[i]*60)/max
今回は、*
の数60個を最大の100とおいて表示するようにしています。
計算式で使われている60はその意味です。
最大の*
の数を変えたければ、この数を変えると良いでしょう。
出力結果です。
~/Desktop/Programming/RB $ ruby graph1.rb ---------+---------+---------+---------+---------+---------+ 1: ******(10) 2: ***************(25) 3: **(4) 4: *******************************(52) 5: ******************(30) 6: *********(16) 7: *************************(42) 8: *************(22) 9: *********************(36) 10: ****(8) 11: ***********(19) 12: ************************************************************(100) ---------+---------+---------+---------+---------+---------+
Visual Studio Codeで以下のプログラムを作ってみましょう。
新規作成 【graph2.rb】
class Graph def draw( names, data ) newdata = scaling( data ) for i in 0..(data.length-1) do drawLine( names[i], data[i], newdata[i] ) end end def drawLine( name, value, count ) print name+"\t" for i in 0..count-1 do print '*' end puts '(' + value.to_s + ')' end def scaling( data ) max = max( data ) newdata = Array.new(data.length) #グラフの最大の長さ limit = 10 for i in 0..data.length-1 do x = (data[i]).to_f y = (x*limit/max).to_f newdata[i] = y.to_i end return newdata end def max( data ) max = data[0] for i in 1..data.length-1 do if (data[i] > max) then max = data[i] end end return max end end #ここから a = [ 120, 600, 60, 10, 100 ] s = [ 'A:', 'B:', 'C:', 'D:', 'E:'] puts " \t---------+---------+---------+---------+---------+---------+" d = Graph.new() d.draw( s, a ) puts " \t---------+---------+---------+---------+---------+---------+"
先ほどのプログラムをもっと簡単に書いてみました。
違うのは次の部分です。
def scaling( data ) max = max( data ) newdata = Array.new(data.length) #グラフの最大の長さ limit = 10 for i in 0..data.length-1 do x = (data[i]).to_f y = (x*limit/max).to_f newdata[i] = y.to_i end return newdata end
ここでは、limitという変数を作りそこにグラフの最大の長さを入れています。
計算にはfloatを使っています。
出力結果を見てみましょう。
~/Desktop/Programming/RB $ ruby graph2.rb ---------+---------+---------+---------+---------+---------+ A: **(120) B: **********(600) C: *(60) D: (10) E: *(100) ---------+---------+---------+---------+---------+---------+
【17 | 日付、時間、曜日の利用】 << 【ホーム】 >> 【19 | 二次元配列】
↓↓クリックして頂けると励みになります。