FC2ブログ

記事一覧

平成18年秋期基本情報技術者試験午後問4、疑似言語

本ページは平成18年秋期基本情報技術者試験午後問4、疑似言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************

次のプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラム1の説明〕

 副プログラムTabSpc1は,タブ文字を展開するプログラムである。

(1) TabSpc1は,文字型配列Srcを先頭から調べ,Src中のすべてのタブ文字をそれぞれ一つ以上の間隔文字(スペース)に置換して,文字型配列Dstに格納する。タブ文字以外の文字は,そのままDstに格納する。

(2) 文字型配列の各要素には,文字を1文字ずつ順に格納し,最後の文字の次の要素にはシステム定数であるEOSを格納する。なお,配列の添字は1から始まり,添字の値を文字位置と呼ぶ。

(3) Src中にタブ文字が出現した場合,次の文字が最も近い右のタブ位置に格納されるように,タブ文字を一つ以上の間隔文字に置換して,Dstに格納する。ここで,タブ位置とは,引数で渡されるタブ間隔(≧2)を用いた次の式で計算される文字位置である。

タブ位置 = タブ間隔 × n + 1  ( n = 1,2,… )

(4) タブ間隔が4のときの実行例を図1に示す。“j”をDstのタブ位置である文字位置13(= 4 × 3 + 1 )に格納したのでは, タブ文字が間隔文字に置き換わらないので,最も近い右のタブ位置である文字位置17(= 4 × 4 + 1 )に格納する。

giji_01_01.jpg
    注 TABはタブ文字を,▼はタブ位置を,△は間隔文字を表す。

    図1 タブ間隔が4のときのTabSpc1の実行例

(5) Dstは十分に大きいものとする。

(6) 副プログラムTabSpc1の引数の仕様を表1に示す。
   表1 TabSpc1 の引数の仕様
引数データ型入力/出力意味
Src[]文字型入力対象となる文字型配列
Dst[]文字型出力出力する文字型配列
TabGap整数型入力タブ間隔(≧ 2 )


〔プログラム1〕
giji_01_02.jpg

設問1 プログラム1中の giji_01_03.jpg に入れる正しい答えを,解答群の中から選べ。

a に関する解答群

ア Didx + 1              イ Didx - 1
ウ Didx + TabGap + 1         エ Didx + TabGap - 1

b,c に関する解答群

ア Didx ← Didx + 1          イ Dst[Didx] ← Src[Sidx]
ウ Dst[Didx + 1] ← Src[Sidx]     エ Dst[Didx] ← Src[Sidx + 1]

設問2 プログラム1を改造して,タブ位置を任意の文字位置に指定できるようなプログラム2を作成した。ただし,タブ位置は2以上の値で,隣り合うタブ位置の間隔も2以上とする。タブ位置は引数で渡される整数型配列TabSetに昇順に格納され,最後のタブ位置が格納された次の配列要素には-1が格納されている。

 なお,最後のタブ位置以降にタブ文字が出現した場合は,一つの間隔文字に置換する。

 図1と同じ動作をさせる場合のTabSetの内容を図2に,プログラム2に示す副プログラムTabSpc2の引数の仕様を表2に示す。

 プログラム2中の giji_01_03.jpg に入れる正しい答えを,解答群の中から選べ。ただし,giji_01_04.jpggiji_01_05.jpg には設問1の正しい答えが入っているものとする。

TabSet[1]  5
TabSet[2]  9
TabSet[3]  13
TabSet[4]  17
:      :
TabSet[m] -1

図2 整数型配列 TabSet の内容(図1と同じ動作をさせる場合)

     表2 TabSpc2 の引数の仕様
引数データ型入力/出力意味
Src[]文字型入力対象となる文字型配列
Dst[]文字型出力出力する文字型配列
TabSet[]整数型入力タブ位置を格納した整数型配列


〔プログラム2〕
giji_01_06.jpg

d,e に関する解答群

ア TabPos ← TabSet[Tidx]
イ TabPos ← TabSet[Tidx] + Didx
ウ TabPos ← TabSet[Tidx] - Didx
エ Tidx ← Didx + 1
オ Tidx ← TabPos + 1
カ Tidx ← Tidx + 1

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************

********************************************************************************
解答

設問1 答 aエ 答 bア 答 cイ 設問2 答 dア 答 eカ
********************************************************************************
解説

プログラム1について解説を行う。

Sidx←1
Didx←1
Sidx及びDidxに1を代入する。変数を初期化している。

Src[Sidx]≠EOS
Src[1]から内容を確認していき、EOSになるまでループする。問題文より、「最後の文字の次の要素にはシステム定数であるEOSを格納する。」とあるので、Srcの文字列をすべて読み込んだ後に、ループを終了する。

Src[Sidx]=TAB
Src[Sidx]の文字がTABであるかの判別を行う。

{ a }
図1の例では、Src[3]の時、Didxは3である。この時、Didx[3]、Didx[4]にスペースが
セットされる必要がある。

解答がアの時、
図1の例ではTabGapが4である。また、Src[3]の時にDidxは3であるから、
(Didx+1)÷4 = (3+1)÷4=1
TabPos←TabGap×N+1=4×1+1=5
以下の処理でTabPosまで間隔文字が入るので、アの場合は正しく処理が行われることがわかる。

