基本情報技術者過去問

平成17年 午後 問4

最終更新日 2005/11/28
webmaster@tomnetwork.net

Tomのネットワーク勉強ノート
 過去問
  基本情報技術者過去問(午前・午後)
   基本情報技術者過去問 平成17年 午後 問4

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

〔プログラムの説明〕

 中置表記法による正しい数式を,スタックを用いて後置表記法に変換する副プログ
ラムtoPostfixである。

(1)例えば,中置表記法による数式4×(9+3)は,toPostfixの処理の結果,後置
 表記法による数式493+×に変換される。

(2)中置表記法によるここでの数式は,1けたの数字“0”〜“9”,演算子“+”,
 “-”,“×”,“÷”及び括弧“(” , ”)”の各要素からなる。各要素は表1に示す変
 換の優先度をもつ。ここで,数値が大きいほど優先度が高い。プログラムでは,各
 要素を文字として扱い,文字型の配列Exptextに1要素ずつ格納している。また,
 表1に示す要素以外に,スタックの底を示すスタック制御文字EOSを使用し,そ
 の優先度を-1とする。

     表1 変換の優先度

   _
数式の要素 優先度
4
0,1,・・・,9 3
×,÷ 2
+,- 1
0

(3)変換結果の後置表記法の数式は,文字型の配列Postfixに1要素ずつ格納される。

(4)toPostfttxは,スタックを初期化して,Exptextの先頭の要素から順番に次の
 @,Aの処理を繰り返し,Exptextの要素をすべて処理したら,スタックに残って
  いるすべての数式の要素を順に取り出してPostfttxに格納する。
 @Exptext[ i ]の優先度がスタックの先頭要素の優先度以下で,かつスタック
  の先頭要素が“(”でない間,スタックから要素を取り出してPostfixに格納する。 
 AExptext[ i ]が“)”でなければ,Exptext[ i ]をスタックに積み,“)”であ
  れば,スタックから要素を一つだけ取り出す。

(5)toPostfixの引数の仕様を,表2に示す。すべての配列の添字は,0から始まる。

    表2 副プログラムtoPostfixの引数の仕様

   _
変数名 入力/出力 意味
Exptext[ ] 文字型 入力 中置表記法による数式が格納されている1次元配列
Textlen 整数型 入力 中置表記法による数式の要素数
Postfix[ ] 文字型 出力 後置表記法に変換後の数式が格納される1次元配列
Postfixlen 整数型 出力 後置表記法に変換後の数式の要素数

(6) toPostfixは,スタックを初期化する手続initStack,数式の要素をスタッ
 クに積む手続push,スタックから取り出す関数pop,スタックの先頭要素の値を
 返却する関数top,及び引数で指定された要素の優先度を返す関数getPriority
 を使用する。initStack,push,pop,top及びgetPriorityの仕様を表3に示す。

    表3 toPostfixで使用する手続/関数の仕様

   _
手続/関数 仕様
initStack() スタックを初期化し,スタックにEOSを格納する。
push(文字型:element) スタックにelementを格納する。
文字型:pop() スタックから要素を取り出し,その要素を返却する。
文字型:top() スタックの先頭要素の値を返却する。
整数型:getPriority
  (文字型:element)
引数で指定された要素elementの優先度を返却する。


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

  aに関する解答群

      ア i:0, i < Textlen, 1  イ i:0, i ≦ Textlen, 1
      ウ i:1, i < Textlen, 1  エ i:1, i ≦ Textlen, 1

 bに関する解答群

      ア i ← i + 1   イ i ← i - 1
      ウ k ← k + 1  エ k ← k - 1

 cに関する解答群

      ア sflag = true  イ sflag = false
      ウ work = EOS  エ work ≠ EOS

 dに関する解答群

      ア i  イ i + 1  ウ i - 1
      エ k  オ k + 1 カ k - 1

設問2 Exptextの内容が次の数式のとき,プログラム中のαで示す箇所での
    Postfixの内容として正しい答えを,解答群の中から選べ。

    Exptextの内容
2 + 4 × 3 + 5 × 6

    解答群

      ア 24 + 3        イ 24 + 3 × 5
      ウ 24 + 3 × 56 ×  エ 24 + 3 × 56 × +

設問3 引数で指定された要素の優先度を返す関数getPriorityのプログラムを次
    に示す。プログラム中の【    】に入れる正しい答えを,解答群の中から選べ。

〔プログラム〕

 ○ 整数型:getPriority ( 文字型: element )
 /* 関数 getPriorityは,数字,演算子,括弧又はスタック制御文字を
    elementで受け取り,その優先度を整数型で返す */

 /* 文字型の配列elemを初期化する */
 /* 添字の範囲は0〜16である */
 ○ 文字型:elem[0:16]← { “0” , “1” , “2” , “3” , “4” , “5” , “6” , ”7” ,
              “8” , ”9” , ”+” , ”-” , ”×” , ”÷” , ”(” , ”)” , EOS}
 /* 整数型の配列priorityをelemの各要素の優先度で初期化する */
 /* 添字の範囲は0〜 16である */
 ○ 整数型:priority[0:16] ← {3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 2 , 2 , 4 , 0 , -1}

 ○ 整数型:i

 

 解答群

      ア element = elem[ i ]      イ element = elem[ i - 1 ]
      ウ element = EOS         エ element = priority[ i ]
      オ element = priority[ i - 1 ]  カ element ≠ elem[ i  ]
      キ element ≠ elem[ i - 1 ]

Tomのネットワーク勉強ノート
 過去問
  基本情報技術者過去問(午前・午後)
   基本情報技術者過去問 平成17年 午後 問4