| 試験日時: | 平成18年1月25日(水) |
|---|---|
| 出題者: | 神田・西村・広瀬 |
| 持ち込み: | 参考書、ノート、電卓可、PC 不可。 携帯電話鳴動は即退場。 |
解答は解答用紙の所定の欄に書くこと。問題用紙は持ち帰ってよし。
以下の空欄を埋めよ
| 0b | 0d | 0x |
|---|---|---|
| [ア] | [イ] | 121 |
| 1111111 | [ウ] | [エ] |
| [オ] | 2006 | [カ] |
アルファベットの a を 1 つずらすと b になる。 a を 4 つずらすと e になる。z を 1 つずらすときは1周して aに戻ると考え a とする。これにより z を 4 つずらすと d になる。
元の英文のアルファベットすべてを 13 個ずらしたものは、もう一回 13 個ずら
すと元の文に戻ることから、簡単な暗号として利用される。
以下のプログラム caesar.rb は、英小文字の文章を読み込み、
アルファベットを 13 個分ずらした文字列を出力する。
#!/usr/koeki/bin/ruby
s = gets.chomp!
[ (A) ]
while i < s.length
char = s[i] + [ (B) ]
if char > ?z
char -= [ (C) ]
end
printf("[ (D) ]", char)
[ (E) ]
end
print "\n"
プログラムを起動し koeki という文字列を与えたときの
出力結果を示せ。
空欄を埋めてプログラムを完成させよ。
なお、?x とすると x の文字コードが求められる。
以下のプログラムの実行結果を示せ。
#!/usr/koeki/bin/ruby
a=b=2
sum=a
printf("%d",a)
a=a+b
a.step(10,b) do |i|
printf ("+%d", i)
sum += i
end
printf ("=%d\n", sum)
以下のプログラムをみて、各問に答えよ。
#!/usr/koeki/bin/ruby
def f(x)
b = -2
x**2 + b
end
STDERR.print("この [ア] では、与えられた数を [イ] し、[ウ] ます。")
STDERR.print("好きな数を入力して下さい。")
z = gets.chomp.to_i
printf("答えは %s です \n", [エ])
このプログラムで z = 1 を入力した場合、
最後に返される値は何か。
次の語彙から選び、[ア]〜[エ] を埋めよ。
a.文法 b.メソッド c.アルゴリズム
d.標準入力 e.1倍 f.2倍 g.1乗 h.2乗 i.1を加える
j.2を加える k.-1を引く l.-2 を加える
m.f(z) n.f(x)
o.f(a) p.f(b)
以下は list.txt を読み込んで処理を行うプログラムである。
このプログラムは1箇所間違いがあり、実行してもエラーになる。 どこをどのように修正すればよいか示せ。
このプログラムでは tel と num
という2つの配列を使用している。
これを number というハッシュを使って書き直せ。
電話の故障 113 警察 110 天気予報 177 時報 117 番号案内 104 災害伝言ダイヤル 171
#!/usr/koeki/bin/ruby
tel=[]
num=[]
i=0
open ("list.txt","r") do |call|
while line = call.gets
if /(\S+)\s+(\d+)/ =~ line
tel[i] = $1
num[i] = $2
i += 1
end
end
end
j=0
print "3桁番号サービス一覧\n"
while j <= tel.length
printf ("%-20s%d\n",tel[j],num[j])
j += 1
end
掛算だけで √2 の近似値を求めたい。以下のプログラム
root2.rb は、√2 が 1 より大きく 2 より小さいことを
既知の情報として、その区間で解を探すものである。解のある下限を left、
上限を right 変数とし、その中間値
x = (left+right)/2を仮の解として以下の処理を繰り返し行なう。
(a) x2 と 2 の差を 2 乗したものが 0.0000001 より小さかったら
x を解とする(繰り返しを抜ける)。
(b) (a)でなくなおかつ x2 が2より大きければ解の存在する
上限をそのときの x の値に変更して処理の最初に戻る。
(c) (a)でも(b)でもないときは解の存在する下限をそのときの x
の値に変更して処理の最初に戻る。
#!/usr/local/bin/ruby
left=1.0
right=2.0
while true
x = [ (A) ]
if (x*x - 2)[ (B) ]2 < 0.0000001
[ (C) ]
elsif x*x > 2
[ (D) ]
else
[ (E) ]
end
end
printf("√2の近似値は%5.3fです\n", x)
プログラムの空欄 (A)〜(E) を埋めよ。
printf 文の引数にある 5.3f
はどういう働きか説明せよ。
プログラムを実際に動かしたときの x の最終的な値は1.414551となる。これをふまえて、 プログラムにより出力される結果を正確に記述せよ。
以上