物事を扱う際には、

  ■ アルゴリズム
  ■ 結果

の2栂存在しますが、これは、小学校一年生の算数の足し算を学習する際に登場する考え方になります。小学校で一番最初に登場する数式が足し算になりますが、これは、 【 変化を扱った式 】 になります。

 中学校の数学では、項の概念を学習するので、

  ■ 数 字 : 単項式
  ■ 足し算 : 多項式

と言う区別が付きますが、基本的に小学校では数字を使うので数学的には 【 定数項 】 を用いた処理を学習することになります。

 足し算では、

  ■ 増加と言う現象
  ■ 推移や変化の表現

になりますが、この時に

  【 式 】 = 【 答え 】

という形のものを学習します。これは、

  ■ 数式の実行結果
  ■ 答え

という 【 2つの事象は一致する 】 ことを示したものになりますが、これが 【 等式 】 の構造になります。

 この考え方は因果関係と同じなので、

  ■ 原因 : 数式の実行
  ■ 結果 : 答え

のような関係性になっています。プログラミングでは、結果に至る処理を実装するので、アルゴリズムを実装することになりますが、その結果はコードの書かれた処理の内容と一致します。その為、

  ■ 原因 : コードの実行
  ■ 結果 : 動作

という因果関係が存在しています。数式と答えにも同様の関係性がありますが、数式は 【 処理の工程表 】 ですから、アルゴリズムと考えることができます。その為、等式は、

  ■ 数式 : アルゴリズム
  ■ 答え : 実行結果

をイコールで結び、この二つは同じであることを表記したものになります。
 
 その為、

  ■ アルゴリズム
  ■ 実行結果

は異なるものなので、これを分けて考える必要があります。

 小学校の算数でも数学の基本となる


  ■ 幾何学 : 図形を扱う

  ■ 代数学 : 数字や数式を扱う

  ■ 解析学 : 上記の2つを組み合わせて
          使用する


と言う3つを扱うことになりますが、低学年では、抽象表現の基礎を学習するために代数学を中心に行うようになっています。

 その為、低学年では計算を主体としたものになっていますが、算数でも統計学を扱うのでグラフも登場しますし、多次元のデータ構造の図形も扱います。この時にデータの総数の計算方法である

  ■ 面積
  ■ 体積

も学習しますが、コンパスと定規だけで図形を描く幾何学も扱うので、

  ■ 円
  ■ 多角形
  ■ 星型(五角形)

などの描き方も学ぶことができます。

 計算と言う作業は 【 アルゴリズムの実行 】 ですから、

  【 工程表に書かれたものの実行 】

になります。その為、

  実行方法とアルゴリズムそのものは異なる

ので、計算方法の手順が違っても計算を行う対象となる数式が変化するわけではありません。

 また、

  工程表を計算方法と同じように変化させると
  破綻する

ので、アルゴリズムである数式本体と人が計算を行う上での計算方法は全く異なります。

 数式については、【 抽象表現 】なので、これは数字の扱いでのみ成立する内容ですから、現実世界の工程表と加算の法則性が同じように使用できるわけではありません。というのも

  ■ 現実世界 : 具象表現
  ■ 代数学  : 抽象表現

なので、全く異なる構造物だからです。

 この辺りは、

  ■ 度数法
  ■ 弧度法

の違いのようなものですが、分度器でしか測れないようなものを定規の目盛りで図ることは不可能ですから、現実世界の手順と加算の計算方法では全く意味が異なるわけです。

 こうしたことを理解しようと思うと、少なくとも、幾何学と代数学の双方が解っていないと理解ができないのですが、数学を学ぶ場合、日常に置いて存在している数について理解する必要があるので、代数学から学習することになります。

 小学校では、主に

  ■ 計算
  ■ 図形
  ■ データと集計
  ■ 法則性のあるデータ
  ■ グラフ

について学習することになりますが。中学校では、これを扱いやすくする方法を学習します。

 その為、小学校では基礎となる部分を見てなにか解る状態にしたり、基礎的な計算能力を養うことや、【 基本となる処理の方法 】
を学習することになります。

 この時に数字を使うので、少し複雑な処理になりますが、現実世界で遭遇しそうなモノをカバーした内容になっています。

 足し算の場合、


  最初から最後に向かって足していく


と言う仕組みになっているので、処理として工程表と同じものになっています。これは 【 順番通りに行う 】 と言う方法になります。

 この方法は、

  ■ 足し算
  ■ 引き算

の双方で存在しているので、小学校一年生の算数では、

  ■ 順番通りに処理をする

という 【 作業工程の基本 】 を計算を通じて理解をするような仕組みになっています。

 この処理の工程は、コンピューターだと

  ■ CPU
  ■ メモリー
  ■ ALU

でのデータと処理の読み書きを行った後の処理をする流れと同じなのですし、プログラミング言語を使用した際に最初に使用する順次や逐次処理と同じ考え方になります。

 どちらかというと、中学校の項のカリキュラムが、

  ■ 変数
  ■ 定数
  ■ 処理の塊の構築
  ■ 順次

