学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

Rubyプログラミング入門その16 グラフを表示するプログラム

<<前  [TOP]  次>>


メモ帳を開いて次のプログラムを作ってみましょう。


【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はその意味です。
最大の*の数を変えたければ、この数を変えると良いでしょう。


出力結果です。
f:id:MrRadiology:20180119161742p:plain


メモ帳を開いて次のプログラムを作ってみましょう。


【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を使っています。


出力結果を見てみましょう。
f:id:MrRadiology:20180119163945p:plain


<<前  [TOP]  次>>