平成30年秋午後問8 整数式の解析


宣言部の解読方法 トレース前に引数に与えられるデータはどれか

トレースの中核は6行目の「解析処理」と7行目の「計算処理」となりますが、そのために、宣言部(1~6行目)の考察は大変重要です。この問題に限りませんが、プログラムの中核部分をしっかりトレースするためには、宣言部の考察は欠かせませんので注意しましょう。

「プログラムの説明(2)」で「引数Expression[ ]で整数式を、引数ExpLenで整数式の文字数をそれぞれ受取る」となっているので、宣言部実行時に何らかの具体的なデータが、「 引数Expression[ ] 」と「引数ExpLen」に入ることがわかります。

図1を見ると、例として使われている整数式は問題文冒頭に記載されている「例1」であることがわかります。そして、「例1」を使うわけですから、特に問題文中に明示されていなくても「引数ExpLen」に15を入れる必要があります。

宣言部2~5行目については、特に問題文中に具体的なデータにつながる言及はありませんので、宣言のみでデータの代入はありません。

以上より、前言部1~5行目までの実行結果は下記の通りとなります。


プログラム(解析処理の部分)のトレース

1~3行目でそれぞれ「OpCnt」「VaLue[0]」「nest」に「0」が入ります。

4行目、ここでは、i=0、ExpLen=15となっているので、繰返し文の継続条件式「i<ExpLen」は真となり、処理は5行目に進みます。

5行目、Expression[0]の値がchrに入ります。chrには「2」が入ります。

6行目、条件判定式が真となり、処理は7行目に入ります。ここでは、 OpCnt=0、 VaLue[0] =0なので、「10× VaLue[ OpCnt ]=0」、int(chr)は「int(2)=2」となります。よって、VaLue[0]に「2」が入り、処理が8行目に移ります。

8行目は条件判定処理の終端なので「処理なし」。

処理は9行目に移りますが、9行目は全ての条件式が「偽」となり、処理は18行目に移ります。しかし、同様にして18行目の条件判定も「偽」、21行目も「偽」となり、処理は24行目に移り、4~24行目までの「繰返処理」の「1巡目」が終了します。

処理は24行目(繰返処理の終端)から4行目(繰返処理の始端)に移り、変数「i」に1が加算されます。「i=1」となりますが、継続条件式「i < ExpLen」は「真」なので処理は5行目に移り、繰返処理の「2巡目」が始まります。

以下、同様に2巡目以降のトレースとなりますが、参考までに1、2‥6巡目終了後の変数の状況は次の通りです。

配列変数VaLue[ ]、Operator[ ]、Priority[ ]のそれぞれの内容が、少しずつ問題文中の図1「プログラム(解析処理の部分)を実行した直後の状態」の形に近づいていることがわかります。

図1は、繰返処理を終えた直後の状況となりますが、繰返処理の終わり方は次の通りです。

上記「6巡目」以降、処理を継続‥「i=14」の状態で繰返処理の終端へ、

処理が繰返処理の始端に戻る。

「i=15」となり、繰返処理の継続条件式「i < ExpLen」が偽となり、繰返処理が終了する。
(全体の処理は繰返処理終端の次の行に移る)

7行目の関数int(chr)は何をしている処理か?

結論から言うと、「int」は「文字型のデータを数値型に変換する関数」です。

例えば、トレース中に変数「chr」に「2」が入り、関数int(chr)が、int(2)となる場面があります。

上の宣言部4行目を見ると、変数「chr」は「文字型」です。コンピュータ内では、代入される「2」は「数値の2」ではなく、「文字の2」、厳密に言えば「2という記号の文字コード」として扱われます。

関数「int」は、この 「2という記号の文字コード」 を「数値の2」に変換して計算処理できちんと使えるように「型の変換」を行っています。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です