を網羅しているので、むしろ、変数項を使用した多項式の構造がプログラミング言語の学習の初期段階で使用するコードの構造に似ていますが、順次の構造自体は加算なので、小学校一年生の算数で行うようになっています。

 数式はあアルゴリズムなので、

  3+6+7+4

と言う式の場合には、数直線上の座標の変化と同じなので、この法則性を変えることはできません。

 ただし、この法則性の実行結果を知る場合には、順番通りに計算するよりも早く処理をする方法は存在します。

 足し算で答えが2桁になる場合だと、

  10になる組み合わせを探す

ことで計算を早くすることができます。先程の式だと

  10
  ┣━━━┓
  ▼   ▼
  3+6+7+4
    ▲   ▲
    ┣━━━┛
    10

になるので、答えは20とすぐに解ります。

 計算をする場合、

  ■ A=10ーn
  ■ B=10ーA

の法則性を用意して、

  ■ Aの検索をする
  ■ Bの検索をする

を行って、

  ペアになったら、それを除外して
  最初から検索

を行うようにすると、AとBという足して10になる組み合わせを選出することができます。

 この場合、線形検索になりますがこのような方法で早く計算する事ができます。

 中学校の数学では、加算の法則として


  【 加法の交換法則 】 

    ■ A+B = B+A


が登場しますが、先程の数式もこれを使用したものになります。

 計算の手順を書き出すと、

  3+6+7+4

  = 3+7+6+4

  = 20

となりますがこれは、


  A+B+C+D

  = A+C+B+D


とになりますから、


  ■ A+B = B+A


を使用したものになります。10になる組み合わせだと

  3+2+7

のようなものもありますが、これは、

  (3+7)+2

のように置き換えて計算することもできます。アルゴリズムは数式のままですが、処理の結果の値を求める場合だと計算方法を簡素化することで複雑な式に対応することができます。

 この方法ですが、


  【 加法の結合法則 】 

    ■ A+B+C = A+(B+C)

    ■ A+B+C = (A+B)+C


を用いたものになります。

 ちなみに、引き算は 【 減る 】 と言う処理なので、足し算のようになんでもかんでも足していく事が出来るわけではありませんから、小学校のカリキュラムだと0未満にならない数字の引き算を使います。

 減算に関しては順番通りにしないとまともな結果に行き着かないので、加算のような交換法則は成り立ちません。実際に行ってみると、

  ■ 9−3=6
  ■ 3−9=ー6

のように符号がついた状態になるので全く異なる値になってしまいます。とりあえず、この事例だと 【 絶対値は同じ 】 ですが、数直線上の座標は全く異なる場所になるので加算のような交換法則を適応できません。
 

 

 

  掛け算

 


 小学校一年生の算数では、順番通りに処理を行うという

 【 手順 】

を学習するので、プログラミング言語の

  a=1
  b=1
  print(a+b)

のように最初から末尾に向かって処理をするような方法を扱う際にも

  ■ 1+2+3
  ■ 10−1−2

のような形のものと同じように考えることが出来るようになります。

 何かを行う際に、ほとんどの場合で

 【 順番が存在する 】

わけですが、それと同じことを抽象表現を用いて学習するような仕組みになっています。

 その為、【 順番に行う 】 という考え方は、

  ■ 図画工作
  ■ プログラミング
  ■ 日常生活

でも使用しますが、プログラミング言語を使って何かを動かす場合も

  ■ 必要なものを揃える
  ■ 処理を用意する
  ■ 処理を順番に並べる

という流れになっているので引き算と同じ計算の順番を用いて作業を考えることになります。

 Scratchはブロックを繋いで処理をする仕組みになっていますが、これも視覚的に順番をわかりやすくしたものになっています。

 小学校二年生では掛け算が登場しますが、これは、

 【 同じ数を複数個集めたもの 】

になります。その為、掛け算は足し算や引き算とは異なるので、括弧で括って別の処理として扱う必要があります。例えば、

  10+5×8

と言う式が存在した場合、掛け算の部分は5×8ですから、

  10+(5×8)

  =10+40

  =50

となりますが、足し算のように最初から計算すると

  10+5×8

  =15×8

  =120

と全く異なる値になります。これは、

  ■ 10+(5×8)
  ■ (10+5)×8

の違いになりますが、20世紀の通常の電卓で四則演算をすると後者の処理医なるのでそのまま式を打ち込むと上記の計算は120になってしまいます。

 これが、

  ■ 数値の入力
  ■ 演算記号などの入力
  ■ 数値の確定
  ■ 新規の数値の入力
  ■ 演算記号か=の入力
  ■ 計算結果の表示
  ■ =以外だとループ

のようなアルゴリズムで動作する機材での計算結果になります。

 津城は複雑な計算を行う際には関数電卓を使用するので、通常の電卓は使用しませんが、機械の仕組みが解っていないと上記のような問題が発生します。

 関数電卓も

 【 項で考えて式の再構築をする 】

必要がありますから、数式に対して括弧を追加して計算をすることになります。

 プログラミング言語や電卓アプリでBMIを計算する際に

  ■ 体重÷身長×身長

    (身長はメートル換算)


