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

【擬似言語⑥課題3つ】線形探索法 | 複数見つかる場合(基本情報技術者, 科目B, アルゴリズム)

    >【擬似言語⑥】線形探索法 | 番兵法のNote にて「data配列にtarget値が複数ある場合に対応した擬似言語」の課題のやっていきます。

    3つの課題で擬似言語を改良して、さらに不具合や表示出力について考察します。方針→開発→テストデータで検証、って流れを身に着けていきますよ。


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

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

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


    課題1 | 2個目の要素番号が返される

    課題1は、>擬似言語❶にて、data={1, 2, 1}でtarget(1)の時「3」が出力されるのを確認。

      for (i を 1 から dataの要素数 まで 1 ずつ増やす)
        / もし探しているデータ(target)が見つかったら */
        if (data[i] = target)
          result ← i  / 見つかった位置を記録 */
        endif
      endfor
    
      result を表示する

    for文でdataを[1]から最後まで見るアルゴリズム。「1」はdata[1]で見つかり、result=1になりますが、for文をbreakする命令はないのでforループは続きます。「1」がdata[3]でも見つかり、result=3に上書き。ループ終了して、「3」が表示されます。




    課題2 | 1個目の要素番号が返される

    課題2は、>擬似言語❷にて、data={1, 2, 1}でtarget(1)の時「1」が出力されるのを確認。

      / 配列の「最後の次」に、targetを仕込む(番兵) */
      dataの末尾に target を追加する
    
      / 配列内にtargetを見つけるまで探索 */
      i ← 1
      while (data[i] ≠ target)
        i ← i + 1  / 見つからない間は、次へ進むだけ! */
      endwhile
    
      / ループが止まった場所が「データの中」か「番兵の場所」か判定 */
      if (i ≤ n)
        i を表示する      / 番兵にたどり着く前に見つかった(成功!) */
      else
        -1 を表示する    / 番兵の場所まで来ちゃった=元々は無かった(失敗!) */
      endif

    番兵法により、data={1, 2, 1, 1}となります。while文は「1」が見つかるまで継続。data[1]で「1」が見つかるので、ループ内すら実行せず終了。while文前でi=1が実行、while文内(i←i+1)は実行されず、つまりi=1。「1」が表示されます。




    課題3 | 該当する全ての要素番号を返す

    課題3は、data={1, 2, 1}でtarget(1)の時、data[1]と[3]で見つかるので、「1, 3」が表示されるよう改良。

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