【擬似言語①】ホテル料金計算 | コード化とエラー検知(基本情報技術者, 科目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は全て無料提供を続けます▼
もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼
もちろんコメントでも結構です(・ω・▼)ノシ