メインコンテンツへスキップ
見出し画像

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




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

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

     
     
    大学・専門学校の先生の解説Note。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。