【プログラミング初心者向け】x=2x+1はx=-1ではない?

プログラミング基礎

お疲れ様です。YUmarunosuke(ゆうまるのすけ)です。

今回は、中学1年くらいで習った方程式に関連するプログラミングの考え方です。

皆さん、突然ですが、次の方程式を解くことはできますか?

 x = 2x + 1

わかりましたか?

答えは、『x = -1』ですね。

ただし、プログラミングの世界では『x = 2x + 1』という式は答えを出せないんです。

今回は、プログラミングのルールと数学における方程式との違い について紹介したいと思います。

ちなみに、今回はコーディングを行うプログラミングを対象とします。

昨今のプログラミング教育においては中学生が対象でしょうか。

また、高校生・大学生・社会人の方においても、プログラミングを学ぶのが初めてである方であれば、今後躓くことが少なくなると思います。

この記事はこんな人に読んでもらいたい

  • プログラミングを初めて学ぶ方(中学生以上)
  • プログラムを見ても数学的な理解から抜け出せない方
  • 『変数とは何か?』と躓いてしまった方

この記事を読むとこんなことがわかります

  • =(イコール)の定義は、数学とプログラミングで異なる
  • 変数 = 数字や文字を入れる箱 で、その箱は1つしか作ることができない

プログラミングにおける式の意味

x=2x+1だけではプログラミングは解けない?

先程、

 プログラミングの世界では『x = 2x + 1』という式は答えを出せない

と書きましたが、すみません、実はこれは誤解を生む表現です。

正しくは、

 プログラミングの世界では『x = 2x + 1』という式 だけでは 答えを出せない。

です。

この記事の初めに書いた問題は、私が大学院1年生のときに研究室の先輩から出された問題でした。

私が所属する研究室では、大学院1年から Fortran というプログラミング言語を学ぶ授業がありました。

それまでは、全くプログラミングを学んだことがありませんでした。
(厳密には大学1年のときに学んだはずでしたが、全く頭に残っていませんでした。)

なので、当然通常方程式を解くように x=-1 と答えるわけです。

しかし、これは間違った考え方であり、正しい考え方は次のとおりです。

解説①:” = ” は入れる作業を表す

先程の問題において、=(イコール)は 「同じ」という意味ではなく、

 右の数字や数式の結果を左の変数に入れる

という意味を表している、と覚えてください。

では、先程の式について改めて、数学の方程式から見た理解とプログラミング的な理解を比較してみましょう。

x = 2x + 1 とは、

  • 数学的理解 : x と 2x + 1 は同じ
  • プログラミング的理解 : x に 2x + 1 の計算結果を入れる

という意味になります。

何が違うの?と言いたくなると思います。

当時の私も同じ考えでした。
「x に 2x + 1 の計算結果を入れる」って「同じである」ということと変わらないじゃんと。

でも、こう書いたら理解が変わりませんか?

  • 数学的理解 : 「同じである」という状態を示している
  • プログラミング的理解 : 「計算結果を入れる」という動作を示している

示している意味が違うのですね。

イコールの意味が分かれば、完全理解まであと半分です。

解説②:” x ” は数字や文字が入る箱

残りの要素、今回の問題でいう x は「変数」といいます。

そして、変数とは “数字や文字が入る箱” だとイメージしてください。

さらに、変数に関するルールとして、

 1つの情報しか入らない

という絶対的な掟があります。

従って、同じ箱に何かを入れなければならなくなった場合は、一度取り出す必要があります。

今回の問題に戻って考えてみましょう。

今回は「2x + 1 の結果を x に入れろ!」と言われているのですね。

そんな命令を受けたら、次のような手順を踏むことになります。

  1. 変数x から情報を取り出す
  2. 取り出した情報を2倍して1を足す
  3. その結果を 変数x に入れる 【終わり】

・・・さて、皆さん違和感に気づきましたか?

気づいた方は、ちゃんとご自身でプログラミング的思考を使って考えている方ですね。

違和感とは、

 手順1で何を取り出すの?

という点です。

つまり、x = 2x + 1 という動作を行う前に、変数x という箱に何かが入っていないといけない
ということが、本記事の最後のポイントです。

これが「x=2x+1だけではプログラミングは解けない?」と見出しで書いた理由です。

初めに、変数x に何かを入れる指令がないと解けないということです。(注:補足参照)

従って、次のようにプログラムが書かれていれば、正しく動作します。

例)

 x = 3

 x = 2x + 1

簡単に解説をすると、1行目で x という箱の中に、3 という数字を入れます。

次に、

  1. 変数x から 3 を取り出す
  2. 取り出した 3 を2倍して1を足す (→ 答えは 7 )
  3. その結果(7) を 変数x に入れる (答え:x=7) 【終わり】

というように数字の処理をすることが、プログラミング的な考え方なのです。

まとめ:方程式に見えるけど全く違うものと理解しよう

今回は、プログラミングのルールと数学における方程式との違い について書いてみました。

  1. 変数とは ”1つの情報しか入らない箱” という定義
  2. “=”(イコール)は “状態” ではなく “動作” を表す

これら2点の考え方に慣れるだけでも、かなりプログラミングに対する理解度が変わると思います。

では、次の記事までごきげんよう。

補足

変数x に何かを入れる指令がないと解けない、と書きました。

しかし、多くのプログラミング言語において、変数に何かを入れる指令がない場合は、

  • 0 (数字のゼロ)
  • null(何もないよ、という文字・記号)

などが入っているので、何かしらの答えが返ってきます。

特に、0が入っている場合は、普通に数式として計算できますので、
エラーと認識されないことがほとんどです。

おかしな結果が出てきた場合は、変数に何が入っているのか、確認したほうがよいです。

コメント

タイトルとURLをコピーしました