基本情報技術者試験な備忘録(午後・タブ文字を展開するプログラム)

パソコン素人です。
アルゴリズム素人です。

基本情報技術者試験の問題・テキスト等を見て気になったメモです。
間違っているのであまり見ないで下さい。すみません。


H18年 秋期 基本情報技術者試験 午後 問4
注意:PDFしかないので、貼り付けしません。以下解くときに気になったただのメモです。

 

<自分はVBA(エクセル)が多く使うから感覚が違う話>


プログラムの説明に 「タブ文字を展開するプログラム」とある。

ソース「Src」にタブを含んだ文字列(配列)があり、それをデータストリング「Dst」(配列)に規則的に入れていこうという問題。

Src

a b TAB c d e TAB f g h i TAB j EOS
こんな感じ


データストリング「Dst」は、あらかじめ、タブ位置が決まっている。問題ではタブ間隔が4の図がある。

Dst
□□□□■□□□□■□□□□■□□□□■□□□□■□
こんな感じ。

で、第一印象(間違い)は、ソース「Src」をデータストリング「Dst」にコンパクトに納めるのかなと思った。
でも、データストリング「Dst」には、決まったタブ位置があり、空いた要素には、間隔文字で穴埋めをする。
一定の間隔にきれいに揃えることが目的らしい。

この問題の配列の添え字(インデックス)は、1始まりなので、自分にとっては楽。


で、疑似言語のプログラムには、Src[sidx]やDst[Didx]とかある。

まあ、Src[sidx]は、ソース

Dst[Didx]は、データストリングのindexだろう。

・最初に気づきたかったこと。
Src[sidx]とDst[Didx]のindexの回り方
■Src[sidx]≠EOS
とあったので、while・・・ end whileだと分かり、Sidxの回り方は分かった。
しかし、Dst[Didx]は
・Didx ← Didx+1
とあったのを見落としていた。
■とか▲だとややこしいし、
問題のプログラムの
・N ←(      )÷ TabGap
・TabPos ←TabGap * N +1
とかに惑わされて、Didx1は、データストリング「Dst」が既にタブ位置が決まっているので、
1個1個回すのでなく、まとめていれるとかなのだろうと勘違いした。
(そう思ったのは、Nとか、TabGapとか変数が多かったから。何となく自分だったら、こんな風にしないかなとか思った。)

で、字ずらを眺めても答えは出ないので、一回試しで考える。
設問1 aに関する回答群(穴埋め)
そうすると、選択肢で当てはまるものがあった。
 ア Didx + 1
でも、これは不正解。
 エ Didx + TabGap -1
も該当する。
で答えは、エ。
回答に飛びついてはいけないが、どこまで吟味すればいいのか。
(他のパターンを考えたり(3回目のタブ)。結構、途中小数になって端数処理するなど自信がなくなる。)

設問1 は他に穴埋めがb cとあるが、そっちは、感覚的に選びやすい。
(データストリング「Dst」の書き込み。)

答えが分かってしまえば、ああそうかと思えるがなかなか。

で、この問題も従来の午後試験なので、設問2がある。
設問1が分からなければ、解けないだろう。
(2023年度から午後試験は、科目Bになり、時間も短くなるので、設問2はないのではないか。)

 


<自分はVBA(エクセル)が多く使うから感覚が違う話>
何問か、午後試験を解いてみたが、どうだろう、この問題は、配列の考え方が、pythonとかjavaとかならいいのかもしれない。
(配列を最初から作成するイメージ。)

同じようにVBAもできるだろうけど、エクセルなら、直接セルに書き込めばいいのではないかとすぐ思う。
そう考えると、プログラムの書き方も違ってくる気がする。

あと、他の問題でも、「配列に挿入する」とか文言が出てくると、「文字列などを配列に挿入するためのプログラム」かな
とか思うが、実際には、「配列を昇順」と書いてあり、よくよく読むと「並び替え(ソート)」の問題だったりする。
(並び替えをする時に、配列を1個1個足しながら昇順にする(挿入する)とか、過程で挿入が出てくるとか。)

なんとなく、エクセルのシートを使う場合は、そんな風にしないなとか思いながら、勉強してます。
素人なのですみません。