見出し画像

【基本情報技術者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+」だけで行きます。正逆変換はゴチャゴチャしちゃうので、出題頻度が高い方を選びました。


逆ポーランド表記法の変換で大事なのは、「どこまで変換したかを見失わない です。私は変換後は必ず「()」で囲むようにしています。

掛け算が足し算より優先だから()が要らない場合もあります。しかし、全部に()を付けましょう。()外しは最後、選択肢に合わせるためにすれば良いですから。



典型 | 逆ポーランド⇒中置記法

基本情報技術者修了試験令和05年06月(問3)より引用


正答はウ。

基本情報技術者平成21年秋期 午前問3




中置記法⇒逆ポーランド でなくても解ける

基本情報技術者修了試験令和05年07月(問3)より引用


正答はエ。


「計算式(中置記法)」から「逆ポーランド表記法」へ変換して解くでしょうが、私は「中置記法⇐逆ポーランド記法」だけ馴染んでいるので、逆で行きます。

私とは逆、計算式から逆ポーランド記法へ変換する解法は、過去問ドットコムさんで(基本情報技術者平成26年秋期 午前問4)。

アについて。

  1. abc*+d- ⇒ a(b*c)+d- この時点でダメ。終了。

  2. a(b*c)+d- ⇒ (a+(b*c))d-

  3. (a+(b*c))d- ⇒ (a+(b*c))-d

イについて。

  1. ab+c*d- ⇒ (a+b)c*d- この時点でダメ。終了。

  2. (a+b)c*d- ⇒ ((a+b)*c)d-

  3. ((a+b)*c)d- ⇒ ((a+b)*c)-d

ウについて。

  1. abc*d-+ ⇒ a(b*c)d-+ この時点でダメ。終了。

  2. a(b*c)d-+ ⇒ a((b*c)-d)+

  3. a((b*c)-d)+ ⇒ a+((b*c)-d)

エについて。

  1. abcd-*+ ⇒ ab(c-d)*+

  2. ab(c-d)*+ ⇒ a(b*(c-d))+

  3. a(b*(c-d))+ ⇒ a+(b*(c-d)) OK。



分数表記も落ち着いて

基本情報技術者修了試験令和05年01月(問6)より引用

計算式から逆ポーランド記法へ変換する解法は、過去問ドットコムさんで(基本情報技術者令和4年免除 問5)。


正解のアについて。

  1. AB+CD+×AD-÷ ⇒ (A+B)(C+D)×(A-D)÷

  2. (A+B)(C+D)×(A-D)÷ ⇒ ((A+B)×(C+D))(A-D)÷

  3. ((A+B)×(C+D))(A-D)÷ ⇒ ((A+B)×(C+D))÷(A-D) 正しい。

イについて。

  1. AB+CD+AD-×÷ ⇒ (A+B)(C+D)(A-D)×÷

  2. (A+B)(C+D)(A-D)×÷ ⇒ (A+B)((C+D)×(A-D))÷

  3. (A+B)((C+D)×(A-D))÷ ⇒ (A+B)÷((C+D)×(A-D))

ウについて。

  1. ABCD+AD-÷ ⇒ AB(C+D)(A-D)÷

  2. AB(C+D)+×(A-D)÷ ⇒ A(B+(C+D))×(A-D)÷

  3. A(B+(C+D))×(A-D)÷ ⇒ (A×(B+(C+D)))(A-D)÷

  4. (A×(B+(C+D)))(A-D)÷ ⇒ (A×(B+(C+D)))÷(A-D)]

エについて。

  1. ABCD+AD-× ⇒ AB(C+D)(A-D)×

  2. AB(C+D)+÷(A-D)× ⇒ A(B+(C+D))÷(A-D)×

  3. A(B+(C+D))÷(A-D)× ⇒ (A÷(B+(C+D)))(A-D)×

  4. (A÷(B+(C+D)))(A-D)× ⇒ (A÷(B+(C+D)))×(A-D)



その場で理解する1~オペランド~

基本情報技術者修了試験令和05年06月(問14)より引用

正解はエ。


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をするミスをしちゃいます。

私は、( ) を使ってリスクを減らします。ただし「(」と「)」の対応してるかは常に確認してくださいね。例えば (b + c ÷ d ) は、「)」が足りないのでダメです。

過去問道場さんの解説では「()」を使ってませんが、私は使った方が良いと考えてます(基本情報技術者平成22年春期 午前問22)。




その場で理解する2~再帰関数~

基本情報技術者修了試験令和05年06月(問7)より引用

再帰関数は、自分自身を呼び出す関数。

基本情報技術者では、値の計算問題として出ていました。今回の応用例は珍しいです。解けなくても気にしなくて良いですが、これぐらいの理解力は今後も必要になってきます。

まず簡単な例で動作を理解してくださいね。

解き方が分からない時は、仮説をたてて試算するぐらいの根性が必要です。

では次は、本番行きましょう。

行頭を揃える・線を引くなど、書き方を工夫しましょう。

解きミスを防ぐだけでなく、見直す時に短時間で済みます。急いでいるからと殴り書きすると苦労するのは自分です。

過去問ドットコムさんの解説リンク(基本情報技術者平成26年春期 午前問6)も貼っておきます。私の説明が分かりにくい場合は別アプローチへ。




まとめ | 計算問題でない計算問題から!


IT資格では計算問題は色々ありますね。

四則演算(+-×÷)を使うのは勿論、会計計算や進数変換など慣れない計算問題もあります。

今回の逆ポーランド記法は四則演算(+-×÷)を使わない問題。「計算問題というよりは操作」なので気軽にチャレンジしていってくださいね。


\力試しは修了試験で!4回分の解説です/


p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。

でわでわ(・ω・▼)ノシ



この記事が参加している募集

スキしてみて

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