最大・最小を見つける|暫定の最大を置いて、大きければ入れ替える【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-10-17

並んだ点数から、いちばん大きいものを選ぶプログラムです。{80, 65, 90, 72} でいちばん大きいのは 90。人は一目で分かりますが、プログラムは一度に1つしか見られません。その縛りの中で、どう見つけるかを追います。

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

この回の内容を動画で見る

講義「配列を全部見る・最大と最小」(全6分51秒)のうち、この記事の内容は 3分33秒ごろから始まります(再生するとそこから流れます)。

プログラムを、上から読む

追いかけるのは、4人の点数からいちばん大きいものを選ぶ、このプログラムです。

整数型の配列: ten ← {80, 65, 90, 72}
整数型: saidai ← ten[1]
整数型: i

for (i を 2 から tenの要素数 まで 1 ずつ増やす)
  if (ten[i] > saidai)
    saidai ← ten[i]
  endif
endfor

saidaiの値 を出力する

出力は 90 です。4人の点数のうち、いちばん大きい値です。上から順に読みます。

上から読む

  1. 整数型の配列: ten ← {80, 65, 90, 72}
    いちばん上の行。点数が4つ、配列 ten に入っています。
  2. 整数型: saidai ← ten[1]
    つぎの行。最大を入れておく箱 saidai に、配列の1番目の値を入れます。これが暫定の最大です。まだ1つしか見ていないので、いまのところ 80 が最大、という意味です。
  3. 整数型: i
    for (i を 2 から tenの要素数 まで 1 ずつ増やす)
    くり返しの行。番号を入れておく箱 i を用意して、くり返しに入ります。i は 2 から始まります。1番目は、もう暫定の最大に入れてあるので、2番目からです。tenの要素数 は配列に入っている値の個数(ここでは 4)なので、i は 2、3、4 と進みます。
  4.   if (ten[i] > saidai)
        saidai ← ten[i]
      endif
    その中の条件分岐。もし、いま見ている値 ten[i] のほうが、暫定の最大より大きければ、つぎの行で saidai を入れ替えます。大きくなければ、何もしません。endif までが、この条件分岐のひとかたまりです。
  5. endfor
    saidaiの値 を出力する
    最後まで回すと、いちばん大きい 90 が saidai に残り、それを出力します。endfor で1周がおわり、i が 4 を超えたところでくり返しも終わります。

比べる相手は、いつも1つだけ

プログラムは一度に1つしか見られません。だから「暫定の最大」を1つ持っておき、いま見ている値とだけ比べる。全部見終わったとき、手元に残っているのが最大です。

1周ずつ、ゆっくり見る

ここからは、くり返しを1周ずつ追います。1周ごとに、トレース表に1行書きます。列は「周」「i」「ten[i]」「saidai」の4つです。

はじめに。配列の1番目の 80 を、暫定の最大 saidai としておきます。まだくり返しには入っていないので、表の1行目は「はじめ」です。

ループの1周目。番号は 2 から始まるので、配列の2番目、65 から見ます。条件分岐で、65 と、暫定の 80 をくらべます。大きくないので、入れ替えません。saidai は 80 のままです。

ループの2周目。配列の3番目の 90 です。90 は、暫定の 80 より大きい。暫定の最大を 90 に入れ替えます。

2周目:90 と 80 をくらべて、入れ替える

整数型の配列: ten ← {80, 65, 90, 72}

いま見ている値と、暫定の最大

180

265

390▲

472

くらべる相手は、暫定の最大 saidai(いまは 80)だけ

if (ten[i] > saidai) 90 > 80 は成り立つ

周 i ten[i] saidai
はじめ — — 80
1周 2 65 80
2周 3 90 90

成り立ったので、つぎの行へ進む

saidai ← ten[i] 暫定の最大を書き換える

180

265

390

472

前の saidai80

いまの saidai90

80 → 90。入れ替わったのは、3周のうちこの1回だけ

くらべて、大きければ入れ替える。それだけを最後までくり返す

ループの3周目。配列の4番目の 72。暫定の 90 より大きくないので、そのままです。

できあがったトレース表がこれです。入れ替わったのは、3周のうち1回だけでした。

周 i ten[i] saidai
はじめ — — 80
1周 2 65 80
2周 3 90 90
3周 4 72 90

自分でトレース表を書くときも、入れ替えが起きなかった周は、前の行と同じ値をもう一度書くだけです。同じ値が続くマスを空けておく書き方は A1-1 にあります。

