アルゴリズム基礎解説(平成19年秋期問4)
解説 |
---|
・aに入る回答について 「プログラムの説明(4)②」にある「整数部を,1の位から上位に向かって,1けたずつ 10 進数字に変換し,スタックに積む。」という部分を踏まえたうえで考えるとわかりやすい。 Idx ← Fint - (Fint ÷ 10) × 10は、一旦10で割り再び10を掛ることで1の位の桁を0にしている。 それを元のFintから引くことで1の位の桁の数のみを取得し対応するChrをPushしているので、その後にやるべきことは、桁をすべて小さいほうに1つずらす処理を行うことである。 つまりFintを10分の1にすること(=Fint ÷ 10)となりエが正解になる。 ・bに入る回答について 前後の処理に着目すると、とある条件で「0」を追加しているとういことがわかる。 その後、小数点を追加しているので、「b」は「0.~」または「-0.~」となる状況、すなわちFloatが-1より大きくかつ1未満の場合の状況を判定していることがわかる。さらに上述の「符号の処理」、「整数部の処理」の部分を見ると、 その場合のLは0か、(Float >= 0.0 && Float < 1.0の場合) または 1でかつOut[0]が"-"、(Float <= 0.0 && Float > -1.0の場合) である状況にあたるので それに当てはまる選択肢ウが正解になる。 ・c, dに入る回答について まずcから解説する。ループ前に「Fdec ← F - Int(F)」、次の行に「Idx ←Int(Fdec)」とあることから、 Fdecには、「小数点第1桁」の数が1の位の桁にあるべきであることがわかる。 設問1とは逆にこの場合桁を1つ繰り上げる必要があるので、それに当てはまる回答、選択肢エが正解になる。 cの処理の後小数点以下を切り捨てて1の位の数に対応する文字を追加して、Lを1増加させている。 次にdでは現在のFdecの1の位の数字を切り捨てもう一度「0」に戻す処理が必要になる。 なので、FdecからFdecの1の位の桁の数のみを0にするために 「FdecからInt(Fdec)を引く」処理が必要になる、すなわち選択肢アが正解になる。 設問2 Float = -0.012、Num = 2の場合のαとβの実行回数だが α、βそれぞれがどのような状況で実行されるかを把握していればそれほど難しくない。 αはFint > 0のときにしか実行されない。 Fint > 0とはFloat >= 1.0またはFloat <= -1.0の状況に当たるが、-0.012はそれにあてはまらないので、実行されない。したがってαの実行回数eの正解はアになる。 βは 「N: 1, N ≦ Num, 1」というループの条件から、Num = 2の時は、2回実行されることがわかる。 またNumはプログラムの実行を通して値が変化しないことの確認も重要。 よってβの実行回数fの正解はウになる。 さいごに 「Int()」、「×10」や「÷ 10」が繰り返し出現し、 一見わかりづらい部分もあるので、慣れていないと非常にやっかいな問題かもしれない。 それらはすべて特定の桁の値を取り出すためにやっているということにいち早く気づけるかどうかがカギになる。 |
匿名様 ご投稿
メニューへ戻る