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

【擬似言語①】ホテル料金計算 | コード化とエラー検知(基本情報技術者, 科目B, アルゴリズム)

    このNoteでは「シンプルなif文」を使った、ホテル料金計算の擬似言語をテーマにします。部屋種のコード化(数値化)とエラー検知の考えへ派生する点が特徴です。

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

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


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

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


    番号で管理する「コード化」

    ホテルの料金計算をする簡単な擬似言語を作ります。

    部屋タイプは2種類だけで「シングル」と「スイート」。部屋数と掛け算して料金を計算します。

    〇整数型: calcHotelFee(文字列型: roomType, 整数型: rooms)
      整数型: roomCharge
    
      if (roomType が "シングル" と等しい)
        roomCharge ← 8000
      elseif (roomType が "スイート" と等しい)
        roomCharge ← 50000
      endif
    
      return roomCharge × rooms

    動きますが、if文で「シングル」「スイート」って格好悪いかな。「シンルグ」などの誤字、文字を使うとメモリも少し多く必要ですし。

    特に「シングル」が変更された時も面倒かも。「シングル(禁煙)」「シングル(喫煙)」のように。

    実際のシステムでは、1番がシングル、2番がスイートなど、番号にする「コード化」が一般的です。

    /roomCode: 1=シングル, 2=スイート*/
    〇整数型: calcHotelFee(整数型: roomCode, 整数型: rooms)
      整数型: roomCharge
    
      if (roomCode = 1)
        roomCharge ← 8000
      elseif (roomCode = 2)
        roomCharge ← 50000
      endif
    
      return roomCharge × rooms

    ※Noteで「/*コメント*/」の文字発色が暗いため、敢えて「/コメント*/」としています。

    コード化したらコメントに、何番が何を意味するかを書き残しましょう。後で見て分からなくなります。calcHotelFeeを呼び出す側も”何番を入れれば良いんだ?”と使い方が分からないです。



    if文には「必ずelse」を設ける

    calcHotelFeeに「シングル」って誤字や、「3」など対応してない番号を入れられた時、誤作動/停止してしまいます。

    想定外のデータが入力された時に、エラーを検知する仕組みが必要です。

    /roomCode: 1=シングル, 2=スイート*/
    〇整数型: calcHotelFee(整数型: roomCode, 整数型: rooms)
      整数型: roomCharge
    
      if (roomCode = 1)
        roomCharge ← 8000
      elseif (roomCode = 2)
        roomCharge ← 50000
      else
        「部屋種にエラー出ました」と表示する
        return -1
      endif
    
      return roomCharge × rooms

    「return -1」の時点で関数は終了します。その後の「endif」とか「return roomChange × rooms」もしません。上記の擬似言語には「return」が2つあるので、出口が2通りある状態です。

    個人的には「if文を作ったら、elseを必ず設けてエラーを拾う」のが、お薦めです。想定外の値への対応だけなく、条件の見落としの発見にも繋がります。



    「エラー時」の動作と返り値

    エラー時に「return -1」とした理由を解説します。

    「プログラムを止める」って処理にしてしまうと、システム全体も強制終了します。1人の入力ミスで全体が止まってしまいます。

    calcHotelFee関数は計算が役割です。「計算ができたなら答えを返事」「計算できなかったら、できなかったと報告」すれば良いです。

    プログラム全体を止めるのか、再入力を試みるかは、calcHotelFee()を呼び出した側が考えるべきです。

    例えば社員旅行の準備の時、予約担当者は「確保できたか/できなかった」を返事すれば良く、「社員を別々のホテルに宿泊させる」か「全員が泊まれるホテルを探す」かは、責任者が判断すべきですね。


    エラー時の返り値を「-1」にしたのは、料金は0円以上になるからです。負の値は「あり得ない値」。呼び出した側も「あり得ない値が返事されたから、何か異常なんだな」と分かり易いです。

    エラーを検出して知らせること、システム全体を安全に動かし続けたまま次に繋げるのが大事です。



    まとめ

    お疲れ様でした!

    こんな感じで、基礎を生かして実例で擬似言語を作って、さらにプログラム的な考察や工夫を深めていきたくて、理解シリーズを作ってます。>【FEB】擬似言語の教科書Note

    次は、じゃんけんで複雑なif文を作ります(多層化, 論理演算)。今回同様のコード化もして、さらに数式化までしちゃいます。>【擬似言語②】じゃんけん | 論理演算と数式化の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受験予定。