今週の午後問題〔解答〕アルゴリズム 整数式の解析と計算 2018 年度 秋期
error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事です。
この記事の題材となっている「午後問題」は現在の試験制度では出題されません。 ご注意くださいませ。
このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまにも解答してもらっています!
今週の午後問題は「整数式の解析と計算」でしたが、皆さん、手応えはいかがでしょうか?
金曜になりましたので、出題の 解答 と 矢沢久雄さんによる 解説 に加えて、皆さんの正解率を公開します。
今週の午後問題
2018 年度 秋期 整数式の解析と計算
解答と解説
設問 1a
正解 イ
演算の優先順位を示す Priority[] には、変数 nest の値が格納されます。 nest の初期値を 0 として、加減算なら nest を + 1 し、そうでないなら(乗除算なら) nest を + 2 します。
| | ▲ (chr = '+') or (chr = '-') | | | ・ Priority[OpCnt] ← nest + 1 | |-+----- | | | ・ Priority[OpCnt] ← nest + 2 | | ▼
3 の部分では、開きカッコなら nest を + 10 し、閉じカッコなら nest を – 10 しています。
| ▲ chr = '(' | | ・ nest ← nest + 10 | ▼ | ▲ chr = ')' | | ・ nest ← nest – 10 | ▼
これは、カッコで囲まれた演算を優先させるためです。
カッコで囲まれた加減算を乗除算より優先させるためには、 3 以上の優先順位を付ける必要があります。加減算であることで + 1 されるので、さらに + 2 以上にすれば、 3 以上の優先順位になります。
したがって、イの 2 以上が正解です。
設問 1b
正解 エ
priLow は加減算の優先順位を示す値で、 priHigh は乗除算の優先順位を示す値です。
カッコの優先順位の値は、
priLow + カッコの優先順位の値 > priHigh
になればよいので、
カッコの優先順位の値 > priHigh - priLow
です。
priHigh – priLow より大きいのですから、 priHigh – priLow + 1 以上です。
したがって、エが正解です。
設問 2c
正解 エ
codeプログラム(計算処理の部分)の 5 、6 、および 7 のループは、最も優先順位が高い演算の要素番号を ip に得る処理を行っています。
| ■ i: 1, i < OpCnt, 1 | | ▲ Priority[ip] < Priority[i] | | | ・ ip ← i | | ▼ | ■
7 の条件は、 Priority[ip] < Priority[i]
なので、同じ優先順位の演算を後で見つけても、前にある演算が優先され左から演算されます。
この部分を Priority[ip] ≦ Priority[i]
にすれば、同じ( = )優先順位の演算を後で見つけると、後にある演算が優先され右から演算されます。
したがって、エが正解です。
設問 2d
正解 ア
同じ演算が並んでいる部分を左から演算しても右から演算しても同じ結果になるのは、 + と × です。 + と × だけが並んでいるのは、ケース 1 だけです。
したがって、アが正解です。
設問 3
e正解 エ
f正解 イ
g正解 エ
問題文に示された 2 × (-1) という計算式を codeプログラム(解析処理の部分) で処理した結果は、以下のようになります。 [?] は、配列の要素に値が格納されていないことを示します。
Expression [2] [×] [(] [-] [1] [)] Value[] [2] [0] [1] [?] [?] [?] Operator[] [×] [-] [?] [?] [?] [?] OptCnt[2] Priority[] [2] [11] [?] [?] [?] [?] nest[1]
Value[] の左から 2 つ目の要素は [0] です。したがって、空欄 f の正解はイです。
OptCnt の値は 2 です。したがって、空欄 g の正解はエです。
codeプログラム(解析処理の部分)で処理した結果は、 Priority[] の値の大きい順に、その位置にある演算が行われます。
まず、 0 – 1 という演算が行われ、結果として -1 が得られます。
次に、 2 × -1 という演算が行われ、結果として -2 が得られます。これは、 2 × (-1) という計算式の正しい演算結果です。
したがって、空欄 e の正解はエです。
みんなの解答
ご解答いただいた皆さん、ありがとうございました!
手応えはいかがでしたでしょうか?
なお、以下はこの問題の IPA の講評です。今後の参考になれば幸いです。
設問 1 では, a の正答率は平均的で,おおむね理解されていた。 b の正答率は低く,あまり理解されていなかった。括弧内の加減算の優先順位が,括弧外の乗除算の優先順位よりも高ければよいことに着目すれば,正答できた。
設問 2 の正答率は低く,あまり理解されていなかった。 c では,ウと誤って解答した受験者が見受けられた。ウの場合,行 5 で ip に設定する値が 0 のままでは,正しい処理ができない。 d では,ウと誤って解答した受験者が多く見受けられた。括弧内の減算の結果が変わることを見落としたものと思われる。
設問 3 では, g の正答率は平均的で,おおむね理解されていた。 e と f の正答率は低く,あまり理解されていなかった。 e ではイと, f ではウと誤って解答した受験者が多く見受けられた。図 3 の式について, codeプログラム(解析処理の部分) の動作を追跡すれば,正答できた。
プログラム中の定数をより一般的な表現に拡張できる能力,及びプログラムの動作を実際に追跡できる能力は重要なので,身につけておいてほしい。
来週もひきつづき「アルゴリズム問題」を出題します! 多くの方が苦手にしがちなので、これを機会にじっくり挑戦してみてください!
label 関連タグ免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
今週の午後問題〔解答〕アルゴリズム 文字列の誤りの検出 2017 年度 秋期
update今週の午後問題〔問題〕アルゴリズム 文字列の誤りの検出 2017 年度 秋期
update今週の午後問題〔解答〕アルゴリズム ヒープの性質を利用したデータの整列 2018 年度 春期
update今週の午後問題〔問題〕アルゴリズム ヒープの性質を利用したデータの整列 2018 年度 春期
update今週の午後問題〔解答〕アルゴリズム 整数式の解析と計算 2018 年度 秋期
update今週の午後問題〔問題〕アルゴリズム 整数式の解析と計算 2018 年度 秋期
update今週の午後問題〔解答〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期
update今週の午後問題〔問題〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期
update今週の午後問題〔解答〕情報セキュリティ SSH による通信 2017 年度 秋期
update今週の午後問題〔問題〕情報セキュリティ SSH による通信 2017 年度 秋期
update- 基本情報技術者試験 の受験勉強をレポート頂ける方を募集中です!
- ツイッター で過去問を配信しています
姉妹サイト 「IT資格の歩き方」 では応用情報技術者以上の情報処理技術者試験の対策記事があります!
基本情報技術者試験を合格されたら、「IT資格の歩き方」で末永く、スキルアップにお役立てください!