平成17年度 情報表現 試験問題

試験日時:平成18年1月25日(水)
出題者:神田・西村・広瀬
持ち込み:参考書、ノート、電卓可、PC 不可。 携帯電話鳴動は即退場。

解答は解答用紙の所定の欄に書くこと。問題用紙は持ち帰ってよし。

第1問

以下の空欄を埋めよ

0b0d0x
[ア][イ]121
1111111[ウ][エ]
[オ]2006[カ]

第2問

アルファベットの 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"
  1. プログラムを起動し koeki という文字列を与えたときの 出力結果を示せ。

  2. 空欄を埋めてプログラムを完成させよ。

    なお、?x とすると x の文字コードが求められる。

第3問

以下のプログラムの実行結果を示せ。

#!/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)

第4問

以下のプログラムをみて、各問に答えよ。

#!/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", [エ])
  1. このプログラムで z = 1 を入力した場合、 最後に返される値は何か。

  2. 次の語彙から選び、[ア]〜[エ] を埋めよ。

    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)

第5問

以下は list.txt を読み込んで処理を行うプログラムである。

  1. このプログラムは1箇所間違いがあり、実行してもエラーになる。 どこをどのように修正すればよいか示せ。

  2. このプログラムでは 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

第6問

掛算だけで √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)
  1. プログラムの空欄 (A)〜(E) を埋めよ。

  2. printf 文の引数にある 5.3f はどういう働きか説明せよ。

  3. プログラムを実際に動かしたときの x の最終的な値は1.414551となる。これをふまえて、 プログラムにより出力される結果を正確に記述せよ。

以上