情報処理Ⅱ 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
© Copyright 2024 ExpyDoc