プログラミング実習II知機

11章 問題5. [ファイルの書き込み]

プログラムで計算した数学関数の値をプロットしたい。C言語の標準ライブラリには、グラフィック表示の機能がないので、計算した数値を外部ファイルに保存して、Excel 上でグラフを描画することにする。

今回保存するファイルの拡張子は csv とする。カンマ区切り形式(comma-separated values)と呼ばれるもので、1行の中での項目の区切りにコンマを記入する。

  1. 187ページのソースコード11.1を参考に、次のプログラムを作れ。
    • 出力ファイル名は "func.csv" とする。
    • 出力する内容の、1行目を以下とする。
      x,sin(x),cos(x)
    • x を -3.5 から +3.5 程度まで 0.1 刻みで変化させながら、x, sin(x), cos(x) の値を、以下のような形式で出力する。(printf()の書式なら "%f,%f,%f\n" である。)
      -3.500000,0.350783,-0.936457
      -3.400000,0.255541,-0.966798
      ...
  2. プログラムを実行して、"func.csv" を生成する。テキストエディタで開いて、内容を確認するとよい。

    +3.5 の行が出力されないことがあるが、浮動小数点演算の誤差のためであるので、気にしなくてよい。→212ページのソースコードA.1「0.1を10回足した結果を表示する」

  3. "func.csv" をExcelで開く。(演習室PCでは、ダブルクリックするだけでよい。)
  4. Excel上で「挿入」→「グラフ」の散布図(のいずれか)を選ぶ。
    func.png

  5. プロットされたグラフができたら、Excel上で「名前をつけて保存」を選んで、ファイルの種類を「Excelブック(*.xlsx)」に変更して、"func.xlsx" の名前で保存する。
    func-xlsx.png

  6. sin(x), cos(x) を、別の数学関数に自由に変更して、グラフをプロットしなおし、C言語ソースと "func.xlsx" を提出せよ
    • プログラムを実行しなおすたびに Excel を閉じる必要がある。(そうでないと、ファイルオープンに失敗する。)
    • 数学関数は ax^2+bx+c, 1/x, sin(2*x), floor(x) など、何でもよい。種類を増やしてもよい。
    • x の範囲や刻み幅は、自由に変更してよい。
    • CSVファイルの1行目が、グラフの系列名に使われるので、合わせて変更する。
  • Excel以外にも、グラフ描画に都合のよいソフトはいくつもある。自動生成にはフリーソフトの gnuplot や R のほうが便利。
  • C言語プログラムに限らず、このようにCSV形式を介して別ソフトとの連携を行う機会は多い。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS