基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成17年 秋期 基本情報技術者 午後 問04
問04   中置表記法

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

〔プログラムの説明〕

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

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

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

 表1 変換の優先度

数式の要素優先度
(4
0,1,…,93
×,÷2
+,−1
)0

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

(4) toPostfix は,スタックを初期化して,Exptext の先頭の要素から順番に次の @,A の処理を繰り返し,Exptext の要素をすべて処理したら,スタックに残っているすべての 数式の要素を順に取り出して Postfix に格納する。

@ Exptext[i] の優先度がスタックの先頭要素の優先度以下で,かつスタックの先頭要素が “(”でない間,スタックから要素を取り出して Postfix に格納する。

A Exptext[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

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


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

解答群

ア 2 4 + 3          イ 2 4 + 3 × 5

ウ 2 4 + 3 × 5 6 ×     エ 2 4 + 3 × 5 6 × +

解答 ←クリックすると正解が表示されます

基本情報技術者試験


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

〔プログラム〕

解答群

ア element = elem[i]        イ element = elem[i−1]

ウ element = EOS           エ element = priority[i] 

オ element = priority[i−1]     カ element ≠ elem[i]

キ element ≠ elem[i−1] 

解答 ←クリックすると正解が表示されます

[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]