[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題17] 折れ線グラフ ]

[課題17] 折れ線グラフ

課題

タートルグラフィクスで,以下の仕様に従った「グラフデータファイル」を読み込んで, 折れ線グラフを描画するプログラムを作成して提出して下さい.
折れ線グラフの例

もくじ

  1. グラフデータファイルの仕様
  2. 想定する実行方法
  3. [OPTION] プログラムとデータファイルの拡張
  4. 技術要素
  5. プログラムテンプレート
  6. サンプルファイル
  7. サンプルプログラム

グラフデータファイルの仕様

ここでは,この課題で折れ線グラフのデータを格納する「グラフデータファイル」の仕様について説明します. まず例を示します.


237 26 61 2
8 18
16 21
24 28
32 39
 :  :
 :  :

グラフデータファイルの仕様は次の通りです.

備考

なおファイルからの読み込みに便利な機能をこの課題のページの「技術要素」で紹介しています.

想定する実行方法

今回のプログラムでは折れ線グラフの「グラフデータファイル」を指定することになります. 指定の方法は次のいずれかとします.

  1. ファイル選択ダイアログを使う
  2. コマンドライン引数を使う

これら2つの方法のどちらにも対応するようにすることも考えられます.

以下,それぞれについて説明します.

ファイル選択ダイアログを使う

プログラム実行中に「ファイル選択ダイアログ」を開いて,グラフデータファイルを選択させることができます.


require 'gtr/fileselect' # プログラムの先頭にこの行を追加

  :
  :

class Turtle
  def draw
    ## ファイル選択ダイアログによるファイルの選択
    # ファイルが選択された場合はその名前が得られる
    # キャンセルされた場合はnilが得られる
    fname = World.select_file
  

「ファイル選択ダイアログ」はポップアップウインドウでマウスでファイルを選択できるようにするものです. 「ファイル選択ダイアログ」の処理が終わるとファイル名が得られます. それを変数に代入してプログラムで利用できます. 上の例では「fname」に選択されたファイルの名前が代入されます.

なおファイルの選択をキャンセルすることもできます. キャンセルされた場合,ファイル名として「nil」が得られます(nil=何もない). 上の例では「fname」に「nil」が代入されます.

コマンドライン引数を使う

コマンドライン引数(ARGV)でグラフデータファイルを指定する場合, プログラムは次のように実行することになります. ここではプログラムのファイル名を「gtr_lineplot.rb」として, 折れ線グラフのグラフデータファイルの名前を「test_plot.txt」とします.

$ ruby  gtr_lineplot.rb  test_plot.txt

このときコマンドライン引数「test_plot.txt」は次のようにして取り込むことができます.

class Turtle
  def draw

    fname=retrieve() # 記憶させたファイル名を取り出す

  end
end

  :
  :

t = Turtle.new() # 亀を用意する
t.push(*ARGV) # コマンドライン引数を亀に憶えさせる

亀を用意(Turtle.new)した直後に,コマンドライン引数を亀に憶えさせておいて(push), drawメソッドの中で折れ線グラフのグラフデータファイルの名前が必要になった時点で,それをretrieveによって取り出します(上の例ではfnameにファイル名が代入されます).retrieveを実行するたびにARGVの要素が一つずつ順に取り出されます.

pushの引数において,ARGVの前に「*」をつけることに注意して下さい(Rubyでは配列の前に「*」を付けてメソッドの引数に渡すと配列が要素に展開されてメソッドに渡されます).

Rubyでは引数の個数が変わりうるメソッドを定義することができます. Turtleのpushメソッドはそのようなメソッドとして定義してあります.

[OPTION] プログラムとグラフデータファイルの拡張

次のようにプログラム,グラフデータファイルの仕様を拡張することが考えられます. これらの実現は必須ではありません.なおこれらの拡張を行った場合には提出するファイルの先頭の「=begin〜=end」の間にそのことを明記して下さい.

これらの拡張に同時に対応することも考えられます.

技術要素

プログラム作成に用いるであろう技術要素を以下に示します. すべてを使う必要はありません.

プログラムテンプレート

次に示すプログラムのテンプレート(雛型)を使って下さい. このプログラムは名前を適宜変えた上で保存して利用してください.

サンプルファイル

この課題で指定している「グラフデータファイルの仕様」に従ったサンプルファイルを提供します.

サンプルプログラム

サンプルプログラムを示します. プログラムをブラウザの画面で開いたときに文字化けしてしまう場合には, ダウンロードしてEmacs等で開いてみて下さい.

[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題17] 折れ線グラフ ]