2026-01-20
今年の共通テストでも昨年同様「共通テスト用プログラム表記」が使われました。配列の添字は、指定がなければ0から使うことになっていますが、2025年同様、1から使うと指定されていました。


今年のプログラム問題は、文化祭での待ち時間計算でした。昨年の6人分の到着時間データを元に待ち時間を計算するプログラムを作ります。(参考、共通テスト2026 情報Ⅰ問題|共通テスト解答速報2026|予備校の東進

日本語と変わった区切り線で構成される構文、ローマ字の変数、漢字の関数が特徴的です。

まず、最大値、要素数を関数として実装します。こちら2つを先頭に加えて Wirth Playground で動かしてみましょう。

function 最大値(n, m) if n < m return m endif return n end function 要素数(array) return array.length end

中高生向けプログラミング言語、Wirth(ヴィルト)で実装するとこうなります。
※ Wirth では、配列の添字は0から始まる
※ Wirth では、代入は意味的におかしい「=(イコール)」ではんなく「<-(アサイ)」を使う。

taiken <- 3 Touchaku <- [0, 3, 4, 10, 11, 12] kyakusu <- 要素数(Touchaku) Kaishi <- [0, 0, 0, 0, 0, 0] Shuryou <- [0, 0, 0, 0, 0, 0] Shuryou[0] <- taiken for i <- 1 to kyakusu - 1 Kaishi[i] <- 最大値(Shuryou[i - 1], Touchaku[i]) Shuryou[i] <- Kaishi[i] + taiken print i + 1, "人目の待ち時間: ", Kaishi[i] - Touchaku[i], "分間" next

ローマ字の変数名、せっかくなので漢字化して読みやすくしたプログラムがこちら。

体験 <- 3 到着 <- [0, 3, 4, 10, 11, 12] 客数 <- 要素数(到着) 開始 <- [0, 0, 0, 0, 0, 0] 終了 <- [0, 0, 0, 0, 0, 0] 終了[0] <- 体験 for i <- 1 to 客数 - 1 開始[i] <- 最大値(終了[i - 1], 到着[i]) 終了[i] <- 開始[i] + 体験 print i + 1, "人目の待ち時間: ", 開始[i] - 到着[i], "分間" next

書くのはちょっと面倒ですが、読みやすいですね!


「Wirth Playground」

実際、日本語変数名を業務システムで使って実装している例もありますが、現場で圧倒的に多いのが変数、関数は英語です。小学校から英語やりますしね。

続く問題で、体験時間を変化させて、待ち時間がどうなるかを確認するプログラム。

Touchaku <- [0, 3, 4, 10, 11, 12] kyakusu <- 要素数(Touchaku) for taiken <- 1 to 15 Kaishi <- [0, 0, 0, 0, 0, 0] Shuryou <- [0, 0, 0, 0, 0, 0] Shuryou[0] <- taiken for i <- 1 to kyakusu - 1 Kaishi[i] <- 最大値(Shuryou[i - 1], Touchaku[i]) Shuryou[i] <- Kaishi[i] + taiken next saichou <- 0 for i <- 0 to kyakusu - 1 saichou <- 最大値(saichou, Kaishi[i] - Touchaku[i]) next if saichou < 10 print "体験時間: ", taiken, "分間: ", "最長待ち時間", saichou, "分間" endif next

saichou という変数が最長待ち時間を表す変数名です。

Touchaku <- [0, 3, 4, 10, 11, 12] kyakusu <- 要素数(Touchaku) saicho <- 0 taiken <- 1 count <- 0 while taiken < 15 and saicho < 10 Kaishi <- [0, 0, 0, 0, 0, 0] Shuryou <- [0, 0, 0, 0, 0, 0] count <- count + 1 Shuryou[0] <- taiken for i <- 1 to kyakusu - 1 Kaishi[i] <- 最大値(Shuryou[i - 1], Touchaku[i]) Shuryou[i] <- Kaishi[i] + taiken next saichou <- 0 for i <- 0 to kyakusu - 1 saicho <- 最大値(saicho, Kaishi[i] - Touchaku[i]) next if saicho < 10 print "体験時間: ", taiken, "分間: ", "最長待ち時間", saicho, "分間" endif taiken <- taiken + 1 next print "初期化処理の実行回数: ", count

最後の問題は無駄な計算を省き、ループ回数が何回になったかという問題。
わかりやすく、count 変数を追加してみました。

プログラムは実際動かして確かめるのが一番!

links
- Pascalリスペクトの教育用構造化プログラミング言語「Wirth」
- 共通テスト手順記述標準言語 (DNCL)と共通テスト用プログラム表記をMarkdown化しIssuesを作成

クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS