工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

【基本情報処理技術者試験】最新問題のテクノロジ系をまったり解く 問7~問10【令和元年度秋試験】

R01基本情報技術者試験 秋期試験に挑戦

キタミ式イラストIT塾 基本情報技術者 平成31/01年 (情報処理技術者試験)


令和元年度 基本情報技術者試験 午前問題 問7~問10

令和元年度 基本情報技術者試験 午前問題 問7

次のBNFで定義される<変数名>に合致するものはどれか。<数字>;:= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |<英字> ::= A | B | C | D | E | F<英数字> ::= <英字> | <数字>| _<変数名> ::= <英字> | <変数名><英数字>

_B39 246 3E5 F5_1

解説

BNF(Backus-Naur form)の問題です。<左辺>::=<右辺>のルールは<左辺>を<右辺>で置き換える。という意味です
問題は、<変数名>に合致する文字列を探しなさいということですので、<変数名>の生成するパターンを見てみます。(生成可能性を調べます。正方向に文字列を生成していく方法と、与えられた文字列をルールまで戻していく(逆にたどる)方法があります)<変数名>は<英字>または、<変数名><英数字>ですが、何も文字が生成されていない時点では、<変数名>は存在していないことになるので、初めは必ず<英字>から始まることになります。
ア~エの文字列を見てみます。

<英数字><英字><数字><数字>
<数字><数字><数字>
<数字><英字><数字>
<英字><数字><英数字><数字>

英字は、A~Fのアルファベットの文字なので、_や数字で始まっている文字列は生成されません。
よって、答えは「エ」
確認しましょう。<英字><数字><英数字><数字><英字>は<変数名>ですので、<変数名><数字><英数字><数字>に置き換えられます。<数字>は<英数字>に置き換えられますので、<変数名><英数字><英数字><数字>に置き換えられます。<変数名><英数字>は、まとめて<変数名>に置き換えられますので、<変数名><英数字><数字>
同様に、<変数名><数字>→<変数名><英数字>→<変数名>
みごとに、変数名まで、逆に変換していけましたので、エ F5_1が正解

令和元年度 基本情報技術者試験 午前問題 問8

A,C,K,S,Tの順に文字が入力される。スタックを利用して、S,T,A,C,Kという順に文字を出力するために、最小限必要となるスタックは何個か。ここで、どのスタックにおいてもポップ操作が実行されたときには必ず文字を出力する。また、スタックの間の文字の移動は行わない。

解説

スタックは、後入れ先出し(LIFO)のデータ構造で有名な人ですね。
PETZだと思うといいです。

Pez ペッツハローキティ ギフトセット 6キャンディ付き ディスペンサー並行輸入品

push(x)で、xをスタックに押し込みます。今まで入っていたデータは、そのまま下に下がります。
pop()で、データを取り出します。一番上にあるデータが取り出されます。
    取り出し           底
①push(3)  |3| | | | | |
②push(5)  |5|3| | | | | 
③push(2)  |2|5|3| | | |
④pop()  2|5|3| | | | | 2が取り出される
⑤push(1)  |1|5|3| | | |
⑥pop()  1|5|3| | | | | 1が取り出される
⑦pop()  5|3| | | | | | 5が取り出される

の順に、操作をするとスタックには3だけ残ります。のようなデータ構造です。
これを何個か使って出し入れすることにより、ACKSTの順にpushしたものを、どうにかしたSTACKの順で取り出すという問題ですね。
まず、一つだけスタック使ったとすると、
|T|S|K|C|A|
の順にスタックに入ります。Sを初めに取り出すのが、どう考えても不可能ですね。1はないです。
次スタック2個にして、Tをよけてみます。
|S|K|C|A| |
|T| | | | |
STまでは取り出せますが、Aが無理臭いですね。
工夫してみても、CKの順番が解決できません。
|S|A| | | |
|T|K|C| | |
3本にしてみます。
|S|A| | | |
|T|K| | | |
|C| | | | |
この順で入れるとSTACKで取り出せますね。
「ウ」が正解。気合で解いちゃったけど、理屈で解く方法はあるかな?

令和元年度 基本情報技術者試験 午前問題 問9

配列Aが図2の状態の時、図1の流れ図を実行すると、配列Bが図3の状態になった。図1の a に入れる操作はどれか。ここで、配列A、Bの要素をそれぞれ  \begin{array}{lr} A( i, j ), & B( i, j )\end{array}
とする。

図1 流れ図


図2 配列Aの状態
図3 実行後の配列Bの状態

B(7-i, 7-j) \leftarrow A(i,j) B(7-j, i) \leftarrow A(i,j)
B(i, 7-j) \leftarrow A(i,j) B(j, 7-i) \leftarrow A(i,j)
解説

配列処理の問題です。配列のインデックスを使って配列にアクセスし、配列Aの配置を時計回りに90度回転させなさいってことですね。
アスタリスクの数も一緒で、形自体は崩れてはいませんので、変換前の図形のある場所と、回転後の図形のある場所は、1対1で対応していると思ってよさそうです。
例えば、図2のFのA(7,1)の位置は、処理実行後は、B(1, 0)に移動したと思ってよさそうです。
何カ所か抜き出してみます。
 A(0, 1) \rightarrow B(1, 7)
 A(7, 1) \rightarrow B(1, 0)
 A(3, 4) \rightarrow B(4, 4)

代入しちゃえばいいですねw
 A(0, 1) \rightarrow B(1, 7)で、計算してみます。

ア B(7-0, 7-1) \rightarrow  B(7, 6)
イ B(7-1, 0) \rightarrow  B(6, 0)
ウ B(0, 7-1) \rightarrow  B(0, 7)
エ B(1, 7-0) \rightarrow  B(1, 7)

エが、合ってそう!
ほかの二つで確かめてみます。
 A(7, 1) \rightarrow B(1, 0)
B(1, 7-7) \rightarrow  B(1, 0) => OK

 A(3, 4) \rightarrow B(4, 4)
B(4 7-3) \rightarrow  B(4, 3) => OK


令和元年度 基本情報技術者試験 午前問題 問10

10進法で5桁の数  a_{1} a_{2}a_{3}a_{4 }a_{5}を、ハッシュ表を用いて配列に格納したい。ハッシュ関数 mod(a_{1} a_{2}a_{3}a_{4 }a_{5}, 13)とし、求めたハッシュ値に対応する位置の配列要素に格納する場合、554321は配列のどの位置に入るか。ここで、 mod(x, 13)は、xを13で割った余りとする。

1
2
7
11
解説

指定されたハッシュ関数を用いて、変数の配置先アドレスを求める問題です。
何も考えずに、指定された通り計算しちゃえばいいです。

54321をハッシュ関数に適用します。

 mod(5+4+3+2+1, 13)=mod(15, 13) = 2

2なので、イが正解

次回予告

次回も、まったり問11から解いていこうと思います。
参考になれば幸いです。
良かったら、押してください!↓↓↓
にほんブログ村 科学ブログ コンピュータサイエンスへ
にほんブログ村