配列を全部見る|ten[i] と for の読み方【基本情報技術者試験 科目B】

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

ここからアルゴリズムの中身に入ります。1本目は配列を全部見ることです。地味に見えますが、科目Bでいちばん出るのはこれです。公開されている44問のうち、配列を扱う問題は21問あります。

第2部 定番処理の型 全26回

A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消すA3-12次元配列の走査A3-22次元配列の集計A4-1文字列を1文字ずつA4-2文字列照合A5-1交換して並べるA5-2挿入ソートA6分割して並べるA7-12分探索A7-2ハッシュ表探索A8-1再帰とはA8-2再帰のトレースA9スタックとキューA10-1リストを読むA10-2リストの挿入と削除A11木構造A12木の巡回A13グラフA14AI・データを題材にしたプログラムA15ファイル処理

まず、通しで見る

1分20秒ほどの動画です(音声つき)。なぜ配列を読むのに for を使うのかが、前半で分かります。書き並べた3行を見比べると、変わっているのが番号だけだと目で確かめられるからです。後半は、その形が実際に回って合計が育つところ。ここが分かると、科目Bの配列問題の多くが同じ形として読めます。

動画の後半で回すのは、このプログラムです。

整数型の配列: ten ← {80, 65, 90}
整数型: goukei ← 0
整数型: i

for (i を 1 から tenの要素数 まで 1 ずつ増やす)
  goukei ← goukei + ten[i]
endfor

goukeiの値 を出力する

出力は 235 です。3人の点数を全部足した合計です。

配列を全部見る(1分40秒・音声つき)

再生できないときは、この下の図と説明で同じ内容を追えます。

ここから、同じ内容を1つずつ確かめていきます。

全部見るとは、番号を1つずつ変えて読むこと

配列から値を取り出すときは、何番目かを [ ] の中に書きます(G4-2)。3つ入った配列なら、こう書けば全部読めます。

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

ten[1]の値 を出力する
ten[2]の値 を出力する
ten[3]の値 を出力する

出力は 80、65、90 です。3つならこれで足ります。

ただ、この3行をよく見ると、変わっているのは [ ] の中の番号だけです。1、2、3。ほかはまったく同じ行です。

そこで、その番号のところを変数にします。i という箱に番号を入れておいて、ten[i] と書く。i が 1 なら ten[1]、2 なら ten[2] を指します(A1-3 で表に書いたのが、この動きです)。

書き並べた3行が、for の1行になる

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

3つなら、こう書けば全部読める

ten[1]の値 を出力する
ten[2]の値 を出力する
ten[3]の値 を出力する

ちがうのは [ ] の中の番号だけ。ほかはまったく同じ行

その番号を変数 i にする

ten[i]の値 を出力する

i が 1 なら ten[1]、2 なら ten[2] を指す

あとは i を 1、2、3 と変えながらくり返す

for (i を 1 から tenの要素数 まで 1 ずつ増やす)
  ten[i]の値 を出力する
endfor

要素が100個でも、この形のまま

あとは i を 1、2、3 と変えながら、同じ1行をくり返すだけです。それをやるのが for です。

for のかっこの中を、1つずつ読む

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

for (i を 1 から tenの要素数 まで 1 ずつ増やす)
  ten[i]の値 を出力する
endfor

さきほどの3行と、出力はまったく同じです。かっこの中は4つの部分でできています。

かっこの中 何を決めているか
i を 番号を入れておく変数の名前。この名前を、そのまま [ ] の中に書く
1 から 最初の番号。擬似言語の配列は1番目から始まるので、たいてい 1
tenの要素数 まで 最後の番号。ten の中身が3個なら 3、100個なら 100 が入る
1 ずつ増やす 1周おわるごとに i が 1 増える。だから指す箱が1つ進む

endfor は「ここまでが1周ぶん」という印です。for と endfor にはさまれた行が、i を変えながら何度も実行されます。i が tenの要素数 を超えたら、くり返しは終わります。

「3 まで」と書かず「tenの要素数 まで」と書く

ここを 1 から 3 まで と直接書いても、この配列なら同じ動きをします。ただし要素が4つに増えたとき、4つ目が読まれません。

問題文のプログラムも、ほぼ必ず 〜の要素数 と書かれています。配列の長さがいくつでも動くようにするためです。

取り出した値を、1つの箱に足し込む

1つずつ読めるようになったら、次は取り出した値をどうするかです。合計を出すなら、答えを入れる箱を1つ用意して、そこへ足していきます。

整数型の配列: ten ← {80, 65, 90}
整数型: goukei ← 0
整数型: i

for (i を 1 から tenの要素数 まで 1 ずつ増やす)
  goukei ← goukei + ten[i]
endfor

goukeiの値 を出力する

