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

武蔵野個別指導塾の特徴

高校情報I 変数と代入—更新前後の値を追って計算結果と出力を求める|武蔵野個別指導塾

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

値の上書きと整数の商・余りを自作問題で練習し、追跡表から最後の出力を求める道筋を確かめます。

よくあるのは、代入を等式のように読み、更新した後も変数の前の値を使ってしまう場面です。たとえば、箱に入った数を増やす処理では、右側を計算した後に箱の中身が入れ替わります。前の値が消えるタイミングを記録できれば、最後の出力まで追えます。範囲表や授業ノートの表記と照らし、代入や型が試験範囲に入っているか確かめてから取り組みましょう。

どの値を聞かれているか

定期テストでは、変数の値が行ごとにどう変わるかを表に埋める問題が出ます。最初の値だけでなく、指定された行の直後の値か、最後の出力かを読み分けます。途中の変数と出力を一緒に尋ねる問題では、出力後に変数が変わると考えないことも必要です。

別の型として、整数を分けたときの商と余りを求め、次の代入に使う問題があります。何を何で割るかを確認し、商と余りの両方から元の数に戻せるかを点検します。また、入力された文字と数の型を区別する問題では、見た目が数字でも文字として受け取った場合の扱いに注意します。分岐や反復の追跡はここでは広げず、短い順番の処理に絞ります。

箱の中身と代入の順序

変数は値を名前で扱うための場所と考えます。名前そのものが数ではなく、その時点で記録されている値を参照します。代入は右側の値を求め、その結果を左側の変数に保存する操作です。左側に以前入っていた値は、新しい値で上書きされます。右側に同じ変数名が現れても、計算に使うのは上書きする直前の値です。

図1のように、まず右側の計算で古い値を読み、その結果を箱へ入れます。図1では箱の値が3から5に変わります。「箱は3であり、同時に5である」という等式ではありません。代入の前後を別々に考えると、矛盾を感じずに読めます。

図1 代入前の値を読み計算結果で箱を更新する流れ

このページの疑似コードでは「←」を代入に使います。「a ← a に 2 を足した値」は、現在のaに2を足してからaを更新するという意味です。行は上から順に1回ずつ実行します。入力は指定された値を受け取って変数に保存し、出力はその時点の値を表示する操作です。出力しても変数の中身は変わりません。後で値を更新しても、先に表示された内容は変わりません。

整数型は整数を扱い、文字列型は文字の並びを扱います。数としての7と文字としての「7」は見た目が似ていても型が異なります。問題で文字列を数に変換すると定められたときに限って、変換後の値を数の計算に使います。異なる型の加算や自動変換の結果は処理環境で異なるため、このページでは規則を明示しない限り決めつけません。

商と余りは、ここでは割られる数が0以上の整数、割る数が正の整数の場合に限ります。商は割ったときの整数部分、余りは割り切れずに残る数です。元の数は「割る数 × 商 + 余り」であり、余りは0以上で割る数より小さくなります。負の数の割り方は扱いません。

基本例題:更新した箱からもう一度読む

問題。整数型の変数a、bについて、次の処理を上から順に行います。各行の後のaとb、および出力される整数を答えてください。まだ値を入れていない変数は「未設定」と記します。

  1. a ← 4
  2. b ← a に 3 を足した値
  3. a ← b から 2 を引いた値
  4. b ← a と b を足した値
  5. b を出力する

図2のように、行を実行する前の値を使って右側を計算し、左側だけを更新します。表に書く際は、変わらない変数の値も同じ行に写すと取り違えを防げます。

図2 基本例題の代入後の変数の値と出力の対応
実行した行 a b 計算と状態
1 4 未設定 aに4を保存
2 4 7 4に3を足してbへ保存
3 5 7 bの7から2を引いてaへ保存
4 5 12 更新後のaの5とbの7を足す
5 5 12 bの12を表示

1行目の後、aは4です。2行目の右側でaを読むと4なので、bには7が入ります。この時点ではaは変わりません。3行目ではbの7を使い、aを5に更新します。4行目で読むaは、最初の4ではなく直前に保存した5です。したがってbは12に更新されます。5行目では12を出力し、aとbはそのまま残ります。

答えを元の処理へ戻して確かめましょう。4行目の出力候補12から、直前のbの7を引くと、直前のaの5に戻ります。その5は3行目の7から2を引いた値です。こうして各行のつながりを逆にも確かめると、古いaを使った誤りを見つけられます。

少し難しい例題:商と余りを別々に保存する

問題。17個のカードを1組5個ずつ、できるだけ多く組にします。整数型のnに17を入力し、次の処理を行います。q、r、nの最後の値と出力される整数を、それぞれ答えてください。割る数は5です。

  1. q ← n を 5 で割った整数の商
  2. r ← n を 5 で割った余り
  3. n ← q に r を足した値
  4. n を出力する

まず17を5で割ると、商は3、余りは2です。1行目でqに3が入り、nは17のままです。2行目でもnはまだ17なので、rには2が入ります。3行目で初めてnを3と2の和である5に更新し、4行目で5を出力します。答えはqが3、rが2、nが5、出力が5です。

場面に戻すと、3組に使うカードは15個で、残りの2個と合わせて17個です。余り2は1組の5個より少ないため、これ以上は組を作れません。出力の5は組数3と残り2の和であり、カードの元の個数でも余りでもありません。問題で求められた対象を区別して記します。

もし2行目より前にnを更新する処理が置かれたら、余りは更新後のnから計算されます。代入順を勝手に入れ替えると結果が変わるため、商と余りが同じ元の数から求められているかを確認しましょう。割る数が0の場合は、このページで定めた商と余りの計算ができないため、数値を推測せず処理を続けられないと判断します。

入力と出力の境界を読む

