人気ブログランキング | 話題のタグを見る
ユークリッドの互除法とプログラム
数学科教科法Aの模擬授業で「整数の性質」で”ユークリッドの互除法と不定方程式”を済ませました。
二つの数のGCMを求める一般的な方法は、共通な素因数がなくなるまで割り続ける、そして割った数をすべて掛け合わせてGCM(最大公約数)を求めます。しかし共通の素数が大きな数になる場合には、ユークリッドの互除法という”神の解法”があります。
#ここで生徒に互除法の素晴らしさに感激をして欲しいところです。

●高校でのプログラムの扱い

平成24年の新課程になってから数学Aでユークリッドの互除法が登場したのですが、旧課程で学んだ現在の大学3年生の数学Bの選択領域数値計算とコンピューのタのいろいろなアルゴリズムでも実は登場していました。ただ、ほとんどの高校が大学入試と関連の深い数列・ベクトルを履修するために、新課程では惜しまれることなく忘れ去られました。
アルゴリズムの理解は、情報科に期待をされているのですが、情報の科学アルゴリズムとプログラムで数ページに登場する程度です。
現場でのプログラム教育については、
小学校のプログラミング必修化は本当に必要か というサイトで次のように触れられています。

こうした動きには英語必修化同様、当然「時期尚早」との異論も出ている。03年に必修科目とされた高校の「情報」も、なかなか教える人材を手配できないため、「街のPC教室以下」ともいわれる低レベルにあえぐ学校も多い。私が見聞した実際の授業でも、単にWordやExcelなどのソフトの使い方を教えるにとどまったり、SNSでのリテラシービデオを見せて学ばせるといった、ややお粗末な内容が多かった。事実上、受験向け科目に振り替えられるケースも見受ける。(中略) 高校でのプログラミングだが、現在は選択科目の中に含まれるため、学んでいる生徒は全体の2割。しかし、20年度以降の新学習指導要領では必修科目の学習項目に入れる方針だ。ちなみに、既に中学では12年度より、中学校の「技術・家庭」において、従来選択科目であった「プログラムと計測・制御」が必修科目となっているが、意外と知られていない。

ICTが日常的に使われ機器環境が整いつつありますが、最近の学生の機器利用のスキルは、スマホの普及によって逆にパソコンの能力が落ちています。
授業の最初にアンケートを採りますが高校時代の情報科の内容はあまりにも幅広く、学習内容が数学のように系統だっていませんし基本的な操作の習得にもばらつきがあります。
数学科教育の関わる学生には、新課程では基本的なプログラムやアルゴリズムは知って欲しいし、理系のコースであればできれば情報科の教科内容との連携を願っています。

ここでユークリッドの互除法のプログラムを考えてみます。▼
ユークリッドの互除法とプログラム_b0036638_19411628.jpg
●十進basicで組む

アルゴリズムを理解しフローチャートにします。ユークリッドの互除法とプログラム_b0036638_1941445.jpg
x/yの整数除算の余りrは、
r=x-y*int(x/y)
で求められます。十進basicで検索をすると私のサイトでも多く触れています。n88系のbasicで教材を作らざるを得なかった団塊世代の数学科教師であれば、十進basicは、そのまま使えます。旧課程の数Bで採用している言語でも採用されています。
さまざまな言語がありますが、インタプリッタ言語でフリーソフトでusbメモリの中に入れてそのまま」動きます。初めて言語に接する高校生には最適と思います。
フローチャートとa,b,x.yの数字の動きを理解し、次のソースコードを、basic.exeを実行した画面に打ち込みます。

! ユークリッドの互除法(その2)
INPUT PROMPT "a=":a
INPUT PROMPT "b=":b
LET x=a
LET y=b
10 LET r=x-y*INT(x/y)
IF r<>0 THEN
LET x=y
LET y=r
GOTO 10
ELSE
PRINT "最大公約数";y
END IF
END

実行画面です。▼
ユークリッドの互除法とプログラム_b0036638_19423817.jpg
●excelのVBAで組む

同じようにVBAで十進basicのプログラムを組み替えてみます。同じように対応させました。
VBAの起動はリボンの”開発”をクリックします。リボンに”開発”がない場合には、ファイル→オプション→リボンのユーザー設定→開発にチェックを入れます。開発→Visual Basic→挿入→標準モジュール でプログラムの挿入画面が出ます。
ここに次のテキスト部分を打ち込み(コピペでもかまいません)ます。

' 互除法
Sub ユークリッドの互除法()
Cells.Clear
Cells(1, 1) = "a="
Cells(2, 1) = "b=" ' cells(2,1)とrange("a2")とは同じ
Cells(1, 2) = InputBox("aを入れて下さい")
Cells(2, 2) = InputBox("bを入れて下さい")
x = Cells(1, 2)
y = Cells(2, 2)
Label10:
r = x - y * Int(x / y)
If r <> 0 Then
x = y
y = r
GoTo Label10
Else
Cells(3, 1) = "最大公約数"
Cells(3, 2) = y
End If
End Sub

打ち込んだ後実行した画面です。▼
ユークリッドの互除法とプログラム_b0036638_1943894.jpg
保存をするときには、拡張子をxlmsにしてください。▼
ユークリッドの互除法とプログラム_b0036638_19444722.jpg
このプログラムはダウンロード(クリック)できます。
ダウンロードされたら、execlを実行し、開発→マクロで互除法の互除法を実行してみてください。
パソコン環境によっては、マクロを有効にしますかなどの表示が出るかもしれません。そのまま実行をしてください。▼
ユークリッドの互除法とプログラム_b0036638_19452278.jpg
十進basicに比べ手順が厳格で慣れるまでエラーコードがよく出ます。入出力さえ理解すれば、豊富な関数群もありますし、数学の問題をロジックに理解するツールとして、十進basicやVBAは有効です。
これからの若い数学科教師にはマスターして欲しいツールです。
by okadatoshi | 2016-06-27 19:47 | 情報/数学/授業 | Comments(0)
<< 佐賀県の県立高校の個人情報流出 今日のSDカードから(80)>... >>