1.作成したプログラム
問題1
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
y = 0
print"入力された正の整数が素数かどうか判断します。\n"
number = gets.chomp!.to_i
for x in 2 .. number - 1
if 0 == number % x
printf("%dは素数ではありません。\n",number)
y = 0
break
else
y += 1
end
end
if y == number - 2
printf("%dは素数です。\n",number)
end
問題2
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
number = []
a = 0
total = 0
sa = 0
hyou = 0
bun = 0
print"入力された10個の実数値の平均値と標準偏差を算出します。\n"
for x in 1 .. 10
printf("%d個目\n",a+1)
number[a] = gets.chomp!.to_f
total += number[a]
a += 1
end
ave = total / a
a = 0
for x in 1 .. 10
bun += ( number[a] - ave ) ** 2
a += 1
end
hyou = bun / number.length
dev = Math.sqrt(hyou)
printf("平均値は%5.1fです。\n",ave)
printf("標準偏差は%5.1fです。\n",dev)
問題3
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
number = []
a = 0
total = 0
sa = 0
hyou = 0
bun = 0
print"speed.txtのデータの平均値と標準偏差を算出します。\n"
open("speed.txt","r:utf-8") do |n|
while line = n.gets
if /\d+\D+(\d+)/ =~ line
number[a] = $1.to_f
total += number[a]
a += 1
end
end
end
a -= 1
ave = total / a
a = 0
for x in 1 .. number.length
bun += ( number[a] - ave ) ** 2
a += 1
end
hyou = bun / number.length
dev = Math.sqrt(hyou)
pa = ave + ( dev * 1.64 )
printf("平均値は%5.1fです。\n",ave)
printf("標準偏差は%5.1fです。\n",dev)
printf("95パーセンタイル値は%5.1fです。\n",pa)
2.プログラムの実行結果
問題1
ED-SA102-050{c122xxx}% ./ruby2-1.rb [~/program]
入力された正の整数が素数かどうか判断します。
3
3は素数です。
ED-SA102-050{c122xxx}% ./ruby2-1.rb [~/program]
入力された正の整数が素数かどうか判断します。
4
4は素数ではありません。
ED-SA102-050{c122xxx}% ./ruby2-1.rb [~/program]
5入力された正の整数が素数かどうか判断します。
5は素数です。
ED-SA102-050{c122xxx}% ./ruby2-1.rb [~/program]
入力された正の整数が素数かどうか判断します。
6
6は素数ではありません。
ED-SA102-050{c122xxx}% ./ruby2-1.rb [~/program]
入力された正の整数が素数かどうか判断します。
57
57は素数ではありません。
問題2
ED-SA102-050{c122xxx}% ./ruby2-2.rb [~/program]
入力された10個の実数値の平均値と標準偏差を算出します。
1個目
7.2
2個目
9.5
3個目
1.4
4個目
3.7
5個目
8.4
6個目
5
7個目
2.2
8個目
9.8
9個目
1.3
10個目
6.2
平均値は 5.5です。
標準偏差は 3.1です。
問題3
ED-SA102-050{c122xxx}% ./ruby2-3.rb [~/program]
speed.txtのデータの平均値と標準偏差を算出します。
平均値は 79.8です。
標準偏差は 23.5です。
95パーセンタイル値は118.3です。
3.プログラムの説明
問題1の繰り返しの表現は、2から入力された数字の1つ前の値まで繰り返して行う意味で、その中のどこかで完全に割り切れる場合や、最後まで行い切った場合繰り返しから抜けるようになっている。なぜ2から入力され
数字の1つ前の値まで繰り返して行うのかは、素数というのは1とその数字以外の2つでしか割り切れない数字なので、書いてあるようにすれば判別しやすいと考えたため。
問題2の繰り返しの表現は、10回数値を入力しないといけないので10回数値入力→配列に代入→合計に加算を繰り返すようにするため、forで1から10まで行うつまり10回繰り返すようにしている。次の繰り返し
表現は、標準偏差を求めるために計算式の�堯淵如璽� ー 平均値)を10回おこなうためにfor x in 1 ..
10と表記した。こうすることで、あとはデータ数で割ったのちに√をつければ標準偏差は出るようになるので計算が楽になる。
問題3の繰り返しの表現は、まず最初の繰り返しの表現である「while end」は一応データの数がわからない場合でも正常に作動するようにするた目に使いました。
次の繰り返しの表現である「for end」は問題2の2つ目の繰り返しの表現と同じで標準偏差の分子の部分を求めるために、配列にある数字を平均値で引いて2乗するようにするために使った。
4.感想
問題2ができればそのまま問題3にも活用できたから今回の課題は楽だった。ただ、95パーセンタイル点を表計算ソフトで算出したら、関数(PERCENTILE)を用いる方法と平均値に標準偏差の1.64倍の値を
した値が異なっていて、最終的に後者が一致しているから提出したが、当たっているか心配です。
また、思いのほかプログラムの作成の感が鈍ってなくてよかったです。