基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成14年 秋期 基本情報技術者 午後 問02
問02   テキストエディタの実現

 次のプログラムの説明を読んで,設問1〜3に答えよ。

〔プログラムの説明〕

 テキストエディタを実現するプログラムである。

(1) このプログラムが扱うことができるテキストは,1行は 80 文字まで,行数は MAX までである。

(2) 行の操作用に次の大域変数を定義する。

@ CP: 処理の対象となる行を指し示す変数。

(3) 行の操作用に次の副プログラムを定義する。

@ INSERT(x): 新たな行 x を,CP が指し示す行に挿入する。 挿入によって,元の行以降は1行ずつ繰り下がる。

A DELETE(): CP が指し示す行を削除する。削除によって,次の行以降は 1行ずつ繰り上がる。

B LAST(): 最後の行の行番号(テキストの行数)を返す。 テキストが空の場合は 0 を返す。

C GET(): CP が指し示す行の文字列を返す。

(4) その他,CP の操作などのために,複数の副プログラムが定義されている。

基本情報技術者試験


設問1 文字列型の配列 LINE[i]( i=1,2,… ,MAX )と, 整数型の変数 TAIL を用いてプログラムを作成した。 i 行目の文字列 Li は LINE[i] に格納し, 変数 TAIL には常に最後の行に対応した配列要素番号(空の場合は0)を格納する。
 変数 CP の内容は,処理の対象となる行を格納した配列要素番号である。 行数に関係なく,計算量(オーダ)を一定にすることが可能な副プログラムを, 解答群の中からすべて選べ。


     図1 配列を用いた実現例

解答群

ア DELETE()    イ GET()    ウ INSERT(x)    エ LAST()

解答 ←クリックすると正解が表示されます

基本情報技術者試験


設問2  図2のように,ポインタを用いた双方向リストで実現するようにプログラムを変更した。 リストの第i要素は,i−1行目を格納した要素へのポインタ, i 行目の文字列 Li ,i+1行目を格納した要素へのポインタで構成される。 対象となる要素がない場合には,ポインタの値として 0 が格納される。
 変数 HEAD は1行目を格納した要素を,変数 TAIL は最後の行を格納した要素を 指し示すポインタである。
 変数 CP は,処理の対象となる行を格納した要素へのポインタである。 行数に関係なく,計算量(オーダ)を一定にすることが可能な副プログラムを, 解答群の中からすべて選べ。


     図2 ポインタを用いた実現例

解答群

ア DELETE()    イ GET()    ウ INSERT(x)    エ LAST()

解答 ←クリックすると正解が表示されます

基本情報技術者試験


設問3  次の記述中の に入れる正しい答えを, 解答群の中から選べ。

 ポインタを用いる双方向リストを,三つの配列を用いて実現した。 図3は,最大行数が10の場合の例である。 変数 CP には処理の対象となる行を格納した配列要素番号が, 変数 HEAD には最初の行を格納した配列要素番号が, 変数 TAIL には最後の行を格納した配列要素番号が, 変数 EMPTY には空リストの先頭の配列要素番号が格納されている。

行 L1,L2,L3,L4, L5が図3の状態で格納されていて,CP=8 のとき, DELETE()を実行して行 L3を含んだ配列要素を削除すると, HEAD と TAIL の値には変更がなく,EMPTY=8,PREV[9] = ,NEXT[2] = , NEXT[8] = となる。 ここで,削除された配列要素は,空リストの先頭に追加するものとする。


     図3 配列を用いた双方向リストによる実現例

解答群

ア 0    イ 1    ウ 2    エ 3

オ 7    カ 8    キ 9    ク 10

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]