pulpul 日本の試験

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

式と制御で組み立てるプログラム

要点と定義

プログラムは、データを決められた形式で扱い、演算と条件分岐を組み合わせて目的の結果を作ります。処理を読むときは、入力データの表現、各演算が変える値、演算後の条件、分岐先を順に追います。過年度の午後問題に登場するアセンブラや表計算の知識も、データ処理とプログラムの基礎を考える題材として役立ちます。試験形式や利用言語が現在も同じだという意味ではありません。

パック10進数では、10進数の各桁を4ビットのニブルで表し、問題で定めた形式では符号もニブルに格納します。たとえば246を「2・4・6・正符号」の順に置くと、各桁は0010、0100、0110、1100です。符号を保管するときは、符号ニブルだけをマスクで取り出します。下位4ビットを残すAND演算なら、他の桁を消して符号だけを得られます。マスクを誤ると、数字のニブルまで残るか、符号が失われます。

10進の各桁を個別に加算するとき、桁の和が10以上なら10を引いて、その次の桁に1を加えます。たとえば8+7=15なら、その桁には5を置き、繰上りを1とします。比較命令の直後の条件分岐は、その比較が設定した状態を見ます。比較対象が10未満かを調べているなら、10未満のときだけ桁上げ処理を飛ばし、10以上なら補正と繰上りへ進む構成にします。比較結果の正・負・零と、オーバーフローの有無は別の条件です。目的に合わない条件を選ぶと、境界値の10や桁和が10未満の場合まで誤処理します。

異なる符号の数の加算は、絶対値の差を求める処理に置き換えられます。先に二つの絶対値を比較して大きい方を被減数にすると、各桁の減算で負になった場合に10を加えて借りを処理できます。等しい桁なら差は0なので補正をせず、負の差の場合だけ補正します。比較後に値を交換する条件も全体の処理方針と合わせます。

ビット演算は、値の特定のビットの抽出や比較に使えます。XORは対応するビットが異なるときだけ1になるため、正符号と負符号のように一部のビットだけが違う形式の識別に利用できます。識別対象のビットをシフトして条件フラグへ移し、そのフラグを調べれば、値全体に残った他のビットに影響されずに分岐できます。値全体の零・非零や正・負を調べる分岐では、識別したいビット以外が結果に残る場合に誤判定します。

表計算の式も、条件と関数を組み合わせたプログラムです。複数の評価のうち低い方を採用するなら、どちらかが最低評価なら最低評価、そうでなくどちらかが中間評価なら中間評価、残りを最高評価とするように条件を組みます。論理和は「どれか一つでも成立」、論理積は「すべて成立」です。両者を取り違えると、評価の組合せによって結果が逆転します。

適用条件と例

桁ごとの加算では、まず対象のニブルを取り出し、二つの桁と前桁からの繰上りを加えます。和が10未満ならそのまま桁に使い、10以上なら10を引いた値を桁に使って繰上りを次へ渡します。3桁の上位からの繰上りを無視できるかどうかは、問題の前提に従います。一般の数値演算にこの前提をそのまま当てはめてはいけません。

この節の続き

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

アプリでこの節を読む