今回はウォーミングアップとして, C言語とタートルグラフィックスの超基本的な使い方を体験しよう.
実習を始める前に, 準備が必要です.(前回,実行済みのハズ.)
現在の世界には,多種多様なプログラミング言語が存在する. その中で最も多く実用されているもののひとつがCである. 最近開発されたプログラミング言語の多く(C++,C#,Java,等)は, Cから派生したものである. また,派生とまでは言えなくとも,Cからの影響を強く受けている言語も多い (JavaScript,PHP,Python,等). つまり,Cを勉強しておけば, 他の複数のプログラミング言語の修得は, かなり容易なものとなるだろう.
まず,ソースファイルを編集する:
$ gedit hello.c & # hello.c はソースファイル名
ソースコード(ソースファイルの内容)の例:
#include <stdio.h> // 関数 printf( ) 等を使うとき必要 int main(void) // メイン関数:プログラムの本体 { int i; // カウンタ変数の宣言 for (i = 0; i < 10; i++) { // 10回繰り返し.ここから printf("%02d: Hello\n", i); // 数値 i と文字列「Hello」を表示して改行 } // ここまで return (0); // 関数の終了 }
各行の先頭の空白は,[Space] でも良いが [Tab] を推奨. 決して,全角の空白は使わないこと.
ソースコードにおける記号「#」はコメントではない. 入力が必要.
記号列「//」以降(行末まで)については,C言語のコメント. 入力は不要.
次に,ソースファイルをコンパイルし,実行形式ファイルを生成する:
$ cc hello.c -o hello # 実行形式ファイル hello を生成 $ ls # ファイルの存在を確認 hello* hello.c # 記号「*」はファイル名の一部ではなく,ファイル種類の識別記号
最後に,実行形式ファイルを実行する:
$ ./hello 00: Hello 01: Hello 02: Hello ... 09: Hello
参考資料: 3J プログラミング言語 II - 釧路高専本科 3J の授業テキスト
タートルグラフィックス(turtle graphics)は, 初級者向けプログラミング教材として古(いにしえ)から伝わるものである. 元祖のタートルグラフィックスでは, 専用のプログラミング言語 LOGO が使われていた.
参考資料:
通常のプログラミングでは, コンピュータを制御するための命令を記述する. しかし,コンピュータの内部状態は人間には見えづらいので, プログラミングの学習には, かなりの想像力・推理力・忍耐力が必要となる. つまり,一般人は挫折しやすい.
一方,タートルグラフィックスでは, タートル(カメ)を制御するための命令を記述する. (タートルの代わりに,実物のロボットでもよいし, 仮想の CG キャラクタでもよい.) この方法だと,状態の変化が目に見えるので,多少の試行錯誤を経るだけで, すぐにプログラミングを理解できるようになる. 実際,子供(小学校低学年レベル)でも容易に修得できたそうだ.
さすがに諸君は大人(高専専攻科=大学高学年レベル)なので, 本授業ではハードルを上げ,タートルをC言語で制御することにした. なお,タートルグラフィックスの機能は,本来のC言語には備わっていないのだが, 本授業では,担当教員作成の kame3d ライブラリによって提供されている. (前回,インストール済みのハズ.)
ライブラリとは,プログラム部品の詰め合わせセットのことである. また,C言語の場合,プログラム部品は関数と呼ばれている.
つまり,C言語のプログラミングとは, それらの関数を適切に組み合わせる作業である. さらに上流工程として,新たな関数の作成も必要となる場合もある.
まずは,サンプルプログラムを編集・実行してみよう.
ソースファイル sample.c の編集:
$ gedit sample.c &
#include "kame3d.h" // タートル関数を使うとき必要 int main(void) { Init("Kame3D Sample Program"); // ライブラリを初期化し,ウィンドウタイトルを設定 // ここからタートル制御 Goto(-1.0, -1.732); Move(2.0); Turn(120.0); Move(4.0); Turn(-120.0); Move(2.0); Turn(-120.0); Move(4.0); Turn(120.0); Goto(0.0, 0.0); // ここまで Play(); // アニメーションを開始 return (0); }
コンパイルと実行:
$ cc sample.c -o sample -lkame3d # kame3d ライブラリをリンク(結合)してコンパイル または $ cckame sample.c -o sample # 省略形のコンパイル.「実習の準備」として ~/.bashrc に設定した $ ./sample &
キー操作:
タートルのアニメーション表示やキーボードの入力処理は, 関数 Play() 内にすでに実装されている.
タートルは,次のような制御関数(命令)にしたがって移動し, キャンバスに軌跡を描く:
なお,標準の初期状態では, キャンバスサイズは 10×10, 進行方向は右である.
sample.c を元にして, 多角形や文字(氏名やイニシャルなど)を描くような タートルグラフィックスプログラムを自由に作成せよ.
担当教員へレポートを送信せよ:
# 撮影対象ウィンドウを最前面に出しておき... $ import ユーザ名.png # 撮影 # 撮影対象ウィンドウ内で左クリック.
$ display ユーザ名.png & # 撮影結果の確認
次回の予習...
制御構造とは, 処理手順(プログラムの段取り)の組み合わせパターンのことであり, 次の三種類が基本となる:
これらを適切に組み合わせることによって, 動作の複雑なプログラムのソースコードを 短く楽に記述できるようになる.
制御構造の考え方を楽しく理解するために, アルゴロジック を試してみるとよい.