goukei ← goukei + ten[i] は「いまの goukei に ten[i] を足したものを、あらためて goukei に入れる」という意味です(G2-3)。goukei は 80 → 145 → 235 と育ち、出力は 235 になります。

箱を用意するのは、for の前

整数型: goukei ← 0 は for の外にあります。中に書くと毎周 0 に戻り、最後の1つぶんしか残りません。

← 0 のほうも落としやすいところです。宣言しただけの箱には、まだ何も入っていません(未定義の値)。足す相手が無いので、1周目で行き詰まります。

足し込む箱は、0 から始める

整数型: goukei ← 0 は for の外。中に書くと毎周 0 に戻る

正しい ── はじめに 0 を入れた

周 ten[i] goukei
はじめ ー 0
1周 80 80
2周 65 145
3周 90 235

誤り ── 0 を入れ忘れた

周 ten[i] goukei
はじめ ー 未定義
1周 80 ?
2周 65 ?
3周 90 ?

未定義の値には足せない。1周目で行き詰まる

答えを入れる箱は、必ず先に 0 を入れる

試験ではここが空欄になる

整数型: goukei ← □ の形で、初期値が問われることがあります。

迷ったら1周目を書いてみるのがいちばん早いです。1周目で正しい答えになる値が、入れるべき初期値です。

合計と個数のちがいは、足すものだけ

「何個あるか数える」も、いま作った形のままです。足す行だけが変わります。

変わるのは1行だけ

合計goukei ← goukei + ten[i]取り出した値を足す

個数kosuu ← kosuu + 1いつも 1 を足す

数えるときは、中身を見ません。1周まわった=1個あったなので、足すのはいつも 1 です。

条件に合うものだけ数える

「60点以上の人が何人いるか」も、同じ形です。くり返しの中に if を1つ足すだけです。

整数型の配列: ten ← {80, 65, 90, 52}
整数型: kosuu ← 0
整数型: i

for (i を 1 から tenの要素数 まで 1 ずつ増やす)
  if (ten[i] ≧ 60)
    kosuu ← kosuu + 1
  endif
endfor

kosuuの値 を出力する

「全部見て、数える」を1行ずつ動かす

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


ループ開始前

配列

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

いま計算していること

まだ計算していません

変数の状態

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

出力は 3 です。80・65・90 の3人が 60 以上で、52 だけが外れます。

足す行の位置に注意

kosuu ← kosuu + 1 は if と endif のあいだにあります。

endif の下に書くと、条件に関わらず毎周1を足すことになり、要素数がそのまま出てきます。

配列が2本あっても、番号がそろっていれば for は1本

名前の配列と点数の配列があって、2番目どうしが同じ人だとします。試験でよく出る形です。

番号がそろっていれば、for は1本でいい

文字列型の配列: namae / 整数型の配列: ten

i = 2 のとき、2本とも2番目を読む

1田中

2鈴木▲

3佐藤

180

265▲

390

2番目どうしが同じ人、と問題文に書いてある形。番号がそろっている

要素数が同じで、同じ番号が同じものを指すなら、目印は 1 つで足りる

このとき、くり返しは1本で足ります。i を1つ用意して、両方から [i] を取り出すだけです。

文字列型の配列: namae ← {"田中", "鈴木", "佐藤"}
整数型の配列: ten ← {80, 65, 90}
整数型: i

for (i を 1 から namaeの要素数 まで 1 ずつ増やす)
  namae[i]の値 と ten[i]の値 をこの順にコンマ区切りで出力する
endfor

出力は 田中,80 鈴木,65 佐藤,90 の3回です。目印が1つなので、2本がずれようがありません。

見分け方

2本の要素数が同じで、同じ番号が同じものを指すと問題文に書いてあれば、この形です。

そうでない ── 2本を先頭から見比べて、進む側だけを進める形は、目印が2つ要ります。A6「分割して並べる」の併合で扱います。

つまずきポイントまとめ

まちがえ方 正しい読み方
番号を1つずつ書き並べようとする [ ] の中を変数にして for で回す。変わるのは番号だけ
くり返しの終わりに 3 のような数を直接書く 〜の要素数 と書く。要素が増えても最後まで読める
くり返しの中で答えの箱を作る 中で作ると毎周 0 に戻る。用意するのは for の前
答えを入れる箱に 0 を入れ忘れる 未定義の値には足せない。足し込む箱も数える箱も 0 から
個数を数えるのに値を足す 数えるときに足すのは 1
配列が2本あると、目印も2つ要ると思う 番号がそろっていれば1つ。2つ要るのは、進む側だけを進めるとき

次に読む

A2-2 最大・最小を見つける ─ 仮の王者を置いて入れ替える
A1-3 配列のトレース ─ 欄を作る、まとめる、減らす
G6-2 配列を for で回す ─ 要素数までまわす形
目次 基本情報技術者試験 科目B 攻略ガイド

この記事で引用した資料

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

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

Copied title and URL