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

【擬似言語⑦】九九表 | 二次元配列と配列宣言6パターン(基本情報技術者, 科目B, アルゴリズム)

    このNoteでは、for文を二重にして九九を算出します。九九表にしたいので二次元配列を導入します。一見難しいけど、わりとすぐ読めますよ。

    あまりにチョロイので、最後に”配列の宣言”を科目B試験問題から、片っ端集めました(ニチャァ)。

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

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


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

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


    for文を二重にしてみる

    九九って、
    1の段。1×1, 1×2,…,1×9
    2の段。2×1, 2×2,…,2×9
    3~8の段。
    9の段。2×1, 2×2,…,2×9
    って感じ。

    前の数字を1~9、後ろの数字を1~9にしてるので、ループ処理を二重にします。前を「i」, 後ろを「j」のループカウンタにして。

    ○calcMultiTable()
      整数型: i, j
    
      / 外側のループで1から9まで回す */
      for (i を 1 から 9 まで 1 つずつ増やす)
          / 内側のループで1から9まで回す */
          for (j を 1 から 9 まで 1 つずつ増やす) 
              「i × j の計算結果」を表示
          endfor
      endfor

    i=1の時に、j=1, 2,…,9と進み。1の段。1×1, 1×2,…,1×9
    i=2の時に、j=1, 2,…,9と進み。2の段。2×1, 2×2,…,2×9
    想定通りの動きになりましたね。




    二次元配列に格納してみる

    九九「表」ってことで、計算結果を二次元配列に保管してみます。

    table[i, j]={
    1, 2,…,9
    2, 4,…,18
    …
    9, 18,…, 81
    }
    って感じ。

    ○整数型の2次元配列:calcMultiTable()
      整数型の2次元配列: table ← {9行9列 の 0}
      整数型: i, j
    
      for (i を 1 から 9 まで 1 つずつ増やす)
        for (j を 1 から 9 まで 1 つずつ増やす)
          / i行j列の要素に、i × j の計算結果を代入する */
          table[i, j] ← i × j          
        endfor
      endfor
      return table

    説明不要とは思いますが。
    target[1, 1] ← 1×1
    target[1, 2] ← 1×2
    …略
    target[1, 9] ← 1×9
    target[2, 1] ← 2×1
    target[2, 2] ← 2×2
    …めっちゃ略
    target[9, 1] ← 9×1
    target[9, 2] ← 9×2
    …略
    target[9, 9] ← 9×9




    配列の初期化バリエーション

    以下が理解できれば、スキップOK。

    ❶実数型の配列: p ← {0, 0.25, 0.5, 0.75, 1}

    ❷整数型の配列: hashArray ← {5個の -1}
    ➡整数型の配列: hashArray ← {-1, -1, -1, -1, -1}

    ➌整数型の配列: bins ← {2個の 未定義の値}
    ➡整数型の配列: bins ← {未定義の値, 未定義の値}

    ➍実数型の配列: rankData ← {} / 要素数0の配列 */
    rankDataの末尾に3を追加すると、
    ➡rankData={3}
    rankDataの末尾に5を追加すると、
    ➡rankData={3, 5}

    ❺adjMatrix ← {2行3列の 0}
    ➡{{0, 0, 0}, {0, 0, 0}}
    ➡見やすく書くと
    {
    {0, 0, 0},
    {0, 0, 0}
    }

    ❻整数型配列の配列: sparseMatrix ← {{}, {}, {}}
    sparseMatrix[2]の末尾に3を追加
    ➡{{}, {3}, {}}


    ※以上が分かってるあら、以下はスキップして「まとめ」に行って大丈夫です。お待ちしてます。


    ❶一次元配列(具体的な値, 決まった個数)

    一番分かり易い基本的にな使い方。

    具体的な値を、必要な個数だけ代入してます。

    実数型の配列: p ← {0, 0.25, 0.5, 0.75, 1}
    >サンプル1問14のNote
    >サンプル1問16のNote
    >サンプル2問02のNote
    >令和05年問03のNote

    文字/文字列も代入できます。
    文字列型の配列: allItems ← {"A", "B", "D"}
    >令和06年問05のNote


    ❷一次元配列(文章で一括表現)

    「5個の-1」など、まとめた表現する場合。

    代入/初期値を個数で指定する表現。書き下すのが面倒だったのかな?

    整数型の配列: hashArray ← {5個の -1}
    つまり
    整数型の配列: hashArray ← {-1, -1, -1, -1, -1}
    と同じ。
    >令和05年問04のNote
    >令和06年問05のNote


    ➌一次元配列(未定義の値)

    具体的なデータを入れない時は「未定義の値」。

    整数型の配列: bins ← {n個の 未定義の値}
    >サンプル1問11のNote

    例えば
    整数型の配列: bins ← {2個の 未定義の値}
    は
    整数型の配列: bins ← {未定義の値, 未定義の値}
    と同じ意味。


    ➍一次元配列(要素数0個と追加)

    要素数0の配列で宣言して、後で要素を「追加」していく形態

    配列の個数を指定しない場合。「配列の末尾にデータを追加」する表現で、データの代入をします。※プログラム的にはちょっと特殊です。

    実数型の配列: rankData ← {} / 要素数0の配列 */
    rankDataの末尾に~を追加する
    >サンプル1問14のNote

    例えば、
    rankDataの末尾に1を追加すると、
    rankData = {1}
    さらに、rankDataの末尾に3を追加すると、
    rankData = {1, 3}
    となります。

    >サンプル1問14のNote
    >令和05年問01のNote
    >令和07年問04のNote
    >サンプル1問03のNote


    ❺二次元配列(二次元展開しよう)

    二次元配列。{{}}の書き方が難しいかもですが、基礎は一次元配列と同じです。二次元に展開すれば分かり易くなります。

    整数型の二次元配列: adjMatrix ← {nodeNum行nodeNum列の 0}
    >令和06年問03のNote

    例えば、
    adjMatrix ← {2行3列の 0}なら、
    {{0, 0, 0}, {0, 0, 0}}。
    見た目難しいので行列っぽく表現すると、
    {
    {0, 0, 0},
    {0, 0, 0}
    }。
    2行3列って分かりますね。

    代入は、行番号と列番号を指定します
    実数型の二次元配列: result ← {row行col列の 未定義の値}
    result[r, c] ← ~
    >令和07年問05のNote


    ❻二次元配列(要素数0個の使い方)

    整数型配列の配列: sparseMatrix ← {{}, {}, {}} / 要素数0の配列を三つ要素にもつ配列 */
    >サンプル2問04のNote

    sparseMatrix[1]の末尾に1を追加すると、
    {{1}, {}, {}}
    sparseMatrix[3]の末尾に5を追加すると、
    {{1}, {}, {5}}
    って感じ。


    今回のNoteではカットした宣言/使い方もあります。基礎があれば、過去問演習の時に学べばOK。機会があれば特集Noteも作りますね(未定*)。


    まとめ

    お疲れ様でした!

    ループは二重は勿論三重ぐらいはトレースできるようになりましょ。ループ内にif文が入るのもよく出ます。あまりループ階層が増えたり処理が複雑になるなら、関数にまとめるなどしますね。>【擬似言語⑧】偶数と素数のNote

    最後に特集した配列の宣言。「書けるようになる」のは不要で、「読めるようになる」まででOK。

    「こんな感じかな」と分かる程度で、正解できます。また実際のプログラムでは、できない/別の方法/特殊な処理をすることになるので、今躍起になって覚えてもちょっと手戻り感があります。

    「FE合格できるぐらい正解できれば良い」で、一旦線引きして大丈夫です。実は今回、書いた半分ぐらいお蔵入りさせました。「あれはどうなんだろう」「気持ち悪い」って点は、Lv3以降に書くかも(*未定)。

    次回は、今までのプチュ集大成。偶数、素数の算出に挑戦します。ループカウンタiとjを地味に「ずらして」使う練習かな。>【擬似言語⑧】偶数と素数 | 小さい関数から組むの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受験予定。