情報処理II

情報処理Ⅱ
2005年1月25日(火)
レポート課題2の解説
この解説の読み方
 問題文

用意していた解答
別解
解説など

課題の所在



http://www.wakayama-u.ac.jp/~takehiko/
ipii2004/20041221/rook-queen.c.txt
2
設問1(1)
 このプログラムファイルはセミコロンが消去されているので,

コンパイルに失敗する.セミコロンを補って,正しく動くように
したとき,補ったセミコロンの数を答えなさい.
54個



前処理の行にはつかない.
関数の終わりの「}」のあとにもつかない.
for文では,カッコの中にセミコロンがつく.
3
設問1(2)
 またその数であることを(第三者が)確認できる方法をひとつ

挙げなさい.
Emacsの置換機能(query-replace)で,; を ; に置
き換える.


セミコロン挿入前と挿入後の二つのファイルサイズを求め,
その差を計算する.



[Esc] < [Esc] % ; [Enter] ; [Enter] !
ファイルサイズを求めるコマンドは,wc.
ファイルを読み込んでセミコロンの数を出力するプログラムを
自作する.
セミコロンを挿入した各行に,何番目のセミコロンか,コメント
をつける.
4
設問2(1)
 これは何をするプログラムか,簡潔に記述しなさい.

チェス盤にルークまたはクイーンの駒を,それぞれ当たるこ
となく配置するプログラムである.


チェス盤の一辺の長さおよび配置する駒の数は,定数
TABLE_SIZEにより与えられる.
4×4の盤面に4個のルークを配置する方法は24通り,クイー
ンは2通りであることがわかる.
5
設問2(2)

ルークの駒の動き,クイーンの駒の動き
rook
queen
6
設問2(3)

ルークを,当たることなく4個配置した例
rook
rook
rook
rook


クイーンが配置できたならば,それをすべてルークに置き換え
ると,ルークの配置となる.逆は言えない.
ルークは,3個まで置けたら,残り1個の位置は自動的に決ま
る.クイーンは,3個置いたものの,最後にどこにも置けないこ
とがある.
7
設問3(1)
 cc -DTABLE_SIZE=6 -o rook-queen rook-queen.c

を実行してから./rook-queenを実行すると何が出力され
るか,説明しなさい.
チェス盤の一辺の長さおよび配置する駒の数が変更され,
6×6の盤面に6個のルーク配置する方法とクイーンを配置
する方法が出力される.

上のようにコンパイルすると,rook-queen.cの4行目の評
価が(既にTABLE_SIZEが定義されているので)偽となり,5行
目の定数定義が行われなくなる.
8
設問3(2)

盤面と配置の例
rook
queen
rook
queen
rook
queen
rook
queen
rook
queen
rook
5×5にクイーンを
5個置く例
6×6にルークを
6個置く例
9
設問3(3)
 6を5に変えてコンパイル・実行をするとどうなるか,説明しな
さい.

cc -DTABLE_SIZE=6 -o rook-queen rook-queen.c
としたとき
6×6の盤面,ルークは720通り,クイーンは4通り
cc -DTABLE_SIZE=5 -o rook-queen rook-queen.c


としたとき



5×5の盤面,ルークは120通り,クイーンは10通り
ルークの配置の数は,TABLE_SIZEの階乗である.
クイーンの配置の数は,チェス盤のサイズが大きくなっても,
必ずしも増えないことがわかる.
10
設問4(1)
 プログラムファイルの中で,除去可能なカッコ(「(」と「)」,

「{」と「}」,「[」と「]」のいずれか.ただし文字列中とコメント
内を 除く)を見つけ,何行目のどこにあるかを解答しなさい.
省略できる「(」と「)」



87行目の左から3番目の「(」と,それに対応する「)」のみ省略
できる.すなわち,
• if ((*(p->check))(p)) {
は
• if ((*p->check)(p)) {
と書ける.
• 演算子「->」は,「*」よりも優先順位が高いため.
11
設問4(2)

省略できる「{」と「}」







21行目の「{」と27行目の「}」
• 22行目~26行目は「一つの文」だから
22行目の「{」と24行目の「}」
24行目の「{」と26行目の「}」
37行目の「{」と39行目の「}」
48行目の「{」と52行目の「}」
49行目の「{」と51行目の「}」
65行目の「{」と67行目の「}」
• ただし,上述のいずれの「{」と「}」も,省略しない習慣にす
るほうがよい.
12
設問4(3)

省略できる「[」と「]」


Cの文法上, 「[」と「]」を省略して同じ動作になることはない.
このプログラムでは,95行目の「[]」を省略しても問題なくコン
パイルでき,正しく動く.
• main関数の中で,argvを使用していないため.
13
気になったこと

ステープラで右上を綴じているレポートがあった.
標準は「左上」.
情報処理Ⅱ
レポート
情報処理Ⅱ
レポート
標準的な綴じ位置
おかしな綴じ位置
14