同じ内容を、自分の手で1行ずつ進めてみてください。

「最大を見つける」を1行ずつ動かす

当サイトオリジナルの例題


ループ開始前

配列

▲ いま読んでいる▲ いま書いた

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

「何番目か」を聞かれることがある

最大の値ではなく位置を答える問題があります。そのときは、入れ替える行の隣に ichi ← i も書きます。入れ替えが起きた周の i(この例では 3)が、そのまま位置になります。

はじめに ichi ← 1 も入れておきます(saidai ← ten[1] と対で)。1番目が最大のまま一度も入れ替わらなかったときも、位置が 1 と答えられます。

最初の1つに、何を入れるか

はじめに、どの値を入れておくか。ここで、いちばん多くの人がつまずきます。

もし、saidai ← 0 と、0 から始めるとどうなるでしょうか。気温のように、ぜんぶが負の数のときは、0 より大きい値が1つもありません。

整数型の配列: kion ← {-5, -3, -9}
整数型: saidai ← 0
整数型: i

for (i を 1 から kionの要素数 まで 1 ずつ増やす)
  if (kion[i] > saidai)
    saidai ← kion[i]
  endif
endfor

saidaiの値 を出力する

出力は 0 です。条件分岐が一度も成り立たないので、saidai は最初に入れた 0 のまま最後まで動きません。答えが 0 になり、配列のどこにも無い値が出てきます。

0 から始めると、全部が負の数のとき壊れる

整数型の配列: kion ← {-5, -3, -9}

誤り ── saidai ← 0 から始める

1-5

2-3

3-9

0 より大きい値が1つも無いので、条件分岐が一度も成り立たない

その結果

出力0

配列のどこにも無い 0 が、答えとして出てくる

正しい ── saidai ← kion[1] から始める

1-5▲

2-3

3-9

1番目の -5 を入れ、2番目からくらべる。-5 と -3 では -3 のほうが大きい

その結果

出力-3

必ず配列の中の値が答えになる

迷ったら「1番目を入れて、2番目から比べる」

1番目を入れて、2番目からくらべる。これなら壊れません。1番目は必ず配列の中にある値なので、どんな値が並んでいても、答えが配列の外の値になることはありません。点数のように「値は 0 以上」と問題文に書いてあれば 0 でも動きますが、その保証が無いときは迷わず1番目です。

最小は、不等号を逆にするだけ

いちばん小さい値を探すときも、まったく同じ形です。変わるのは条件分岐の不等号の向きだけ。「いま見ている値のほうが小さければ、入れ替える」にします。

整数型の配列: ten ← {80, 65, 90, 72}
整数型: saishou ← ten[1]
整数型: i

for (i を 2 から tenの要素数 まで 1 ずつ増やす)
  if (ten[i] < saishou)
    saishou ← ten[i]
  endif
endfor

saishouの値 を出力する

出力は 65 です。1周目で 65 < 80 が成り立って saishou が 65 になり、そのあとの 90 と 72 は 65 より小さくないので、そのままです。

変えるのは1か所

最大if (ten[i] > saidai) 大きければ入れ替える

最小if (ten[i] < saishou) 小さければ入れ替える

この不等号の向きが空欄になったら、大きいほうを残したいのか小さいほうを残したいのかを、問題文の日本語で確かめてから埋めてください。

次に読む

A2-3 配列から探す ─ 線形探索と「見つからなかったとき」
A2-1 配列を全部見る ─ ten[i] と for の読み方
G5 選択処理 if ─ 枝がどう選ばれるか
目次 基本情報技術者試験 科目B 攻略ガイド

科目Bが難しいと感じたら、この順番で

読み方の基礎を固めてから、本番と同じ形の問題で試す。

1

まず、読み方の基礎

科目B 基礎講義

プログラムを1行ずつたどって、値の変わり方を見る。定番アルゴリズムの型をそろえる。

0円通常 2,600円先着100名・12月3日まで

講座の中身を見る ›

講義の目次と無料の1本を見てから、Udemy で0円で受講できます

2

次に、本番と同じ形で力試し

オリジナル模試 3回分

初見の問題を、本番と同じ時間で通して解く。

1,500円定価 2,600円

模試の中身を見る ›

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。

本文の例題は当サイトのオリジナルです。

タイトルとURLをコピーしました