見出し画像

【擬似言語アルゴ③】一部をシフト(基本情報技術者, 科目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 学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ

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