見出し画像

【擬似言語アルゴ②課題C】複数個分のシフト(基本情報技術者, 科目B, アルゴリズム)

このNoteでは、「複数個分だけ右シフトする関数」を作ります。まずは予め作った「1個分だけ右シフトする関数」を活用してみます。>【アルゴ②】シフトの基礎Note

その上で、無駄な処理を発見し改善していくのが、新しい学びです。


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

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

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



1個右シフトの関数呼出しを繰り返す

任意の個数(k個)シフトする関数を作ってみます。

まず右シフトの2個ずらし。

>【アルゴ②】シフトの基礎Note で作った、右シフトの関数を2回呼べば良いですね。

○整数型の配列: rightShift(整数型の配列: array)

「array ← rightShift(array)」で、arrayを関数に入れて、1個右シフトされた配列をarrayで受け直します。

○整数型の配列: multiRightShift(整数型の配列: array, 整数型: k)
  整数型: i
  
  / k回、1マス右シフトの関数を繰り返す */
  for ( i を 1 から k まで 1 ずつ増やす)
    array ← rightShift(array)
  endfor
  
  return array

k回繰り返せば、k個右シフトされます。

2つ右シフトさせたいなら、「multiRightShift(array, 2)」と呼び出しせば良し。




関数展開を展開してみる

下のrightShift関数の中身をぶちまけてみます。

  / k回、1マス右シフトの関数を繰り返す */
  for (count を 1 から k まで 1 ずつ増やす)
    array ← rightShift(array)
  endfor

>【アルゴ②】シフトの基礎Note からrightShift関数の中身を展開。下コードの「ここから関数」から「ここまで関数」にコピペ。

○整数型の配列: multiRightShift(整数型の配列: array, 整数型: k)
  整数型: i
  
  / k回、1マス右シフトの関数を繰り返す */
  for (i を 1 から k まで 1 ずつ増やす)

    / ------------------ */
    / --- ここから関数 ----*/
    length ← arrayの要素数
  
    / 1. 後ろの要素から順番に、1つ右(i+1)の場所へコピーする */
    for (i を length-1 から 1 まで 1 ずつ減らす)
      array[i + 1] ← array[i]
    endfor
  
    / 2. 空いた先頭のマスに新しい値を入れる */
    array[1] ← 0
    / --- ここまで関数 ---*/
    / ------------------ */

  endfor
  
  return array

「length ← arrayの要素数」の「length」の変数宣言がないので、宣言するか。使う場所がfor文内だけなので、for文に組み込むか。

後者を採用。for文に組み込みました。「 for (i を arrayの要素数-1 から」。

○整数型の配列: multiRightShift(整数型の配列: array, 整数型: k)
  整数型: i
  
  / k回、1マス右シフトの関数を繰り返す */
  for (i を 1 から k まで 1 ずつ増やす)
  
    / 1. 後ろの要素から順番に、1つ右(i+1)の場所へコピーする */
    for (i を arrayの要素数-1 から 1 まで 1 ずつ減らす) /【変更】 */
      array[i + 1] ← array[i]
    endfor
  
    / 2. 空いた先頭のマスに新しい値を入れる */
    array[1] ← 0

  endfor
  
  return array

正しく動き「は」します。でもちょっと効率悪し。次節で動作を見ます。




動作に無駄な処理がある

前節の”1個右シフトする関数を複数回呼出す”では、無駄な処理があります。

”複数個右シフトする”手順を、ゼロベースで考え直し、比較してみます。

ここから先は

1,656字 / 2画像

メンバーシップ ¥ 500 /月

■初月無料なので、お試しください。 ■私独自の理解法や詳しい分析を公開したいです。 ■根本を丁寧に見…

【初月無料】Iパス法律/SG/AP計算/DBとSC午後2

¥500 / 月
1ヶ月無料 人数制限あり

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