総視聴再生時間43万分以上(2017年5月13日現在)の動画で基本情報技術者試験の過去問&キーワード解説!スキマ時間に動画!〜これじょIT〜

PR広告

平成28年度秋 基本情報技術者試験午後 過去問8設問2 データ構造及びアルゴリズム 合格率アップ!動画付き解説!

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

 事務計算においては、数値を見やすく表示(印字)するために、例えば3桁ごとに区切りの","を挿入するなどの編集処理がよく行われる。

 関数 Edit は、指定された編集パターンに従って、数値を編集するプログラムである。表1に、関数 Edit を用いた編集例を示す。例lでは、3桁ごとに区切りの","を挿入している。例2では、例1の編集に加え、上位の空いた桁を"*"で埋めている。例3では、数値の右端から2桁目と3桁目の間に"."を挿入している。

表1 関数Editを用いた編集例

編集パターン
例1 例2 例3
"_□□,□□□" "*□□,□□□" "_□□■.□□"
数値 123 "____123" "****123" "___1.23"
1234 "__1,234" "**1,234" "__12.34"
12345 "_12,345" "*12,345" "_123.45"

 ここで、編集パターン中の文字"□"及び"■"は、数字と対応付けされた制御文字を表している。また、"_"は空白文字を表している。

※実際の問題文は下カッコだが、この説明では_(アンサースコア)を利用しています。ご了承ください。

〔プログラムの説明〕

(1) 関数 Edit は、次の形式で呼び出され、二つの引数をもつ。

  関数:Edit(文字型: Pattern[]、文字型:Value[])

 Pattern[] には、編集パターンの文字列が格納されている。Value[] には、編集する数値を表す文字列が格納されている。各配列の添字は、0から始まる。文字列 Pattern[] のi番目の文字は Pattern[i-1] と表記する。文字列 Value[] についても同様である。

(2) Pattern[] は、1文字以上から成る文字列であって、表示可能な図形文字及び制御文字(""及び"")から構成される。

(3) Value[] は、数値を表す文字列であって、数字"0"~"9"の並びの後に、数値が正又は0なら"+"を、負なら"-"を付加した形式である。数字の個数は、Pattern[] 中の文字""及び""の個数と一致するように、必要であれば前方に"0"を付加する。例えば、Pattern[] の内容が""のとき、Value[] には、数値が123なら"00123+"、0なら"00000+"、-123なら"00123-"を指定する。

(4) 関数 Edit は、Value[] で与えられた数値を Pattern[] に従って編集し、編集結果で Pattern[] を置き換える。

〔編集方法〕

 Pattern[] 中の各文字について、先頭から順に1文字ずつ、次の①~③のいずれか一つの操作を実行していく。

① 関数 Edit が呼び出されたときの Pattern[] 中の先頭の文字(以下、fill文字という)で置き換える。

② Value[] 中の対応する桁の数字で置き換える。

③ 置き換えないで、そのまま残す。

(5) 論理型変数 signif は、on 又は off の値を取る。この変数の実行開始時の値は off であり、Value[] 中に最上位から"0"が連続した後に"0"でない数字が見つかると on になる、などの使い方をする。

(6) 関数 Edit が呼び出されるとき、各引数には正しい値が設定されているものとする。

[プログラム]

○関数:Edit(文字型: Pattern[], 文字型: Value[])

○文字型: fill

○論理型: signif

○整数型: p, v

・fill ← Pattern[0]

・signif ← off

・v ← 0

■ p: 0, p < Length(Pattern[]), 1 /* Length()は引数の文字列長を返す */

|▲ Pattern[p] = "□" or Pattern[p] = "■" /* 表2のケース1〜7の処理 */

||/* 現在の変数・配列要素の内容が。表2のケース1〜7の

|| * どれに該当するかを決定し、そのケースに従って

|| * Pattern[p]とsignifの更新処理を行う。*/

||・v ← v + 1

||ー /* 表2のケース8,9の処理 */

||▲signif = off

|||・Pattern[p] ← fill

||▼

|▼

表2 現在の変数・配列要素の内容に応じた行進処理

平成28年度秋 基本情報技術者試験午後問8 データ構造及びアルゴリズム

注記 網掛け部分は、内容を判定しない。

設問2 次の記述中の に入れる正しい答えを、解答群の中から選べ。

 プログラム中の破線で囲んだ部分の処理(表2のケース1~7の処理)を、詳細なプログラムとして記述すると、次のようになる。

[プログラム中の/* 現在の変数・配列要素の内容が... */部分の処理]

▲signif = off

|▲Pattern[p] = "□" and Value[v] = "0"

||/* 何もしない */

||ー

||▲Value[v + 1] ≠ "+"

|||・signif ← on

||▼

|▼

|▲d

||・Pattern[p] ← fill

||ー

||・Pattern[p] ← Value[v]

|ー

|▲e

||・signif ← off

|▼

|・Pattern[p] ← Value[v]

d、e に関する解答群

  • ア:"1" ≦ Value[v] and Value[v] ≦ "9"
  • イ:Value[v] = "0"
  • ウ:Value[v + 1] = "-"
  • エ:Value[v + 1] = "+"
  • オ:Value[v + 1] ≠ "-"
  • カ:Value[v + 1] ≠ "+"

解説 設問2

dの正解は「イ:Value[v] = "0"」です!

表2をみながら考えます。

表2 現在の変数・配列要素の内容に応じた行進処理

平成28年度秋 基本情報技術者試験午後問8 データ構造及びアルゴリズム

注記 網掛け部分は、内容を判定しない。

dの部分はPattern[p]にfillが入るか、Value[v]が入るかです。

表2を見ると、ケース1から7でfillになるのは、更新処理のPattern[p]がfill文字になるケースなので、ケース1, 2, 3です。

これらの現在の変数・配列要素の内容の共通点は

signifがoffであること

Value[v]が"0"であること

です。プログラムはsignif = offが前提なので、Value[v] = 0であれば、fillになります。

従って、dの正解は「イ:Value[v] = "0"」です!

eの正解は「エ:Value[v + 1] = "+"」です!

eはsignif = onである時に処理が実行されます。

eが該当する場合に、signifがoffとなることに注目します。

ケース1から7でsignifがonはケース6, 7です。

ケース6と7のうちsignifがoffとなるのは、現在の変数・配列要素の内容でValue[v + 1]が"+"となる場合です。

従って、eの正解は「エ:Value[v + 1] = "+"」です!

【参考】コメント入りのプログラム

▲signif = off
|▲Pattern[p] = "□" and Value[v] = "0"
||/* 何もしない */ // ケース1
||ー
||▲Value[v + 1] ≠ "+"
|||・signif ← on // ケース2, 4, 6の場合はsignif = onとなる
||▼
|▼
|▲d イ Value[v] = "0"
||・Pattern[p] ← fill // ケース1, 2, 3の場合はPattern[p] = fill文字となる
||ー
||・Pattern[p] ← Value[v]
|ー // 以下はsignif = on
|▲e エ Value[v + 1] = "+"
||・signif ← off // ケース7の場合はsignif = offとなる
|▼
|・Pattern[p] ← Value[v]
▼

平成28年度秋 基本情報技術者試験過去問午後 目次

PR広告

フェイスブックコメント

平成28年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成28年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成28年度春 基本情報技術者試験 午後 テキスト・動画解説

平成28年度春 基本情報技術者試験 午前 テキスト・動画解説

平成27年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午前 テキスト・動画解説

平成26年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成26年度春 基本情報技術者試験 午前 テキスト・動画解説