【オンライン講座】2025年共通テスト「情報Ⅰ」ついに実施!プログラミング問題(第3問)問2「カ」「キ」「ク」 を 実際にプログラミング !

2025年1月19日、大学入学共通テスト「情報Ⅰ」 がついに実施されました!オンライン授業では、第3問の問2「カ」「キ」「ク」 を Luaを使ってプログラミング します。
今回の共通テスト問題では、配列のインデックスが「1」から始まるようになっており、同じくLuaも1からスタートする言語 であるため、適したプログラミング言語として使用しました。。

こんなことが学べます!

✅ 共通テスト2025 情報Ⅰのプログラミング問題(第3問)問2「カ」「キ」「ク」の解説
✅ Luaで実際にコードを書いて問題を解く体験
✅ 大学入試レベルのプログラミング思考を身につける

 

※問3の解説は別日に予定していますが、 プログラミング問題(第3問)の全問題の解説を知りたい方は、以下のページをご覧ください。

🔗 共通テスト2025 情報Ⅰ「第3問」プログラミング解説ページ

 

日時: 2025/02/22(土) & 2025/02/23(日) 17:30 ~ 18:30
場所: オンライン講座
対象: KIDSPROスクール生、KIDSPRO eラーニングをご利用の方
必要なもの: Webブラウザーにつながるパソコン
費用: 無料

 

※プログラミングも行いますので、myCompilerにアクセスしておいてください。

myCompiler とは?

myCompiler は、オンラインで簡単にコードを書いて実行できる便利なツールで、C, C++, Java, Python, JavaScript(Node.js), Luaにも対応しています。

共通テスト2025 情報Ⅰ 第3問 問2(過去問)の解説

第3問 問2

 

第3問 問2の解答と解説

「カ」の正解・・・4

Akibiという配列の添字(インデックス)が、部員の番号に対応していると理解していれば、Akibi[3] = 4であることが分かります。

部員1の空き日はAkibi[1]に格納されており、図1を見ると部員1の空き日は「5」日目なのでその値は「5」となります。同様に、部員2の空き日は「3」日目なのでAkibi[2]には「3」が格納され、部員3の空き日は「4」日目なのでAkibi[3]には「4」が格納されます。「カ」の答えは「4」です。

【工芸品4まで割当られた後の配列Akibiの内容

  • 部員1の空き日・・・Akibi[1] 👈️ 5日が格納
  • 部員2の空き日・・・Akibi[2] 👈️ 3日が格納
  • 部員3の空き日・・・Akibi[3] 👈️ 4日が格納

このときの配列Akibiは、プログラミング言語ではAkibi[3] = [5, 3, 4]のように表します。

 

「キ」の正解・・・ (Akibi[buin] < Akibi[tantou])

プログラムの問題「キ」を解く手順

手順1
プログラムの概要を確認
問2の文章(24ページ)と図1 割当図(工芸品4まで)を見ると、工芸品5の部員を割り当てるプログラムということが分かります。このことを念頭に入て問題を解きましょう。

手順2
変数や配列の意味を確認

次に、各変数の意味を確認しょう。ローマ字の変数名を確認する、その意味を推測しやすくなります。また、初期値として代入される値からも推測できると思います。

Akibi = [5, 3, 4]という配列は、工芸品4までを割り当てた後の各部員の空き日を格納している。部員1の空き日は5日、部員2の空き日は3日、部員3の空き日は4日。※問2の「カ」の問題を見ると詳細が分かります。

buinsuという変数は、部員の総数。※部員は3人なので、3が代入されている。

tantouという変数は、工芸品を担当する部員番号。1が代入されている。※つまり、担当部員を部員1に初期設定している。

buinという変数は、部員番号。※(04)行目で2が代入され、1ずつ増える。

手順3
(04)行目の「・・繰り返す」を理解

