平成27年春期午後問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
みるくさん  
(No.1)
https://www.fe-siken.com/kakomon/27_haru/pm02.html
・コンパイラの意味がよく分かりません。
・あと最後のb,cの計算もいまいち腑に落ちていません。(なぜかけるのか、一体途中式で何をしているのか)
・ソフトウェア・ハードウェアを選択する可能性もあって
年度によったらとけるものもあるのですが、
結構手が出ないのでもう少し丁寧に学習しようと思ってます。
ハードウェア、ソフトウェアが最初から丁寧に学べる
おすすめの参考書あれば専門書でもいいので教えてください。(業務やったことない学生なので未経験です。いまいち大門の大枠や内容がつかめません。午前はきたみで85%取れたので午後問題対策をしたいです)
2021.01.09 19:02
こたろうさん 
(No.2)
・プログラムが実行される過程で、プログラム言語(C言語やJava等)で書かれたものを機械語(パソコンが直接理解できる形)に翻訳されますが、この翻訳にインタプリタ方式とコンパイラ方式があります。
インタプリタ形式ではインタプリタがプログラムを1行ずつ翻訳、実行を行うのに対して、コンパイラ方式ではコンパイラがプログラムを全て翻訳した後に、実行します。

・問題の[条件]の部分と解説を丁寧に読んであげてください。
[bについて]
[条件]に「関数Fが1回呼び出されたときに実行する中間コードの命令数は,2,000命令である。」とあるので関数Fの呼出1回につき2000命令実行します。関数Fは400回呼び出されるので、(2000*400)命令実行することになります。[条件]に「インタプリタによる中間コード1命令の実行時間は500ナノ秒」とあるので、1命令あたり500ナノ秒かかります。よって総命令数と掛け合わせて(2000*400)*500ナノ秒=0.4秒になります。

[cについて]
・関数Fの呼び出し1~100回目まではbの場合と同じ要領です。1~100回目には(2000*100)*500ナノ秒=0.1秒かかります。
・続いて、101回目の呼び出しの前に[条件]の「動的コンパイル方式を適用した場合,関数Fが101回目に呼び出されるときに動的コンパイラが起動され,関数Fの中間コードを実行形式プログラムに変換する」とあるように、動的コンパイラを起動し、コンパイルします。[条件]に「動的コンパイラの起動時間は0.1秒」とあるので起動時間は0.1秒です。
・また、「コンパイル時間は,中間コード1,000命令当たりで0.1秒」とあるので、1命令あたりにかかる時間は0.1/1000秒です。コンパイルする関数Fは400命令から成るので、総コンパイル時間は400*(0.1/1000)秒=0.04秒です。
・コンパイル後は「中間コード1命令に対応する実行形式プログラムの実行時間は10ナノ秒」とあるように、関数Fが呼び出された時の1命令あたりの実行時間は500ナノ秒→10ナノ秒に縮みます。関数Fの呼出1回につき2000命令実行するので、一回の呼び出しにかかる時間は(2000*10)ナノ秒であり、101回~400回の300回繰り返されるので(2000*10)*300ナノ秒=0.006秒となります。

各所要時間を合計すると
0.1秒+0.1秒+0.04秒+0.006秒=0.246秒となります。

・参考書については、私はキタミ式のみで対策したので有益な情報は出せません。個人的には、問題に出る専門用語や仕組みを前もって知っておくことより、問題文中にある説明から仕組みをなんとなくでもいいので理解する読解力を身につけることの方が試験において有用だと思います。
2021.01.09 21:05

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop