平成21年春期午後問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
。。さん  
(No.1)
https://www.fe-siken.com/kakomon/21_haru/pm02.html
bの問題が分かりません。
解説に記載してある表2の元のソースコードの”sub(r)は2重ループの内側にあり1回の処理につき2回実行される”という部分も理解できませんでした。
元のソースコードと解答のソースコードについて両方教えていただきたいです。
よろしくお願いいたします。
2022.04.06 11:24
chihiroさん 
FE プラチナマイスター
(No.2)
元のソースコードでSub(r)を実行するのは
①比較条件  X[r,c]>Sub(r)+1
②代入  X[r,c]←Sub(r)+1
の2つです。②については①の結果が真の場合のみ実行されます。プログラムの繰り返し回数はrMax×cMax回であり、どのループにおいても①が行われる(①が真なら②も追加で行われる)ので、Sub(r)は最低rMax×cMax回、最大2×rMax×cMax回実行されることになります(解説の100×100×2=20,000回というのは最大のケース、常に①と②の2回が実行されるわけではない)。
指摘の内容に、
>関数Subは計算時間は長いが、返却値は引数だけに依存する。
とあるように、Subは引数rにのみ依存する(cの値は関係ない)ので、
・cに関するループの外側でSub(r)+1を計算し、適当な変数S1に代入しておく
・cに関するループ内ではS1を用いて処理を行う
とすることで、無駄なSub(r)の実行をなくすことができます。修正後のソースコードにおけるSub(r)の実行回数はrMax回です。
2022.04.06 13:36

返信投稿用フォーム

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

その他のスレッド


Pagetop