基本情報技術者試験 (FE) 科目 B — 練習問題 第 20 問 / 全 20 問 · 本番相当
配列の間接参照
関連レッスン: 配列 — 添字が 1 から始まる仕様と操作
配列 注文 には注文された商品の番号が入っている。在庫があれば 1 つ減らし、無ければ商品名を出力する。次のプログラムを実行したとき、出力される内容はどれか。
文字列型の配列: 商品 ← {"ペン", "ノート", "消シゴム"}
整数型の配列: 在庫 ← {0, 12, 3}
整数型の配列: 注文 ← {2, 3, 1, 3}
整数型: 成功 ← 0
for (i を 1 から 4 まで 1 ずつ増やす)
if (在庫[注文[i]] > 0)
在庫[注文[i]] ← 在庫[注文[i]] - 1
成功 ← 成功 + 1
else
print(商品[注文[i]])
endif
endfor
print(成功)解説
正解: ア ペン 3
在庫[注文[i]] は「内側から」読みます。i = 1: 注文[1] = 2 なので 在庫[2] = 12 > 0 → 11 に減り 成功 = 1。i = 2: 注文[2] = 3 なので 在庫[3] = 3 > 0 → 2 に減り 成功 = 2。i = 3: 注文[3] = 1 なので 在庫[1] = 0 で品切れ → 商品[1] = ペン を出力。i = 4: 注文[4] = 3 なので 在庫[3] = 2 > 0 → 1 に減り 成功 = 3。出力は ペン と 3 です。
間接参照は 在庫[注文[i]] を 在庫[i] と読み違えると全く別の答えになります。添字の中に式や配列がある場合は、必ずその値を先に確定させてから外側を評価してください。
同じ商品 3 が 2 回注文されており、1 回目で在庫が減っていることが 2 回目の判定に効いています。配列を書き換えながら回すループでは、「今の値」が何周目の結果なのかを意識して追う必要があります。
在庫[注文[i]] は内側から評価する。書き換えた在庫が後の周回に影響する。
演習量を増やしたい方へ(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
科目Bの出題範囲を絞り込んだ薄型の対策書。頻出アルゴリズムと情報セキュリティを短期間で一周したいときに。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)