冬期講習 2026-2027、募集中。総復習は売りません。90分×完全1対1で、穴だけを塞ぎます 詳しく →
電話 0422-27-7828チャットで質問無料相談を予約

武蔵野個別指導塾の特徴

高校情報I 配列と関数—添字と引数を区別して値の受け渡しを追跡する|武蔵野個別指導塾

学習のイメージ写真 武蔵野個別指導塾
X LINE Facebook

添字と要素、引数と戻り値を追跡表に分けて記し、配列の集計で対象が0個になる場合まで読み解けます。

よくあるのは、並んだ記録を読むとき、要素の位置とそこに入った値を同じものとして読む場面です。例えば、添字2の場所に7が入っていても、2が記録されたわけではありません。位置と中身を別々に書くと、関数にどちらを渡したかも追いやすくなります。範囲表や授業ノートと照らし、添字の始まりや関数の書き方が授業と異なる場合は、問題で指定された規則を優先してください。

問題文から拾う3つの型

1つ目は、配列の指定された位置を読み、代入後の並びや出力を答える型です。添字が0から始まるか、1から始まるかで同じ数字が指す場所は変わります。要素の個数と、最後に使える添字も区別します。

2つ目は、関数を呼び出す場面で、引数に何を渡し、戻り値をどこに使うかを問う型です。関数の中で計算した値を、呼び出し元が必ず表示するとは限りません。戻す、代入する、出力するという操作を順に追います。

3つ目は、配列の一部を集計し、条件に合う個数や合計を答える型です。範囲の両端を含むか、条件に等しい値を含むか、対象が0個なら何が返るかを確かめます。このページでは一次元配列と簡単な関数を扱い、再帰や参照渡しには進みません。

番地と中身、渡す値と受け取る値

配列は、複数の値を順序付きで置く入れ物です。それぞれの場所にある値を要素、その位置を表す番号を添字と呼びます。ここでは左端を添字0とし、右へ1ずつ増やします。要素が4個なら使える添字は0、1、2、3です。添字4は範囲外なので、その値を勝手に0と決めず、問題の規則を確認します。

図1のように、添字は場所を指し、要素はその場所の中身です。関数を呼ぶときは、指定した要素を読み出して引数として渡せます。関数は受け取った値を処理し、戻り値を呼び出し元へ返します。

図1 添字と要素から引数と戻り値へ渡す関係

図1では添字1の要素8を引数として渡し、関数が2を足して10を返します。添字1自体に2を足す処理ではありません。関数の内部で使う名前と、呼び出し元で使う名前が違っても、渡された値を追えば対応できます。

以下の疑似コードでは「←」を右側の値を求めて左側に入れる代入とします。配列Aの添字iの要素をA[i]と表します。加算は「足す」、比較は「以上」などの日本語で表します。整数の商を使う場合は端数を切り捨てると問題ごとに指定しますが、以下の計算には除算を使いません。範囲の端を含むかは各問題に明記します。関数に数値を渡す例では、その値を受け取るものとし、元の配列を書き換える操作は行いません。

基本例題:取り出してから関数に渡す

記録の配列Aを左から順に4、8、3とします。関数「加える」は数値xを受け取り、xに2を足した値を戻します。次の処理後、出力される整数と配列の並びを答えてください。添字は0から始まります。

v ← A[1]
r ← 加える(v)
A[2] ← r
r を出力する

図2のように、読み出し、関数の計算、書き戻しを分けて追います。表の配列は左から添字0、1、2の順です。

図2 配列から取り出した値を関数に渡して戻す流れ
行 操作と判断 操作後の状態
1 A[1]は左から2番目の8 vは8、Aは4、8、3
2 加えるに8を渡し、8に2を足す rは10、Aは4、8、3
3 A[2]にrの10を代入する Aは4、8、10
4 rの値を出力する 出力は10

答えは出力10、配列は4、8、10です。図2の矢印は、添字1から読み出した8が関数を通り、戻った10が添字2へ入る順を示します。元の条件に戻して、添字1は8のまま、添字2だけが3から10に変わったことも確かめます。

