Rubyプログラミング

問題番号 問題 ヒント 回答
1
10,000円を利率5%で一年間預金した場合,元利合計を求めるメソッド
を書きなさい.
# メソッドfを記述しなさい(引数は変数m と r の値)

m = 10000
r = 0.05
printf( "%d円を利率%3.2fで預けた時の元利合計は%d円です\n" , 
       m , r , f( m , r ) )
回答
2
10,000円を利率5%で二年間預金した場合,元利合計を求めるメソッド
を書きなさい.
# メソッドfを記述しなさい(引数は変数 m , r , n の値)

m = 10000
r = 0.05
n = 2
printf( "%d円を利率%3.2fで%d年間預けた時の元利合計は%d円です\n" 
        , m , r , n , f( m , r , n ) )
回答
3
問題2において巾乗関数をメソッドとして定義しなさい.
def f( m , r , n )
	a = m * pow( ( 1 + r ) , n )
	return a
end

# 巾乗メソッドpowを定義しなさい

m = 10000
r = 0.05
n = 2
printf( "%d円を利率%3.2fで%d年間預けた時の元利合計は%d円です\n" 
        , m , r , n , f( m , r , n ) )
回答
4
10,000円を利率5%で預金した場合,元利合計が何年後に2倍以上となるのかを
求めるプログラムを問題3で定義した二つのメソッドを用いて,
記述しなさい.
# 問題3のメソッドf
def f( m , r , n )

end

# 問題3のメソッドpow
def pow( x , y )

end

m = 10000
r = 0.05

# 元利合計が20,000円以上となる年数を求めるプログラム
# を書きなさい
回答
5
問題4と同様に10,000円を利率5%で預金した場合,元利合計が
2倍,3倍...,10倍以上となる年数を求めるプログラムを記述
しなさい.
# 問題3のメソッドf
def f( m , r , n )

end

# 問題3のメソッドpow
def pow( x , y )

end

m = 10000
r = 0.05

# 元利合計が2,3...10倍以上となる年数を求めるプログラムを
# 記述しなさい
回答
6
課題5において,金額と利率を入力できるようにプログラム
を修正しなさい
# 問題3のメソッドf
def f( m , r , n )

end

# 問題3のメソッドpow
def pow( x , y )

end

# 金額,利率の入力


# 元利合計が2,3...10倍以上となる年数を求めるプログラムを
# 記述しなさい
回答
7
整数xが素数かどうかを判定するメソッドを記述しなさい.
(以下に効率良く求めるかは問わない)
# 素数かどうかを判定するメソッドを記述しなさい


x = 6523
if prime( x ) == 1 then
	printf( "%dは素数ではないです\n" , x )
else
	printf( "%dは素数です\n" , x )
end
回答
8
問題7で定義したメソッドを用いて,整数2から1000の中で素数を
求めるプログラムを記述しなさい
(いかに効率良く求めるかは問わない)
# 問題7のメソッド
def prime( x )

end

# 2から1000の中から素数を求めるプログラムを記述しなさい
回答
9
整数xの階乗を求めるメソッドを記述しなさい.
# 階乗を求めるメソッドを記述しなさい


x = 5
printf( "%dの階乗は%dです\n" , x , f( x ) )
回答
10
問題9のメソッドを用いて,コンビネーション(nCr)(n>0,n>=r)を求める
メソッドを記述しなさい.
# 問題9の階乗のメソッド
def f( x )

end

# コンビネーションを求めるメソッドを書きなさい


n = 10
r = 5
printf( "%dC%dは%dです\n" , n , r , comb( n , r ) )
回答
11
10C110C2,...,10C10
を求めるプログラムを問題10のメソッドを用いて書きなさい.
# 階乗のメソッド
def f( x )

end

# コンビネーションのメソッド
def comb( n , r )

end

# 10C1から10C10まで求めるプログラムを書きなさい.

回答
12
問題11と同様にnCrにおいて,nを1から10まで変えて
それぞれのコンビネーションを求めるプログラムを書きなさい.
# 階乗を求めるメソッド
def f( x )

end

# コンビネーションを求めるメソッド
def comb( n , r )

end

# nCr(n=1,2...,10)を求めるプログラムを書きなさい