入力は外から値を受け取る指示です。問題文が整数として受け取ると定めているなら、受け取った整数を変数に保存してから次の行へ進みます。たとえば整数の入力が10で、入力後にその変数から3を引いた値を出力する処理なら、表示は7です。出力した7に3を足すと入力の10に戻ります。引き算の結果を表示するだけなら、入力を保存した変数の値自体は10のままです。

表示する前に「変数に結果を代入する」行があれば話は変わります。先ほどの入力10から3を引いた7を同じ変数へ代入した後なら、その変数は7です。処理が似ていても、式を表示する行と代入する行は別の役割を持ちます。問題が最後の変数の値を尋ねる場合には、この違いが答えに表れます。

入力が問題の条件に合わない場合は、正常な値を想像して続けません。整数を受け取る約束なのに文字だけが届いた場合、変換や再入力の手順が指定されていなければ、その先の数値は決まりません。授業でエラー時の処理を別に定義している場合は、その問題の規則に従ってください。正常な入力と失敗した入力を別々にたどると、計算の誤りと入力の不備を混同せずに済みます。

商と余りにも成立条件があります。割る数が正なら、余りは割る数未満です。余りが割る数以上になった答えは、さらに1組以上作れるため修正が必要です。割る数が0であれば、この範囲の操作は定義されず、商も余りも出せません。問題の条件が壊れているときに適当な数字を入れて先へ進めないことも、追跡の一部です。

誤答からたどり直す

基本例題の4行目で「aは最初に4だったので、bは4と7の和の11」とするのが誤答です。原因は、3行目でaが5に更新された事実を、次の行に持ち越していないことです。図3のように、4行目の直前のaを表から取り出し、5と7を足して12に直します。図3の左側の4は古い値であり、4行目に読む値ではありません。

図3 古い値を使う誤答を更新後の値に直す方法

同じ変数が右側にも左側にもある場合にも、更新順の誤りが起こります。たとえば整数型のxが6のとき「x ← x に 2 を足した値」と書かれていれば、右側のxは6です。計算した8を保存した後、xは8になります。右側を読む前にxを8にするわけでも、6と8を同時に保存するわけでもありません。

型の失敗も区別します。文字列「8」を整数へ変換する指定がある場合、変換後の整数8は計算できます。一方、文字列「八」を整数に変換する規則が示されていなければ、結果を整数8と決めつけられません。変換が失敗したら後続の計算値を作らず、失敗した行と原因を示します。入力が届かない場合も値を勝手に補わず、処理の前提が満たされないと答えます。

手を動かす問題

次の4問はそれぞれ独立しています。変数は指定がない限り整数型で、処理は上から順に1回ずつ行います。値が未設定の変数は読みません。答えは問題をまとめた後にあります。

問1

整数型のpに9を入れ、qにpから4を引いた値を入れ、その後pにqと2を足した値を入れます。最後のp、qと、pを出力したときの整数を答えてください。

問2

23個の札を1束6個ずつ、できるだけ多く束にします。整数型のsに23を入れ、tにsを6で割った商、uに同じsを6で割った余りを入れます。tとuをこの順に出力するときの2つの整数を答え、札の数を元に戻して確かめてください。

問3

文字列型の入力「12」を、問題で指定した規則により整数型に変換してvに保存します。その後、vに5を足した値をvに代入し、vを出力します。出力される整数を答えてください。別の場合として、変換規則が数字の並びだけを整数に変換できるとき、入力「12個」では後続の出力をどう扱うかも答えてください。

問4

整数型のmに11、nに4を順に入れ、mにnの値を代入し、その後nにmの値を代入します。最後のmとnを答えてください。また、元の11と4を交換する目的に対し、この処理が成功するか答えてください。

答えと確かめ方

問1はpが7、qが5、出力が7です。最初のpの9から4を引いた5がqに入ります。その後、qの5に2を足してpを7にします。出力後もpは7です。7から足した2を引けばqの5に戻り、5に4を足せば初めの9に戻ります。元のpを最後まで使うと11になりますが、最後の代入の右側はqを参照しています。

問2は3、5の順に出力します。6個ずつ3束で18個を使い、5個が残ります。6に3を掛けて5を足すと23個に戻り、余り5は6より小さいので、もう1束には足りません。商と余りを逆に出力すると指定された順序に合わないため、値だけでなく並びも確認します。

問3は整数17を出力します。文字列「12」を指定どおり整数12に変換し、5を加えて保存します。17から5を引くと変換後の12に戻ります。入力「12個」は数字の並びだけという規則を満たさず変換に失敗します。この問題では失敗後の回復処理を定めていないため、vへの保存と後続の出力は行われません。途中の数字だけを取り出す規則を勝手に追加しないことが必要です。

問4はmが4、nも4で、交換には失敗します。mにnの4を入れた時点で、mにあった11は失われます。次にnへ入るのは更新後のmの4です。答えを元の目的に照らすと、交換後に必要なnの11が残っていません。別の変数に元のmを保存してから代入する手順なら値を保持できますが、示された処理にその保存はありません。

覚えておきたい4行

代入は右側を計算してから左側を更新します。
次の行は更新後の値を読みます。
商と余りから元の数に戻して確かめます。
入力の型と変換の成功を確かめて出力を追います。

追跡表のどこを見るか

途中で迷ったら、各行の直前と直後を区切り、右側で参照した値に印を付けてください。最終値が違っても、初めて表が食い違った行を見つければ、古い値を読んだのか、計算した値を別の箱へ入れたのかを分けられます。個別指導では、本人がその行を声に出して説明し、入力の型、商と余りの意味、出力の順番を追跡表と対応させられるかを確かめます。更新の瞬間を記録すると、答えまでの道筋が残ります。

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

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

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

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

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

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

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