プログラムの制御構造と条件判定
要点と定義
制御構造は、処理の流れを組み立てる基本です。選択処理は条件に応じて実行する処理を分け、繰返し処理は条件を満たす間または指定回数だけ処理を続けます。分岐条件が何を表すか、繰返しをいつ終えるかを明確にすると、処理漏れや意図しない反復を防げます。
昇順に整列された二つのデータ列を照合するときは、現在のキーを比べ、小さい側の位置だけを進めます。一致したら対応するデータを処理して両側を進めます。片方が終端でももう一方にデータが残ることがあるため、両方が終端になったときに照合を終えます。この設問では、両ファイルを最後まで走査する終了条件、入金の有無や金額に応じた分岐、結果が設定されたレコードの出力を判断するために、選択処理と繰返し処理の理解が必要です。
条件式では、どれか一つでも当てはまれば処理する条件を論理和、複数を同時に満たす必要がある条件を論理積で表します。会議室の収容率を利用人数÷定員で求める場合、定員超過、予約不可、スクリーンを希望しているのに設備がない、のどれかに該当すれば収容率をゼロにします。スクリーン不足は「希望あり」と「設備なし」の両方がそろう条件です。これらを区別して式にする知識が、収容率をゼロにする条件を選ぶ判断に必要です。
収容率がすべてゼロ以上なら、最大値がゼロのときに限り、正の収容率を持つ会議室がありません。最小値がゼロでも、ほかに正の収容率を持つ会議室がある可能性があります。候補がある場合は最大の収容率を探し、その値に対応する会議室番号を返します。最大値と一致する位置だけを求める処理と、その位置に対応する番号を返す処理は別です。同率の場合に表の上側を選ぶ仕様なら、上から最初に一致する番号を返します。
日付の経過日数は、各日付を連続した通算日数に変換して差を取ると、月や年をまたいでも求められます。注文日の翌日を一日目と数える場合、差が七なら七日目、差が八なら七日を過ぎた状態です。したがって「七日を過ぎた」は差が七より大きい条件です。この判定を、入金が確認できず出荷待ちになる注文の処理に置くことも、対象を正しく選ぶために必要です。
継承は、サブクラスがスーパークラスの属性や機能を引き継いで利用する仕組みです。引き継いだメソッドをサブクラスで定義し直す操作はオーバーライドで、継承そのものとは異なります。クラスの機能をサブクラスで利用できる仕組みを問われたときは、機能の再定義ではなく継承と判断します。
適用条件と例
二つの列を先頭から照合する方法は、両方の列が同じキー順で整列していることが前提です。たとえば注文番号が40、70の列と、50、70の列を比べると、40の側を先に進め、次に50の側を進めます。70で一致したら対応するデータを処理し、両側を進めます。片方が終端になった後も反対側に未処理データがあれば、そのデータを処理してから終了します。整列されていない列では、この走査方法だけでは対応関係を正しく見つけられないことがあります。
番号が一致しない注文は、対応する入金レコードがまだない状態なので、入金額との比較はできません。問題の設定では、カード払いまたは着払いなら出荷対象となり、銀行振込またはコンビニ払いで入金がなければ出荷待ちになります。番号が一致した注文は請求額と入金額を比べ、一致なら出荷対象、不一致なら金額エラーです。結果レコードは、出荷対象またはエラーの結果を設定した後に出力します。未設定のレコードを出したり、出力前に設定値を消したりしないよう、分岐と出力の順序を確認します。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む