[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題02] 円グラフ ]

[課題02] 円グラフ

課題

タートルグラフィクスで,以下のように与えられるデータに基づいて円グラフを描画するプログラム作成して提出して下さい.
円グラフ(yes,no,neutral)

プログラムでは,最初にyes,no,neutralの値が最初の条件を満たすように定められたとして,その後の描画処理では,どんな場合でも,与えられたデータにしたがって,円グラフを描けるように記述します. プログラムにおいては,変数を活用して,プログラムを分かりやすくまとめることを期待します. プログラムでは,yes,no,neutralに加えて,必要に応じて自由に変数を追加で定義してください. なお円グラフはどこからどういう順序でどこに描いても構いません.

プログラムテンプレート

次に示すテンプレート(雛型)をプログラム作成に利用して下さい. テンプレートには亀の動作以外は全て書いてあります. 亀の動作の記述を追加してプログラムを完成させて下さい. なお亀の動作は「def draw」から「end」の間に記述します(他の部分は変更する必要はありません).

テンプレートは名前を適宜変えた上で「Home」に保存して利用してください. なおファイルをダウンロードするにはリンクを右クリックして「名前を付けてリンク先を保存...」を選びます.

データの指定方法

プログラムを作成するために,まずyes,no,neutralで合計が100になるようにそれぞれ正の整数でデータを設定してください. また円グラフの半径rも適宜設定してください. それぞれの値は条件を満たせば適当で構いません. それらをテストデータとして利用します.



  def draw

    yes = 60  
    no = 25
    neutral = 15
    r = 150 # 半径

  end

プログラムが完成したら,次のように変更してうまく動作することを確認してください. このようにするとyes,no,neutralの値が毎回ランダム(でたらめ)に設定されます. 半径は固定して構いません.


  MIN_RATE=1 # yes,no,neutralの最小値の定義(注意::defの前に追加する)

  def draw

    # MIN_RATE ≦ yes,no,neutral 
    # yes + no + neutral = 100
    yes = rand(MIN_RATE..100-2*MIN_RATE)
    no =  rand(MIN_RATE..100-yes-MIN_RATE)
    neutral = 100-yes-no                   
    r = 150 # 半径

  end

rand(m..n)の値は,m,nがともに整数でm≦nのとき,m以上n以下の範囲の整数から(見かけ上)ランダムに決められます.

円弧と扇形の描画

円弧と扇形は次のように描画します. 扇形は外枠のみ描きます.


  # 半径rで中心角thetaの円弧を左回りで描く.
  # thetaが負であれば右回りで描く.
  # 亀は終点で止まる.
  arc(r,theta) 

  # 半径rで中心角thetaの扇形を左回りで描く.
  # thetaが負であれば右回りで描く.
  # 亀は描画を開始した位置に戻り,描画開始のときと同じ方向を向く.
  arc(r,theta,true) 

[参考] 文字列の描画

次のようにして文字列を描画できます. 式の値を含めて表示することもできます.


  x = 10
  y = 15

  # 「value=(10,15)」と描画する
  string("value=(#{x},#{y})") 

  # 「Warning!」と描画する.文字は赤,文字の背景を黄色にする
  set_color(255,0,0)
  string("Warning!",[255,255,0])  

  # 「Hello!」と描画する.文字は青,文字の背景を黄色にする.文字のサイズを32とする
  set_color(255,0,0)
  string("Hello!",[255,255,0],32)  

  # 「Hello!」と描画する.文字は青,文字のサイズを32とする(背景色は変更しない)
  set_color(255,0,0)
  string("Hello!",nil,32)  

(※) この場合,「#」以降はコメントにはなりません.

[参考] 数値データの変換(整数→小数)

整数に「to_f」を適用すると,(同じ値の)小数形式のデータが得られます.


  a = 2
  b = a.to_f # b → 2.0

数値のデータの場合はto_fを使わなくても,小数点と0を追加すれば, それで小数のデータとして扱われて,整数とは区別されます.


  a = 2   # 整数データ  
  b = 2.0 # 小数データ  

  # 次のように書いてもよい(0の個数によって値の精度が変わったりはしない)  
  b = 2.000

  # 次のようにも書けるが不自然  
  b = 2.to_f  

  c = 7
  u = c / a # u → 3 (整数/整数→商)  
  v = c / b # v → 3.5 (整数/小数→除算)  

  d = -c    # d → -7  
  u = d / a # u → -4 (整数/整数→商;余りは常に非負)  
  v = d / b # v → -3.5 (整数/小数→除算)  

注意

以下のことに注意して下さい.

参考資料

Tips

以下,課題に取り組むにあたって,知っておくとよさそうなtips(hint)を示します.

[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題02] 円グラフ ]