小学校でのプログラミング教育が検討されているそうです。情報化が進んだ昨今、学生が社会に出てからの仕事のことを考えてのことでしょう。
ですが、プログラミングを追加して、英語を追加してと増やしてばかりでは、学生も先生もパンクしてしまいそうです。
インターンの採用直結を認めないというニュースがありました。社会に出てからの仕事の前に、学業を優先させるということらしいです。
先ほどの話と優先順位が逆転しているところは滑稽です。
以前、博士号を持つ人材を増やそうという政策がありました。海外の学位のシステムを意識した政策なのでしょうが、その結果、就職できないポスドクが増えたという話をよく聞きます。
こういった話を聞くと、学生がふりまわされているという印象を受けます。
教育に正解はないでしょう。人それぞれです。しっかり学業を修めた方がいい人もいれば、インターンから直接就職して活躍する人もいるでしょう。
正解はないからこそ、押し付けだけはやめて欲しいと思います。すべての学生に一つの政策を押し付けるのは、独善的で配慮に欠いたやり方です。
私は、インターンの採用直結を悪いと思わないので、先のニュースを聞いてびっくりしました。もちろん世の中にはいろいろな裏の事情があるとは思いますが、「学業を優先させる」という一方的な論理を強要するのは、それこそ教育的ではないと強く思った次第です。
2017年6月25日日曜日
クレーマー・クレーマー
クレームを言うのが苦手です。
日本人の気質でしょうか。文句を言って不和を生むよりは、我慢することを選んでしまいます。
ですが、現状に不満があるからこそ、将来の改善につながるものです。正しいクレームは、実は生産的な活動だと思います。
もちろん、正しくないクレームは諍いを生むだけなので、その加減が難しいのですが。
願わくば、間違いはきちんと指摘できるようになりたいものです。
日本人の気質でしょうか。文句を言って不和を生むよりは、我慢することを選んでしまいます。
ですが、現状に不満があるからこそ、将来の改善につながるものです。正しいクレームは、実は生産的な活動だと思います。
もちろん、正しくないクレームは諍いを生むだけなので、その加減が難しいのですが。
願わくば、間違いはきちんと指摘できるようになりたいものです。
情報過多
テレビのニュースを見ていると、アナウンサーの変わり身にときどき驚かされます。
中東情勢の話をしていると思えば、アメリカ、北朝鮮、と世界一周して、休む間もなくスポーツの話題に変わったりします。
アナウンサーの方々は、非常に賢いのだと思います。
あらゆる話題をさも関心があるように話す様は、少し気持ち悪いくらいです(失礼ですみません)。
個人的には、「私は大相撲に興味ありません」というくらいでもいいと思います。
現代はあらゆる情報が集まる時代です。いつの間にか大量の情報が押し寄せてくる時代です。
ですが、頭の中で処理できる情報の量には限りがあると思います。
中東情勢の話をしていると思えば、アメリカ、北朝鮮、と世界一周して、休む間もなくスポーツの話題に変わったりします。
アナウンサーの方々は、非常に賢いのだと思います。
あらゆる話題をさも関心があるように話す様は、少し気持ち悪いくらいです(失礼ですみません)。
個人的には、「私は大相撲に興味ありません」というくらいでもいいと思います。
現代はあらゆる情報が集まる時代です。いつの間にか大量の情報が押し寄せてくる時代です。
ですが、頭の中で処理できる情報の量には限りがあると思います。
大量の情報にさらされていると、目を回してしまいそうになることがあります。情報の海に溺れているような気分です。頭の中で、大量の情報を処理し続けるのは疲れるんです。
どうせ頭で処理しきれないのだから、少し情報を遮断して、休憩したいなぁなどと思ったりする今日この頃です。
2017年6月11日日曜日
Excel VBAで数学 8
Excel VBAを使った簡単な数学プログラミングの続きです。
今回は組み合わせの計算です。
学校の数学でさんざん考えた記憶がありますが、コンピュータにやらせるとあっさりしたものです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
Dim row As Long
Public Sub Macro()
Dim N As Long
Dim m As Long
Dim num() As Byte
row = 1
N = 5
m = 3
ReDim num(m - 1) As Byte
'nHm num, N, m, 0
'nPm num, N, m, 0
nCm num, N, m, 0
End Sub
'nHm
'重複あり組み合わせ
Public Sub nHm(num() As Byte, N As Long, m As Long, pos As Long)
Dim i As Long
If pos < m Then
For i = 0 To N - 1
num(pos) = i + 1
nHm num, N, m, pos + 1
Next i
ElseIf pos = m Then
For i = 0 To m - 1
Sheet1.Cells(row, i + 1) = num(i)
Next i
row = row + 1
End If
End Sub
'nPm
'順列 (permutation)
Public Sub nPm(num() As Byte, N As Long, m As Long, pos As Long)
Dim i As Long
Dim j As Long
If pos < m Then
For i = 0 To N - 1
For j = 0 To pos - 1
If i + 1 = num(j) Then Exit For
Next j
If j = pos Then
num(pos) = i + 1
nPm num, N, m, pos + 1
End If
Next i
ElseIf pos = m Then
For i = 0 To m - 1
Sheet1.Cells(row, i + 1) = num(i)
Next i
row = row + 1
End If
End Sub
'nCm
'組み合わせ (combination)
Public Sub nCm(num() As Byte, N As Long, m As Long, pos As Long)
Dim i As Long
Dim j As Long
If pos < m Then
For i = 0 To N - 1
For j = 0 To pos - 1
If i + 1 <= num(j) Then Exit For
Next j
If j = pos Then
num(pos) = i + 1
nCm num, N, m, pos + 1
End If
Next i
ElseIf pos = m Then
For i = 0 To m - 1
Sheet1.Cells(row, i + 1) = num(i)
Next i
row = row + 1
End If
End Sub
今回は組み合わせの計算です。
学校の数学でさんざん考えた記憶がありますが、コンピュータにやらせるとあっさりしたものです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
Dim row As Long
Public Sub Macro()
Dim N As Long
Dim m As Long
Dim num() As Byte
row = 1
N = 5
m = 3
ReDim num(m - 1) As Byte
'nHm num, N, m, 0
'nPm num, N, m, 0
nCm num, N, m, 0
End Sub
'nHm
'重複あり組み合わせ
Public Sub nHm(num() As Byte, N As Long, m As Long, pos As Long)
Dim i As Long
If pos < m Then
For i = 0 To N - 1
num(pos) = i + 1
nHm num, N, m, pos + 1
Next i
ElseIf pos = m Then
For i = 0 To m - 1
Sheet1.Cells(row, i + 1) = num(i)
Next i
row = row + 1
End If
End Sub
'nPm
'順列 (permutation)
Public Sub nPm(num() As Byte, N As Long, m As Long, pos As Long)
Dim i As Long
Dim j As Long
If pos < m Then
For i = 0 To N - 1
For j = 0 To pos - 1
If i + 1 = num(j) Then Exit For
Next j
If j = pos Then
num(pos) = i + 1
nPm num, N, m, pos + 1
End If
Next i
ElseIf pos = m Then
For i = 0 To m - 1
Sheet1.Cells(row, i + 1) = num(i)
Next i
row = row + 1
End If
End Sub
'nCm
'組み合わせ (combination)
Public Sub nCm(num() As Byte, N As Long, m As Long, pos As Long)
Dim i As Long
Dim j As Long
If pos < m Then
For i = 0 To N - 1
For j = 0 To pos - 1
If i + 1 <= num(j) Then Exit For
Next j
If j = pos Then
num(pos) = i + 1
nCm num, N, m, pos + 1
End If
Next i
ElseIf pos = m Then
For i = 0 To m - 1
Sheet1.Cells(row, i + 1) = num(i)
Next i
row = row + 1
End If
End Sub
Excel VBAで数学 7
Excel VBAを使った簡単な数学プログラミングの続きです。
今回は円周率の計算です。
値は知っていても、実際に計算したことがある人は、多くないのではないでしょうか。
今回は、Machinの公式というのを使っています。計算機がない時代に手計算をしていた人々のことを思うと、感慨深いです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'piの計算 (Machinの公式)
Public Sub Macro()
Dim i As Long
Dim m As Long
Dim p As Double
Dim temp As Double
m = 100
temp = 16 / 5
For i = 0 To 3 * m + 2
p = p + temp / (2 * i + 1)
temp = -temp / 5 / 5
Next i
temp = 4 / 239
For i = 0 To m
p = p - temp / (2 * i + 1)
temp = -temp / 239 / 239
Next i
Sheet1.Cells(1, 1) = p
End Sub
今回は円周率の計算です。
値は知っていても、実際に計算したことがある人は、多くないのではないでしょうか。
今回は、Machinの公式というのを使っています。計算機がない時代に手計算をしていた人々のことを思うと、感慨深いです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'piの計算 (Machinの公式)
Public Sub Macro()
Dim i As Long
Dim m As Long
Dim p As Double
Dim temp As Double
m = 100
temp = 16 / 5
For i = 0 To 3 * m + 2
p = p + temp / (2 * i + 1)
temp = -temp / 5 / 5
Next i
temp = 4 / 239
For i = 0 To m
p = p - temp / (2 * i + 1)
temp = -temp / 239 / 239
Next i
Sheet1.Cells(1, 1) = p
End Sub
Excel VBAで数学 6
Excel VBAを使った簡単な数学プログラミングの続きです。
今回はネイピア数です。自然対数の底という言った方が普通な気がします。
普通のプログラミングだと、変数の型に制限があるので、10桁くらいしか求まりません。もっと桁数を増やすにはテクニックが必要です。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'eの計算
Public Sub Macro()
Dim i As Long
Dim e As Double
Dim temp As Double
e = 1
temp = 1
For i = 1 To 100
temp = temp / i
e = e + temp
Next i
Sheet1.Cells(1, 1) = e
End Sub
今回はネイピア数です。自然対数の底という言った方が普通な気がします。
普通のプログラミングだと、変数の型に制限があるので、10桁くらいしか求まりません。もっと桁数を増やすにはテクニックが必要です。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'eの計算
Public Sub Macro()
Dim i As Long
Dim e As Double
Dim temp As Double
e = 1
temp = 1
For i = 1 To 100
temp = temp / i
e = e + temp
Next i
Sheet1.Cells(1, 1) = e
End Sub
Excel VBAで数学 5
Excel VBAを使った簡単な数学プログラミングの続きです。
今回はピタゴラス数です。三平方の定理、ピタゴラスの定理と呼ばれるやつです。
前回のEuclidの互除法を利用しています。
(3,4,5) (5,12,13)くらいは有名ですが、(777,464,905)なんかは覚えている人は稀でしょう。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'ピタゴラス数
Public Sub Macro()
Dim i As Long
Dim m As Long
Dim N As Long
Dim row As Long
row = 1
For i = 1 To 100
m = 1
N = 2 * i - 2
Do While m < N
Sheet1.Cells(row, 1) = m
Sheet1.Cells(row, 2) = N
If Euclidean(m, N) = 1 Then
Sheet1.Cells(row, 3) = N * N - m * m
Sheet1.Cells(row, 4) = 2 * m * N
Sheet1.Cells(row, 5) = N * N + m * m
End If
m = m + 1
N = N - 1
row = row + 1
Loop
Next i
End Sub
Public Function Euclidean(x As Long, y As Long) As Long
Dim a As Long
Dim b As Long
Dim r As Long
If x < y Then
a = y
b = x
Else
a = x
b = y
End If
r = a Mod b
Do While 0 < r
a = b
b = r
r = a Mod b
Loop
Euclidean = b
End Function
今回はピタゴラス数です。三平方の定理、ピタゴラスの定理と呼ばれるやつです。
前回のEuclidの互除法を利用しています。
(3,4,5) (5,12,13)くらいは有名ですが、(777,464,905)なんかは覚えている人は稀でしょう。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'ピタゴラス数
Public Sub Macro()
Dim i As Long
Dim m As Long
Dim N As Long
Dim row As Long
row = 1
For i = 1 To 100
m = 1
N = 2 * i - 2
Do While m < N
Sheet1.Cells(row, 1) = m
Sheet1.Cells(row, 2) = N
If Euclidean(m, N) = 1 Then
Sheet1.Cells(row, 3) = N * N - m * m
Sheet1.Cells(row, 4) = 2 * m * N
Sheet1.Cells(row, 5) = N * N + m * m
End If
m = m + 1
N = N - 1
row = row + 1
Loop
Next i
End Sub
Public Function Euclidean(x As Long, y As Long) As Long
Dim a As Long
Dim b As Long
Dim r As Long
If x < y Then
a = y
b = x
Else
a = x
b = y
End If
r = a Mod b
Do While 0 < r
a = b
b = r
r = a Mod b
Loop
Euclidean = b
End Function
Excel VBAで数学 4
Excel VBAを使った簡単な数学プログラミングの続きです。
今回はEuclidの互除法です。
アルゴリズムの基本という感じがします。実は、次回への布石です。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'Euclidの互除法
Public Sub Macro()
Dim x As Long
Dim y As Long
x = 123
y = 333
Sheet1.Cells(1, 1) = x
Sheet1.Cells(1, 2) = y
Sheet1.Cells(1, 3) = Euclidean(x, y)
End Sub
Public Function Euclidean(x As Long, y As Long) As Long
Dim a As Long
Dim b As Long
Dim r As Long
If x < y Then
a = y
b = x
Else
a = x
b = y
End If
r = a Mod b
Do While 0 < r
a = b
b = r
r = a Mod b
Loop
Euclidean = b
End Function
今回はEuclidの互除法です。
アルゴリズムの基本という感じがします。実は、次回への布石です。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'Euclidの互除法
Public Sub Macro()
Dim x As Long
Dim y As Long
x = 123
y = 333
Sheet1.Cells(1, 1) = x
Sheet1.Cells(1, 2) = y
Sheet1.Cells(1, 3) = Euclidean(x, y)
End Sub
Public Function Euclidean(x As Long, y As Long) As Long
Dim a As Long
Dim b As Long
Dim r As Long
If x < y Then
a = y
b = x
Else
a = x
b = y
End If
r = a Mod b
Do While 0 < r
a = b
b = r
r = a Mod b
Loop
Euclidean = b
End Function
Excel VBAで数学 3
Excel VBAを使った簡単な数学プログラミングの続きです。
今回は完全数です。
実はこの一連の数学プログラミングは、完全数を探してみたくて始めたものです。6, 28, 496, 8128くらいはすぐ見つかりました。数字が大きくなると計算時間がかかるので、なかなか見つからないです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
今回は完全数です。
実はこの一連の数学プログラミングは、完全数を探してみたくて始めたものです。6, 28, 496, 8128くらいはすぐ見つかりました。数字が大きくなると計算時間がかかるので、なかなか見つからないです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'完全数を調べる
Public Sub Macro()
Dim i As Long
For i = 1 To 100
Sheet1.Cells(i, 1) = i
If isPerfect(i) Then
Sheet1.Cells(i, 2) = "Perfect"
End If
Next i
End Sub
Public Function isPerfect(x As Long) As Boolean
Dim i As Long
Dim sum As Long
isPerfect = False
sum = 0
For i = 1 To x - 1
If x Mod i = 0 Then
sum = sum + i
End If
Next i
If sum = x Then
isPerfect = True
End If
End Function
Excel VBAで数学 2
Excel VBAを使った簡単な数学プログラミングの続きです。
今回は素因数分解です。
小学校の頃にさんざんやった記憶があります。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'素因数分解
Public Sub Macro()
Dim i As Long
Dim j As Long
Dim f As Collection
For i = 1 To 100
Sheet1.Cells(i, 1) = i
Set f = Factorize(i)
For j = 1 To f.count
Sheet1.Cells(i, j + 1) = f(j)
Next j
Next i
End Sub
Public Function Factorize(x As Long) As Collection
Set Factorize = New Collection
Dim temp As Long
Dim factor As Long
temp = x
factor = 2
Do While (factor <= temp)
If temp Mod factor = 0 Then
temp = temp \ factor
Factorize.Add factor
Else
factor = factor + 1
End If
Loop
End Function
Excel VBAで数学 1
なんでも学校でのプログラミングの授業が計画されているそうです。文部科学省のWebサイトを覗いてみたら、なかなか高度な内容だったので、びっくりです。
先生は大変だろうなぁ、などと思っています。
それはそれとして、Excel VBAで簡単な数学のプログラムを作ってみました。個人的には、こういうプログラムは教育的だと思っています。
まずは素数の判定プログラムです。
999611と999613のように双子の素数を見つけたりすると少し楽しいです。
実際に実行してみると、計算時間を体感できます。例えば10000桁の素数を探すことがいかに大変かが分かります。素数は無限に存在しますが、その意味を体感している感じです。
Option Explicit
'素数を調べる
Public Sub Macro()
Dim i As Long
For i = 1 To 100
Sheet1.Cells(i, 1) = i
If isPrime(i) Then
Sheet1.Cells(i, 2) = "Prime"
End If
Next i
End Sub
Public Function isPrime(x As Long) As Boolean
Dim i As Long
Dim max As Long
isPrime = True
max = CLng(Math.Sqr(x))
For i = 2 To max
If x Mod i = 0 Then
isPrime = False
i = max
End If
Next i
End Function
先生は大変だろうなぁ、などと思っています。
それはそれとして、Excel VBAで簡単な数学のプログラムを作ってみました。個人的には、こういうプログラムは教育的だと思っています。
まずは素数の判定プログラムです。
999611と999613のように双子の素数を見つけたりすると少し楽しいです。
実際に実行してみると、計算時間を体感できます。例えば10000桁の素数を探すことがいかに大変かが分かります。素数は無限に存在しますが、その意味を体感している感じです。
ソースコードは、ご自由にご利用ください。ただし、趣味のプログラムなので、保証はありません。
Option Explicit
'素数を調べる
Public Sub Macro()
Dim i As Long
For i = 1 To 100
Sheet1.Cells(i, 1) = i
If isPrime(i) Then
Sheet1.Cells(i, 2) = "Prime"
End If
Next i
End Sub
Public Function isPrime(x As Long) As Boolean
Dim i As Long
Dim max As Long
isPrime = True
max = CLng(Math.Sqr(x))
For i = 2 To max
If x Mod i = 0 Then
isPrime = False
i = max
End If
Next i
End Function
規則正しい生活
「規則正しい生活を心がけなさい」とは、よく言われることです。
ですが、よくよく考えてみると、規則正しい生活をしているのは、現代人だけなのではないでしょうか?
毎朝同じ時間に起きて、会社や学校に行って、家に帰って、しばらくしたら寝る。そんな単調な生活を送っているのは、現代人だけな気がします。
人類が狩猟や農耕をしていた時代、生活は自然のリズムに従っていたはずです。自然のリズムは単調ではなく、晴れた日もあれば、雨の日もあります。生活は不規則を強いられていたでしょう。
そう考えると、単調すぎる生活よりは、少し不規則な生活の方が、自然に近い生活なのかもしれません。規則正しすぎる生活より、少し不規則な生活の方が、刺激があってよいかもしれません。
近頃、不規則な生活が続いているせいか、そんなことを考えています。
もちろん、度が過ぎた不摂生な生活はダメだと思いますが。
ですが、よくよく考えてみると、規則正しい生活をしているのは、現代人だけなのではないでしょうか?
毎朝同じ時間に起きて、会社や学校に行って、家に帰って、しばらくしたら寝る。そんな単調な生活を送っているのは、現代人だけな気がします。
人類が狩猟や農耕をしていた時代、生活は自然のリズムに従っていたはずです。自然のリズムは単調ではなく、晴れた日もあれば、雨の日もあります。生活は不規則を強いられていたでしょう。
そう考えると、単調すぎる生活よりは、少し不規則な生活の方が、自然に近い生活なのかもしれません。規則正しすぎる生活より、少し不規則な生活の方が、刺激があってよいかもしれません。
近頃、不規則な生活が続いているせいか、そんなことを考えています。
もちろん、度が過ぎた不摂生な生活はダメだと思いますが。
登録:
投稿 (Atom)