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

平成28年 春期 基本情報技術者 午後 問08
問08   必須問題

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

 

 携帯端末上で稼働する簡易メモ帳の機能のうち,メモの編集処理(メモの追加・削除・変更・移動)を 行う部分のプログラムである。図1は,簡易メモ帳に4件のメモ “Aoki”,“Imai”,“Uno”及び“Endo”を登録した場合の表示例である。


図1 簡易メモ帳の表示例

 

〔プログラムの説明〕
(1) メモは,画面に表示可能な1バイトで表現できる文字から成る文字列である。 各メモは,文字列の前に,文字列の長さ( 0 〜 255 )を1バイトの符号なし2進整数の形式で 付け加えて格納する。例えば,メモ“Hello!”は,次の形式で格納する (以下,文字列の長さは 10 進数で表記し,その値に下線を付けて表す)。

(2) メモの格納と管理のために,2個の配列 Memo[],Data[] と,4個の変数 MemoCnt, MemoMax,DataLen,Datamax を使用する。
 各メモは,配列 Data[] の先頭から順に,1要素に1バイトずつ (1) で示した形式で格納し, その格納位置の情報を配列 Memo[] に設定して管理する。
 MemoMax は格納できるメモの最大件数(配列 Memo[] の要素数),MemoCnt は現在 格納されているメモの件数である。
 DataMax は格納できる最大文字数(配列 Data[] の要素数), DataLen は現在格納されている文字数である(文字数には,文字列の長さの情報を含む)。

(3) 簡易メモ帳の画面には,配列 Memo[] の要素番号の昇順に,それが指すメモを取り出して, メモを表示する。図1の表示例は,図3(後出)の状態に対応している。

(4) メモの編集処理を行うための関数の概要は,次の@〜Dのとおりである。 これらの関数が呼ばれるとき,引数の内容や配列の空き状態などは事前に検査済みで, 正しく実行できるものとする。
 なお,以降の図に示す実行例では,MemoMax = 5,DataMax = 25 としている。

@ 関数:resetMemo()
 全てのメモを消去する。MemoCnt と DataLen に 0 を設定することによって, Memo[] と Data[] の全要素を“空き”の状態にする。
 resetMemo() を実行した後の配列・変数の状態を,図2に示す。以降の図で, 網掛け部分 は,その配列要素が“空き”であることを表す。


図2 関数 resetMemo 実行後の配列・変数の状態

 

A 関数:addMemo(整数型:textLen,文字列型:text)
 1件のメモを追加する。長さ textLen の文字列 text を Data[] の最初の空き要素以降に格納し, その格納位置の情報を Memo[] に設定する。図2の状態から,

addMemo(4, "Aoki")
addMemo(4, "Imal")
addMemo(3, "Uno")
addMemo(4, "Endo")

をこの順に実行した後の配列・変数の状態を,図3に示す。


図3 関数 addMemo(4件)実行後の配列・変数の状態

 

B 関数:deleteMemo(整数型:pos)
 1件のメモを削除する。Memo[] の要素番号 pos+1 以降の内容をそれぞれ一つ前の要素に移し, MemoCnt から1を減じることによって,Memo[pos] が指すメモを削除する(表示の対象から除く)。 Data[] 中の参照されなくなったメモは,そのまま残す。図3の状態から, deleteMemo(Ø) を実行した後の配列・変数の状態を,図4に示す。 以降の図で,斜線部分 は,参照されなくなったメモで あることを表す。


図4 関数 deleteMemo 実行後の配列・変数の状態

 

C 関数: changeMemo(整数型:pos,整数型:textLen,文字列型:text)
 1件のメモの内容を変更する。長さ textLen の文字列 text を Data[] の 最初の空き要素以降に格納し,その格納位置の情報を Memo[pos] に 設定することによって,Memo[pos] が指すメモの内容を変更する。Data[] 中の 参照されなくなったメモは,そのまま残す。図4の状態から changeMemo(2,3,"Abe") を 実行した後の配列・変数の状態を,図5に示す。


図5 関数 changeMemo 実行後の配列・変数の状態

 

D 関数: moveMemo(整数型:fromPos,整数型:toPos)
 1件のメモを移動する。Memo[] の要素の並び順を変えて,Memo[fromPos] の 内容を Memo[toPos] の位置に移動する。fromPos < toPos の場合は, Memo[fromPos] の値を取り出し,Memo[fromPos+1] 〜 Memo[toPos] の内容を 前方に1要素分ずらし,取り出した値を Memo[toPos] に設定するという操作を行う。 fromPos > toPos の場合も,これと同様の操作を行う。 図5の状態から moveMemo(2,0) を実行した後の配列・変数の状態を,図6に示す。


図6 関数 moveMemo 実行後の配列・変数の状態

 

〔プログラム〕


基本情報技術者試験


設問1   プログラム中の に入れる正しい答えを,解答群の中から選べ。

 

a,b に関する解答群 ア DataLen            イ DataLen + 1

ウ DataLen + textLen       エ DataLen + textLen + 1

オ textLen            カ textLen + 1

 

c に関する解答群 ア MemoCnt − pos       イ pos − 1

ウ pos            エ pos + 1

 

d に関する解答群 ア fromPos,i ≧ toPos − 1,−1      イ fromPos,i ≧ toPos + 1,−1

ウ toPos,i ≦ fromPos − 1,1       エ toPos,i ≦ fromPos + 1,1

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

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

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

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

基本情報技術者試験


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

 

 このメモの管理方法では,削除されたメモや変更前のメモは,Data[] 中に参照されない状態で残っている。 その結果,DataLen の値は一方的に増加し,やがて Data[] 中の空き要素が枯渇する。 次に示す関数 clearGarbage() は ,Data[] 中の参照されなくなったメモを取り除き, 空き要素を増やすための関数である。

 プログラムの配列・変数が図6に示す状態のときに,clearGarbage() を実行すると, 実行が終了した時点で,Memo[1] の値は ,Memo[2] の値は ,DataLen の値は となる。

 

解答群 ア 0        イ 3          ウ 4        エ 5       オ 7

カ 9       キ 1Ø       ク 12       ケ 13       コ 23

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

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

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


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