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

【擬似言語アルゴ①】データの入替(基本情報技術者, 科目B, アルゴリズム)

    このNoteでは、変数/配列における「入替」を学びます。「入替」は「バブルソート」などで使います。

    「バブルソート」は、”擬似言語のラスボス”なので、入替/シフトの学習と一緒にすると難しくて挫折したかも。
    >【擬似言語⑫】バブルソートのNote
    >【擬似言語⑫追1】選択ソートのNote(作成中*)

    >【擬似言語⑫追2】挿入ソートのNote(作成中*)

    このNoteで入替/シフトを関数化して、見た目/理解をスッキリさせたいと思って作ってみました。少しでも、擬似言語の”学習の壁”突破に役立ったら嬉しいです。


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

    このNoteは、私がIT専門学校で授業したことを基に作成しています。IT専門学校でFEは第一目標として、カリキュラムが構築されています。何も知らずに入学しても、1年生10月にはFE合格していきますよ。実績ある教育ノウハウを詰め込んだので、少しでも信頼して頂けたら嬉しいです。
    >全Noteへのリンク(FE節)
    ※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!


    入替(変数版)

    「a←b」をやれば、a内のデータが上書きされ消え。「b←a」ではb内データが消えちゃいます。一旦「swap」に保管して対処します。

    整数型: a, b, swap
      
    / 例として初期値を設定 */
    a ← 10
    b ← 20
      
    / 入替え処理 */
    swap ← a      / 1. aの値を退避 (swapは10になる) */
    a ← b         / 2. bの値をaに上書き (aは20になる) */
    b ← swap      / 3. 退避していた値をbに入れる (bは10になる) */

    部屋の入替えで、A部屋の中身を一旦廊下に出して、B部屋からA部屋へ移し、廊下からA部屋に入れる感じ。

    画像

    ついでに配列の場合も描いておきました(上図の下)




    トリッキーな入替

    トリッキーなやり方をご紹介(AIが提案)。

    a ← a + b    / a と b の合計値を a に入れる */
    b ← a - b    / 合計から b を引くことで、b の中身が「元のa」になる */
    a ← a - b    / 合計から「新しいb(元のa)」を引くことで、a の中身が「元のb」になる */

    なるほどですね。

    例えば、a=1, b=2の時。
    a ← a + bで、a=3に。
    b ← a - bで、b= 3-2 = 1に。
    a ← a - bで、a= 3-1 = 2に。
    a=2, b=1になり、入替えできました。


    「整数」なら良いかと。「文字」「文字列」では、できませんし。「実数」だと、加減算の誤差が発生する可能性も高い。

    科目Aで「桁落ち」「情報落ち」って出てきましたよね。>【FEA】修了試験令和05年度06月問01の解説Note




    入替(配列版)

    データが配列に入ってる時も、変数版と同じく「swap」変数に退避して入替えます。

    画像
    ○整数型の配列: swapElement(整数型の配列: array, 整数型: idx1, 整数型: idx2)
      整数型: swap
      
      / 1. idx1 の位置にある値を一時的に退避させる */
      swap ← array[idx1]
      
      / 2. idx2 の位置にある値を idx1 の位置に上書きする */
      array[idx1] ← array[idx2]
      
      / 3. 退避させておいた値を idx2 の位置に入れる */
      array[idx2] ← swap
    
      return array

    配列データの入替えは「バブルソート」で使ってます。入替を関数化して、擬似言語をすっきりさせてみても良いかも。>【擬似言語⑫】バブルソートのNote




    まとめ

    お疲れ様でした!

    「入替え」は退避を忘れずに、が学びでした。

    課題。
    ①入替を関数化して下さい。引数が配列・返り値も配列、または大域配列で引数なし/返り値なし。
    ②>【擬似言語⑫】バブルソートのNote の擬似言語の入替部分を関数呼出しにして、スッキリさせてみて下さい。
    >答えNote(作成中*)

    次回は、データをズラす演算、「シフト」を学習します。>【擬似言語アルゴ②】シフトの基礎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受験予定。