『情報科学入門 Rubyを使って学ぶ』の練習問題の解答例の他、授業スライドの練習問題の解答例や、プログラミングのポイント等を掲載します。他クラスの方の利用歓迎。改良・訂正箇所ありましたらご指摘ください。

2010/11/09

[ス]練習問題(第二章)

授業スライド「02数列」の練習問題の解答例です。


画像処理を行うので、irbを終了し、isrbを起動させましょう。


  • 次のようなデータを作成し、画像として表示させよ。
      w=[[0,1,1,1,1,1],
         [0,1,0,0,0,1],
         [0,1,0,1,0,1],
         [0,1,1,1,0,1],
         [0,0,0,0,0,1]]
上の通り入力してからshow(w)と入力すると、次のような画像が表示されます。
show(a)は、「数列aを画像表示せよ」という命令です。


  • カラー画像表現を使って簡単な国旗を描いてみよ。
    -たとえば、ドイツ、フランス...
     ドイツ国旗
    g=[[[0,0,0],[0,0,0],[0,0,0],[0,0,0]],
      [[1,0,0],[1,0,0],[1,0,0],[1,0,0]],
      [[1,1,0],[1,1,0],[1,1,0],[1,1,0]]]
    show(g)
  フランス国旗
    f=[[[0,0.2,0.6],[1,1,1],[1,0,0]],
      [[0,0.2,0.6],[1,1,1],[1,0,0]],
      [[0,0.2,0.6],[1,1,1],[1,0,0]]]
    show(f)

  • 配列中の2つの要素を入れ替える関数swap(a,i,j)を作れ。
    def  swap(a,i,j)
     t=a[i]
     a[i]=a[j]
     a[j]=t
      a
    end
  • 配列ai番目とi+1番目の数値の大きさを比べ、前者が後者より大きいときに
    両者を入れ替える関数swap_ascending(a,i)を作れ。
    def  swap_ascending(a,i)
     if  a[i]>a[i+1]
      t=a[i]
      a[i]=a[i+1]
      a[i+1]=t
     end
     a
    end
 前の関数swap(a,i,j)を利用すると...
    def swap_ascending(a,i)
     if a[i]>a[i+1]
      swap(a,i,i+1)
     end
     a
    end


  • ax番目の値と、その前後の値の平均値を求めるarray_average(a,x)を作れ。
    ただし前後の値とは、a(x-1)番目と(x+1)番目の値のうち、aの範囲内のものだとする。
    例えばa[1,2,3]のときarray_average(a,0)1.5array_average(a,1)2.0
    array_average(a,2)2.5になる。
    def  array_average(a,x)
     if x==0
      (a[0]+a[1])/2.0
     else
      if x==a.length()-1
       (a[x-1]+a[x])/2.0
      else
       (a[x-1]+a[x]+a[x+1])/3.0
      end
     end
    end

  • 画像データの座標(x,y)の点と、その周囲の点の明度の平均値を計算する関数
    image_average(image,x,y)を作れ。
    周囲の点とは指定された点の上下左右8点のうち、画像の範囲内の点だとする。
    例えば座標(0,0)の周囲の点は、(0,1),(1,1),(1,0)の3点になる。
    def image_average(a,x,y)
     if x==0
      if y==0
       (a[0][0]+a[0][1]+a[1][1]+a[1][0])/4.0
      else
       if y==a.length()-1
        (a[y][0]+a[y-1][0]+a[y-1][1]+a[y][1])/4.0
       else
        (a[y][0]+a[y-1][0]+a[y-1][1]+a[y][1]+a[y+1][1]+a[y+1][0])/6.0
       end
      end
     else
      if x==a[0].length()-1
       if y==0
        (a[0][x]+a[0][x-1]+a[1][x-1]+a[1][x])/4.0
       else
        if y==a.length()-1
         (a[y][x]+a[y-1][x]+a[y-1][x-1]+a[y][x-1])/4.0
        else
         (a[y][x]+a[y-1][x]+a[y-1][x-1]+a[y][x-1]
           +a[y+1][x-1]+a[y+1][x])/6.0
        end
       end
      else
       (a[y][x]+a[y-1][x-1]+a[y][x-1]+a[y+1][x-1]+a[y+1][x]+a[y+1][x+1]
         +a[y][x+1]+a[y-1][x+1]+a[y-1][x])/9.0
      end
     end
    end

0 件のコメント:

コメントを投稿