(04) 行目の「部員番号(buin)を2から部員の総数(buinsu)まで1ずつ増やしながら繰り返す」は、部員2、部員3までを繰り返すfor文ということになります。変数の値を変化させながら繰り返し実行するコードをfor文と呼びます。
※部員番号(buin)を1からでなく2からスタートしているのは、(03)行目でtantouに1を代入して仮の担当部員を部員1としているためです。その後、(04)行目のfor文では部員2、部員3と順に比較して、for文が実行し終わったら担当部員が決定すると推測できます。

手順4
(05)行目の「もし?なら」を理解
(05) 行目の「もしも「キ」ならば:」は、「キ」の条件文を満たしたときに「tantou = buin」が実行される条件分岐(if文)です。ある条件が成立したときに、特定の処理を実行するコードをif文と呼びます。
手順5
(06)行目の「tantou = buin」を理解
「キ」の条件が成立したときに実行されるtantou = buinは、担当部員(初期設定では部員1)を格納する変数tantouに、部員番号が格納されている変数buinを代入することを意味します。
※プログラミングにおいて「tantou = buin」はtantoubuinの値が等しいという意味ではなく、tantouの値をbuinの値に更新する(置き換える)ことを意味します。例えば、担当する部員(tantou)が「1」、部員番号(buin)が「2」のときに「tantou = buin」を実行すると、担当する部員(tantou)が部員1から部員2に変更されます。
手順6
割当の規則から「キ」の条件式を推測

手順5までの考察と割当の規則「最も早く空きになる部員が、空きになった日付から次の工芸品を担当する」から、(04)-(06)行目のプログラムは、担当する部員(tantou)と部員番号(buin)の空き日を比較し、部員番号(buin)の部員の空き日が、担当する部員(tantou)の空き日よりも早ければ(小さければ)、「tantou = buin」を実行して担当部員を変更するコードと考えることができます。

Akibi[buin]は部員番号(buin)の部員の空き日、Akibi[tantou]は担当する部員(tantou)の空き日を示すので、「キ」の条件文でAkibi[buin] < Akibi[tantou]の比較を行えばプログラムが完成します。つまり、「キ」の答えはAkibi[buin] < Akibi[tantou]です。

プログラミングにおいて「x = y」はxyの値が等しいという意味ではなく、xの値をyの値に更新する(置き換える)ことを意味します!

 

 

「ク」の正解・・・1  

プログラムの問題「ク」を解く手順

手順1
「ク」の問題の概要を確認

「ク」の問題文を読むと、部員数(buin)を5Akibi = [5, 6, 4, 4, 4]に変更して、図4のプログラムを実行したとき、(06)行目の代入tantou = buinが何回実行されるかを問う問題であることが分かります。

(06)行目のtantou = buinは、「キ」の条件式Akibi[buin] < Akibi[tantou]を満たしたときに実行されるので、部員数(buin)を5Akibi = [5, 6, 4, 4, 4]に変更して図4のプログラムを実行したとき、条件式Akibi[buin] < Akibi[tantou]が何回成立するか考えてみましょう。

部員数(buin)を5Akibi = [5, 6, 4, 4, 4]の状態を図1のような割り当て図で示すと、以下のようになります。

手順2
変数や配列の意味を確認

各変数の意味を確認しましょう。変数名は意味ある名前に設定されているため、ローマ字の変数名を確認すると、その意味を推測しやすくなります。

Akibi = [5, 6, 4, 4, 4]部員1の空き日は5日、部員2は6日、部員3は4日、部員4は4日、部員5は5日。

buinsu = 5部員の総数。

tantou = 1担当部員を部員1に初期設定する。

buin部員番号。

手順3
(04)-(06)行目のfor文を各ステップ毎に確認

(04)-(06)行目ののfor文を各ステップで確認しましょう。

for文の前に実行する前に、(05)行目で仮担当を部員1と初期設定しているので、部員2からfor文が実行されます。

ステップ① 部員2の空き日:6日 vs 仮担当部員1の空き日:5日 👉 仮担当部員1の方が小さい(早い)

