
IT分野の担当教員の山口あかねです。
でも、実は帰ってきたブログのおねーさまです。またばりばり情報処理試験のCASLの解説を書きたいと思います。
IT分野では、私たちの生活の身近なところで日々使われているコンピュータシステムやWebアプリケーションを設計し、開発する勉強を日々行っています。卒業生はシステムエンジニアやWebエンジニアなどとして就職をしています。もちろん国家資格の取得にも力を入れているので資格を取りたい人には最適な分野です。
「平成28年秋 基本情報 午後問12」ばりばり解説!
ではさっそく、平成28年秋基本情報午後問12の解説です。簡単なリスト処理のプログラム問題です。
リスト処理のアルゴリズムがしっかりわかっていて、図が的確に描ければ簡単に解くことができる問題です。
解き方
まずプログラムの説明をざっと読みます。図1にリストの構造が描かれているので「リスト処理の問題かな?」と推測できます。リスト処理の問題は初歩的なものであればデータの検索、挿入、削除の操作をすることが問題になります。
表1に操作が書かれていて、挿入と削除とあるのでこの2つの操作をするプログラムが出題されていることがこの段階で理解できます。2つの操作はGR3のレジスタの値が0か1かでどちらの処理をするかを分岐させるようです。
自分で具体例の図を描くことが必須!
プログラムの説明によりこのあたりのことまでがわかれば、次は図1に従って自分で具体例の図を描いてみます。よく授業の時にも「自分で具体例のお絵かきができれば問題の50%は解答できたようなもの」と言っていますがこの問題では、図を描くことが必須です。
要素数は3個で考えてみました。こんな感じです。
実際のメモリにはこのように配置されているわけですが、これを考えやすいようにリスト構造図にするとこうなります。
次にプログラムですが、次のような構造になっています。ラベルの上に線を描け!飛び先チェック!です。
- 最初のループで該当要素の場所を探索。
- GR3の値に従って「挿入」か「削除」の処理へ分岐。
- 飛び先で該当の処理を行う。
1重ループの後に2方向分岐というとても単純なものです。分岐の際にラベルの配列から該当するラベルを取り出して分岐をする、という方法を使っています。これもよくあるパターンです。
穴埋めの設問1を設問2と一緒に考えるためにまずは、挿入の操作でトレースをしてみましょう。いつものようにレジスタ表を書きます。
8行目に到達した段階で、次の要素に行くためには今GR2に入っている次の要素のアドレス10をGR1に入れて、現在の要素のアドレスとする必要があります。ですので、空欄aにはGR2の内容をGR1に入れる命令が入ります。
解答は(エ) LD GR1,GR2 となります。
LINSラベルに分岐した後の挿入操作では、副プログラムEGETを呼び出し挿入要素のための領域を確保します。図解するとこのようなイメージです。色がついているところが確保された領域です。
副プログラムEGETから戻ってきた段階でのレジスタの状態は下記の通りです。GR4には確保領域の先頭アドレスが入っています。
挿入操作は、図のような操作をします。
- 要素2の次へのポインタを確保領域のアドレスにする。(14番地に18を入れる)
- 確保領域の次へのポインタを要素3のアドレスにする。(挿入要素の1語目:18番地に12を入れる)
- 確保領域にデータの値を入れる。(挿入要素の2語目:19番地に250を入れる)
これを14行目から16行目で行います。2.が15行目で、3.が16行目で行われているので、1.が13行目の空欄で行われれば良いわけです。
具体的に言えば、18を14番地に入れればいいということです。つまり、GR2の内容をGR1の中に入っているアドレスの場所に入れれば良いわけです。
空欄bは(ウ) ST GR4,0,GR1 が解答となります。
空欄cは削除操作です。LDELに分岐した時のレジスタの状態と操作の図解は下記の通りです。
空欄cのコメントによるとGR4に要素3(n=2なので、n+1は3)のアドレス12を入れれば良いということになります。このアドレスは要素2の1語目に入っているので
答えは(イ) LD GR4,0,GR2 となります。
設問2は上記の図で「10行目に到達した時」のレジスタの内容を参照してください。この時にGR2に格納されている値は12です。これは要素3の先頭アドレスですので、
答えは(ウ)となります。
設問3は、プログラム2のデータ領域を図解すると下記のようになります。
更にリスト構造図にすると下記の通りです。2番目の後ろに要素を挿入する場合は次のように記憶内容のアドレスを変更すれば良いのでラベルE3番地の記憶内容は要素2の1語目ということになり、答えは(ア)のα1となります。
2016年(平成28年度)秋期の解説
- Date:
- Tag:
- この記事を
友だちに教える - LINE
- - HatenaBookmark
- GooglePlus