平成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 を使用する。
(3) 簡易メモ帳の画面には,配列 Memo[] の要素番号の昇順に,それが指すメモを取り出して, メモを表示する。図1の表示例は,図3(後出)の状態に対応している。
(4) メモの編集処理を行うための関数の概要は,次の@〜Dのとおりである。
これらの関数が呼ばれるとき,引数の内容や配列の空き状態などは事前に検査済みで,
正しく実行できるものとする。
@ 関数:resetMemo()
図2 関数 resetMemo 実行後の配列・変数の状態 A 関数:addMemo(整数型:textLen,文字列型:text) 1件のメモを追加する。長さ textLen の文字列 text を Data[] の最初の空き要素以降に格納し, その格納位置の情報を Memo[] に設定する。図2の状態から,
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 実行後の配列・変数の状態 〔プログラム〕
a,b に関する解答群 ウ DataLen + textLen エ DataLen + textLen + 1 オ textLen カ textLen + 1 c に関する解答群 ウ pos エ pos + 1 d に関する解答群 ウ toPos,i ≦ fromPos − 1,1 エ toPos,i ≦ fromPos + 1,1
このメモの管理方法では,削除されたメモや変更前のメモは,Data[] 中に参照されない状態で残っている。 その結果,DataLen の値は一方的に増加し,やがて Data[] 中の空き要素が枯渇する。 次に示す関数 clearGarbage() は ,Data[] 中の参照されなくなったメモを取り除き, 空き要素を増やすための関数である。
プログラムの配列・変数が図6に示す状態のときに,clearGarbage() を実行すると, 実行が終了した時点で,Memo[1] の値は ,Memo[2] の値は ,DataLen の値は となる。 解答群 カ 9 キ 1Ø ク 12 ケ 13 コ 23
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||