irb(main):001:0> a=[[1,2],[3,4]] => [[1, 2], [3, 4]] irb(main):002:0> b=a => [[1, 2], [3, 4]] irb(main):003:0> a[0][0]=0 => 0 irb(main):004:0> b => [[0, 2], [3, 4]]のように再現できる.
irb(main):001:0> a=[[1,2],[3,4]]
=> [[1, 2], [3, 4]]
irb(main):002:0> b=a.map{|v| v.dup}
=> [[1, 2], [3, 4]]
irb(main):003:0> a[0][0]=0
=> 0
irb(main):004:0> a
=> [[0, 2], [3, 4]]
irb(main):005:0> b
=> [[1, 2], [3, 4]]
のようになります.ただ,この書き方は講義の範囲を超えているので扱いませんでした.
def abs (x)
if x >=0
x
else
-x
end
end
#a[i][k]の絶対値が最大となるi>=kを探す
def maxrow(a,k)
max_i = k
for i in (k+1)..(a.length()-1)
if abs(a[max_i][k]) < abs(a[i][k])
max_i = i # 穴埋め
end
end
max_i
end
def swap(a,i,j)
tmp=a[i]
a[i]=a[j]
a[j]=tmp
end
def gjp(a) # Gauss-Jordan method WITH pivoting
row = a.length()
col = a[0].length()
for k in 0..(col-2)
max=maxrow(a,k) # find absolute-maximal coeff.
swap(a,k,max) # swap rows
akk = a[k][k]
for i in 0..(col-1) # normalize row k
a[k][i]=a[k][i]*1.0/akk
end
for i in 0..(row-1) # eliminate column k
if i != k # of all rows but k
aik = a[i][k]
for j in k..(col-1)
a[i][j] = a[i][j] - aik * a[k][j]
end
end
end
end
a
end
ruby vote.rb 選択肢番号のように使います.
mkdir is10のようにしてください.そして,ターミナルを開くたびに
cd is10と入力してからirbを動かすと良いでしょう.詳しくは,はいぱーワークブック「13.4 コマンドを使ったファイル操作」を参照してください.
ruby check.rb ex01.rbと実行すると,関数を与えた時の入力と出力があっていることが確認できます.