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

【擬似言語⑪課題】重複排除 | 配列に登録済みか確認(基本情報技術者, 科目B, アルゴリズム)

    このNoteでは、{1, 2, 2, 3}を{1, 2, 3}にするような「重複排除」に挑戦します。ある値が登録済みか否かを判定する感じ。名簿作りや統計分析に使えます。

    事前に >【擬似言語⑪】ずらしループ(リーグ戦, 文字列比較)のNote を学習すると組み易いです。ループカウンタ(i, j)を別々に制御する手口。

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

    ぜひ一緒に学習を進めていきましょう!


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

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


    下準備 | 登録済みか判定する関数

    配列arrayにtargetが含まれているかを判定する関数を作ります。

    • 関数名:isValueInArray

    • 引数:整数型の配列array, 整数型の変数target

    • 返り値:論理型。含まれてたらtrue, なかったらfalse

    配列arrayの要素を1個ずつtargetと比較、をループするアルゴリズム。考えてみて下さいね。論理型にも慣れておきます。


    私の答えは下記。

    ○論理型: isValueInArray(整数型の配列: array, 整数型: target)
      整数型: i
      整数型: length ← arrayの要素数
    
      for (i を 1 から length まで 1 ずつ増やす)
        if (array[i] と target が等しい)
          return true
        endif
      endfor
    
      return false




    処理のイメージ/データ

    重複を排除したデータ列を表示する関数を作ります。

    • データは引数で入力される。

      • 整数型の配列arrayで。

    • 重複排除したデータは配列resultに記録する。
      ※「末尾に追加」を使って良い。

    • resultにtargetが登録済みを確認する。

      • 登録なかったら、resultの末尾に追加。

      • 登録されていたら、何もしない。

      • isValueInArrayで登録判定できる。

    簡単なデータで処理手順と変数/配列の状況をトレースします。

    例えば、array={1, 2, 2, 3}の時、result={1, 2, 3}が表示される。下記が処理と結果の流れ。

    1. isValueInArray関数で、result={}とtarget=1の時、resultに1の登録ないのでresult={1}と登録する。

    2. result={1}とtarget=2の時、登録ないのでresult={1, 2}にする。

    3. result={1, 2}とtarget=2の時、2は登録されてたので何もしない。

    4. result={1, 2}とtarget=3の時、3は登録されてないのでresult={1, 2, 3}にする。




    ヒントと答え | 穴埋め課題

    穴埋め形式にしてみました。【埋めてね】を埋めて見てください。
    自分で組みたい方は、宣言部分まで見て組んでみてくださいね。

    ○手続き名: removeDuplicates(整数型の配列: array)
      整数型: i
      整数型: length ← arrayの要素数
      整数型の配列: result ← {}
      
      for (i を 1 から 【埋めてね】 まで 1 ずつ増やす)
        if (isValueInArray(【埋めてね】) が 【埋めてね】と等しい)
          resultの末尾に 【埋めてね】を追加
        endif
      endfor
    
      resultを表示


    下記が答え。

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