【擬似言語②裏】ジャンケン | 結果のテーブル(基本情報技術者, 科目B, アルゴリズム)
>【擬似言語②】ジャンケンのNote では、ジャンケンの組合せ9パターンを、if文で組んで。面倒だから数式化するまで学びました。
このNoteでは、ジャンケンの勝敗を配列に格納するのを学びます。計算が複雑/面倒な時、結果を表にしておいて見つければ良いんです。
日常生活でも使ってますよ。荷物の送料(サイズ, 届ける地域)、ネットカフェの料金表(ブース種類, 利用時間)など。
テキストの基礎を生かして、プログラム的な考察/工夫を学んでいきます。基礎と実用にギャップを感じる方のために作りました。
>【FEB】擬似言語の教科書Note
ぜひ一緒に学習を進めていきましょう!
このNoteは、私がIT専門学校で授業したことを基に作成しています。IT専門学校でFEは第一目標として、カリキュラムが構築されています。何も知らずに入学しても、1年生10月にはFE合格していきますよ。実績ある教育ノウハウを詰め込んだので、少しでも信頼して頂けたら嬉しいです。
>全Noteへのリンク(FE節)
※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!
ジャンケンの勝敗テーブル
>前回のNote では、ジャンケンの勝敗3×3=9通りのif文が面倒なので、数式化しました。運よく数式にできましたが、作るの大変でしたね(生成AIがあってもデバッグは必ずせんと💦)。
/ oppHand:相手の手 myHand:自分の手
/ グー:1, チョキ:2, パー:3 */
/ resultCode: -1:自分の負け 0:あいこ 1:勝ち
resultCode ← (oppHand - myHand + 4) mod 3 - 1今回は、勝敗コードを「予め登録」しておく手法を学びます。
簡単ですよ。勝敗コードを「二次元配列」に書いといて、自分の手を「行番号」・相手の手を「列番号」にして、勝敗コードを読み込みます。
整数型の二次元配列: matrix[3][3] ← {
{ 0, 1, -1}, / 自分がグー(1)の時 [相手グー, チョキ, パー] */
{-1, 0, 1}, / 自分がチョキ(2)の時 */
{ 1, -1, 0} / 自分がパー(3)の時 */
} resultCode ← matrix[myHand][oppHand]例えば、自分がグー(1)・相手もグー(1)ならmatrix[1][1]=0「あいこ」が読み出されます。自分がチョキ(2)・相手がパー(3)ならmatrix[2][3]=1「自分が勝ち」が読み出されます
引数検査も勝敗結果表示も同じ。勝敗数式を、配列からの読み出しに変更するだけです。
○整数型: judgeRPS(整数型: myHand, 整数型: oppHand)
/ グー:1, チョキ:2, パー:3 */
/ 行(自分)・列(相手)に対応する勝敗表 [1〜3][1〜3] を定義 */
/ -1: 負け, 0: あいこ, 1: 勝ち */
整数型の二次元配列: matrix[3][3] ← {
{ 0, 1, -1}, / 自分がグー(1)の時 [相手グー, チョキ, パー] */
{-1, 0, 1}, / 自分がチョキ(2)の時 */
{ 1, -1, 0} / 自分がパー(3)の時 */
}
整数型: resultCode
/ 引数検査、OKならresultCode取得 */
if (myHand < 1 または myHand > 3)
resultCode ← 99
elseif (oppHand < 1 または oppHand > 3)
resultCode ← 99
else
/ 配列から勝敗コードを取得 */
resultCode ← matrix[myHand][oppHand]
endif
/ 勝敗結果の表示 */
if (resultCode = -1)
「負け」と表示する
elseif (resultCode = 0)
「あいこ」と表示する
elseif (resultCode = 1)
「勝ち」と表示する
elseif (resultCode = 99)
「ジャンケンの手にエラー出ました」と表示する
else
「勝敗判定にエラー出ました」と表示する
endif
return resultCode結果のテーブルが使える別例
他に、結果のテーブルが使えそうな例を挙げておきました。良かったら、処理全体の擬似言語を考えて見て下さいね。
会員ランクによる還元率の切り替え。
/ 会員ランク: [1]レギュラー: 1%, [2]シルバー: 3%,
[3]ゴールド: 5% */
整数型の配列: returnRateTable ← {1, 3, 5}還元率が変わっても、配列内の数値を変えるだけで対応できます。会員種別が増えたら追加するだけ。
/ 会員ランク: [1]レギュラー: 1%, [2]シルバー: 3%,
[3]ゴールド: 5% [4]ダイアモンド: 10% */
整数型の配列: returnRateTable ← {2, 4, 7, 10}ゲームの属性によるダメージ補正。
一回完璧にチェックしてれば、ずっと使えます。
/ 行(自分)・列(相手)に対応する倍率表 [1〜3][1〜3] */
/ 0.5: 0.5倍, 1.0: 1倍, 2.0: 2倍 */
実数型の二次元配列: damageMatrix[3][3] ← {
{1.0, 0.5, 2.0}, / 自分が火(1)の時 [相手火, 水, 草] */
{2.0, 1.0, 0.5}, / 自分が水(2)の時 */
{0.5, 2.0, 1.0} / 自分が草(3)の時 */
}ポケモンの属性って18種類でしたっけ?
18種類を数式化するのは、作るのもデバッグも大変。追加や変更があるとその度ですからね。しかも2属性持つポケモンもいるんでしたかね💦
月毎の日数。
31や30が不規則気味だして、2月の28日が曲者ですね。
/ 1月〜12月の日数を登録(平年) */
整数型の配列: daysInMonth ← {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}「2月が28日で良いか」と思った方。鋭いですね! そういうの気づく人が私は好きです👍
次回。「閏年(うるうどし)」のテーマにします。>【擬似言語②裏2】閏年と通日のNote(企画中*)
まとめ
お疲れ様でした!
ジャンケンだけでも3~4種類の手法がありましたね。
if文で全パターン
if文で全パターン(論理演算)
数式化して一行!
配列化して一行! ←今回
こんな感じで、基礎を生かして実例で擬似言語を作って、さらにプログラム的な考察や工夫を深めていきたくて、理解シリーズを作ってます。>【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が有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼
もちろんコメントでも結構です(・ω・▼)ノシ