【基本情報技術者5問】逆ポーランド記法は「片方」だけでやる
基本情報技術者&修了試験から逆ポーランド記法を集めてみました。
基本情報技術者で計算問題はぐぐっと増えます。応用情報技術者になると、今まで避けてきたIPアドレスの計算・デジタル署名は基礎知識になりますよ。
逆ポーランド記法は、私たちが普段使っている計算式「a+b」と違う書き方なだけ。計算というよりはパターン操作・文字列操作。
問題では「a+b ⇔ ab+」の相互変換が問われますが、私は「a+b ⇐ ab+」の片方だけで乗り切ってきました。
「両方覚えきれない」「どっちの解き方だったか混乱してしまう」という方にはお薦めですので、ぜひ読んでいってくださいね。
私は学生時代(IT以外)に応用情報技術者まで独学合格し、現在はIT専門学校で授業をしています。長年学生さんに教えてきた実績に基づいていますので、安心してくださいね。
解法 | 逆ポーランド表記法⇒中置記法
私たちが普段使っている「a+b」は中置記法(ちゅうちきほう)と云います。逆ポーランド記法は「ab+」で後置記法.
出題パターンは2つ。「a+b」⇒「ab+」、「a+b」⇐「ab+」。
私は「a+b」⇐「ab+」だけで行きます。正逆変換はゴチャゴチャしちゃうので、出題頻度が高い方を選びました。
逆ポーランド表記法の変換で大事なのは、「どこまで変換したかを見失わない 」です。私は変換後は必ず「()」で囲むようにしています。
掛け算が足し算より優先だから()が要らない場合もあります。しかし、全部に()を付けましょう。()外しは最後、選択肢に合わせるためにすれば良いですから。
典型 | 逆ポーランド⇒中置記法
正答はウ。
中置記法⇒逆ポーランド でなくても解ける
正答はエ。
「計算式(中置記法)」から「逆ポーランド表記法」へ変換して解くでしょうが、私は「中置記法⇐逆ポーランド記法」だけ馴染んでいるので、逆で行きます。
私とは逆、計算式から逆ポーランド記法へ変換する解法は、過去問ドットコムさんで(基本情報技術者平成26年秋期 午前問4)。
アについて。
abc*+d- ⇒ a(b*c)+d- この時点でダメ。終了。
a(b*c)+d- ⇒ (a+(b*c))d-
(a+(b*c))d- ⇒ (a+(b*c))-d
イについて。
ab+c*d- ⇒ (a+b)c*d- この時点でダメ。終了。
(a+b)c*d- ⇒ ((a+b)*c)d-
((a+b)*c)d- ⇒ ((a+b)*c)-d
ウについて。
abc*d-+ ⇒ a(b*c)d-+ この時点でダメ。終了。
a(b*c)d-+ ⇒ a((b*c)-d)+
a((b*c)-d)+ ⇒ a+((b*c)-d)
エについて。
abcd-*+ ⇒ ab(c-d)*+
ab(c-d)*+ ⇒ a(b*(c-d))+
a(b*(c-d))+ ⇒ a+(b*(c-d)) OK。
分数表記も落ち着いて
計算式から逆ポーランド記法へ変換する解法は、過去問ドットコムさんで(基本情報技術者令和4年免除 問5)。
正解のアについて。
AB+CD+×AD-÷ ⇒ (A+B)(C+D)×(A-D)÷
(A+B)(C+D)×(A-D)÷ ⇒ ((A+B)×(C+D))(A-D)÷
((A+B)×(C+D))(A-D)÷ ⇒ ((A+B)×(C+D))÷(A-D) 正しい。
イについて。
AB+CD+AD-×÷ ⇒ (A+B)(C+D)(A-D)×÷
(A+B)(C+D)(A-D)×÷ ⇒ (A+B)((C+D)×(A-D))÷
(A+B)((C+D)×(A-D))÷ ⇒ (A+B)÷((C+D)×(A-D))
ウについて。
ABCD++×AD-÷ ⇒ AB(C+D)+×(A-D)÷
AB(C+D)+×(A-D)÷ ⇒ A(B+(C+D))×(A-D)÷
A(B+(C+D))×(A-D)÷ ⇒ (A×(B+(C+D)))(A-D)÷
(A×(B+(C+D)))(A-D)÷ ⇒ (A×(B+(C+D)))÷(A-D)]
エについて。
ABCD++÷AD-× ⇒ AB(C+D)+÷(A-D)×
AB(C+D)+÷(A-D)× ⇒ A(B+(C+D))÷(A-D)×
A(B+(C+D))÷(A-D)× ⇒ (A÷(B+(C+D)))(A-D)×
(A÷(B+(C+D)))(A-D)× ⇒ (A÷(B+(C+D)))×(A-D)
その場で理解する1~オペランド~
正解はエ。
op(a, b, c)と書いてあれば、c ← a op b とのこと。
では始めましょう。
÷(c, d, w1)は、w1 ← c ÷ d。
+(b, w1, w2)は、w2 ← b + w1。上のw1を入れて、w2 ← b + (c ÷d)。( )を付けて計算順を明確にしておきましょう。
÷(e, f, w3)は、w3 ← e ÷ f。
-(w3, g, w4)は、w4 ← w3 - g。上のw3を入れて、w4 ← (e ÷ f) - g。
×(w2, w4, ×) は、x ← w2 × w4。今までのw2とw4を入れて、x ← (b + (c ÷d)) × ((e ÷ f) - g)
割り算掛け算は、足し算引き算よりも優先するルールがあります。よって「b+c÷d」を、わざわざ「b + (c÷d)」と書く必要はありません。
しかしついつい、b+cを計算してから÷dをするミスをしちゃいます。
過去問道場さんの解説では「()」を使ってませんが、私は使った方が良いと考えてます(基本情報技術者平成22年春期 午前問22)。
その場で理解する2~再帰関数~
再帰関数は、自分自身を呼び出す関数。
基本情報技術者では、値の計算問題として出ていました。今回の応用例は珍しいです。解けなくても気にしなくて良いですが、これぐらいの理解力は今後も必要になってきます。
まず簡単な例で動作を理解してくださいね。
解き方が分からない時は、仮説をたてて試算するぐらいの根性が必要です。
では次は、本番行きましょう。
行頭を揃える・線を引くなど、書き方を工夫しましょう。
解きミスを防ぐだけでなく、見直す時に短時間で済みます。急いでいるからと殴り書きすると苦労するのは自分です。
過去問ドットコムさんの解説リンク(基本情報技術者平成26年春期 午前問6)も貼っておきます。私の説明が分かりにくい場合は別アプローチへ。
まとめ | 計算問題でない計算問題から!
IT資格では計算問題は色々ありますね。
四則演算(+-×÷)を使うのは勿論、会計計算や進数変換など慣れない計算問題もあります。
今回の逆ポーランド記法は四則演算(+-×÷)を使わない問題。「計算問題というよりは操作」なので気軽にチャレンジしていってくださいね。
\力試しは修了試験で!4回分の解説です/
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