コントロールブレーク処理は、キー(まとめる目印にする項目)の順に並んだデータを先頭から読み、キーが変わったところで小計(キーごとの合計)を出す処理です。店番号の順に並んだ売上から、店ごとの合計を出す例を1本、最後までたどります。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円第2部 定番処理の型 全26回A15コントロールブレーク処理一覧を開く
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コントロールブレーク処理
この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「コントロールブレーク」(全5分58秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、1行ずつ値を追うアニメの講義と、講義ごとの小テスト、本番と同じ形の模擬試験がそろっています。
コントロールブレーク処理とは ── キーが変わったところで小計を出す
売上のデータが5件あります。1件は「店番号」と「売上」の組で、店番号の小さい順に並んでいます。求めたいのは、店ごとの売上の合計(小計)です。出力は「店番号,小計」の形にします。店 1 の小計が 50 なら 1,50 です。
店番号が変わったところで、前の店の小計が出る
mise=店番号(小さい順に並んでいる)/uri=売上(万円)。2本の同じ位置(何番目か)どうしが1件ぶん
店 1 ── 1件目と2件目
mise
11
21
32
42
53
uri
130
220
310
445
560
30 + 20 = 50。次に読む3件目は店番号が 2 → 3件目を読んだところで 1,50 を出力する
店 2 ── 3件目と4件目
mise
11
21
32
42
53
uri
130
220
310
445
560
10 + 45 = 55。次に読む5件目は店番号が 3 → 5件目を読んだところで 2,55 を出力する
店 3 ── 5件目だけ
mise
11
21
32
42
53
uri
130
220
310
445
560
小計は 60。うしろに次の店が無い → 全部読み終えたあとで 3,60 を出力する
出力は 1,50 / 2,55 / 3,60 の3回。破線の枡=次に読む1件の店番号。ここで変わっている
キーは店番号です。同じ店番号が隣どうしに並んでいるので、「1つ前とちがう店番号が来た」ことだけで、前の店が終わったと分かります。この切れ目が「ブレーク」です。以下では区切りと呼びます。ばらばらに並んだデータでは、同じ店があとからまた出てくるので、この判定は使えません。先に並べ替えておくことが前提です。
IPAのシラバスは「ファイル処理のアルゴリズム」の中で、整列処理・併合処理・コントロールブレーク処理・編集処理の名前を挙げています。一方、IPAが公開している科目Bの問題(サンプル問題と令和5〜8年度の公開問題)に、この処理を題材にしたものは見当たりません。ただ、ここで使う部品(集計中のキーを覚えておく変数、合計を 0 に戻す位置、くり返しのあとの後始末)は、配列を読むプログラムに共通のものです。
擬似言語の記述形式には、ファイルを読む書き方がありません。そこで以下では、データがすでに配列に入っているものとして書きます。ファイルの1件ぶんが、2本の配列の同じ番号の組(mise[i] と uri[i])にあたります。
プログラム ── 区切りで出力し、切り替えてから足す
整数型の配列: mise ← {1, 1, 2, 2, 3}
整数型の配列: uri ← {30, 20, 10, 45, 60}
整数型: key ← mise[1]
整数型: kei ← 0
整数型: i
for (i を 1 から miseの要素数 まで 1 ずつ増やす)
if (mise[i] ≠ key)
keyの値 と keiの値 をこの順にコンマ区切りで出力する
key ← mise[i]
kei ← 0
endif
kei ← kei + uri[i]
endfor
keyの値 と keiの値 をこの順にコンマ区切りで出力する
出力は 1,50、2,55、3,60 の3回です。覚えておく変数は2つあります。key はいま集計している店の番号、kei はその店の小計です。
for の行は「i を 1 から 5(mise の要素数)まで 1 ずつ増やしながら、endfor までをくり返す」と読みます。i が「いま何件目を読んでいるか」です。
1件ごとにやること
-
if (mise[i] ≠ key)
店番号が変わったかを見る。いま読んだ1件の店番号mise[i]が、集計中の店keyと等しくなければ、前の店はもう終わっています。 -
keyの値 と keiの値 をこの順にコンマ区切りで出力する
変わっていたら、まず出力する。この時点のkeyとkeiは、まだ前の店のものです。書き換える前に出します。 -
key ← mise[i] kei ← 0つぎの店に切り替える。店番号を覚え直し、小計を 0 に戻します。0 に戻さないと、前の店の小計につぎの店の売上を足し続けます。 -
kei ← kei + uri[i]
いま読んだ1件を足す。endifの下なので、店番号が変わった回も変わらなかった回も、毎回ここを通ります。
店番号が変わったと気づいた1件は、新しい店の1件目です。だから 0 に戻したあとで足します。先に足すと、新しい店の売上が前の店の小計に入ります。
店ごとの小計を1行ずつ動かす
当サイトオリジナルの例題
ループ開始前
配列
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
最後の小計 ── くり返しのあとで出力する
くり返しの中で出力されるのは、つぎの店の1件目を読んだときだけです。最後の店 3 には、それが来ません。だから endfor の下に、同じ出力の行がもう1つ要ります。この行を消すと、出力は 1,50 と 2,55 の2回で終わり、店 3 の 60 はどこにも出ません。
整数型: key ← mise[1] は、1件目の店番号を先に覚えておく行です。これで1件目は「変わっていない」と判定され、何も足していない小計が出力されることはありません。もし key を 0 で始めると、1件目で「変わった」と判定され、0,0 が先に出力されます。始まる前に1件目のキーを入れ、終わったあとに最後の1組を出す。くり返しの前後で1つずつです。
練習
組番号の順に並べ替えていない名簿から、組ごとの人数を数えます。次のプログラムを実行したとき、出力はどうなりますか。配列の要素番号は1から始まります。
整数型の配列: kumi ← {5, 8, 5, 5}
整数型: key ← kumi[1]
整数型: ken ← 0
整数型: i
for (i を 1 から kumiの要素数 まで 1 ずつ増やす)
if (kumi[i] ≠ key)
keyの値 と kenの値 をこの順にコンマ区切りで出力する
key ← kumi[i]
ken ← 0
endif
ken ← ken + 1
endfor
keyの値 と kenの値 をこの順にコンマ区切りで出力する
次に読む
| A3-2 | 2次元配列の集計 ─ 0 を入れる場所で、何ごとの集計かが決まる |
| A6 | 分割して並べる ─ 並んだ2本を1本にまとめる併合 |
| A2-1 | 配列を全部見る ─ ten[i] と for の読み方 |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
この記事で引用した資料
- 基本情報技術者試験 シラバス Ver9.2(2026年1月8日)
- 情報処理技術者試験 試験要綱 Ver5.6(2026年7月6日)
- 擬似言語の記述形式 IPAが公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
本文の例題と練習問題は当サイトのオリジナルです。


