見出し画像

【擬似言語⑤課題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変数に代入した」ってことでご容赦を。




追加課題 | 偶数個データにも対応

データが偶数個の場合にも対応したいです。

ここから先は

1,243字

メンバーシップ ¥ 500 /月

■初月無料なので、お試しください。 ■私独自の理解法や詳しい分析を公開したいです。 ■根本を丁寧に見…

【初月無料】Iパス法律/SG/AP計算/DBとSC午後2

¥500 / 月
1ヶ月無料 人数制限あり

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