みなさん、こんにちは!
ブリュの公式ブログ.netにお越しいただきまして、ありがとうございます。
このサイトでは、ITについて特化したサイトを運営しています。
基本情報技術者試験 午後問題は、アルゴリズムの比重が高く、必須問題のアルゴリズム(25点)に加えて、言語選択のプログラミング問題(25点)が出題されます。
ここでは、プログラム未経験の方が選択するであろう表計算について、試験問題における回答のコツを紹介します。
今回の題材は、令和元年秋 基本情報技術者試験 午後問題 問13(表計算)です。
メロンの等級分けと、出荷時の価格決定に関する問題ですね。
ここで紹介するコツや消去法は、試験時間内にできるだけ最短に正解を導くための考え方であり、あくまでも”試験対策”として参考にしてください。
表計算の正確な解き方、考え方については、各種参考書を購入の上、別途学習をお願いします。
また、必須問題のアルゴリズムにおいて疑似言語が完全に理解できる方を前提に作成しています。
もしもアルゴリズムが苦手という方は、合計50点分(アルゴリズム 25点+表計算 25点)の得点源になると信じて、アルゴリズムの対策を徹底してください。
目次
正解の一覧
令和元年秋 基本情報技術者試験 午後 表計算の正答は以下の通りです。
設問1 | a | エ |
b | エ | |
c | ウ | |
設問2 | d | キ |
e | キ | |
f | イ |
では、試験時間中に短時間で正答を導くための考え方を紹介します。
設問1
aの回答
まずは選択肢を見ます。
- ア:IF(論理積(C2=’並’,D2=’並’),並,IF(論理積(C2=’良’,D2=’良’),’良’,’優’))
- イ:IF(論理積(C2=’優’,D2=’優’),’優’,IF(論理積(C2=’並’,D2=’並’),’並’,’良’))
- ウ:IF(論理積(C2=’優’,D2=’優’).’優’,IF(論理積(C2=’良’,D2=’良’).’良’,’並’))
- エ:IF(論理和(C2=’並’,D2=’並’),’並’,IF(論理和(C2=’良’,D2=’良’)’良’,’優’))
- オ:IF(論理和(C2=’優’,D2=’優’),’優’,IF(論理和(C2=’並’,D2=’並’)’並’,’良’))
- カ:IF(論理和(C2=’優’,D2=’優’),’優’,IF(論理和(C2=’良’,D2=’良’)’良’,’並’))
ここで問題を見てみると、等級の決まる順番は、’並’が最も条件が緩く、
- 一個でも並みなら並
- (上記以外で)一個でも良なら良
- (上記以外で)残りが優
と決まることが分かります。
つまり、どちらか一個でも並みならという条件は、条件の一方が満たされれば良いという緩さから論理和、そして並から順に決まっていくのは「エ」だけです。
そのため。答えは「エ」であることが分かります。
実際に「エ」の選択肢では、
C2とD2の一個でも並みなら’並’、それ以外の時でどちらか一個が良なら’良’、それ以外の場合(=どちらかが良でも並みでもない→両方優)は’優’となるので正解であると確認できます。
消去法というには厳しいかもしれませんが、直感的な部分での絞り込みの考え方を紹介しておきます。
問題を読むと、条件の厳しさ的には、
- 優→厳しい
- 並→緩い
ということが分かります。
そして関数の真偽判定として、真となる条件の厳しさは、
- 論理積→厳しい
- 論理和→緩い
となります。
これで考えると、選択肢ア、オ、カは違和感のある選択肢だなと勘づくことができるでしょう。
例えば、今回の設問で一番厳しい’優’→’良’→’並’の順に決める場合、以下のようなコードになるでしょう。
IF(論理積(C2=’優’,D2=’優’),’優’,IF(論理積(C2≠’並’,D2≠’並’),’良’,’並’))
この式は、C2とD2がともに’優’なら’優’であり、違った場合にC2とD2の両方が’並’では無いなら’良’であり、それ以外が’並’となります。
他にも表し方がありますからいろんなパターンを考えてIF文に慣れておきましょう。
bの回答
まずは選択肢を見ます。
- ア:照合一致(E2,単価表!$B2:$D2,0)
- イ:照合一致(E2,単価表!B$2:D$2,0)
- ウ:水平照合(E2,単価表!$B1:$D2,2,0)
- エ:水平照合(E2,単価表!B$1:D$2,2,0)
- オ:表引き(単価表!$B1:!D2,2,1)
- カ:表引き(単価表!B$1:D$2,2,1)
問題文としてはF2に入力する式を示しています。
そのため、セル番号ではなくセルの値を返す関数が必須になります。
そのため、照合一致は除外(選択肢:ア,イ)できます。
照合一致はセル番号に関する情報を返す関数です。
次に、F3~F1001に式を複写しますが、この時に変化するのは数字(3~1001)の方です。
英文字Fは変化しません。
つまり、$マークは数字側に必要となるので、英文字側に$マークのある選択肢(選択肢:ウ、オ)も除外できます。
残った選択肢である
- エ:水平照合(E2,単価表!B$1:D$2,2,0)
- カ:表引き(単価表!B$1:D$2,2,1)
について吟味します。
この時点で二択問題になりました。
あとは関数の仕様を確認すれば、
- 水平照合:水平に検索し値の一致したセルを基準に指定位置のセルの値を返す
- 表引き:セルを基準に指定位置のセルの値を返す
となりますから、検索機能を持っている水平照合が正しいことが分かります。
そのため、答えは「エ」になります。
ここまでは消去法による推論なので、動作が正しいかを確認しておきます。
実際の動作を確認してみると、集計表E2の値に等しいものを単価表B1~D2で探し、見つかったセルを基準に1個下のセルの値を返すので、メロンの等級に対する単価を返すことができます。
これにより、問題文中bの空白を埋めれば、メロンの等級と重量(B2)の積により、メロンの価格を算出できます。
cの回答
選択肢を見てみます。
- ア:切上げ(F2*2,0)/2
- イ:切上げ(F2/2,0)*2
- ウ:切上げ(F2/50,0)*50
- エ:四捨五入(F2,-2)
- オ:四捨五入(F2+50,-2)-50
- カ:四捨五入(F2/50,0)*50
cの空白は、50円単位で切り上げた価格を表示することが目的です。
この時点で、四捨五入を行う選択肢(選択肢:エ、オ、カ)は、回答としてあり得ません。
残りの選択肢、ア、イ、ウについて吟味します。
そして「ア」もあり得ません。
2をかけてから2で割っても元の数字になるだけであり、切上げの効果がありません。
残りはイ、ウです。
「50円単位」という問題文から想像できるように、この正解は「ウ」です。
実際、割る数の50は偶数ですから、小数点の範囲も含めれば、どんな数字も必ず割り切れることになります。
この小数の領域を整数として切り上げてしまえば、50の倍数になる、つまり50円単位で切り上げた金額が算出できます。
例えば、2,690円という金額は、50円単位の切上げで2700円になります。
2,690÷50=53.8であり、小数点の切上げで54となります。
そして54×50=2,700円となるので、題意を満たします。
このように、選択肢に迷ったら、具体的な数字で計算してみるのもポイントです。
設問2
設問2はマクロの問題です。
マクロの問題では、どのワークシートにマクロを組み込むのかを必ず確認してください。
ワークシートのセル参照は、自身のワークシートならA1,A2,A3…となりますが、他のワークシートなら、ワークシート名!A1,ワークシート名!A2,ワークシート名!A3…となります。
この点だけ確認できれば、あとは必須のアルゴリズムの疑似言語問題と全く同じです。
この設問のマクロにおいては、
- 並のメロンを選択し
- 合計重量を計算し
- 販売価格を求める
というのが処理の流れです。
そしてマクロはワークシート重量計算表に格納しています。
dの回答
まずは選択肢を見ます。
- ア:相対(F1,i,0)←相対(F1,i,0)+相対(集計表!B1,1,0)
- イ:相対(F1,i,0)←相対(F1,i,0)+相対(集計表!B1,i,0)
- ウ:相対(F1,i,0)←相対(F1,i,0)+相対(集計表!B1,j,0)
- エ:相対(F1,i,0)←相対(F1,j,0)+相対(集計表!B1,j,0)
- オ:相対(F1,j,0)←相対(F1,i,0)+相対(集計表!B1,0,0)
- カ:相対(F1,j,0)←相対(F1,j,0)+相対(集計表!B1,0,0)
- キ:相対(F1,j,0)←相対(F1,j,0)+相対(集計表!B1,i,0)
- ク:相対(F1,j,0)←相対(F1,j,0)+相対(集計表!B1,j,0)
なにやらiとjがたくさん入っていますが、マクロを見てみましょう。
マクロ6行目:相対(集計表!A1,i,0)≠null
つまり、変数iは、集計表に関するセルの位置を示す変数です。
そのため、集計表以外にiが入っている選択肢は消去できます(選択肢:ア、イ、ウ、エ、オ)。
残りはカ、キ、クです。
この時点で選択肢にiとjが両方入っている「キ」が、おおよそ答えと推測できます。
動作を見てみると、相対(F1,J,0)の初期値が0で、メロンの重量である相対(集計表!B1,i,0)の値を足していきます。
そして、iは等級が並であるメロンの行を示していますから(マクロ7行)、並のメロンの重量の合計が算出されることになり、正解であると確認できます。
eの回答
eの空白に入る部分は、条件分岐の条件部分になります。
では、選択肢を見てみましょう。
- ア:論理積(相対(F1,j,0)=5,CurrentColumn=4)
- イ:論理積(相対(F1,j,0)=5,CurrentColumn≧4)
- ウ:論理積(相対(F1,j,0)<5,CurrentColumn=4)
- エ:論理積(相対(F1,j,0)≧5,CurrentColumn<4)
- オ:論理和(相対(F1,j,0)=5,CurrentColumn≧4)
- カ:論理和(相対(F1,j,0)<5,CurrentColumn=4)
- キ:論理和(相対(F1,j,0)≧5,CurrentColumn=4)
- ク:論理和(相対(F1,j,0)≧5,CurrentColumn<4)
選択肢を見ると、相対(F1,j,0)とCurrentColumnに関するといです。
マクロの仕様と疑似言語のトレースすれば、
- 相対(F1,j,0):合計重量
- CurrentColumn:箱に入れるメロンの個数
を示しています。
CurrentColumnについて分かりにくい場合には、マクロの11~13行目を見るといいでしょう。
11行目で相対(B1,j,CurrentColumn)でB1から見てj行目を列方向にCurrentColumnだけ移動し、13行目でCurrentColumn+1となり右方向にセルの移動をしています。
そして、マクロの仕様を見ると、
出荷条件である”メロンの合計重量が5kg以上”又は”メロンの個数が4個”のどちらかを満たすまでメロンを割り振る。
と書かれており、この条件分岐と言えます。
この条件が真になれば、
j←j+1:一行下へ
CurrentColumn←0:数値のリセット(列の初期値へ)
となるので、メロンを詰める箱が変わる、
- 相対(F1,j,0)≧5
- CurrentColumn=4
の条件であると分かります。
そして、どちらか一方が満たされれば箱が変わるので、条件の緩い論理和が正解となります。
これを表現すると、論理和(相対(F1,j,0)≧5,CurrentColumn=4)となり、正解は「キ」になります。
この問題は、絞り込みは使えずしっかりとトレースする必要があり、アルゴリズムを理解していなければ正答は導けないでしょう。
fの回答
最後の問題です。
疑似言語を見ると、空欄fの条件分岐には、相対(F1,j,0)≠nullとあります。
つまり、ワークシート 重量計算表のF列において、相対(F1,j,0)がnullでない場合のみ処理されます。
また変数kが謎ではありますが、ここではいったん無視してみましょう。
マクロの仕様を見てみると、
(4)割り振った結果、出荷条件を満たさない大箱に関する情報は表示しないようにする。
とありますから、凡そ条件を満たさなかった時の処理と見当が付きます。
つまり、最終行が
- 5kg以上
- メロン4個
の条件を満たさない場合、nullとして上書きっしたいということですね。
では、選択肢を見てみましょう。
- ア:相対(A1,j,1)←null
- イ:相対(A1,j,k)←null
- ウ:相対(A1,j,k)←相対(A1,j,k)+1
- エ:相対(A1,k,1)←null
- オ:相対(A1,k,j)←null
- カ:相対(A1,k,j)←相対(A1,k,j)+1
さて、nullを代入したいとなると、ウとカは明らかに違うので除外します。
そして、ここのループは変数kであり、k≦5の間でループします。
関数 相対の引数は、(基準位置,行,列)の順ですから、変数kが行の位置にあるのもおかしいです。
そのため、エとオも明らかに間違いです。
また、変数kでループしているのに、kを含んでいないアもおかしいでしょう。
よって、消去法で、ア、ウ、エ、オ、カが除外されますから、残りの「イ」が正解です。
消去法だけで答えが決まりました。
まとめ
ここまで、令和元年秋 基本情報技術者試験 午後 表計算を例に、試験問題における解放を紹介してきました。
表計算の問題は選択肢が多いので、一つ一つの選択肢についてじっくり考えている時間はありません。
おおよそ妥当なラインで消去法を用い、残った選択肢が題意に対して適切かどうか、妥協無しに考えてください。
この解答法を使えば、表計算に関しては、短時間で満点の25点を十分狙えると思います。
なお、冒頭にも書きましたが、この考え方は基本情報技術者試験に合格するための考え方です。
本当の意味で実力をつけるのであれば、きっちりと参考書を購入し、学習されることをお勧めします。