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

【擬似言語アルゴ③】一部をシフト(基本情報技術者, 科目B, アルゴリズム)

    このNoteでは、配列における「シフト」を更に学んで、「挿入ソート」で使える関数を作ります。

    「挿入ソート」は、”擬似言語のラスボス❷”。挫折しちゃう所なので、段階的に学習できるように作ってみました。
    >【擬似言語アルゴ①】入替のNote
    >【擬似言語アルゴ②】シフトのNote
    >【擬似言語アルゴ③】一部をシフトのNote*
    >【擬似言語アルゴ④】入替えシフトのNote*
    >【擬似言語⑫追2】挿入ソートのNote(作成中*)

    テキストの基礎を生かして、プログラム的な考察/工夫を学んでいきます。基礎と実用にギャップを感じる方のために作りました。
    >【FEB】擬似言語の教科書Note
    ぜひ一緒に学習を進めていきましょう!


    このNoteは、私がIT専門学校で授業したことを基に作成しています。
    IT専門学校でFEは第一目標として、カリキュラムが構築されています。何も知らずに入学しても、1年生10月にはFE合格していきますよ。実績ある教育ノウハウを詰め込んだので、少しでも信頼して頂けたら嬉しいです。

    >全Noteへのリンク(FE節)
    ※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!


    「一部(以降)」を1個右シフト

    配列の「一部」を、1個シフトする関数を組みます。

    要素番号pos以降を、1個右シフト。空きは0埋めで。

    画像
    ○整数型の配列: rightShiftFrom(整数型の配列: array, 整数型: pos)
      整数型: i, length
      
      length ← arrayの要素数
      
      // 後ろ(末尾)から順番に、指定された位置 pos まで 1 つ右へコピーする
      for (i を length - 1 から pos まで 1 ずつ減らす)
        array[i + 1] ← array[i]
      endfor
      
      // ずらして空いた pos 番目のマスを 0 (空)にする
      array[pos] ← 0
      
      return array

    引数チェックも考えてみます。

      // 指定された位置 pos が配列の範囲内かチェック
      if (pos < 1 または pos > length)
        return array
      endif




    「一部(範囲)」を1個右シフト

    シフトする範囲の終端も指定できるようにします。

    前節はpos~最後、今回はst~edをシフト対象とします。

    画像

    array[4]=8が消えちゃうのは、把握してます。

    擬似言語を組みます。stをstartPos, edをendPosとします。変数は分かり易いくせねば。

    ○整数型の配列: rightShiftRange(整数型の配列: array, 整数型: startPos, 整数型: endPos)
      整数型: i, length
      
      length ← arrayの要素数
      
      / 終点の手前から順番に、始点まで右へコピーする */
      for (i を endPos - 1 から startPos まで 1 ずつ減らす)
        array[i + 1] ← array[i]
      endfor
      
      / 空いた始点のマスを 0 にする */
      array[startPos] ← 0
      
      return array

    範囲(startPos, endPos)の指定が真っ当かの引数チェックも考えておきます。startPosとendPosが配列内、startPosがendPosより前。

      / startPos(始点)と endPos(終点)の整合性をチェック */
      if (startPos < 1 または endPos > length または startPos > endPos)
        return array
      endif

    完成した関数を挿入ソートに使います。なお0埋めについても再考します。>【擬似言語⑫追ノ弐】挿入ソートのNote(作成中*)

    やっと準備完了。




    まとめ

    お疲れ様でした!

    右シフトの範囲指定版「rightShiftRange関数」が出来たので、挿入ソートに話を持っていけます。

    ただ、もう一つ。入替でシフトを実現する方式も学習しておきたいです。【擬似言語アルゴ④】入替えの連続Note(作成中*)

    挿入ソートでは、2方式のシフトで学習していきます。
    >【擬似言語⑫追ノ弐】挿入ソート | シフト版のNote(準備中*)
    >【擬似言語⑫追ノ弐】挿入ソート | 入替版のNote(準備中*)

    かなりマッシブな学習構成になってしまいました。

    「いきなり挿入シートから学びたい!」って方は、各テキスト/Webサイト様をご覧ください。分からなくなったら、また戻ってきてくれたら嬉しいです。

    私のNoteでは、前もって”機能を関数化”して挿入ソートを関数呼び出しで見通し良くする、を狙って作ってみてます。

    ご自分に合う方法で学習を進めてくださいね。


    こんな感じで、基礎を生かして実例で擬似言語を作って、さらにプログラム的な考察や工夫を深めていきたくて、理解シリーズを作ってます。>【FEB】擬似言語の教科書Note

    最後に私のお薦めの演習順番。
    ❶学習前の”分からせ”
    >【FEB】サンプル問題2のNote
    ❷テキスト
    >【FEB】擬似言語の教科書Note
    >【FEB】擬似言語の理解演習Note ←いまこの辺
    ↓※必要なら
    うかる! 基本情報技術者 [科目B・セキュリティ編](amazon)
    うかる! 基本情報技術者 [科目B・アルゴリズム編](amazon)
    ❸各年度の公開問題
    >【FEB】令和07年科目BのNote
    >【FEB】令和06年科目BのNote
    >【FEB】令和05年科目BのNote
    ➍解法の総復習(➋や➌と併用可)
    >【FEB】擬似言語の11の解法Note
    ➎模擬試験
    >【FEB】サンプル問題1のNote(擬似言語)
    >【FEB】サンプル問題1のNote(セキュリティ)


    この記事が参加している募集

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