情報科学概論(再履修)
期末試験問題

2005.02.04

Back to index page



期末試験に関する注意事項をよく読んでおくこと!

解答用紙


  1. 81から140までの整数を15個ずつ4行に分けて例のように表示するスクリプト を作成せよ.数字は右揃えとすること(8点)

       難易度 ★★

      81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
      96  97  98  99 100 101 102 103 104 105 106 107 108 109 110
     111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
     126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
    

    解答例

    for i in 5..8
      for j in 1..15
        printf "%4d", 15*i + j + 5
      end
      printf "\n"
    end
    

  2. サイコロを500回振って1から6までそれぞれの目が何回出たかを表示するス クリプトを作成せよ.(7点)

       難易度 ★

    解答例

    dice = Array.new(6,0)
    
    for i in 1..500
      n = rand(6) 
      dice[n] += 1
    end
    
    p dice
    

  3. 設問2のスクリプトを,出た回数が多い順に,目と回数を例のように表示するス クリプトに改造せよ.(5点)

       難易度 ★★★★★

    [74, 86, 99, 85, 75, 81]
    目: 3   回数: 99
    目: 2   回数: 86
    目: 4   回数: 85
    目: 6   回数: 81
    目: 5   回数: 75
    目: 1   回数: 74
    

    ヒント:多重配列のソートを利用する.例えば,次のスクリプトの動作を確認し て応用せよ.

    ary = [[5,1], [3,2], [4,3]]
    
    p ary.sort
    

    解答例

    dice = Array.new(6,0)
    
    for i in 1..500
      n = rand(6) 
      dice[n] += 1
    end
    
    ary = [[],[],[],[],[],[]]
    
    for i in 0..5
      ary[i][0] = dice[i]
      ary[i][1] = i + 1
    end
    
    p dice
    
    new_ary = ary.sort.reverse
    
    for i in 0..5
      printf "目: %d   回数: %d\n", new_ary[i][1], new_ary[i][0]
    end
    

  4. 6桁の乱数 num1 と二桁の乱数 num2 を発生させ,整数 演算で num1 num2 で割り続けるとき,商を値とし て持つ配列を作成し,例のように表示するスクリプトを作成せよ.(7点)

       難易度 ★★★

    num1 = 314417, num2 = 11
    [28583, 2598, 236, 21, 1, 0]
    

    解答例

    num1 = rand(900000) + 100000
    num2 = rand(90) + 10
    
    printf "num1 = %d, num2 = %d\n", num1, num2
    
    ary = []
    i = 0
    
    while num1 > 0
      num1 /= num2
      ary[i] = num1
      i += 1
    end
    
    p ary
    

  5. 4桁の整数を二桁の整数ふたつに分ける.例えば,1234を12と34のように上 二桁と下二桁で分けるものとする.このとき,分けた二つの整数をそれぞ れ自乗して加えたら元の4桁の整数と一致するものをすべて表示するスクリプトを 作成せよ.(5点)

       難易度 ★★★★

    解答例

    for i in 1000..9999
      former = i / 100
      latter = i % 100
      if former * former + latter * latter == i
        printf "%d = %d^2 + %d^2\n", i, former, latter
      end
    end
    

  6. 次のスクリプトは配列 ary の要素を数値化してすべて自乗して表 示するこ とを行うように作られたものであるが,間違いがいくつかあるため,この ままでは動作しない.正しいスクリプトに修正したものを解答欄に記載せ よ.(8点)

       難易度 ★★

    ary = ["2", "5", "-4", "10", "-1", "0"]
    
    for i in 0..ary.size
      ary[i] = ary[i] * ary[i]
    end
    
    p ary
    

    解答例

    ary = ["2", "5", "-4", "10", "-1", "0"]
    
    for i in 0..ary.size-1
      ary[i] = ary[i].to_i * ary[i].to_i
    end
    
    p ary
    


目次ページに戻る