ステップ② 部員3の空き日:4日 vs 仮担当部員1の空き日:5日 👉 部員3の方が小さい(早い)

ステップ③ 部員4の空き日:4日 vs 仮担当部員3の空き日:4日 👉 仮担当部員3の方が小さい(早い)

ステップ④ 部員5の空き日:4日 vs 仮担当部員3の空き日:4日 👉 仮担当部員3の方が小さい(早い)

手順4
tantou = buinの実行回数を確認

手順3からステップ②のときだけ、条件式Akibi[buin] < Akibi[tantou]が成立し(06)行目tantou = buinの代入が実行されているのが分かります(仮担当部員が部員1から部員3に更新)。つまり、「ク」の答えは1回です。

プログラミングしてみよう!

🎯問題「キ」と「ク」のプログラムを実際にLuaやScratchでプログラミングしてみましょう!できるだけ問題のプログラムの形式と同じにしたかったので、配列の長さを返すlocal buinsu = #Akibiは利用していないことご了承ください。

Lua:「カ」「キ」の問題のスクリプト

-- 各部員の空き日を表す配列(部員1が5日、部員2が3日、部員3が4日)
local Akibi = {5, 3, 4}
-- 部員の総数(local buinsu = #Akibiは使用せず)
local buinsu = 3
-- 最初は部員1を担当に設定
local tantou = 1

-- 部員2から順に比較
for buin = 2, buinsu, 1 do
    -- もし現在の部員の空き日が、現在の担当の部員より早ければ(小さければ)担当を変更。
    if (Akibi[buin] < Akibi[tantou]) then
        tantou = buin
    end
end

-- ↑for文の仕組み
-- 担当を部員1に設定してから、順番に他の部員と「<=」ではなく「<」で比較しているため、空き日が同じ場合には、番号の小さい部員が選ばれる。

-- 最も空き日が早い部員を担当として表示
print("次の工芸品の担当は部員" .. tantou .. "です")
Lua:「ク」の問題のスクリプト

-- 各部員の空き日を表す配列(部員1が5日、部員2が6日、部員3が4日、部員4が4日、部員5が5日)
local Akibi = {5, 6, 4, 4, 4}
-- 部員の総数(local buinsu = #Akibiは使用せず)
local buinsu = 5
-- 最初は部員1を担当に設定
local tantou = 1
-- 代入回数を記録する変数(初期値0)
local dainyu = 0

for buin = 2, buinsu, 1 do
    -- 各ステップで部員と担当候補の部員の空き日を出力
    print("部員"..buin,Akibi[buin],"担当候補の部員"..tantou,Akibi[tantou])
    if (Akibi[buin] < Akibi[tantou]) then
        tantou = buin
        -- 「担当の変更が発生した回数」を記録
        dainyu = dainyu + 1
    end
end

print("次の工芸品の担当は部員"..tantou.."です")
print("代入回数は"..dainyu.."です")

※動画説明ではRoblox Studioを使ってLuaプログラミングを行いましたが、すぐにプログラミングをしたいと言う方にはmyCompilerがおすすめです。問題を解くだけでなく、実際にプログラミングしてみると楽しいですよね。

 

myCompiler とは?

myCompiler は、オンラインで簡単にコードを書いて実行できる便利なツールで、C, C++, Java, Python, JavaScript(Node.js), Luaにも対応しています。

プログラムがエラーになったら!?

1. 変数名や関数名にスペルミスがないか確認しましょう。

2. for文やif文の構成が正しいか確認しましょう(luaであればdo, then, endの位置や個数に注意)。

3. 誤って全角文字を使っていないか確認しましょう。

4.「=」と「 – 」が間違っていないか確認しましょう。

5.「 [ 」「 { 」「 ( 」が間違っていなか確認しましょう。

プログラミング問題(第3問)の徹底解説!

※luaとScratchによるコードも記載してありますので、ぜひ御覧ください。