ソフトⅡコース担当 ブログのおにーさまこと高橋です。
今回は、平成26年度春期基本情報技術者試験午後問9解説です。
設問1
テキストを編集して出力するプログラムです。
- 単語は空白文字または改行文字で区切られている
- 指定した最大文字数で改行する
- 単語の途中で最大文字数に達した場合、その単語の直前で改行する(単語が次の行の先頭にくる)
- 連続する空白中に最大文字列に達した場合、改行し、残りの空白は次の行の先頭から出力する
最大文字数に達すれば改行するので、その行において何文字目であるか、出力文字位置をカウントしておく必要があります。また、単語の途中で最大文字数に達すれば単語の直前で改行する必要があるので、入力文字を直出力するのではなく、保存しておく必要があります。この保存場所内での保存文字位置をカウントする必要があります。
以上の条件を満たすためには、入力文字種により次の処理を行う必要があります。
- 入力文字が改行文字であれば、保存しておいた単語を出力し、改行します。改行したので、出力文字位置を先頭(0)にします(空欄a)。また、保存しておいた単語を出力したので、保存文字位置を先頭(0)にします。
- 入力文字が空白であれば、保存しておいた単語が確定したので出力します。また、入力した空白自体も出力します。単語を出力したので、保存文字位置を先頭(0)にします(空欄c)。改行していないので、出力文字位置を次に進め(1増やし)ます。
- ただし、最大文字数に達した場合、改行を文字列の後ろに追加してから出力します(空欄b)。このときは保存文字位置を先頭(0)にします。空白が連続しているときも、最初の空白で単語を出力し保存場所は空文字列になっているので、再度出力しても問題ありません。
- 入力文字が単語の一部であれば、文字を保存場所に追加し、保存文字位置を次に進め(1増やし)ます。単語の出力も改行も行っていないので、出力文字位置は変更しません。
- ただし、出力文字位置と保存文字位置の和が最大文字数に達していれば(空欄d)、単語の直前改行、すなわち保存している単語を出力せずに、改行だけ行います。出力文字位置を先頭(0)にします。
入力文字が単語の一部である場合を図示すると、次のようになります。
以上より、空欄aからdには順に、lpos=0(ア)、’\n'(イ)、sp=0(ア)、(lops+sp)>=width(カ)が入ります。
設問2
空欄eのif文を挿入する直後の処理(27行目)は空白(chには空白が入っている)の出力なので、このif文の条件は空白を出力する条件とわかります。先頭では空白を出力しないので、出力するのは先頭でないときです。つまり、spが0でないときとなります。lops!=0(ウ)が入ります。
単語の最後の文字が「.」であれば空白を出力するので、最後の文字を記録しておく必要があります。ここでは、lchを用いています。空欄fには、入力した文字を記憶させる処理です。lch=ch(ウ)が入ります。
2014年(平成26年度)春期の解説
- 平成26年度 春 基本情報技術者試験 【問13】(その2)
- 平成26年度 春 基本情報技術者試験 【問13】(その1)
- 平成26年度 春 基本情報技術者試験 【問12】(その2)
- 平成26年度 春 基本情報技術者試験 【問12】(その1)
- 平成26年度 春 基本情報技術者試験 【問6】
- 平成26年度 春 基本情報技術者試験 【問7】(その2)
- 平成26年度 春 基本情報技術者試験 【問7】(その1)
- 平成26年度 春 基本情報技術者試験 【問4】
- 平成26年度 春 基本情報技術者試験 【問5】
- 平成26年度 春 基本情報技術者試験 【問9】
- 平成26年度 春 基本情報技術者試験 【問8】(その2)
- 平成26年度 春 基本情報技術者試験 【問3】(その3)
- 平成26年度 春 基本情報技術者試験 【問8】(その1)
- 平成26年度 春 基本情報技術者試験 【問3】(その2)
- 平成26年度 春 基本情報技術者試験 【問3】(その1)
- 平成26年度 春 基本情報技術者試験 【問1】
- 平成26年度 春 基本情報技術者試験 【問2】
- Date:
- この記事を
友だちに教える - LINE
- - HatenaBookmark
- GooglePlus