[問題文・解答]
平成27年度4月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)
[問題概要]
この問題は、選択問題で問2〜問7のうち4問を選択する必要があります。
出題分野はソフトウェアで、問題の題材は言語処理系です。
プログラムの実行方式であるインタプリタ方式とコンパイラ方式、中間コード方式について問われます。
出題分野はソフトウェアで、問題の題材は言語処理系です。
プログラムの実行方式であるインタプリタ方式とコンパイラ方式、中間コード方式について問われます。
[設問1]
インタプリタ方式はソースコードを上から1行ずつ実行していく方式で、PerlやPythonなどで採用されています。コンパイラ方式と比べると処理は遅いですが、プログラムの修正→実行確認が容易に行えます。
一方、コンパイラ方式はソースコードを目的の環境で実行できる機械語のプログラムに変換して、その実行形式プログラムを実行する方式でC/C++やCOBOLなどで採用されています。インタプリタ方式に比べると処理が高速ですが、プログラムを修正するたびにコンパイルが必要となります。
以上より、コンパイラの利点としては実行処理が高速である点があるため「エ」が正解です。
[答] エ
インタプリタ方式はソースコードを上から1行ずつ実行していく方式で、PerlやPythonなどで採用されています。コンパイラ方式と比べると処理は遅いですが、プログラムの修正→実行確認が容易に行えます。
一方、コンパイラ方式はソースコードを目的の環境で実行できる機械語のプログラムに変換して、その実行形式プログラムを実行する方式でC/C++やCOBOLなどで採用されています。インタプリタ方式に比べると処理が高速ですが、プログラムを修正するたびにコンパイルが必要となります。
以上より、コンパイラの利点としては実行処理が高速である点があるため「エ」が正解です。
[答] エ
一方、コンパイラ方式はソースコードを目的の環境で実行できる機械語のプログラムに変換して、その実行形式プログラムを実行する方式でC/C++やCOBOLなどで採用されています。インタプリタ方式に比べると処理が高速ですが、プログラムを修正するたびにコンパイルが必要となります。
以上より、コンパイラの利点としては実行処理が高速である点があるため「エ」が正解です。
[答] エ
[設問2]
中間コード方式は、仮想計算機で実行可能なコードに変換し、仮想計算機上のインタプリタで実行する方式でJavaなどで採用されています。この方式では、異なるOSやハードウェア上で動作する仮想計算機を用意すれば、ソースコードや中間コードは変更しなくても様々なOS・ハードウェア上でプログラムを実行できます。よって「ア」が正解です。
[答] a) ア
[答] a) ア
[設問3]
b) 関数Fの呼出し回数が400回、関数Fの呼出し時に実行する中間コードの命令数が2000、中間コード1命令の実行時間が500ナノ秒なので
400 × 2000 × 0.0000005 = 0.4(秒)
となり「オ」が正解です。
c) まず動的コンパイラの起動時間が0.1秒、コンパイル時間が中間コード1000命令当たり0.1秒、関数Fの中間コードが400命令からなるので動的コンパイルに掛かる時間は
0.1 + 400/1000 × 0.1 = 0.14(秒)
次に実行時間ですが、関数Fの最初の100回の呼出しは中間コードのインタプリタで、残りの300回の呼出しは実行形式プログラムで実行するため
100 × 2000 × 0.0000005 + 300 × 2000 × 0.00000001 = 0.104(秒)
動的コンパイラの起動時間とコンパイル時間も実行時間に含まれるため
0.14 + 0.106 = 0.246(秒)
となり「エ」が正解です。
[答] b) オ c) エ
上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。
400 × 2000 × 0.0000005 = 0.4(秒)
となり「オ」が正解です。
c) まず動的コンパイラの起動時間が0.1秒、コンパイル時間が中間コード1000命令当たり0.1秒、関数Fの中間コードが400命令からなるので動的コンパイルに掛かる時間は
0.1 + 400/1000 × 0.1 = 0.14(秒)
次に実行時間ですが、関数Fの最初の100回の呼出しは中間コードのインタプリタで、残りの300回の呼出しは実行形式プログラムで実行するため
100 × 2000 × 0.0000005 + 300 × 2000 × 0.00000001 = 0.104(秒)
動的コンパイラの起動時間とコンパイル時間も実行時間に含まれるため
0.14 + 0.106 = 0.246(秒)
となり「エ」が正解です。
[答] b) オ c) エ
上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。
0 件のコメント:
コメントを投稿