子供にプログラミングを教える方法

子供の為の最高のプログラミング教育を見つけていきます

プログラムであえて間違って解く

今日ご紹介したいのは、数学者で有名なピーター・フランクルさんの著書 ピーターからの挑戦状 中学入試の算数 ~論理思考が身につく~ (知りたい!サイエンス) からの出題です。


関東学院中学校(神奈川県横浜市、2000年度問題の改題)
 ABC
 ACB
+DCC
CEDD

(1)上の足し算は3つの3ケタの整数の我が4ケタになったことを表しています。A,B,C,D,Eは、0,2,3,4,6,8のどれかの数を表し、同じ文字は同じ数、異なる文字は異なる数を表しています。このとき、Cは□、Dは□を表しています。

本来の解き方であれば、与えられた条件をもとに、ABCDEがそれぞれ取りうる値をどんどん絞り込んて行き

最終的に1つの解を導き出すと思います。

でも、あえて「よくない方法」で解いてみます。


A,B,C,D,Eは 0,2,3,4,6,8 のいずれかを乱数を発生させて決めます。

実際はCは合計の最上位の桁なので0はないし、Maxでも A=8 D=6 の 8+8+6=22 で、偶数だから

もう C =2 なのですが、そこも愚直に乱数発生させて決めます。
※子どもが最初、適当に数を入れて解こうとする感じをイメージしてみました。


合計した結果の数を、下1桁から4桁まで1桁ずつ取り出し、発生させた乱数と合致するか、合致したら終了しています。




paizaさんを利用させてもらい、最後にソース共有してみました。
始めて載せるのでうまくみえるかな、、、

かなり無理やり解いて、ソースもきれいではないので
もし我が子が見たら反面教師として見てほしい、、、

あと、プログラミングを勉強する過程で思い出したのですが、

「なぜこのコードが間違っているのか」

を考えることが良い勉強にもなっていたことを思い出したので、
あえて間違いのコードも作ってみました。

「1.誤検知するバージョン」 は、「同じ文字は同じ数、異なる文字は異なる数」を無視したため、
同じ数を許容して検出してしまうパターン
「2.正解が出せるバージョン」 は、1の問題を対策したものです。

でも、2.でもまだ問題があります。
・解を見つけたら終わっている。解が1つとはかぎらない
・乱数の発生具合によっては、見つからない可能性もある(何回も実行すればよいのですが、、)
・実装に時間がかかるかも(手で解くより最終的に答えが出るのが遅い)


子どもの算数教育法として、こういうのは面白いのではと考えています。



①まず、ノーヒントで考えさせる
②愚直に答えを求めるプログラム(でも間違いがある)をみせる。何が問題か考えてもらう。
③②の対策を行ったプログラムを書く(本人、もしくは先生)
④修正するなかで、本質的な問題に近づけるよう先生が誘導
⑤手で解けるようになる。



自分一人では解けない問題も、「他人(この場合は間違いのあるプログラム)の間違いを指摘する」となると、やる気もでてくるかもしれない。
DaiGoさんの著書 後悔しない超選択術 でも



「第三者の立場で考える」と認知能力は上がるし、合理的に物事を判断できる

と紹介されてました。



プログラミングを、単なる

「答えを解くための計算機」

 にさせず、

「プログラミングによる間違いをみせることにより、間違いを指摘することで学力を向上させるきっかけ」

としても使っていけるのでは、と思いました。

1.誤検知するバージョン



2.正解が出せるバージョン