回答
13
二次元配列xにAからE(名前)までの点数が格納されているものとする.
x = [ [ 'D' , 'A' , 'E' , 'C' , 'B' ] , [ 70 , 85 , 60 , 45 , 30 ] ]
配列xと名前を引数として渡して,その点数を返すメソッドを記述しなさい.
(存在しない名前を引数として渡した場合は-1を返すようにしなさい)
# 点数を返すメソッドfを記述しなさい


x = [ 
      [ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
      [ 70 , 85 , 60 , 45 , 30 ] 
    ]

a = 'B'
if f( x , a ) != -1 then
	printf( "%sさんの点数は%dです\n" , a , f( x , a ) )
end
回答
14
問題13を拡張し,多次元配列xにAからEの各点数が格納されているものとする.
x = [
[ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
[ 70 , 85 , 60 , 45 , 30 ] ,
[ 90 , 45 , 35 , 60 , 50 ] ,
[ 100 , 60 , 75 , 50 , 10 ]
]
配列xと名前を引数として渡して,その合計点を返すメソッドを記述しなさい.
(存在しない名前を引数として渡した場合は-1を返すようにしなさい)
# 合計点を返すメソッドを記述しなさい


x = [ 
      [ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
      [ 70 , 85 , 60 , 45 , 30 ] ,
      [ 90 , 45 , 35 , 60 , 50 ] ,
      [ 100 , 60 , 75 , 50 , 10 ] 
    ]

a = 'B'
if f( x , a ) != -1 then
	printf( "%sさんの合計点数は%dです\n" , a , f( x , a ) )
end
回答
15
問題13を拡張し,多次元配列xにAからEの各点数が格納されているものとする.
x = [
[ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
[ 70 , 85 , 60 , 45 , 30 ] ,
[ 90 , 45 , 35 , 60 , 50 ] ,
[ 100 , 60 , 75 , 50 , 10 ]
]
配列xと名前を引数として渡して,それぞれの点数を配列として返すメソッド
を記述しなさい.
(存在しない名前を引数として渡した場合は'nil'返すようにしなさい)
# それぞれの点数を配列として返すメソッドを記述しなさい


x = [ 
      [ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
      [ 70 , 85 , 60 , 45 , 30 ] ,
      [ 90 , 45 , 35 , 60 , 50 ] ,
      [ 100 , 60 , 75 , 50 , 10 ] 
    ]

a = 'A'
r = f( x , a )
if r != nil then
	printf( "%sさんの点数は%dと%dと%dです\n" , a , r[ 0 ] , r[ 1 ] , r[ 2 ] )
end
回答
16
問題13の配列xにおいて,配列xと点数を引数として渡して,
対応する名前(AからE)を返すメソッドを記述しなさい.
x = [ [ 'D' , 'A' , 'E' , 'C' , 'B' ] ,[ 70 , 85 , 60 , 45 , 30 ] ]
(存在しない場合はnilを返すようにしなさい)
# 名前を返すメソッドを記述しなさい


x = [ 
      [ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
      [ 70 , 85 , 60 , 45 , 30 ] 
    ]

a = 60
if f( x , a ) != nil then
	printf( "点数が%d点なのは%sさんです\n" , a , f( x , a ) )
end
回答
17
課題16において,同じ点数が存在していても問題ないように,該当する
名前を配列で返すようにメソッドを修正しなさい.
x = [ [ 'D' , 'A' , 'E' , 'C' , 'B' ] , [ 70 , 85 , 60 , 45 , 70 ] ]
(存在しない場合は空の配列を返すようにしなさい)
# 該当する名前を配列で返すように問題16のメソッドを修正しなさい


x = [ 
      [ 'D' , 'A' , 'E' , 'C' , 'B' ] ,
      [ 70 , 85 , 60 , 45 , 70 ] 
    ]

a = 70
m = f( x , a )
if m.length != 0 then
	printf( "点数が%d点なのは" , a )
	m.length.times { |i|
		printf( "%sさん " , m[ i ] )
	}
	printf( "です\n" )
end
回答
18
二つの配列xとyがある場合,それぞれの配列の要素の合計値を求める
メソッドを記述しなさい.
x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]
# 配列の要素の合計値を求めるメソッドを記述しなさい
def sum( x )



end

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

s_x = sum( x )
s_y = sum( y )

printf( "配列xの合計は%d,配列yの合計は%dです\n" , s_x , s_y )
回答
19
問題18において,それぞれの配列の要素の自乗の合計(平方和)を求める
メソッドを追加しなさい.
# 配列の要素の合計値を求めるメソッドを記述しなさい(問題18)
def sum( x )


end

# 配列の要素の二乗の合計を求めるメソッドを記述しなさい
def sum2( x )


end

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

s2_x = sum2( x )
s2_y = sum2( y )
printf( "配列xの二乗和は%d,配列yの合計は%dです\n" , s2_x , s2_y )
回答
20
問題19において,配列xとyの内積(要素の積の和)を求めるメソッドを
追加しなさい.
# 問題18のメソッドと同じ
def sum( x )


end

# 問題19のメソッドと同じ
def sum2( x )



end

# 配列xとyの内積(積和)を求めるメソッドを記述しなさい
def sum_xy( x , y )



end	

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

s_xy = sum_xy( x , y )
printf( "配列xとyの内積は%dです\n" , s_xy )
回答
21
問題20において,配列xおよびyの残差平方和を求めるメソッドを
追加しなさい.
(配列xの残差平方和は sum2(x)-sum(x)**2.0/x と求まる)
# 問題18のメソッド
def sum( x )


end

# 問題19のメソッド
def sum2( x )


end

# 問題20のメソッド
def sum_xy( x , y )


end	

# 残差平方和を求めるメソッドを記述しなさい
def sr( x )


end
		
x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

sr_x = sr( x )
sr_y = sr( y )
printf( "配列xの残差平方和は%f,配列yは%fです\n" , sr_x , sr_y )
回答
22
問題21において,配列xとyの残差平方和を求めるメソッドを
追加しなさい.
(配列xとyの残差平方和は sum_xy(x,y)-sum(x)*sum(y)/x.length と求まる)
# 問題18のメソッド
def sum( x )

end

# 問題19のメソッド
def sum2( x )

end

# 問題20のメソッド
def sum_xy( x , y )

end	

# 問題21のメソッド
def sr( x )

end

# 配列xとyの残差平方和を求めるメソッドを記述しなさい
def sr2( x , y )



end

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

sr_xy = sr2( x , y )
printf( "配列xとyの残差平方和は%fです\n" , sr_xy )
回答
23
問題18から22で定義したメソッドを用いて,配列xとyの回帰分析
(y=ax+b)を行なう.傾きを求めるメソッドを追加しなさい.
(傾きは sr2(x,y)/sr(x) と求まる)
# 問題18から22のメソッド
def sum( x )

end

def sum2( x )

end

def sum_xy( x , y )

end	

def sr( x )

end

def sr2( x , y )

end

# 傾きを求めるメソッドを記述しなさい.
def reg_a( x , y )

end

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

a = reg_a( x , y )
printf( "配列xとyを回帰分析した時の傾きは%f\nです" , a )
回答
24
問題23と同様に,配列xとyの回帰分析(y=ax+b)を行なう場合,
切片を求めるメソッドを追加しなさい.
(切片は sum(y)/y.length-reg_a(x,y)*sum(x)/x.length と求まる)
# 問題18から23のメソッド
def sum( x )

end

def sum2( x )

end

def sum_xy( x , y )

end	

def sr( x )

end

def sr2( x , y )

end

def reg_a( x , y )

end

# 切片を求めるメソッドを記述しなさい
def reg_b( x , y )

end

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

a = reg_a( x , y )
b = reg_b( x , y )
printf( "配列xとyを回帰分析した時の傾きは%f\nです" , a )
printf( "配列xとyを回帰分析した時の切片は%f\nです" , b )
回答
25
問題24と同様に,配列xとyの回帰分析(y=ax+b)を行なう場合,
相関係数を求めるメソッドを追加しなさい.
(相関係数は sr2(x,y)/Math.sqrt( sr( x ) * sr( y ) ) と求まる)
def sum( x )

end

def sum2( x )

end

def sum_xy( x , y )

end	

def sr( x )

end

def sr2( x , y )

end

def reg_a( x , y )

end

def reg_b( x , y )

end

# 相関係数を求めるメソッドを記述しなさい
def r( x , y )

end

x = [ 7 , 6 , 4 , 2 , 5 ]
y = [ 24 , 20 , 14 , 8 ,12 ]

a = reg_a( x , y )
b = reg_b( x , y )
c = r( x , y )
printf( "配列xとyを回帰分析した時の傾きは%f\nです" , a )
printf( "配列xとyを回帰分析した時の切片は%f\nです" , b )
printf( "配列xとyを回帰分析した時の相関係数の二乗は%f\nです" , c*c )
回答