業務連絡: 次回より,C言語プログラミングに関する実習を開始する.教科書指定している「新・C言語のススメ」を持参すること.また,「新・C言語のススメ」第1章,第2章を予め予習してくること.

ちなみに「予習」とは,教科書の内容をきちんと読んで,その学習内容の概略と,疑問に思う箇所,十分理解出来ない箇所を明確にしておく事である.

また,授業中はしっかり集中して話を聞いて・考えて・実際に手を動かして作業して,確実に作業結果を出すようにしましょう. 「後からじっくり考えればいいや」といった腑抜けな態度では今後厳しくなると思います.

一般にシミュレーション(計算機上の数値計算による模擬実験)を行うには,C言語などのプログラミング言語でシミュレーション用プログラムを作成して行うことが多いが,表計算ソフトを用いても簡単なシミュレーションを行うことができる.何かの物理現象や社会現象,あるいは,コンピュータ性能の理論的検討などにおいて,比較的簡単なシミュレーションでも意外に十分なレベルで分析検討出来る場合は多いので,表計算による簡易シミュレーションの考え方は知っておいて良いだろう.

LibreOffice Calcを用いた簡易シミュレーション

一般にシミュレーション(計算機上の数値計算による模擬実験)を行うには,C言語などのプログラミング言語でシミュレーション用プログラムを作成して行うことが多いが,表計算ソフトを用いても簡単なシミュレーションを行うことができる.何かの物理現象や社会現象,あるいは,コンピュータ性能の理論的検討などにおいて,比較的簡単なシミュレーションでも意外に十分なレベルで分析検討出来る場合は多いので,表計算による簡易シミュレーションの考え方は知っておいて良いだろう.

以下の課題では,特に指示の無い限り,課題毎に新しいワークシートを開いてから作業を開始せよ.

練習課題1: 模擬試験結果の条件判定

LibreOffice Calcによるデータ集計の回で作成した「模擬試験結果」のワークシートを再度利用することにする(ファイルを既に削除してしまった場合にはとして置いてあるので,これを各自の作業ディレクトリにコピーして利用すること).このワークシートの個人平均の右隣に「合否判定」欄を設けてみよう.

IF関数を用いることで,セルの値や計算結果に基づいてセルの値を切り替えるような操作が出来る.IF関数の書式は以下の通りである.ここで「条件式」とはセルの値が満たす関係式で,例えば, F5 >= 200などのように用いる.

IF(条件式 ; 条件が成り立った場合の関数値 ; 条件が成り立たない場合の関数値)

また,関数中で文字列を関数値として使う場合は "合格" という具合にダブルクォートで囲むこと.

課題1−1

合計点200点以上の生徒は「合格」,200点未満は「不合格」と表示されるようにしてみよ.

課題1−2

合否判定欄を修正し,合計点200点以上の生徒は「合格」,150点以上200点未満は「努力必要」,150点未満は「不合格」と表示されるようにしてみよ(ヒント:IF関数の中でIF関数を使う,つまり,関数値として更にIF関数を使うように考えてみよう).

練習課題2: サラ金の利息計算

大手消費者金融(ア○○ルなど,いわゆるサラ金)の標準的年利は29.2%(最近,社会問題化したので,かなり下がったようだが)であるが,ヤミ金と呼ばれる悪質業者の場合は年利50から100%(極めて悪質な場合は800から1000%)にも達する場合がある.サラ金の多重債務者の多くに見られる状況として,返済期日になっても返済資金(元金と利息の合計)を工面できないために仕方なく,返済に必要な金額(元金+利息)を他の業者(多くの場合,悪質業者)から全額借金して返済に充てる,いわゆる「自転車操業」という状態がある.この「自転車操業」がいかなる状況を生むのか,その借金総額の変化をシミュレーションせよ.金利計算における約束は以下のとおりとする.

また,シミュレーションする期間は12ヶ月とし,シミュレーション条件は以下の通り.

新しくワークシートを開き,以下のように構成してみよ.

シミュレーションの結果は縦棒グラフで分かりやすく表示せよ.また,一般的なサラリーマンの給与水準を図書館などで調査し,このシミュレーション結果を踏まえた上で,一般的サラリーマンに許容されるサラ金借り入れ限度額を考察せよ.

