プログラミングIII及び演習

この授業のE-Lerningのページは

https://moodle.yamanashi.ac.jp/2018/course/view.php?id=3313

です。 レポートは、原則として、e-LearningページにPDF形式ファイルでアップロードしてください。

以下の各項目に記した日にちは予定です。進行状況によって若干の変動があります。

1月30日 オンライン試験

試験とは関係ありませんが、課題5−2のプログラム例は、このページに載せてあります。参考にしてください。

目次

0. 準備 (10月3日) Linux上でのプログラミング準備とテキストに掲載されているプログラムのダウンロード

プログラミングIIまではVisual Studioを使ってプログラミング実習を行ってきましたが、プログラミングIII用ではグラフィックライブラリを使った数値計算の描画(アニメーションや数値データの図示)プログラムの作成も行います。Cプログラムで簡単に使える簡易アニメーションライブラリが少なくなってきており、昨夏のシステム更新においてWindowsにはインストールされなくなりました。そこでLinux上でプログラム実習をすることにしました。 Linux上でのプログラミングやUNIX系OSの使いこなしも、きっと将来に役立つと思います。

I. 連立一次方程式の解法 (10月3日、10日10日)

II. 非線形方程式の解法(ニュートン法など) (10月17日)

III. 微分方程式の解法 (10月24日、10月31日、11月7日、11月14日、11月21日)

IV. 数値シミュレーションへの応用(モデリングと可視化)(11月28日、12月5日、12日、19日)

以下では、pgplotライブラリは使用しませんので、Visual Studioでの開発、実行が可能ですがgnuplotを使った図示などではLinux上でのプログラミングの方が楽だと思います。

V. 偏微分方程式の解(ラプラス方程式の数値解を例に) (1月9日, 1月23日)

VI. 乱数とランダム過程 (今年は行いません)

VII. プログラミングオンライン試験 (1月30日)


Tips

日本語コードの変換

Windowsでは伝統的にShift-JISが使われていますが、LinuxやWeb上の様々な場ではUTF-8というコード体系が主流になっています。

Linux上では、nkfというプログラムでコード変換を行えます。

nkf -w  変換元ファイル > 変換後ファイル

別の名前にせず、同じファイルに上書きしたいときは、

nkf --overwrite -w  変換したいファイル
とします。 Shift-JISにするには、"-w"に変えて"-s"を、JISにするには"-j"を指定します。

やってみていませんが、

https://uxmilk.jp/47955

によるとWindowsのメモ帳でも可能なようです。

日本語入力

かな漢字変換モードに入るにはCtrlとスペースキーを押します。

うまく行かないとき

かな漢字変換システムのインターフェイスは、Fcixというソフトが担っています。

メインメニューの「設定」⇒「入力メソッドの設定」立ち上げ、内容をチェックします。

かな漢字変換ができない (一瞬、USキーボードのような文字が見える?)

「入力メソッド」項目に「キーボード - 英語(US)が登録されているとうまく行かないようです。これを中程の「<」を使って削除し下の図のように「キーボード - 日本語」と「Mozc」だけにしてみてください。

ホットキーに登録

それに「かな漢字」キーを登録することができます。オンオフキーで未登録のところをクリックし、登録したいキーを(「全角/半角」など)を押すと登録できます。

よく使うアプリへのショートカットをデスクトップに置く

Windowsのショートカットのようなセットができます。アプリを右クリックして、「デスクトップに追加」を選択してください。「パネルに追加」もできます。

操作性の改善 (「重い」を解消する)

KDEは重いです。「見た目」の余計は機能を取り除くことにより、操作性の改善が望めます。メニューから「システム設定」を起動し、「デスクトップ効果」の中から必要がなさそうなものを停止させます。「半透明」をオフにするとだいぶ軽くなると思います。試してみてください。

memcpyとsizeof

配列変数xoldをxにまるごとコピーするのに

  memcpy(x, xold, sizeof(x));
を使っています.変数を宣言したmain関数中で使う場合は問題ないですが,x, xoldなどを別の関数にポインタを渡して処理をする場合は,呼び出した関数内ではsizeof(x)は違う意味を持ち,うまく行きません.

ポインタを渡された側では,sizeof(x)はポインタそのもののメモリの大きさ4(32ビットプログラム作成の場合)を返します. main文の中で利用した場合は,(2*N+2)*8(バイト)を返します.

ということで,わかって使っていれば,配列のコピーはmemcpyで良いのですが(プログラムが短くなるので),まちがいが起きやすいので,for文で各要素をコピーすることを推奨する人もいます.

  for(i=0; i< 2*N+2; i++) x[i] = xold[i];
コンパイラが,連続したメモリーのコピーであることを理解して最適化を行い,処理速度にも問題がない場合が多いようです.(確かめていませんが.)

参考ページ: http://dixq.net/forum/viewtopic.php?f=3&t=8890

プログラムコードを含むレポートをきれいに

プログラムエディタ(kateなど)ではプログラムコードを認識して色付け表示をしてくれます。この色付けされたコードをそのままレポートに貼り付けると読みやすいですが、通常のコピー&ペーストでそうならないことが多いです。

異なるOS間でのコピーは少し面倒ですが、いろいろ試してみてください。

文書作成ソフトとしてLinux上のLibreOfficeを使う

ちょっと長くなるので別ページに書きます。(昨年度推奨した方法です。)

プログラムエディタとしてVisual Studioを使う

試していませんが、Windows上のVisual Studioを立ち上げ、「ファイルを開く」にて作成したCプログラムを開き、Wordにコピー&ペーストします。(多分、色付きのままコピーできると思います。)

プログラムコードをWordファイルにきれいに貼り込む

プログラムを,文書本文に直接挿入すると行間が空きすぎて見難くなりますし,また,説明文との区別もつきにくいです.それは次のようにして改善できます.

Google Drive上の文書作成ソフトGoogleDocsとプラグインCode Blocksを使う

(2018年度は、これをおすすめします。もっとも手間いらずです。)

Googleのアカウントが必要ですが(のちのち便利)、これも良い方法です。

プログラムに色付けするプラグイン"Code Blocks"が最近公開されました。とても便利です。試してみてください。

https://chrome.google.com/webstore/detail/code-blocks/ebieibfdjgmmimpldgengceekpfefmfd

作成した文書はpdf形式でダウンロードできます。

Code Blocksの日本語の紹介記事としては、たとえば、

https://qiita.com/silverlining-yamashita/items/a85302ee3b70fa407eb5

を参照