で計算すると 【 体重/身長×身長 】 になるのでとんでもなく巨大な数値になります。実際には、

  ■ 体重÷身長^2

ですから、指数を使用しない場合だと

 【 体重/(身長×身長) 】 

のようになります。この辺りも【 括弧を使用する 】必要がある事例になりますが、計算を順番に行うような仕組みだったり、演算お優先順位がある場合だと、構造に合わせた作りにする必要があります。

 掛け算の場合、

  ■ 特定の数のものが複数個存在する

と言う

  1箱❍個の物を▲箱用意したときの
  箱詰めするモノの総数

のような考え方もできますが、

  ■ 0に対して+nをa回行う

と言う処理として考えることができます。つまり、

  0+an

という構造も掛け算になります。この場合、

 0+n+n+n+n...

のような形になりますが、実際に表記してみると

  ■ 1n=0+n 
  ■ 2n=0+n+n 
  ■ 3n=0+n+n+n 
 
のように+nをa回繰り返す処理になっています。その為、この形にすると掛け算は足し算のループ処理と考えることができます。

 ちなみに、

  ■ 一次元配列 : 足し算
  ■ 二次元配列 : 掛け算

なので、数字という一次元配列のものを1つの構造としてそれを別の次元で追加する時の処理が掛け算なので、一次元の処理で行われている足し算とは分けることになります。

 掛け算の場合、 【 優先順位が上 】 なので、計算をする場合には、 【 最初に処理をする 】 ことになりますが、これが、

  ■ 工程順に行う
  ■ 優先度の高い順に行う

と言う処理の流れになります。この辺りは、シングルコアでシングルスレッドのマイコンでタイマー制御で動くような仕組みを作る際に、タイマーで指定した処理が発せ敷いた場合にルーティーンを一旦止めて割り込み処理を行って優先度の高い処理を行う方法を実装しますが、こうした 【 並行処理 】 と同じ考え方を掛け算や割り算を通して考えることになります。

 例えば、自宅で掃除をしていて宅配便が来た場合、掃除というタスクを一旦止めて、宅配便の対応をすると思います。これが、日常における 【 タスクの管理 】 になりますが、この選択も優先度の高さで処理を選択して実行している内容になります。

 四則演算もこうした並行処理の基本的な考え方と同じなので、


  乗除算のような二次元の構造体を
  先に処理をする

   
方法を用いることで、優先度の高いものを先に処理をする必要性を学習できるようになっています。

 乗算が二次元の構造体になっているのは、高学年の図形の面積で体験することになりますが、平面の図形の基本形の矩形については、

 【 矩形の面積 】

   ■ 縦 × 横

ですから、この構造は、y=axと同じ形になっています。その為、一次関数のグラフは縦と横の比率の決まった矩形の面積の推移を示したグラフと考えることができます。一次関数は小学校六年生の算数で登場すr正比例と同じなので、このグラフも

  ■ 正方形の面積
  ■ 長方形の面積

を示したものになります。例えば、yがxの2倍にっているものだと、

  ■ 縦:1
  ■ 横:2

の比率の長方形の面積の推移と同じになるので、矩形の面積の変化と一致します。これは、九九の表も同じです。

 掛け算は、ベースとなるのが足し算なので、足し算と同じような処理が可能なので、交換法則や結合法則が使用できます。

  【 乗法の交換法則 】 

    ■ AB = BA


  【 乗法の結合法則 】 

    ■ ABC = A(BC)

    ■ ABC = (AB)C


これとは別に乗算の場合は、分配法則が存在するので


  【 乗法の分配法則 】 

    ■ (A+B)C = C(A+B)

    ■ (A+B)C = AC+BC

    ■ C(A+B) = AC+BC


のように括弧の外の値を括弧内に掛け合わせて計算することができます。これは、約数を外に出すのと同じ考え方になりますが、

  21+35

の場合、これらは7の倍数ですから、

  21+35

  =7×3+7×5

  =7×(5+3)

のような形になります。この式を見ると、
 
  7×(5+3) = 7×3+7×5
  
になっているので、

  ■ C(A+B) = AC+BC

と同じ状態になっています。このように2つの数に存在する共通する約数のことを 【 公約数 】 と言います。ちなみに、共通する倍数のことを 【 公倍数 】 と言います。

 約数を求める場合は、決まった数字で割っていきますが、この時になにかの倍数で割っても意味がないので、

  1とその数だけで割り切れる数

を使用すると値を求めやすくなります。この少し特殊な数のことを 【 素数(そすう) 】 と言います。


  【 素数 】

    1とその数だけで割り切れる数


そして、この素数で用意された数値を分解することを素因数分解といいます。

 この素因数分解は、現在では中学校一年生の数学で行うようになっています。

 ちなみに、割り算は 【 逆数の掛け算 】 なので、分数にして考えることになりますが、逆数は色々と用途が多いので、別の機会に書こうかなと思います。

 掛け算が二次元になっているのは


の動画で使用している掛け算の問題を出すプログラムの試作品で行っていますが、この構造と単体の個数では異なる構造になるので、掛け算を分けて計算することになります。