スゴ技

【解説】平成28年度 秋 基本情報技術者試験 【問12】

Blog:IT・情報処理BLOG |

【解説】平成28年度 秋 基本情報技術者試験 【問12】

IT分野の担当教員の山口あかねです。
でも、実は帰ってきたブログのおねーさまです。またばりばり情報処理試験のCASLの解説を書きたいと思います。

IT分野では、私たちの生活の身近なところで日々使われているコンピュータシステムやWebアプリケーションを設計し、開発する勉強を日々行っています。卒業生はシステムエンジニアやWebエンジニアなどとして就職をしています。もちろん国家資格の取得にも力を入れているので資格を取りたい人には最適な分野です。


過去の基本情報技術者試験の解説はこちら


「平成28年秋 基本情報 午後問12」ばりばり解説!

ではさっそく、平成28年秋基本情報午後問12の解説です。簡単なリスト処理のプログラム問題です。

リスト処理のアルゴリズムがしっかりわかっていて、図が的確に描ければ簡単に解くことができる問題です。

解き方

まずプログラムの説明をざっと読みます。図1にリストの構造が描かれているので「リスト処理の問題かな?」と推測できます。リスト処理の問題は初歩的なものであればデータの検索、挿入、削除の操作をすることが問題になります。

表1に操作が書かれていて、挿入と削除とあるのでこの2つの操作をするプログラムが出題されていることがこの段階で理解できます。2つの操作はGR3のレジスタの値が0か1かでどちらの処理をするかを分岐させるようです。

自分で具体例の図を描くことが必須!

プログラムの説明によりこのあたりのことまでがわかれば、次は図1に従って自分で具体例の図を描いてみます。よく授業の時にも「自分で具体例のお絵かきができれば問題の50%は解答できたようなもの」と言っていますがこの問題では、図を描くことが必須です。
要素数は3個で考えてみました。こんな感じです。

h281201

実際のメモリにはこのように配置されているわけですが、これを考えやすいようにリスト構造図にするとこうなります。

h281202

次にプログラムですが、次のような構造になっています。ラベルの上に線を描け!飛び先チェック!です。

h28pro01

  1. 最初のループで該当要素の場所を探索。
  2. GR3の値に従って「挿入」か「削除」の処理へ分岐。
  3. 飛び先で該当の処理を行う。

1重ループの後に2方向分岐というとても単純なものです。分岐の際にラベルの配列から該当するラベルを取り出して分岐をする、という方法を使っています。これもよくあるパターンです。

穴埋めの設問1を設問2と一緒に考えるためにまずは、挿入の操作でトレースをしてみましょう。いつものようにレジスタ表を書きます。

h2812055
8行目に到達した段階で、次の要素に行くためには今GR2に入っている次の要素のアドレス10をGR1に入れて、現在の要素のアドレスとする必要があります。ですので、空欄aにはGR2の内容をGR1に入れる命令が入ります。
解答は(エ) LD GR1,GR2 となります。

h2812056

LINSラベルに分岐した後の挿入操作では、副プログラムEGETを呼び出し挿入要素のための領域を確保します。図解するとこのようなイメージです。色がついているところが確保された領域です。

h2812057

副プログラムEGETから戻ってきた段階でのレジスタの状態は下記の通りです。GR4には確保領域の先頭アドレスが入っています。

h2812059

挿入操作は、図のような操作をします。

h281203

  1. 要素2の次へのポインタを確保領域のアドレスにする。(14番地に18を入れる)
  2. 確保領域の次へのポインタを要素3のアドレスにする。(挿入要素の1語目:18番地に12を入れる)
  3. 確保領域にデータの値を入れる。(挿入要素の2語目:19番地に250を入れる)

これを14行目から16行目で行います。2.が15行目で、3.が16行目で行われているので、1.が13行目の空欄で行われれば良いわけです。

具体的に言えば、18を14番地に入れればいいということです。つまり、GR2の内容をGR1の中に入っているアドレスの場所に入れれば良いわけです。
空欄bは(ウ) ST GR4,0,GR1 が解答となります。

空欄cは削除操作です。LDELに分岐した時のレジスタの状態と操作の図解は下記の通りです。

h2812063

h2812064

空欄cのコメントによるとGR4に要素3(n=2なので、n+1は3)のアドレス12を入れれば良いということになります。このアドレスは要素2の1語目に入っているので
答えは(イ) LD GR4,0,GR2 となります。

設問2は上記の図で「10行目に到達した時」のレジスタの内容を参照してください。この時にGR2に格納されている値は12です。これは要素3の先頭アドレスですので、
答えは(ウ)となります。

設問3は、プログラム2のデータ領域を図解すると下記のようになります。

h281205

更にリスト構造図にすると下記の通りです。2番目の後ろに要素を挿入する場合は次のように記憶内容のアドレスを変更すれば良いのでラベルE3番地の記憶内容は要素2の1語目ということになり、答えは(ア)のα1となります。

h281206

2016年(平成28年度)秋期の解説

Date:

神戸電子の
IT・情報処理学科
についてもっと知りたい!

Webアプリケーション等のシステム管理、設計、開発が行える総合的なITエンジニアを育成する学科です。

学科紹介を見る (神戸電子サイト)

学科紹介イメージ
Info神戸電子からのお知らせ

Tagタグ

Teamライターチーム紹介

神戸電子オフィシャルSNS

オープンキャンパスなどの
誰でも参加OKの楽しいイベント
やブログの最新記事などお届けします!

ページの上へ移動