pulpul 日本の試験

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

プログラムの構成と処理

要点と定義

プログラムは、データを受け取り、定めた手順で処理し、結果を返す命令の集まりです。処理を小さな手続や関数に分けると、各部分の役割と入出力が明確になり、再利用や変更時の確認がしやすくなります。呼出し側から渡す値や領域の位置は引数として扱い、呼出し先は契約に沿って処理します。処理後に元の状態が必要なレジスタは退避し、終了時に復元します。

数値表現と演算幅も処理の正しさを左右します。たとえば16ビット語を4語使う64ビット整数は、上位語から下位語へ桁を分けて保持できます。加算を下位語から始めると、各語の桁あふれを次の語へ繰り越す必要があります。アセンブリ言語では、加算命令が設定するオーバーフローフラグを条件分岐で調べ、桁あふれが起きたときだけ繰越し値を立てます。符号なし加算では、語の範囲を超えた分が次の桁に加わります。

表計算の式も、セル値を入力として条件判定や検索を組み立てるプログラムとして読めます。条件分岐で対象外を処理し、検索関数で表から値を取り出し、セル参照の相対・絶対を意図に合わせます。式を横や縦に複写する場合、固定する行・列と移動させる範囲を区別することが重要です。

適用条件と例

64ビット加算を16ビット語4つで表す例を考えます。各入力を最下位語から順に加算し、その語で桁あふれがあれば、次の語に1を足します。入力領域の末尾から先頭へ処理する設計なら、処理済み位置と開始位置を比較して終了を判定します。ループ継続条件と終了条件は、比較命令が設定したフラグを直後の分岐が参照する形で対応させます。途中に別の演算を挟むとフラグが変わり、意図した比較結果で分岐できないことがあります。

32ビット乗算を加算の繰返しで行う場合、乗数の各ビットを調べ、ビットが1なら被乗数を部分積に加えます。ビット位置に応じて被乗数をずらす必要があり、語の上位・下位を切り替える境界では分岐条件が重要です。たとえばビット位置を0から31まで進め、16を引いた結果が負なら下位語側を読む、そうでなければ上位語側を読む設計にできます。部分積を加算手続に渡すときは、値そのものか領域のアドレスかを明確にし、必要な引数を正しく設定します。

料金計算の式を組み立てる例では、商品数量と単価を掛けて合計重量を出し、重量範囲表の下限値を昇順検索して該当区分を求めます。範囲が1~1,865、1,866~4,740なら、合計2,000は2番目の範囲に入ります。表の上限値を検索するのか下限値を検索するのかを先に決め、検索方法が昇順・降順の前提を満たすことを確かめます。次に、地域と重量区分から料金表の行・列を特定します。該当する地域がない、重量が上限外、数量がゼロといった場合は、料金検索をせず「対象なし」などの値を返す条件を設けます。

この節の続き

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

アプリでこの節を読む