アドプロ 2018.04.23

ウォーミングアップ

今回はウォーミングアップとして, C言語とタートルグラフィックスの超基本的な使い方を体験しよう.

実習を始める前に, 準備が必要です.(前回,実行済みのハズ.)


C言語について

現在の世界には,多種多様なプログラミング言語が存在する. その中で最も多く実用されているもののひとつがCである. 最近開発されたプログラミング言語の多く(C++,C#,Java,等)は, Cから派生したものである. また,派生とまでは言えなくとも,Cからの影響を強く受けている言語も多い (JavaScript,PHP,Python,等). つまり,Cを勉強しておけば, 他の複数のプログラミング言語の修得は, かなり容易なものとなるだろう.

現状,コンピュータの性能を最大限に活用する必要がある場合, たとえば,OS やビデオゲームの開発では, 現実的な選択肢はC(C++,C#,等も含む)だけである.

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 を元にして, 多角形や文字(氏名やイニシャルなど)を描くような タートルグラフィックスプログラムを自由に作成せよ.

担当教員へレポートを送信せよ:

スクリーンショットのためのコマンド

撮影対象が最前面になく,他のウィンドウで隠されていると, 画像の一部が欠落してしまう場合がある. 提出前に必ず,完全な画像が作成できていることを確認せよ.

制御構造について

次回の予習...

制御構造とは, 処理手順(プログラムの段取り)の組み合わせパターンのことであり, 次の三種類が基本となる:

これらを適切に組み合わせることによって, 動作の複雑なプログラムのソースコードを 短く楽に記述できるようになる.

制御構造の考え方を楽しく理解するために, アルゴロジック を試してみるとよい.

アルゴロジックの実行には,Adobe Flash Player が必要. 残念ながら,この授業の計算機環境では利用できないかもしれない. 自宅や研究室でどうぞ.

(c) 2018, yanagawa@kushiro-ct.ac.jp