行1のvは添字ではなく、読み出した値です。行2で関数が返す10は、関数内に置き去りにならずrに入ります。一方、行2が終わった時点では配列はまだ変化しません。行3の代入先を見て初めて、配列のどの要素が変わるか決まります。出力の行でA全体を出すとは書いていないため、出力されるのはrの値だけです。

条件に合う要素の個数を返す

配列Bは左から順に5、2、5、7です。関数「数える」は整数nを受け取り、添字0からn未満までを先頭から調べ、値が5以上の要素の個数を戻します。nは0以上4以下とします。nが0なら調べる要素はありません。関数は個数を0にしてから、対象の各要素について条件を判定し、条件に合えば個数を1増やします。戻り値は整数です。数えるに4を渡したときと0を渡したときの戻り値を、それぞれ答えてください。

4を渡すと対象の添字は0、1、2、3です。添字0の5は5以上なので個数は1、添字1の2は条件に合わず1のままです。添字2の5で2、添字3の7で3になります。したがって戻り値は3です。元の4要素に戻して数えると、5、5、7の3個が該当し、2は該当しません。等しい5も含める点が境界です。

0を渡した場合は、0以上0未満の添字がないので、判定を1回も行いません。初めに置いた個数0をそのまま戻します。A[0]のような最初の要素を必ず調べると決めつけると、この場合を誤ります。引数が配列の値ではなく、調べる要素数として使われる例であることにも注意してください。

もし条件が「5より大きい」なら、等しい5は対象に残っても数えられず、4個を調べた戻り値は1です。対象にする範囲と、対象の中で数える条件は別の判断です。問題の言葉を線で分けてから表にすると、範囲外の要素を数える誤りを見つけやすくなります。

追跡表を作るときの見取り図

配列を含む処理では、変数の欄と配列の欄を分けて用意します。配列の欄には添字を固定して書き、値が変わった場所だけを更新します。関数の欄には呼び出しのたびに渡した値と返った値を書きます。同じ関数を続けて呼んでも、前回の引数をそのまま使うのではなく、その行で指定された値を読み直します。

たとえば配列Gが左から2、6で、受け取った数に3を足して返す関数をG[0]とG[1]にそれぞれ使うとします。1回目は2を渡して5を受け取り、2回目は6を渡して9を受け取ります。戻り値を変数に保存するだけならGの並びは2、6のままです。2回目の戻り値をG[0]に代入する指示があれば、その時点で並びは9、6になります。最後に元の要素を調べ直すと、読み出した値と代入先が異なっていたことを確認できます。

引数を2つ取る関数では、その順番も手がかりです。最初に受けた数から次に受けた数を引くなら、同じ2つの値でも順を逆にすれば結果が変わります。関数名だけを見て計算せず、問題に書かれた処理を呼び出しごとに適用します。戻り値が後の行で再び引数になる場合も、前の行が終わった時点の値を使います。

集計では、初期値を置く場所と更新する条件を確認します。合計を0にしてから対象の値を加える処理と、個数を0にして該当するたびに1増やす処理は、どちらも途中値が変化しますが、記録する量が違います。合計の欄に添字を足したり、個数の欄に要素の値を足したりしないように、欄の見出しに単位や意味を添えます。対象がない場合は更新が起こらないので、初期値が結果を決めます。

間違えた答えを直す

基本例題で「A[1]は1なので、加えるの戻り値は3」と答えたとします。原因は、角括弧の中の1を要素の値として使ったことです。1は位置を指定する添字で、その位置の中身は8です。正しくは8に2を足し、10を戻します。

図3のように、まず添字と値を上下に分け、矢印の先にある値を読みます。関数へ渡す前に「添字1、値8」と声に出して区別すると、計算に入れる数を確定できます。

図3 添字を値と取り違えた誤答を修正する手順

別の誤りとして、数えるに4を渡して添字4まで調べる場合があります。図3の添字と値の区別に加え、範囲が「4未満」なので最後は3だと確かめてください。添字4は存在せず、値を想像して補ってはいけません。範囲外を読む処理が書かれた問題なら、使用する環境や問題の規則に従って結果を判断します。ここでの例には範囲外の読み出しはありません。

