IT1-CODE-POCKET

運動シミュレーター

位置 x と速度 v を、決められた順番で繰り返し更新するシミュレーションです。 更新の順序を入れ替えると結果が変わることを、数直線と表で確かめられます。

動きを1ステップずつ確認する

初速 v
更新順
数直線上の位置 x
  • いまの位置
  • ゴール
  • 速度
いまの位置 x = 0 v = 4 / t = 0
t 0
x 0
v 4
STEP 1 / 1 読み込み中です。

パソコンではキーボードでも操作できます: 次へ / 前へ / スペース 再生・一時停止

実行ログを見る(ここまでの処理)

    ALGORITHM

    運動シミュレーションとは何をしているか

    ボールが転がる、車が進むといった動きを、「短い時間ごとに位置と速度を計算し直す」ことで再現するシミュレーションです。 1回の繰り返しが「1単位時間」に対応し、その中で 位置 x を速度 v のぶんだけ進め、速度 v を変化させ、時間 t を1進めるという更新を行います。

    v = v - 1 は「1単位時間ごとに速度が1ずつ減る」という意味で、 坂を上るボールや、上に投げた物体のようなだんだん遅くなる動きを表します。 速度が負になれば、位置は後ろへ戻ります。

    更新の順序で結果が変わる

    このアルゴリズムでいちばん問われるのがここです。次の2つは、行が入れ替わっただけですが結果が変わります

    書き方 x の計算に使われる v 初速4・x < 10 のときの結果
    x が先
    (x = x + v → v = v - 1)
    更新前の v x = 10、v = 0、t = 4 で終了
    v が先
    (v = v - 1 → x = x + v)
    更新後の v x が 6 までしか伸びず終わらない

    「v が先」の場合、1回目からすでに速度が1減った状態で位置を進めるため、進む距離が毎回1ずつ少なくなります。 その結果 x は 3 → 5 → 6 → 6 と伸びが止まり、x < 10 の条件が成り立ち続けて処理が終わりません

    実際に試してください:更新順を「v が先」に切り替えると、シミュレーターが 「このままでは止まりません」と表示して打ち切ります。 繰り返しを書くときは「条件がいつか成り立たなくなるか」を必ず確認する——これが体験として身につきます。

    終了条件の選び方

    条件を v > 0 の間 に変えると、速度が0以下になった時点で必ず終わるため、 どちらの更新順でも処理が終わります。 「目標の位置に届くまで」と「速度がなくなるまで」では、止まる仕組みがまったく違うということです。 条件を切り替えて、終わり方の違いを比べてみてください。

    なぜ「短い時間ごとに計算し直す」のか

    現実の動きは連続していて、位置は途切れなく変化します。しかしコンピュータは連続した変化をそのまま扱えないため、 時間を細かく区切り、その区切りごとに「いまの速度で進んだ分」を足していくという方法で近づけます。 これがシミュレーションの基本的な考え方で、モンテカルロ法と同じく答えは近似になります。

    区切る時間を短くすればするほど、本当の動きに近づきます。逆に区切りが粗いと、 「1回の更新の間ずっと同じ速度で進んだ」と見なすため誤差が大きくなります。 このページの t = t + 1 は「1単位時間ずつ区切る」というもっとも粗い設定にあたります。

    v = v - 1 は何を表しているか

    1単位時間ごとに速度が1ずつ減るという意味で、物理でいう加速度が -1 の状態です。 上に投げたボール、坂を上る自転車、ブレーキをかけた車など、だんだん遅くなる動きに対応します。

    速度が 0 を通り過ぎて負になると、位置は逆向きに動き始めます。 ボールが最高点に達して落ちてくる動きがこれにあたります。 シミュレーターで初速を大きくし条件を v > 0 以外にすると、数直線上で点が左へ戻る様子が見られます。 v = v - 1v = v(変化なし)にすれば等速運動、v = v + 1 にすれば加速する動きになります。

    速度の更新 表す動き 身近な例
    v = v - 1 だんだん遅くなる(減速) 上に投げたボール、坂を上る
    v は変えない 同じ速さで進む(等速) 一定速度で走る車
    v = v + 1 だんだん速くなる(加速) 落下、坂を下る

    t が表しているもの

    t は繰り返した回数、つまり経過した時間です。 最後に t を表示すれば「目標に届くまでに何単位時間かかったか」が分かります。 t = t + 1 を書き忘れると時間が進まないため、答えが出せなくなります。

    CODE

    3つの書き方で見る運動シミュレーション

    x = 0
    v = 4
    t = 0
    
    x < 10 の間繰り返す:
    |x = x + v
    |v = v - 1
    ⎿ t = t + 1
    
    表示する(x, v, t)
    「〜の間繰り返す」は前判定:擬似言語の 〜の間繰り返す、Python と JavaScript の while は、 いずれも繰り返しの前に条件を調べます。 そのため、最初から条件が成り立たなければ1回も実行されません。 たとえば初速 v = 0 のとき x は 0 のままなので、x < 10 は成り立ち続け、逆に処理が終わらなくなります。

    EXAM POINT

    共通テスト「情報Ⅰ」での出題ポイント

    1. 更新の順序:2行を入れ替えた選択肢が並び、正しい結果を選ぶ形。x の計算に使う v が更新前か更新後かで見分けます。
    2. トレース(値の追跡):t・x・v の表を1行ずつ埋める形。繰り返しの途中の値を書けることが大切です。
    3. 終了条件:x < 10 の空欄。<= にすると1回多く繰り返す点にも注意します。
    4. 終わらない場合:「この繰り返しはどうなるか」という問い。速度が0以下になって位置が進まなくなるケースが定番です。
    5. 表示のタイミング:表示を繰り返しの中に入れるか外に置くかで、出力される回数と値が変わります。
    トレースのコツ:t・x・v の3列を紙に書き、1回の繰り返しごとに1行追加します。 このとき、コードに書かれた上の行から順に値を更新するのがポイントです。 シミュレーターの「推移表」タブは、この表を画面上で作っているのと同じです。

    MISTAKES

    よくある間違い

    間違い 何が起きるか 正しくは
    更新の順序を入れ替える 進む距離が変わり、答えがずれる 問題文のコードの並び順どおりに計算する
    v を更新し忘れる 速度が変わらず等速で進み続ける 繰り返しの中で v も更新する
    t = t + 1 を書き忘れる 経過時間が求められない 1回の繰り返しにつき t を1増やす
    終了条件を確かめない 条件が成り立ち続け、処理が終わらない 条件がいつか成り立たなくなるか確認する
    最後の値だけ見て途中を追わない トレース問題で途中の値を答えられない 1回ごとに t・x・v を書き出す

    CHECK

    理解度チェック

    Q1. x = 0、v = 4 から「x が先」の順で x < 10 の間繰り返すと、最後の x・v・t はいくつですか。
    x = 10、v = 0、t = 4。 x は 4 → 7 → 9 → 10 と進み、v は 3 → 2 → 1 → 0 と減ります。 4回目の更新で x が 10 になり、条件 x < 10 が成り立たなくなって終了します。
    Q2. 同じ初期値で「v が先」の順にすると、どうなりますか。
    x は 6 までしか伸びず、処理が終わりません。 x は 3 → 5 → 6 → 6 と進み、その後は v が負になるため後ろに戻り始めます。 x < 10 が成り立ち続けるので終了できません。 行を入れ替えただけで、終わるはずの処理が終わらなくなるという例です。
    Q3. 終了条件を v > 0 の間 に変えると、「v が先」でも終わりますか。
    終わります。 v は毎回必ず1ずつ減るので、いつか 0 以下になります。 終了条件を「必ず変化する変数」に結びつけると、処理が終わることを保証しやすくなります
    Q4. 条件を x <= 10 に変えると、繰り返しの回数はどうなりますか。
    1回増えます(「x が先」の場合)。 x = 10 になった時点で x < 10 なら終了しますが、x <= 10 ならまだ条件が成り立つため、 もう1回繰り返します。不等号に = が付くかどうかで回数が1回変わるのは頻出の注意点です。

    次に確認したいアルゴリズム