試験日時: | 平成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となる。これをふまえて、 プログラムにより出力される結果を正確に記述せよ。
以上