- 締切済み
擬似言語にて
この擬似言語のプログラムは、スタックを使って、中置表記法を後置き表記法に変換するプログラムです。 例えば,中置表記法による数式4×(9+3)は,toPostfixの処理の結果,後置表記法による数式493+×に変換するという具合です。 点線の上部分とした部分が全く同じ処理をしているように思えます。下の部分はどのような役割をしているのでしょうか。 ○toPostfix( 文字型: Exptext[],整数型: Textlen, 文字型: Postfix[],整数型: Postfixlen ) ○整数型: k,i ○論理型: sflag ○文字型: work ・initStack() ・k ← 0 上部分 ---------------------------------------------------------- 繰り返し処理(1) i:0,i<Textlen,1 繰り返し(2) getPriority(Exptext[i])≦getPriority(top()) and top() ≠ "(" ・Postfix[k] ←pop() ・k←k+1 繰り返し(2)終わり 条件処理 (条件) Exptext[i] ≠ ")" 適合するなら ・push(Exptext[i]) しないなら ・pop() /*取り出した要素は使わない*/ 処理終了 繰り返し(1)終了 ------------------------------------------------------------ ここから下部分 ------------------------------------------------------------- ・sflag ← true 繰り返し sflag = true ・work ← pop() 条件処理 合うなら work ≠ EOS ・Postfix[k] ← work ・k ← k+1 合わないなら sflag ← false 処理終了 繰り返し終了 ・Postfixlen ← k ------------------------------------------------------------ よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
変数の意味もわからなければ関数の意味もわからないし「上部分」と「下部分」がどのような関係なのかもわからないので, それぞれを詳細に説明してください.
お礼
自己解決しました。 ちなみに、下の部分はスタックから残っている要素を 順に取り出して、Postfix[k]に納入している処理でした。
補足
失礼しました。大事なことですね(^_^;) 変数名の意味 Exptext[] 文字型 入力 中置表記法による数式が格納されている1次元配列 Textlen 整数型 入力 中置表記法による数式の要素数 Postfix[] 文字型 出力 後置表記法に変換後の数式が格納される1次元配列 Postfixlen 整数型 出力 後置表記法に変換後の数式の要素数 関数の仕様 initStack() スタックを初期化し,スタックに EOS を格納する。 push(文字型:element) スタックに element を格納する。 文字型:pop() スタックから要素を取り出し,その要素を返却する。 文字型:top() スタックの先頭要素の値を返却する。 整数型:getPriority (文字型:element) 引数で指定された要素 element の優先度を返却する。 上部分の処理としては toPostfix は,スタックを初期化して,Exptext の先頭の要素から順番に次の (1),(2) の処理を繰り返し,Exptext の要素をすべて処理したら,スタックに残っているすべての数式の要素を順に取り出して Postfix に格納する。 (1) Exptext[i] の優先度がスタックの先頭要素の優先度以下で,かつスタックの先頭要素が “(”でない間,スタックから要素を取り出して Postfix に格納する。 (2) Exptext[i] が“)”でなければ,Exptext[i] をスタックに積み,“)”であれば,スタックから要素を一つだけ取り出す。 ということをやっています。 しかし、下部分は論理型の変数が使われているのですが、 どのような役割かわからないです。