Prof. Shigeto R. Nishitani's website - IsPrime Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
!!!例題
階乗(n!)を計算するrubyコードをつくれ.
!!!解法
まず動いているコードをfactor.rbと名付けかえる.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cp hello.rb factor.rb
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Hello world!\n"
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
Hello world!
>>>
次に入力を受け取って,そのまま出力するように変更する.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% emacs factor.rb
File Edit Options Buffers Tools Help
print "Hello world!\n"
>>>
<<<
print "Hello world!\n"
puts gets.chomp
>>>
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% !r
ruby factor.rb
Hello world!
4
4
>>>
それらしく書き換える.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Input number:"
n=gets.chomp
puts n
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
4
>>>
次にこのinputされた回数ループを回す.いくつかの回しかたがあるが,whileで此処は書いておく.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Input number:"
n = gets.chomp.to_i
puts n
i=1
while (i<=n) do
print(i,"\n")
i+=1
end
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
Input number:5
5
1
2
3
4
5
>>>
to_iで整数に変換しておく.
階乗計算になるようにfを用意して,それに
f = f*i
として次々に掛けていく.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Input number:"
n = gets.chomp.to_i
puts n
i=1
f=1
while (i<=n) do
f=f*i
print(i,"!=",f,"\n")
i+=1
end
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
Input number:5
5
1!=1
2!=2
3!=6
4!=24
5!=120
>>>
!!!派生課題
f.to_s.length
(string(文字列)に変換して長さ(length)を取る)を使って階乗の桁数を出力するコードに書き換えよ.
!!!類題
調和級数
{{attach_view(Eq1.png)}}
のn=100までを計算するプログラムを書け.
:ヒント:例題の解法を参照しながら初めから書くべし(試験対策).初期化を実数ですることを忘れずに.
!!!演習
入力が素数かどうかを判定するプログラムを書け.
:ヒント1:素数とは,自分自身の数n と1 以外の数で割りきれないかどうか.
:ヒント2:番兵(warden)を置いておいて,2からn − 1 までの数でn を次々と割っていき,一度でも割り切れれば番兵にマークをつける.ループが終わった後に番兵のマークを見て素数(prime number) かどうかを判定する.
:ヒント3(高速化):割り切れた時点でループからbreakする.さらに,ループの上限をできるだけ小さくする.
階乗(n!)を計算するrubyコードをつくれ.
!!!解法
まず動いているコードをfactor.rbと名付けかえる.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cp hello.rb factor.rb
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Hello world!\n"
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
Hello world!
>>>
次に入力を受け取って,そのまま出力するように変更する.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% emacs factor.rb
File Edit Options Buffers Tools Help
print "Hello world!\n"
>>>
<<<
print "Hello world!\n"
puts gets.chomp
>>>
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% !r
ruby factor.rb
Hello world!
4
4
>>>
それらしく書き換える.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Input number:"
n=gets.chomp
puts n
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
4
>>>
次にこのinputされた回数ループを回す.いくつかの回しかたがあるが,whileで此処は書いておく.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Input number:"
n = gets.chomp.to_i
puts n
i=1
while (i<=n) do
print(i,"\n")
i+=1
end
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
Input number:5
5
1
2
3
4
5
>>>
to_iで整数に変換しておく.
階乗計算になるようにfを用意して,それに
f = f*i
として次々に掛けていく.
<<<
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb
print "Input number:"
n = gets.chomp.to_i
puts n
i=1
f=1
while (i<=n) do
f=f*i
print(i,"!=",f,"\n")
i+=1
end
[BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb
Input number:5
5
1!=1
2!=2
3!=6
4!=24
5!=120
>>>
!!!派生課題
f.to_s.length
(string(文字列)に変換して長さ(length)を取る)を使って階乗の桁数を出力するコードに書き換えよ.
!!!類題
調和級数
{{attach_view(Eq1.png)}}
のn=100までを計算するプログラムを書け.
:ヒント:例題の解法を参照しながら初めから書くべし(試験対策).初期化を実数ですることを忘れずに.
!!!演習
入力が素数かどうかを判定するプログラムを書け.
:ヒント1:素数とは,自分自身の数n と1 以外の数で割りきれないかどうか.
:ヒント2:番兵(warden)を置いておいて,2からn − 1 までの数でn を次々と割っていき,一度でも割り切れれば番兵にマークをつける.ループが終わった後に番兵のマークを見て素数(prime number) かどうかを判定する.
:ヒント3(高速化):割り切れた時点でループからbreakする.さらに,ループの上限をできるだけ小さくする.