pulpul 日本の試験

基本情報技術者 概念書 · アルゴリズムとプログラミング

プログラミングの基礎

要点と定義

プログラムは、データを変数に保持し、演算や制御構造で処理し、必要に応じて手続や関数に分けて実行します。変数には整数、実数、論理値、文字列などの型があり、型は扱える値や演算を定めます。配列は同じ型の値を添字でまとめて扱うデータ構造です。

添字を使う式は、内側の参照から順に計算します。要素の値が「添字の2倍にもう一方の添字を加えた値」で決まる二次元配列なら、まず内側の要素値を求め、その結果を外側の添字として使います。例えば、要素の値が2i+jなら、a(1,1)=3、a(2,2)=6です。したがってa(a(1,1)×2,a(2,2)+1)はa(6,7)=19です。

制御構造には、条件に応じて処理を選ぶ選択処理と、条件を満たす間に処理を繰り返す反復処理があります。反復では、添字の範囲と終了条件を区別します。6件を順に調べるなら、添字を1から始め、6を超えた時点で終了します。予約処理の例では、希望数の部屋を確保した後も全室を調べて空き数を数える必要がありました。確保数と希望数が等しければ成功、足りなければ失敗です。

手続や関数は処理をまとめ、引数で入力を受け渡します。関数は値を戻すものとして扱われます。局所変数はその処理の範囲で使う変数です。処理を適切に分割すると、役割が明確になり、再利用や変更がしやすくなります。

オブジェクト指向では、クラスがデータと処理のまとまりを定義し、インスタンスが実際の個々の対象を表します。継承(インヘリタンス)は、既存のクラスを基に、より具体的なクラスを定義する仕組みです。例えば商品情報を基底に、CD、DVD、書籍の種類ごとのクラスを設けられます。多相性(ポリモーフィズム)は、同じ要求を受けても、実際のクラスに応じた処理が選ばれる性質です。呼出し側は種類ごとの処理の違いを意識せずに扱えます。

クラスのメソッドは、オブジェクトが行う処理です。コンストラクタはインスタンスの生成時に初期化を行います。メンバ変数はオブジェクトの状態を保持します。メソッドのオーバーライドは継承先で親クラスの処理を置き換えること、オーバーロードは同じ名前で引数の異なるメソッドを定義することです。

適用条件と例

配列の添字計算では、入れ子の参照を外側から一括で評価せず、内側から順に値を確定します。先の例ではa(1,1)×2が6、a(2,2)+1が7になってから、a(6,7)を求めます。添字と要素値を取り違えたり、途中の結果を一度に暗算したりすると誤りやすくなります。

反復処理では、何を数える変数なのかを明らかにします。予約の例で、CNTは調査位置、GET-ROOMは確保した部屋数、PRM-FREEは空き部屋数です。CNTを希望部屋数で止めると、残りの部屋を調べられず、全体の空き数が分かりません。全6室を走査した後、GET-ROOMと希望数を比較して成否を決めます。成功時だけ記録を更新し、失敗時には不足数の判断に必要な空き数を返します。

日付計算のように月をまたぐ処理では、月ごとの日数を考慮します。7日前を求める際、日が7より大きければ同じ月の日から7を引けます。7以下なら前月の日数を加えたうえで7を引き、月も前月へ移します。年を4で割り切れるかは、余りが0かで判定できます。ただし、対象年の範囲やうるう年規則など、与えられた条件を超える一般化はしません。こうした処理は、プログラムの分岐条件と中間値を追って確認します。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む