【擬似言語⑤課題2】中央値のNote(基本情報技術者, 科目B, アルゴリズム)
今回は、中央値を求める関数を作ってみます。
要約統計量って意味では「平均値」「最大値」「最小値」と同類。アルゴリズム的には、下準備で「ソート(並び替え)」、真ん中の位置特定では「2分探索法」で学んだことを使います。
>【擬似言語④】平均のNote
>【擬似言語⑤】最大値のNote
>【擬似言語⑤課題】最小値のNote
>【擬似言語⑫】バブルソートのNote
>【擬似言語⑥追ノ壱】2分探索法のNote
答えを見る前に必ず考えて下さいね。授業で先生が答えを書くのを待つ学生さん、絶対に伸びないですよ。間違って良いし、別解かもしれません。必ず自分で考えて、答え合わせをして。自分がどう間違えた/考え至らなかったかを分析し、ひょっとしたら別解になるのかも検討してください。でも、ある程度考えて「分からない」って観念するのはOKです。挫折しない程度の粘りでOK。
>全Noteへのリンク(FE節)
※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!
課題と仕様
課題。中央値を表示する関数を作って下さい。
以下が関数の仕様です。
データは「大域: 実数型の配列: array」に入っている
中央値を実数型で返す
中央値は真ん中の大きさの値を算出
※データは奇数個を想定する。
※つまりデータが3個なら左から2個目が中央値。5個なら3個目。
※偶数個(2, 4, 6個など)は後で改良対応します。ソート関数を使って良い
bubbleSortOptimized()を呼び出せば、大域変数arrayのデータをソートする。>【擬似言語⑫】バブルソートのNote
下記に続く部分を考えてください。
大域: 実数型の配列: array
○実数型: getMedian()
整数型: mid
整数型: length ← arrayの要素数
実数型: median
bubbleSortOptimized() / arrayをソートして上書き */ソート済みのデータが配列arrayに入ってます。中央値を算出して返す部分を作ります。
答え | 中央値の場所を数式で求める
dataが3個ならdata[1], [2], [3]なので、data[2]が中央値。5個なら、data[3]が中央値。7個ならdata[4]が中央値。
dataの要素数から中央値の要素番号の計算式を考えて下さいね。真ん中の求め方は「2分探索法」でやってます。>【擬似言語⑥追ノ壱】2分探索法のNote
※冒頭で伝えた注意点を抜粋再掲
答えを見る前に必ず考えて下さいね。でも、ある程度考えて「分からない」って観念するのはOKです。挫折しない程度の粘りでOK。
では答えを載せます。
大域: 実数型の配列: array
○実数型: getMedian()
整数型: mid
整数型: length ← arrayの要素数
実数型: median
bubbleSortOptimized() / arrayをソートして上書き */
/ 中央値の特定(データは奇数個のみ想定, 偶数個は非対応) */
mid ← (length + 1) / 2
median ← array[mid]
return median「データが奇数個なので、割り算したら小数出るから…」と考えると「+1して÷2」に考え至り易いかな。他にも式はあり得るので、自分で、データが3個, 5個, 7個の場合で検証すれば良しです。
「return median」を「return array[mid]」でも良いですが、まぁ「分かり易く median変数に代入した」ってことでご容赦を。
追加課題 | 偶数個データにも対応
データが偶数個の場合にも対応したいです。
ここから先は
メンバーシップ
¥ 500 /月
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ
