HOME»基本情報技術者試験掲示板»カンタン合格 予想問題1 科目B 15問目について
投稿する
カンタン合格 予想問題1 科目B 15問目について [5124]
たむさん(No.1)
関数medianは、引数として与えられた配列に格納された整列済みデータの中央値(メディアン)を返す。関数median(〈5,5,7,7,7,9,11,13,13〉)として呼び出したときの戻り値は"7"となる。また関数median(〈4,5,5,6,7,9,9,10,11,12〉)として呼び出した時の戻り値は"8"となる。
○実数型:median(実数型の配列:data)
整数型:k
実数型:ret
k←( a )
if((dataの要素数mod2)が0に等しい)
ret←( b )/※実数型※/
else
ret←data【k】
endif
return ret
あ a (dataの要素数÷2の商) b (data【k】+data【k+1】)÷2
い a (dataの要素数÷2の商) b (data【k-1】+data【k】)÷2
う a (dataの要素数÷2の商)+1 b (data【k】+data【k+1】)÷2
え a (dataの要素数÷2の商)+1 b (data【k-1】+data【k】)÷2
お a (dataの要素数÷2の商)-1 b (data【k】+data【k+1】)÷2
か a (dataの要素数÷2の商)-1 b (data【k-1】+data【k】)÷2
という問題がありまして、"あ"と"え"で戻り値が同じなのですが、答えは"え"になります。
違いがわかりません。解説では+1が必要かどうかは場合による。(要素番号が1から始まる場合は必要。)のこの部分がわかりません。誰か解説宜しくお願い致します。
○実数型:median(実数型の配列:data)
整数型:k
実数型:ret
k←( a )
if((dataの要素数mod2)が0に等しい)
ret←( b )/※実数型※/
else
ret←data【k】
endif
return ret
あ a (dataの要素数÷2の商) b (data【k】+data【k+1】)÷2
い a (dataの要素数÷2の商) b (data【k-1】+data【k】)÷2
う a (dataの要素数÷2の商)+1 b (data【k】+data【k+1】)÷2
え a (dataの要素数÷2の商)+1 b (data【k-1】+data【k】)÷2
お a (dataの要素数÷2の商)-1 b (data【k】+data【k+1】)÷2
か a (dataの要素数÷2の商)-1 b (data【k-1】+data【k】)÷2
という問題がありまして、"あ"と"え"で戻り値が同じなのですが、答えは"え"になります。
違いがわかりません。解説では+1が必要かどうかは場合による。(要素番号が1から始まる場合は必要。)のこの部分がわかりません。誰か解説宜しくお願い致します。
2023.10.08 05:14
電タックさん(No.2)
★FE ブロンズマイスター
これで解説になるか分かりませんが一応記載します。
十分に大きい数だった場合問題は発生しない(正しそう)様に見えても、小さくしたり境界ギリギリにすると発生することがあります。
この手の問題を考える時、0個と最小個数と最小個数+1orxで仮の数を当てはめると考えやすいです。
※0個は若干異常な個数なのでIPA試験のようなキレイな問題しかでない場合無視でもいいですが・・・
今回の疑問の場合
最小個数は1個。中央値も1個目。でやってみるとわかりやすいです。
■あの場合
要素数1=1÷2=0.5=結果の整数(0)
要素数を0から数える場合
結果0:配列の0番目となり要素の1個目が選べます。
正しい。
要素数を1から数える場合
結果0:配列の1番目では無く存在しない配列の0番目を選ぶことになります。(配列の外側を選ぶ事はエラーと考えます)
■えの場合
要素数1=1÷2+1=1.5=結果の整数(1)
要素数を0から数える場合
結果1:配列の0番目では無く存在しない配列の1番目を選ぶことになります。(配列の外側を選ぶ事はエラーと考えます)
要素数を1から数える場合
結果1:配列の1番目となり要素の1個目が選べます。
正しい。
>"あ"と"え"で戻り値が同じなのですが、答えは"え"になります。違いがわかりません。
十分に大きい数だった場合問題は発生しない(正しそう)様に見えても、小さくしたり境界ギリギリにすると発生することがあります。
この手の問題を考える時、0個と最小個数と最小個数+1orxで仮の数を当てはめると考えやすいです。
※0個は若干異常な個数なのでIPA試験のようなキレイな問題しかでない場合無視でもいいですが・・・
今回の疑問の場合
最小個数は1個。中央値も1個目。でやってみるとわかりやすいです。
■あの場合
要素数1=1÷2=0.5=結果の整数(0)
要素数を0から数える場合
結果0:配列の0番目となり要素の1個目が選べます。
正しい。
要素数を1から数える場合
結果0:配列の1番目では無く存在しない配列の0番目を選ぶことになります。(配列の外側を選ぶ事はエラーと考えます)
■えの場合
要素数1=1÷2+1=1.5=結果の整数(1)
要素数を0から数える場合
結果1:配列の0番目では無く存在しない配列の1番目を選ぶことになります。(配列の外側を選ぶ事はエラーと考えます)
要素数を1から数える場合
結果1:配列の1番目となり要素の1個目が選べます。
正しい。
2023.10.08 09:01
まーぼさん(No.3)
★FE シルバーマイスター
問題には配列の要素番号がどこから始まるかは書いてないのですか?
2023.10.08 12:07
まーぼさん(No.4)
★FE シルバーマイスター
以下配列の要素番号が1から始まるものとします。
戻り値が同じになるのは中央値付近に同じ値が固まっていて要素番号が1ずれても変わらないように見えるだけでしょう。
5,5,7,7,「7」,9,11,13,13の中央値は「」で囲った7です。これはこのプログラム関係なく中央値の定義から分かるものです。
要素数:9なので、9÷2=4.5 小数点以下切り捨てで4
要素番号5の7が中央値ですから、「(dataの要素数÷2の商)+1」が5になるのでこれでいいですね。
a (dataの要素数÷2の商) だと要素番号4の要素を返すことになるので
5,5,7,「7」,7,9,11,13,13
この「」で囲った7が出力されることになりますが、中央値の定義からして誤りです。
確かに同じ7が返されるかも知れませんが厳密には同じ7ではなく違う場所の7を返しているのです。
戻り値が同じになるのは中央値付近に同じ値が固まっていて要素番号が1ずれても変わらないように見えるだけでしょう。
5,5,7,7,「7」,9,11,13,13の中央値は「」で囲った7です。これはこのプログラム関係なく中央値の定義から分かるものです。
要素数:9なので、9÷2=4.5 小数点以下切り捨てで4
要素番号5の7が中央値ですから、「(dataの要素数÷2の商)+1」が5になるのでこれでいいですね。
a (dataの要素数÷2の商) だと要素番号4の要素を返すことになるので
5,5,7,「7」,7,9,11,13,13
この「」で囲った7が出力されることになりますが、中央値の定義からして誤りです。
確かに同じ7が返されるかも知れませんが厳密には同じ7ではなく違う場所の7を返しているのです。
2023.10.08 13:47
あるばさん(No.5)
かんたん合格 予想問題集は、問題1問15のすぐ続いている問題の文章に書いてますが、要素番号は1からですね。
2023.10.08 13:59
jjon-comさん(No.6)
★FE ゴールドマイスター
中央値の求め方を知らなければ中央値の問題は解けないです。
キーワード「中央値 偶数 奇数」でネット検索すれば、中央値の解説が見つかるでしょう。
キーワード「中央値 偶数 奇数」でネット検索すれば、中央値の解説が見つかるでしょう。
2023.10.08 15:58