また、戻り値を受け取っただけで元の配列まで変わると考えるのも誤りです。基本例題では行3で初めてA[2]を書き換えています。関数を呼ぶ行と配列に代入する行を分け、各行の直後の状態を記録すれば、変化の起点を説明できます。

手を動かす問題

次の問題は互いに独立です。添字は0から始まり、範囲は書かれた端の条件に従います。数値を受け取る関数は元の配列を変更しません。出力や戻り値は整数で答えてください。

問1

配列Cは左から6、1、9、4です。関数「倍にする」は受け取った数を2倍して戻します。C[2]を引数にして呼び、戻り値をC[0]に代入します。その後の配列を左から順に答えてください。

問2

配列Dは左から3、6、1、6、2です。関数「合計」は整数nを受け取り、添字0からn未満の要素を足した値を戻します。合計の初期値は0で、nは0以上5以下です。nに3を渡した場合と0を渡した場合の戻り値を答えてください。

問3

配列Eは左から4、7、2、7です。整数kを受け取る関数は、添字0から3までの各要素のうち、kより大きい値の個数を戻します。個数の初期値は0です。kに7を渡した場合と4を渡した場合の戻り値を答え、等しい値をどう扱ったかも書いてください。

問4

配列Fは左から8、3、5です。関数「差」は2つの数を順に受け取り、最初の数から次の数を引いた値を戻します。差にF[0]、F[2]の順で値を渡し、戻り値を変数tに入れます。続いてF[1]にtを入れ、tを出力します。出力と処理後の配列を答えてください。

答えと追跡の理由

問1は18、1、9、4です。C[2]は添字2ではなく、左から3番目の9です。9を2倍した18を添字0に入れます。元の並びと比べると、最初の6が18に変わり、残る1、9、4はそのままです。18を半分に戻すと、渡した9と一致します。

問2は順に10、0です。3を渡すと添字0、1、2の3個が対象で、3に6と1を足して10です。元の5要素に戻すと、後ろの6と2は範囲に入っていません。0を渡すと対象がないため、初期値0のまま戻ります。添字0を余分に足さないことが、反復0回の確認です。

問3は順に0、2です。7より大きい要素はなく、7に等しい2個も含めません。4より大きい要素は2個の7です。4は境界と等しいので含めず、2も条件に合いません。4つの値を元の順で調べると、該当しない、該当する、該当しない、該当するとなります。

問4の出力は3、配列は8、3、5です。渡す値は8と5なので、差の戻り値は3です。添字1に3を入れますが、その場所には元から3があるため、並びの見た目は変わりません。処理が行われなかったのではなく、同じ値で上書きされた状態です。3に引いた5を足すと、最初に渡した8へ戻ります。

持ち帰る要点

記録のどこで迷ったかを見分ける

学校の問題で添字が1から始まるときは、先頭の番号から配列の表を作り直します。ここで使った番号をそのまま当てはめず、要素数と最後の番号を照らし合わせると、表の端での読み違いを防げます。

答えが違うときは、最終値だけでなく、最初に取り出した要素を確認します。添字と値が入れ替わっていれば、配列の上に番号、下に中身を書いて対応を指さします。読み出しが合っていれば、関数に渡した値と戻り値を別の欄に書き、どの行で配列へ代入したかをたどります。

個別指導で確かめるなら、本人の追跡表を使い、境界と等しい要素を数えた理由や、対象が0個のときの初期値を説明してもらいます。数値を変えても同じ規則で追えるかを見ると、答えの暗記と手順の理解を区別できます。位置と中身を分けた記録が、値の受け渡しをたどる手がかりです。

読んで終わりにするか、ここから変えるか。

武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。

まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。

本気になった日が、入塾の日。

お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。

電話は年中無休。365日、24時間、お電話可能。

チャットで質問チャット
無料相談を予約する 電話 0422-27-7828電話 LINE チャット
で質問