基本情報技術者試験 (FE) 科目 B — 練習問題 第 17 問 / 全 20 問 · 本番相当
探索の終了位置
関連レッスン: 繰り返し (while) の書き方と無限ループの避け方
次のプログラムを実行したとき、出力される内容はどれか。
整数型の配列: 数値 ← {4, 8, 15}
整数型: 目標 ← 16
整数型: i ← 1
while (i ≦ 3 and 数値[i] ≠ 目標)
i ← i + 1
endwhile
print(i)解説
正解: イ 4
目標 の 16 は配列に無いので、i は 1 → 2 → 3 → 4 と進みます。i が 4 になった時点で条件の左側 i ≦ 3 が偽になり、ループを抜けて 4 が出力されます。「見つからなかったときは 要素数 + 1 になる」というのがこの書き方の約束事です。
i = 4 のときに 数値[4] を読めば範囲外アクセスでエラーですが、and は左が偽なら右を評価しません (短絡評価)。だからこの順序であればエラーになりません。条件を (数値[i] ≠ 目標 and i ≦ 3) と逆に書くと、そこで落ちます。
ループを抜けた後に「見つかったのか、最後まで見て見つからなかったのか」を判定するには、i ≦ 3 かどうかを調べます。探索処理では、この終了位置の意味を決めてから書き始めるのが定石です。
見つからないと添字は要素数 + 1。範囲外アクセスは and の短絡評価で回避されている。
演習量を増やしたい方へ(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
科目Bの出題範囲を絞り込んだ薄型の対策書。頻出アルゴリズムと情報セキュリティを短期間で一周したいときに。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)