メインコンテンツへスキップ
見出し画像

【基本情報技術者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。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。