2017年1月7日土曜日

[平成26年度春] 午後 問9解説

[問題文・解答]


平成26年度4月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
出題分野はソフトウェア開発(C)で、問題の題材はテキストの編集です。
入力ファイル中の文章に対して、単語が行末で切れないように編集するCプログラムについて問われます。Cの文字列とポインターの扱いに関する基礎知識が必要となります。

[設問1]


プログラム中のコメントにも関数format_textで使用される各変数の用途は以下の通りです。
・ch:入力した文字(対象文字)
・lpos:出力処理をしている行での"出力済み"文字数
・sp:strに格納されている文字数(単語の何文字目かを指す)
・str:単語を含む出力用文字列

大まかな処理の流れは以下の通りです。
①入力ファイルと出力ファイルを開く。
②入力ファイルから1文字(ch)読み込み、ファイル終端ならばstrを出力ファイルに書き込み、ファイルを閉じて終了。そうでないならばwhileループ(③以降)へ。
③chが改行文字の場合:strの末尾に改行文字とヌル文字を格納して出力ファイルに書き込む。更にlposとspを0にリセットして②へ戻る。
④chが空白文字の場合:lposにspを加える。最大文字数をオーバーする場合はstrの末尾に改行文字を格納してlposを0にリセットする。その後、strの末尾にヌル文字を格納してファイルに書込む。更に空白文字をファイルに書き込んで、lposに1加算、spを0にリセットして②へ戻る。
⑤chがその他の文字の場合:lpos+spが最大文字数をオーバーする場合は、改行文字をファイルに書き込み、lposを0にリセットする。その後、strの末尾にchを格納して②へ戻る

a) aの部分は上記の処理③のうち、lposを0にリセットする部分にあたるため「ア」が正解です。

b) bの部分は上記の処理④のうち、lposが最大文字数をオーバーするためにstrの末尾に改行文字を格納する部分に当たります。従って「イ」が正解です。

c) cの部分は処理④のうち、spを0にリセットする部分なので「ア」が正解です。

d) dの部分は処理⑤のうち、lpos+spが最大文字数をオーバーするかどうかを判定する部分なので「カ」が正解です。

[答] a) ア b) イ c) ア d) カ

[設問2]


テキスト編集処理の変更は以下の2点です。
①テキスト中の1文字以上の連続する空白文字列で、印字した時に行頭に来る部分は出力しない。
②最初または行頭に来る単語の場合で直前に出力した単語の最後の文字が"."であったときは、単語の直前に空白文字を1つ出力する。

e) 行番号26と27間、28と29間への追加は上記の変更①に対応するもので、現在必ず空白文字を出力している部分を、行頭でない場合のみ空白文字を出力するという処理に変更します。eは行頭でないかどうかを判定する部分なので「lpos != 0」が当てはまります。

f) 行番号8と9間、34と35間への追加は上記の変更②に対応するもので、lchは単語の文字を管理する変数です。fではlchを最後に読み込んだ単語に含まれる文字で更新する必要があるため「lch = ch」が当てはまります。

[答] e) ウ f) ウ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