補足:ちなみに,このシミュレーションでの負債金額は数学でお馴染の「等比数列」となる.初項と公比が何であるか考えてみよう.

練習課題3: 数学関数グラフ

次に挙げる3つの数学関数の値の変化を新しいワークシート上に作成し,

各関数のグラフを一枚のグラフ出力にまとめて表示せよ.尚,Calcの数式において,べき乗は ^ 記号を用いる.

但し,データ作成の条件は,

X座標の範囲:-5から5まで
X座標の差分(変化量):0.25

とする.

グラフを描画するには,描画したいセル領域ドラッグして選択しておき,「挿入」メニューから「グラフ」を選択する.

グラフウイザードが表示されて,描画するグラフの種類が選べるので,

作成したX座標と関数の値の組を二次元平面上の点としてプロットして,かつ,それらの点の間を滑らかに結んだ曲線を描いてくれるように,グラフの種類を「散布図」とし「点および線」を選択した上で,「線の平滑化」にチェックを入れておこう.(この場合,滑らかな線を描くアルゴリズムは3次元スプライン曲線が標準で使われるようだ.)

ここで,「完了」ボタンをクリックすれば,ワークシート上にグラフが張り付いて表示されるだろう.

練習課題4: GNUPLOTとの併用による3次元プロットグラフの作成

Calcでは,z = f(x, y)形式の3次元グラフを描かせることは少し難しい.しかし,ワークシートを適切なデータ形式で保存(エクスポート)すれば,GNUPLOTを組み合わせて処理することができる.

まず,作成するデータを以下の要領で作成せよ.

作成する関数とそのX座標範囲,Y座標範囲は次のように与えられているとする.

Z軸の値を表す関数式:z = x^2-y^2
X軸の範囲:-30から30,刻み幅 0.5
Y軸の範囲:-30から30,刻み幅 1

セル内容は次のように作成すればよい.各セルの位置関係と値の変化を上手に考慮して,うまくCopy & Pasteする手順をじっくり考えること.表の行数が7500行程度になるから,上手い手順を考えないと途方もない作業時間になりかねないので注意すること.上手く手順を考えれば「5分程度の作業時間」でワークシートを作成できる.

X座標 Y座標 x**2-y**2の値
-30 -30 0
-30 -29 59
-30 -28 116
-30 -27 171
-30 -26 224
-30 -25 275
-30 -24 324
-30 -23 371
-30 -22 416
-30 -21 459
-30 -20 500
-30 -19 539
-30 -18 576
-30 -17 611
-30 -16 644
..........
...中略...
..........
-30 18 576
-30 19 539
-30 20 500
-30 21 459
-30 22 416
-30 23 371
-30 24 324
-30 25 275
-30 26 224
-30 27 171
-30 28 116
-30 29 59
-30 30 0
-29.5 -30 29.75
-29.5 -29 29.25
-29.5 -28 86.25
-29.5 -27 141.25
-29.5 -26 194.25
-29.5 -25 245.25
-29.5 -24 294.25
-29.5 -23 341.25
-29.5 -22 386.25
-29.5 -21 429.25
-29.5 -20 470.25
-29.5 -19 509.25
-29.5 -18 546.25
-29.5 -17 581.25
..........
..........
...思いっきり中略...
..........
..........
30 10 800
30 11 779
30 12 756
30 13 731
30 14 704
30 15 675
30 16 644
30 17 611
30 18 576
30 19 539
30 20 500
30 21 459
30 22 416
30 23 371
30 24 324
30 25 275
30 26 224
30 27 171
30 28 116
30 29 59
30 30 0

作成したワークシートは何か自分に分かり易いファイル名で保存しておくこと.

GNUPLOTでグラフを描くには,上記のような形式のテキストファイルとしてエクスポートする必要がある.「ファイル」メニューの「名前を付けて保存」を選び,

ファイルの種類として「テキスト CSV」を選択せよ.ファイル名は重ならないように適当に付けること.拡張子は自動的に .csv が付けられる.

ここでは保存すべきテキストファイルの名前をxyplot.csv と仮定しよう.

「保存」ボタンをクリックすると,次のように警告が出る.これは,テキスト形式で保存するとグラフ表示やセルの計算式などCalcの機能を活用する情報が欠落してしまう事への警告である.

