第3章の練習,投票


条件分岐 - 場合分けを使った計算

def max(x,y)
  if x>y
    x
  else
    y
  end
end

3通りの場合

def sign (x)
    if x < 0
        -1
    else
        if 0 < x
            1          # not(x <0) and 0



どれが正しいか?

xの値が7、yの値が5、zの値が3であるとして
  1. x < y
  2. x <= y
  3. y != z
  4. z > x
  5. z == x

どれが正しいか?

xの値が7、yの値が5、zの値が3であるとして
  1. x < y
  2. x <= y
  3. x < y && y != z
  4. x <= y || y == z
  5. !(y == z)

次の結果は何?

def is_even(x)
    x%2 == 0
end
def tnpo(n)
    if is_even(n)
        n/2
    else
        3*n + 1
   end
end
irb(main):001:0> tnpo(tnpo(tnpo(7)))
  1. 1
  2. 4
  3. 7
  4. 11
  5. 34

次の結果は何?

irb(main):001:0> s="abra"
=> "abra"
irb(main):002:0> t = "cadabra"
=> "cadabra"
irb(main):003:0> t[1..3]+s[1..2]
  1. 5
  2. "ab"
  3. "adabr"
  4. "adabbra"
  5. "cadabraabra"

練習

大きさn で中身が全て 0 であるような1次元配列を作る関数 make1d(n) を定義せよ。

練習


2重の繰り返し

include Math
def make1d(n)
  a=Array.new(n)
  for i in 0..(n-1)
    a[i]=0
  end
  a
end
def make2d(h,w)
  b=Array.new(h)
  for i in 0..(h-1)
    b[i]=make1d(w)
  end  
  b
end
def d(x,y,r)
  return sqrt((x-r)**2+(y-r)**2)
end
def b(r,x,y)
  if d(x,y,r)<=r
    (r-d(x,y,r))/r
  else
    1
  end
end
def sphere(r)
    image = make2d(2*r, 2*r)
    for y in 0..(2*r -1)
        for x in 0..(2*r -1)
            image[y][x] = b(r,x,y)
        end
    end
    image
end

練習

show(sphere(20)) を実行して表示される画像を確めよ。

進捗状況の確認


次は何を返す?

a = Array.new(2)
b = Array.new(2)
for i in 0..1
    b[i] = a
    for j in 0..1
        b[i][j] = i
    end
end
b
  1. [[0,0],[0,0]]
  2. [[0,0],[1,1]]
  3. [[0,1],[0,1]]
  4. [[1,1],[1,1]]
  5. [0,0]
  6. [0,1]
  7. [1,1]

次は何を返す?

b = Array.new(2)
for i in 0..1
    b[i] = Array.new(2)
    for j in 0..1
        b[i][j] = i
    end
end
b
  1. [[0,0],[0,0]]
  2. [[0,0],[1,1]]
  3. [[0,1],[0,1]]
  4. [[1,1],[1,1]]
  5. [0,0]
  6. [0,1]
  7. [1,1]

練習


進捗状況の確認

  1. solutionsができた時点で投票してください

進捗状況の確認

  1. 両方できた。
  2. solutionsだけ。
  3. medianだけ。
  4. まだ何もできていない。