解答がイの時、
同様に図1の例では
(Didx-1)÷4 = (3-1)÷4=0
TabPos←TabGap×N+1=4×0+1=1
となり、正しく処理が行われない。

解答がウの時、
同様に図1の例では
(Didx+TabGap+1)÷4 = (4+4+1)÷4=2
TabPos←TabGap×N+1=4×2+1=9
となり、正しく処理が行われない。

解答がエの時、
同様に図1の例では
(Didx+TabGap-1)÷4 = (4+4-1)÷4=1
TabPos←TabGap×N+1=1×4+1=5
となり、この場合も正しく処理が行われることがわかる。よって、解答はアかエとなる。

同様にして、Src[12]の時、Didxは13である。

解答がアの時、
(Didx+1)÷4 = (13+1)÷4=3
TabPos←TabGap×N+1=3×4+1=13
となり、解答として相応しくない。

解答がエの時、
(Didx+TabGap-1)÷4 = (13+4-1)÷4=4
TabPos←TabGap×N+1=4×4+1=17
となる。よって、解答はエとなる。

aの解答はbおよびcの解答がわからないと、解答を導くことは難しい。プログラムを読んでいく時は上から順に内容をおっていかなければならないが、後の処理が理解できて初めて前の処理の意味がわかることもある。プログラムの内容が理解できなくても、そのまま読み飛ばして、次の処理を見ていくことも場合によっては必要である。

上記の解説では解答から消去法で答えを導いたが、実際のプログラミングでは自身でプログラムを考える必要があるので、以下では問題文から数式を検討することにする。

タブ位置=タブ間隔×n+1
だから、n=1,2,3,4の時、
タブ位置=5,9,13,17となる。

また、文字位置が5の時は、5から次の文字を開始してしまうと、間隔文字が入らないので、以下のような関係となる。
nタブ位置文字位置
151~4
295~8
3139~12
41713~16


解答a欄ではタブ間隔で割ってnを求めている。

例えば文字位置=1の場合に
文字位置÷タブ間隔
をすると結果は0となってしまうから、結果に1を足す必要がある。結果に1を足すことと、文字位置にタブ間隔を足すのは同じことであるから、
(文字位置+タブ間隔)÷タブ間隔
となる。ただし、文字位置が4の時に、上記の式ではnが2となってしまう。
よって、式は
(文字位置+タブ間隔-1)÷タブ間隔
となる。このような場合は特に両端の値に着目するとよい。1を引いたので間隔の小さい値も検証する。例えば、文字位置が1の時
(1+4-1)÷タブ間隔
で確かにこの式で正しい結果が得られることがわかる。

このように具体的な値を書き出して、そこから規則性を見出していくとよい。

{ b }
図1の例で、Src[12]の時、Didxは13である。この場合
(Didx+TabGap-1)÷4 = (13+4-1)÷4=4
TabPos←TabGap×N+1=4×4+1=17
TabPosまで間隔文字をセットすればよい。

Dst[Didx] ←SPC
でDst[Didx]に間隔文字をセットしているから、次の処理でDidxをカウントアップしながらDidxがTabPosになるまでループする。よって、解答はアとなる。

{ c }
この処理は、Src[Sidx]がTABでない時の処理である。この場合はSrcの値をDstにセットするとよい。よって、解答はイとなる。

プログラム2
図1の例で、Src[3]の時にTABがセットされているので、この場合を検討する。

TabPos←Didx+1
でSrc[3]の時にDidxは3なので、TabPosには4がセットされることになる。

Didx < TabSet[Tidx]
この時、Tidxは1であるから、問題の例ではTabSet[Tidx]に5がセットされている。よって、この条件式は真となる。

{ d }
Didx < TabSet[Tidx]が真の場合、TabSet[Tidx]まで間隔文字をセットする必要がある。ただし、実際に間隔文字をセットするのは{ b }近辺の処理である。

よって、{ b }の処理が行われるには
Didx < TabPos
の条件が真になる必要がある。つまり、TabPosにTabSet[Tidx]をセットするとよい。よって、解答はアとなる。

{ e }
次のTabsetの値を取得できるようにしなければならないので、Tidxをカウントアップすればよい。よって、解答はカとなる。

参考:平成18年秋期基本情報技術者試験午後問4

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************
関連記事

コメント

コメントの投稿

非公開コメント

adwords

外部リンク

カテゴリーメニュー 改

当社のシステム開発の詳細

当社はaccess-excelでの小規模システム開発を中心に年間に50社以上の開発実績がございます。詳細は06-6599-8890ないしinfo@ai-light.comまで今すぐお問合せください

メールフォーム

こちらからも簡単にメールを送付できます。当社のサービスに関してご質問がございましたら、よろしければ、ご利用ください。直接お電話の場合は06-6599-8890までご連絡ください。

名前:
メール:
件名:
本文:

検索フォーム

広告

最新記事

Lc.ツリーカテゴリー

全記事表示リンク

プロフィール

itkeieinews

Author:itkeieinews
ITと経営ニュースへようこそ!
アイライトIT経営研究会
株式会社アイライト
電話でのお問合せは06-6599-8890
Email:info@ai-light.com

お気に入り

本サイトをそのまま消してしまうと、もう探せなくなってしまうかもしれません。 当社はいずれお役に立てることがあるかと思いますので、よろしければお気に入りにご登録ください。

ブロとも申請フォーム