ここでは,テキスト形式に保存したいので,「現在の書式を保持」をクリックして,テキスト形式ファイルとしての保存操作を続行する.

次に,テキスト形式で保存する為に必要な設定を選択するダイアログが表示される.各オプションはメニュー選択できる.

一般に表計算ソフトのワークシートをテキスト形式で保存する場合は,

10,20,........,25
20,14,........,19

といった具合に各セルのデータをコンマ(,)で区切った形式が使われるが,これをCSV (Comma Seperated Values)フォーマットとよび,あらゆる表計算ソフトが保存と読み込みに対応している.また,コンマの代わりに(半角の)空白文字やTAB文字(EmacsにおいてTABキーを押すと入力される特殊文字)を用いて,

10 20  ........  25
20 14  ........  19

といった形式もしばしば用いられ,これをTAB区切り形式(TSV形式などと呼ぶようだ)と呼ぶ.両者の違いは区切り記号が異なるだけであり,上のダイアログで区切り記号を変更することで,適切な形式に変更できる.

GNUPLOTはTAB区切り形式に対応しているので,上記のダイアログの「フィールドの区切り」は「{タブ}」を選ぶ.また,保存する文字コードは,CSE環境(MacOS X)では「Unicode (UTF-8)」としておくのが良い.区切り形式とコード形式を確認してOKボタンを押すと,指定したファイルに保存される.

保存したテキストファイルは,念のためEmacsで読み込んで内容を確認せよ.特にファイルの先頭部分に不要な行が入っていないかどうかチェックする.間違っている個所は削除するか,または,#記号を先頭にいれてコメント行にするなど適切に修正せよ.

次に,gnuplotを起動し,エクスポートしたファイルxyplot.csvをpoints形式で3次元プロットし,これに加えて,z = x**2-y**2の関数グラフを重ねて描画せよ.このとき,正しくデータファイルが作成されていれば,3次元データプロットグラフとz = x**2-y**2の関数グラフとはぴったりと完全一致するはずである.

gnuplot> splot "xyplot.csv" with points, x**2-y**2

うまく描画されれば,次のように画面表示されるであろう.

そのグラフをカラーのPNG形式で保存せよ.グラフをPNG形式のファイルとして保存するにはGNUPLOTのプロンプトにおいて

gnuplot> set terminal png
gnuplot> set output "report_graph.png"
gnuplot> replot

などとタイプすれば良い.尚,指定した画像ファイルは,一旦,グラフ出力を画面表示へ切り替えると正しく作成される.

gnuplot> set terminal x11

或いは,gnuplotを一旦終了すれば問題なくファイルへ保存される.

提出課題: 報告書作成

練習課題1で作成した「模擬試験成績表」と「成績グラフ」,及び,「練習課題2」,「練習課題3」,「練習課題4」の結果をまとめた「報告書」を Libre Office Writerを用いて作成せよ.表をWriterで作成中のワープロ文書に貼り付けるには,貼り付けたいセル領域を選択して,コピー&ペーストすれば出来るはずである.また,Calc上で作成したグラフも同じようにコピー&ペーストすることが出来る.

また,ファイルとして保存してある画像ファイルを取り込んで貼り付けるには,「挿入」メニュー -> 画像 -> ファイルからと選択し,表示されるダイアログから貼り付けたい画像ファイルを選択すると良いだろう.

また,レポート文書の途中で改ページ(ページの切り替え)をしたい場合は,「挿入」メニューから「任意区切り」を選択し,表示される以下のようなダイアログから

「改ページ」を選択して,OKボタンをクリックする.

尚,作成すべき報告書の見本はこちらにあるので参考にすること.

提出課題: 上記の「報告書」を作成・印刷して提出せよ.

提出期限: 教員の指示による

次回への補足事項

次回からC言語プログラミングのトピックスに入ります.教科書「新・C言語のすすめ」を持参してください.尚,事前にWeb資料を読み込んでくる事はもちろんですが,教科書も事前に読み込んでくる予習が必要です.例えば,次回の場合,第1章と第2章くらいは読み込んできて概略を頭に入れておいてください.

基礎プログラミング演習Iの表紙ページへ戻る