旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2010年度 秋期 午後の概要
温度モニタのシステム制御と表示処理
ハードウェア · 7セグメントLED / 入出力ポート制御 / A/D変換 / BCDコード
温度モニタシステムのハードウェア構成と制御プログラムに関する記述を読み、設問1〜3に答えよ。 〔システムの概要〕 温度の検出範囲は0〜99℃で、対応するA/D変換器の出力値は0〜99の16ビット符号なし2進数である。60秒間隔のタイマ割込みによって割込みプログラムが起動され、A/D変換器を介して温度データを取り込み、2個の7セグメントLEDからなる表示器に10進数2桁(00〜99)で表示する。LEDの各セグメントは出力ポートのビット値が1のとき点灯し、0のとき消灯する。 〔ポートの動作仕様〕 ・ポート1:形状データを書き込むと、LEDの各セグメントの点灯・消灯が行われる。 ・ポート2:値1を書き込むとA/D変換が開始される。読み込んだ値が0ならば変換中を示し、0以外ならば変換が完了して出力値が確定していることを示す。 ・ポート3:A/D変換完了後に読み込むと、A/D変換器の出力値(0〜99)が得られる。 〔設問1〕 下位けたの7セグメントLEDに数字“5”を表示したい。図1の配線(ビット7:上横, ビット6:右上縦, ビット5:右下縦, ビット4:下横, ビット3:左下縦, ビット2:左上縦, ビット1:中央横, ビット0:DP)に従い、出力ポートのビット7〜0に設定すべき形状データ(16進数)として正しいものを群から選べ。 〔設問2〕 タイマ割込み処理の流れ(図3)における空欄 a , b に入れる正しい命令の組合せを群から選べ。 〔設問3〕 手続 DISPLAY の仕様および実行例において、出力ポートに書き込むGRの内容(図5)が16進数表記で FEFC であったとき、BCD値を格納していた図4のGRの内容 c 、および割込みプログラムから DISPLAY に渡されたGRの内容 d (16進数表記)をそれぞれ選べ。
- 設問1 ア
- 66
- 設問1 イ
- B6
- 設問1 ウ
- BE
- 設問1 エ
- DA
- 設問1 オ
- F2
- 設問2 ア
- INPUT 1
- 設問2 イ
- INPUT 2
- 設問2 ウ
- OUTPUT 1
- 設問2 エ
- OUTPUT 2
- 設問2 オ
- OUTPUT 3
- 設問3 c ア
- 0008
- 設問3 c イ
- 0309
- 設問3 c ウ
- 0800
- 設問3 c エ
- 0903
- 設問3 c オ
- 0907
- 設問3 d ア
- 0008
- 設問3 d イ
- 0027
- 設問3 d ウ
- 0050
- 設問3 d エ
- 005D
- 設問3 d オ
- 0061
解答・解説を表示
解答
設問1: イ, 設問2 a: エ, 設問2 b: イ, 設問3 c: ウ, 設問3 d: ウ
解説
まず要点:7セグメントLED(数字を出すための7本の光る棒)の制御では、どの棒が何番目のビットに対応するかを図どおり正しく読み取ることが基本です。入出力の命令(INPUT/OUTPUT)は、ポート番号ごとの役割と正しく組み合わせます。また数値は、ふつうの2進数、2進化10進数(BCD。各けたを4ビットで表す方式)、セグメントの点灯パターン(形状データ)の3つを区別して考えます。
解き方
- 設問1:数字5に必要なセグメント(上・左上・中央・右下・下)を確かめ、図1の配線からビット7・5・4・2・1を1、残りを0として1011 0110を作り、16進数のB6を求めます。
- 設問2:表1と表2から、A/D変換の開始はポート2への書き込み(OUTPUT 2)、変換中かどうかの確認はポート2からの読み込み(INPUT 2)だと特定します。
- 設問3:形状データFEFCを上のFEと下のFCに分け、点灯パターンから表示温度が80℃だと特定し、BCDの0800と、10進数80を16進数にした0050を求めます。
小問ごとの答え
- 小問 設問1:イ
- 図1の回路配線をたどると、ビット7=上横、ビット6=右上縦、ビット5=右下縦、ビット4=下横、ビット3=左下縦、ビット2=左上縦、ビット1=中央横、ビット0=DP(小数点)に接続されています。数字“5”を表示するには、上横(ビット7)、右下縦(ビット5)、下横(ビット4)、左上縦(ビット2)、中央横(ビット1)を点灯(1)させ、右上縦(ビット6)、左下縦(ビット3)、DP(ビット0)を消灯(0)させます。したがって、ビット7〜0の並びは「1011 0110」の2進数となり、これを16進数に変換すると「B6」となります。
- 小問 設問2 a:エ
- 表1より、番号2のI/Oポートに値1を書き込むことでA/D変換が開始されます。直前の処理でレジスタGRに1が設定(GR←1)されているため、GRの値をポート2へ書き込む命令である「OUTPUT 2」が入ります。
- 小問 設問2 b:イ
- 表1より、ポート2から読み込んだ値が0ならば変換中、0以外ならば変換完了を示します。図3の判定ブロックでは「GR = 0」でYes(変換中ループ)に進む仕様となっているため、ポート2の状態をレジスタGRに読み込む命令である「INPUT 2」が入ります。
- 小問 設問3 c:ウ
- 出力ポートに書き込むGRの内容が16進数「FEFC」の場合、上位8ビットは「FE」、下位8ビットは「FC」です。配線仕様より、FE(1111 1110_2)はDP(ビット0)のみ消灯で全セグメント点灯となるため数字「8」を表し、FC(1111 1100_2)は中央横(ビット1)とDP(ビット0)が消灯となるため数字「0」を表します。したがって検出温度は80℃です。図4のBCD形式は、ビット11〜8に上位けたのBCD(8=1000_2)、ビット3〜0に下位けたのBCD(0=0000_2)、ビット15〜12および7〜4に0000_2を格納するため、16進数表記では「0800」となります。
- 小問 設問3 d:ウ
- 手続DISPLAYに渡されるGRの内容は、検出された温度(0〜99℃)をそのまま表す16ビット符号なし2進数です。表示される温度が80℃であるため、10進数80を16進数に変換すると、80 = 5 × 16 + 0 より「0050」となります。
覚えるポイント
- 7セグメントLEDは配線図を見てどのビットがどのセグメントに対応しているか1本ずつ追跡すること
- A/D変換器制御では開始トリガ(出力)と完了ポーリング(入力)の区別が必須
- BCDは10進数の各桁を4ビットの2進数で表現する形式である
間違えやすいところ
- 問題の図1に書かれた配線どおりに読み、一般的なa〜gの配置を勝手に決めつけないこと。
- 状態を読むINPUTと、制御を書き込むOUTPUTを取り違えないこと。
- BCDの0800と、ふつうの2進数の16進表記0050を混同しないこと。
出題の前提:平成22年度秋期基本情報技術者試験午後問題 問1
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.5 ↗(www.ipa.go.jp) / 公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp)
コールセンター対応記録管理データベースの設計と運用
データベース · 関係データベース / 正規化 / SQL / DDL
コールセンターの対応記録管理に関する記述を読み、設問1〜4に答えよ。 〔データベースの設計と運用〕 F社では、コールセンターでの対応内容を記録するデータベースを構築した。図1のデータ項目をもとに正規化を行い、図2の表を設計した。 〔設問1〕 正規化の手順に関する記述中の空欄 a 〜 c に入れる正しい組合せを群から選べ。 ・第1正規化の作業では、 a 。 ・次に、第2正規化の作業では、 b 。 ・そして、第3正規化の作業では、 c 。 〔設問2〕 質問内容に“オプション”というキーワードを含むレコードを抽出するSQL文の空欄に入れる正しい条件式を選べ。 〔設問3〕 種別が“使用法誤解”であった質問を抽出し、類似件数の多い順に類似受付番号と件数を表示するSQL文の空欄に入れる正しい句を選べ。 〔設問4〕 対応表に新たに「製品型番」列(4文字の固定長文字列)を追加し、既存の行の製品型番にはすべて“A001”を設定し、NULLを許容しないように定義を変更するDDL文として正しいものを選べ。
- 設問1 ア
- 受付番号と類似受付番号の組合せを主キーとし,繰返し要素を排除した
- 設問1 イ
- 既に当該正規形に準じていたので,適用は不要だった
- 設問1 ウ
- データ参照時の処理性能を考慮し,質問と回答を一つの表で管理するようにした
- 設問1 エ
- 利用者表,サポート員表及び種別表を作成し,主キー以外の項目における関数従属性を排除した
- 設問1 オ
- 類似表を作成し,主キーの一部における関数従属性を排除した
- 設問2 ア
- 質問 ANY ('%オプション%')
- 設問2 イ
- 質問 ANY ('_オプション_')
- 設問2 ウ
- 質問 IN ('%オプション%')
- 設問2 エ
- 質問 IN ('_オプション_')
- 設問2 オ
- 質問 LIKE '%オプション%'
- 設問2 カ
- 質問 LIKE '_オプション_'
- 設問3 ア
- 対応表.種別ID = (SELECT 種別ID FROM 種別表 WHERE 種別 = '使用法誤解') GROUP BY 類似表.類似受付番号
- 設問3 イ
- 対応表.種別ID = (SELECT 種別ID FROM 種別表 WHERE 種別 = '使用法誤解') AND 対応表.受付番号 = 類似表.受付番号 GROUP BY 類似表.受付番号
- 設問3 ウ
- 対応表.種別ID = 種別表.種別ID AND 対応表.受付番号 = 類似表.受付番号 AND 種別表.種別 = '使用法誤解' GROUP BY 類似表.受付番号
- 設問3 エ
- 対応表.種別ID = 種別表.種別ID AND 対応表.受付番号 = 類似表.受付番号 AND 種別表.種別 = '使用法誤解' GROUP BY 類似表.類似受付番号
- 設問4 ア
- ALTER TABLE 対応表 ADD 製品型番 CHAR(4) DEFAULT 'A001' NOT NULL
- 設問4 イ
- ALTER TABLE 対応表 MODIFY 製品型番 CHAR(4) DEFAULT 'A001' NOT NULL
- 設問4 ウ
- CREATE TABLE 対応表 (製品型番 CHAR(4) DEFAULT 'A001')
- 設問4 エ
- INSERT INTO 対応表 製品型番 VALUES 'A001'
解答・解説を表示
解答
設問1 a: ア, 設問1 b: オ, 設問1 c: エ, 設問2: オ, 設問3: エ, 設問4: ア
解説
まず要点:正規化(データの重複や矛盾を減らす整理)は、第1正規化で繰り返し項目をなくし、第2正規化で主キーの一部だけに依存する項目を分け、第3正規化で主キー以外に依存する項目を分ける、という順で行います。SQLの集計ではGROUP BYにまとめたいキーを指定し、既存の表に列を足すときはALTER TABLE ADDを使います。
解き方
- 設問1:繰り返し項目「類似受付番号」を複合キーにする第1正規化(ア)、主キーの一部に依存する項目を分ける類似表の作成(オ)、主キー以外に依存する利用者表・サポート員表・種別表の分離(エ)の順に特定します。
- 設問2:指定した文字を含む中間一致の検索に使う、ワイルドカード「%」のLIKE述語(オ)を特定します。
- 設問3:3表の結合条件と種別='使用法誤解'の絞り込みを満たし、類似受付番号ごとにまとめるGROUP BYを持つSQL文(エ)を選びます。
- 設問4:既存表に列を足す「ALTER TABLE 表名 ADD 列名 型 DEFAULT 既定値 NOT NULL」の構文(ア)を選びます。
小問ごとの答え
- 小問 設問1 a:ア
- 図1において「類似受付番号」は繰返し項目となっています。第1正規化では、繰返し項目を排除してすべての属性を単一値にします。受付番号と類似受付番号の複合主キーとすることで繰返しを排除するため、選択肢アが適切です。
- 小問 設問1 b:オ
- 第1正規形から第2正規化を行う際は、複合主キー(受付番号、類似受付番号)の一部に従属している属性(部分関数従属)を別の表に切り離します。受付番号のみに従属する他の属性群と、受付番号・類似受付番号のみで構成される「類似表」に分離することで部分関数従属を排除するため、選択肢オが適切です。
- 小問 設問1 c:エ
- 第3正規化では、主キー以外の項目に従属する推移的関数従属を排除します。利用者IDに従属する利用者属性を「利用者表」、サポート員IDに従属する「サポート員表」、種別IDに従属する「種別表」へと切り離すことで主キー以外への関数従属を排除するため、選択肢エが適切です。
- 小問 設問2:オ
- 文字列中の部分一致(任意の位置に“オプション”を含む)を検索する場合、パターンマッチング演算子「LIKE」と任意の0文字以上の文字列を表すワイルドカード「%」を前後に付けた「LIKE '%オプション%'」を使用します。
- 小問 設問3:エ
- SELECT句で「類似表.類似受付番号」と「COUNT(*)」を取得し、類似件数の多い順に並べるため、GROUP BY句には「類似表.類似受付番号」を指定する必要があります(イ・ウは受付番号でグループ化しているため誤り)。また、3つの表(対応表、種別表、類似表)をFROM句に並べているため、WHERE句には結合条件(対応表.種別ID = 種別表.種別ID AND 対応表.受付番号 = 類似表.受付番号)と絞り込み条件(種別表.種別 = '使用法誤解')を記述している選択肢エが正しいです。
- 小問 設問4:ア
- 既存の表に新しい列を追加するには「ALTER TABLE 表名 ADD 列名 データ型 ...」構文を使用します。既存レコードに対してデフォルト値“A001”を設定しNULLを不許可とするため、「DEFAULT 'A001' NOT NULL」を付加した選択肢アが適切です。
覚えるポイント
- 第1正規化=繰返し排除、第2正規化=部分関数従属排除、第3正規化=推移的関数従属排除
- LIKE演算子において「%」は0文字以上の任意の文字列、「_」は任意の1文字を表す
- 表構造の変更(列追加)はDDLの「ALTER TABLE 表名 ADD 列名 定義」を用いる
間違えやすいところ
- 第2正規化と第3正規化の違い(主キーの一部への依存か、主キー以外への依存か)を取り違えやすいので注意すること。
- GROUP BYでまとめる列と、SELECTで集計関数以外に出す列を食い違わせないこと。
- 新しい表を作るCREATE TABLEや行を足すINSERT INTOを、列の追加と混同しないこと。
出題の前提:平成22年度秋期基本情報技術者試験午後問題 問2
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.9 ↗(www.ipa.go.jp) / 公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp)
CRC(巡回冗長検査)による誤り検出
ネットワーク · CRC / 誤り検出 / 排他的論理和 / パケット再送
CRC(巡回冗長検査)によるパケット転送の誤り検出方式に関する問題です。パケット再送を考慮した総パケット数の計算、指定されたビット列とマスクを用いたCRC符号の生成計算、および受信側での誤り有無の検査手順の論理的性質と具体的な誤り判定について答えます。
- ア
- 100
- イ
- 102
- ウ
- 120
- エ
- 125
解答・解説を表示
解答
設問1: エ, 設問2: イ, 設問3 a: ア, 設問3 b: エ, 設問3 c: ア
解説
まず要点:CRC(巡回冗長検査)は、送るデータを多項式とみなし、生成多項式(マスク)で2進数の排他的論理和(XOR。同じなら0、違えば1にする計算)の割り算をして、その余りを誤り検出の符号として付け加える方式です。受信側も同じ生成多項式で余りを計算し、余りが0なら誤りなし、0以外なら誤りありと判断します。
解き方
- 設問1では、受信した総パケット数をNとすると、誤りが20%で、最後に届いた正常な100個が80%にあたることから、Nを逆算します。
- 設問2では、対象のビット列の末尾にnビットの0を付け、いちばん左の1の位置にマスク101を合わせて順にXORをとり、右端2ビットの余りを求めます。
- 設問3では、XORの結合法則と自己反転性(C XOR C=0)を使って検査結果を理論的に導き、受信ビット列を実際に計算して余りが0になるか確かめます。
小問ごとの答え
- 小問 設問1:エ
- 受信パケット総数をNとすると、誤りが検出されたパケットは0.20N個です。最終的に正常受信されたパケットは100個なので、正常なパケットの割合は全体の80%(0.80N)となります。0.80N = 100より、N = 100 / 0.80 = 125個となります。
- 小問 設問2:イ
- ビット列0010 0110の右端に2ビットの0を付加した0010011000に対し、マスク101でXOR除算を繰り返します。最左の1に合わせて順次101とのXORを行うと、最終的に右端2ビット以外のビットがすべて0となり、右端に残る剰余は01となります。
- 小問 設問3 a:ア
- 送信側で付加した符号Cは剰余であり、受信データ(情報ビット列+符号C)に対して同一のマスクでXOR除算を行うと、剰余はC (+) C = 0となり、右端nビットのすべてのビットが0になります。
- 小問 設問3 b:エ
- 式(1)より (D × 2^n) (+) d_1 (+) ... (+) d_m = C であり、式(3)より受信側の結果TはこれにCをXORした値となるため、T = C (+) C と表されます。
- 小問 設問3 c:ア
- 受信ビット列1001001101に対し、マスク101を用いて左端の1から順次XORを計算していくと、右端2ビット以外のビットを0にした段階で右端2ビットが01(00以外)となるため、誤りが含まれると判定できます。
覚えるポイント
- CRCの送信側計算では、データ末尾に符号長nビットの0を付加して生成多項式(マスク)で除算(XOR)し、余りを符号とする。
- XORの同一値同士の演算結果は必ず0(A (+) A = 0)になる。
間違えやすいところ
- 誤り率20%のとき、正常な100個にそのまま20%を足して120個と計算してしまう誤りに注意すること。
- CRCのXORでは、桁借りを考えるふつうの引き算をしてしまわないこと(桁借りのないビットごとのXORを行う)。
出題の前提:平成22年度秋期 基本情報技術者試験 午後問題 問3
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp)
共通鍵暗号方式を利用した認証システム
情報セキュリティ · Kerberos / チケット / 共通鍵暗号 / セッション鍵 / 認証
共通鍵暗号方式を利用したチケット型のシングルサインオン・認証システム(Kerberosモデル)に関する問題です。クライアント、認証サーバ、チケット発行サーバ、APサーバの間で送受信される暗号化データにおいて、盗聴や偽造を防ぎつつ安全にセッション鍵や認証情報を配送するために使用される暗号化鍵を答えます。
- ア
- C-T間のセッション鍵 KEY_CT
- イ
- チケット発行サーバTのID ID_T
- ウ
- チケット発行サーバTの鍵 KEY_T
- エ
- 利用者ID ID_C
解答・解説を表示
解答
a: ウ, b: エ, c: イ, d: イ
解説
まず要点:チケット型の認証では、信頼できる第三者機関(認証サーバやチケット発行サーバ)が、通信する者どうしのセッション鍵(その場限りの共通鍵)を作り、相手の鍵で暗号化したチケットと、自分の鍵で暗号化したセッション鍵を渡します。これにより、クライアントに相手の秘密鍵を知らせずに、相互認証と安全な鍵の共有ができます。
解き方
- 第1段階(通信(1)(2)):認証サーバAがクライアントCへ、Cの鍵KEY_Cで暗号化したセッション鍵KEY_CTと、Tの鍵KEY_Tで暗号化したTICKET_CTを渡すことを確かめます(空欄a=KEY_T)。
- 第2段階(通信(3)(4)):クライアントCとTの間で認証子や次のセッション鍵KEY_CSをやり取りするために、共有するセッション鍵KEY_CTを使います(空欄b=KEY_CT)。APサーバS宛のTICKET_CSはAPサーバSの鍵KEY_Sで暗号化します(空欄c=KEY_S)。
- 第3段階(通信(5)):クライアントCがAPサーバSへ送る認証子AUTH_C2は、共有するセッション鍵KEY_CSで暗号化します(空欄d=KEY_CS)。
小問ごとの答え
- 小問 a:ウ
- TICKET_CTはチケット発行サーバT用のチケットであり、クライアントC経由で安全にTへKEY_CTを渡すため、チケット発行サーバTのみが復号できるTの共有鍵KEY_Tで暗号化されます。
- 小問 b:エ
- 通信(3)において、クライアントCがチケット発行サーバTに対して自身の正当性を証明する認証子AUTH_C1や要求対象ID_Sを暗号化するため、また通信(4)でTがCにKEY_CSを安全に返送するために、CとTの間で共有されたセッション鍵KEY_CTが用いられます。
- 小問 c:イ
- TICKET_CSはAPサーバS用のチケットであり、クライアントCを経由してAPサーバSに安全にKEY_CSを渡すため、APサーバSのみが復号できるSの共有鍵KEY_Sで暗号化されます。
- 小問 d:イ
- 通信(5)において、クライアントCがAPサーバSにアクセスする際、C自身がTICKET_CSの正当な保持者であることを証明する認証子AUTH_C2を暗号化するため、CとSの間で共有されているセッション鍵KEY_CSが用いられます。
覚えるポイント
- チケットは受け取り先となるサーバの鍵で暗号化され、中身のセッション鍵をクライアントから隠蔽しつつ安全に相手へ運ぶ。
- クライアントがサーバへ送る認証子(Authenticator)は、そのサーバと共有した一時セッション鍵で暗号化して正当性を証明する。
間違えやすいところ
- クライアントCがAPサーバSにアクセスするとき、APサーバの長期秘密鍵KEY_Sを知っていると誤解して、認証子の暗号化にKEY_Sを選んでしまう誤りに注意すること(CはKEY_CSしか持ちません)。
- チケット発行サーバT用のチケットTICKET_CTの暗号化鍵に、CとTのセッション鍵KEY_CTを選んでしまう誤りに注意すること(セッション鍵を配送するため、チケットはTの鍵で暗号化します)。
出題の前提:平成22年度秋期 基本情報技術者試験 午後問題 問4
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp) / 公式問題冊子 p.18 ↗(www.ipa.go.jp) / 公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp)
部品の棚卸金額計算(先入先出法と順ファイル突合せ処理)
ソフトウェア設計 · 先入先出法 / 順ファイル / 突合せ処理 / 在庫管理
製造業T社における部品の棚卸金額計算処理に関する問題である。先入先出法に基づき、期首在庫ファイルと期中受入ファイルをマージした受入情報ファイルと、期中払出ファイルから作成した払出情報ファイルを部品番号をキーとして突合せて期末在庫および棚卸金額を計算する処理設計について、各設問に答えよ。
解答・解説を表示
解答
設問1: オ, 設問2: カ, 設問3: カ, 設問4: オ, 設問5: ウ
解説
まず要点:先入先出法(FIFO。古く入った分から先に使う計算方法)では、古い受入分から順に払出に充て、期末に残った受入分の単価と数量から在庫金額を求めます。2つの順ファイルを照合して更新する突合せ処理では、両方を同じ主キーで昇順に並べておくことと、キーの大小を比べて読み込みと終了判定を行う制御が大切です。
解き方
- 先入先出法の要件(受入日の古い順に充てる)と突合せの前提から、受入情報ファイルと払出情報ファイルに必要なキー項目と並び順(部品番号、受入日付)を特定します。
- 払出情報を作る処理で、同じ部品の払出数量をまとめるためのキーが部品番号であることを確かめます。
- 流れ図をたどり、突合せキーKUとKHの大小(受入のみ・一致・受入残あり)に応じた受入情報・払出情報の読み込みのタイミング(P1〜P3)を判断します。
- H−Uの結果と0との比較で、払出が終わって在庫が残る場合(H<0)と、過不足なく終わる場合(H=0)の分岐条件C1、C2を決めます。
小問ごとの答え
- 小問 設問1:オ
- 先入先出法では同一部品について受入日付の古い順から払出しに引き当てるため、突合せを行う受入情報ファイルは第1キー「部品番号」、第2キー「受入日付」の昇順で整列されている必要があります。
- 小問 設問2:カ
- 棚卸金額計算の突合せ処理では、受入情報と部品番号ごとに突合せて合計払出数量を古い受入から順に引き当てるため、払出情報ファイルに必要な最低限の項目は部品番号と払出数量であり、払出日付は不要です。
- 小問 設問3:カ
- 期中払出しファイルから払出情報ファイルを作成する集約処理では、部品ごとに払出数量の合計を集計するため、集計に必要な最低限のキー項目は部品番号となります。
- 小問 設問4:オ
- KU < KHのときは受入のみで払出しのない部品の期末在庫出力を行うためP1で次の受入情報を読み込みます。KU = KHで払出が完了(H <= 0)したときは当該受入レコードも完了するため、P3で受入情報を読み込み、直後に払出情報も読み込みます。
- 小問 設問5:ウ
- H ← H - Uの実行後、H < 0(C1)のときは受入数量が払出数量を上回り余りが発生したため期末在庫書き込みを行い、H = 0(C2)のときは受入と払出が一致して在庫書き込みなしで完了処理に進みます。
覚えるポイント
- 先入先出法の突合せでは部品番号と受入日付の複合ソートが必要であること
- 順ファイルの突合せ処理では未処理レコードが残っている側のファイルを次に読み進めること
間違えやすいところ
- 先入先出法で、払出日付まで突合せや集計のキーに入れてしまう誤りに注意すること。
- 払出数量から受入数量を引いた残数Hの正負による分岐(H<0とH>0)の判定を取り違えないこと。
出題の前提:平成22年度秋期 基本情報技術者試験 午後問題 問5
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.21 ↗(www.ipa.go.jp) / 公式問題冊子 p.22 ↗(www.ipa.go.jp) / 公式問題冊子 p.23 ↗(www.ipa.go.jp) / 公式問題冊子 p.24 ↗(www.ipa.go.jp) / 公式問題冊子 p.25 ↗(www.ipa.go.jp)
ITサービスマネジメントにおける個人情報の保護(委託先管理と安全管理措置)
ITサービスマネジメント · 個人情報保護法 / 安全管理措置 / 委託先監督 / リスク分析
通信販売を行うX社における個人データ取扱いの外部委託検討に関する問題である。個人情報保護法および経済産業分野を対象とするガイドラインに基づく安全管理措置(組織的・人的・物理的・技術的)を踏まえ、委託元としての義務や、委託先Y社における現状調査で発見されたセキュリティ上の問題点とリスクについて、各設問に答えよ。
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: エ, 設問1 c: ア, 設問2 d: ア, 設問2 e: ア, 設問2 f: イ
解説
まず要点:個人データの取扱いを外部に委託するときは、委託先にも自社と同じかそれ以上の安全管理措置(組織的・人的・物理的・技術的な対策)を守らせる必要があります。そのためには、事前に選定基準を決めて安全管理の条項を入れた契約を結び、業務開始後も定期的な監査や取扱状況の監督を続けることが欠かせません。物理的な管理やアクセス制御・ログ管理が欠けるとどんな危険があるかを正しく押さえることも大切です。
解き方
- 個人情報保護法とガイドラインが定める委託元の監督義務(契約の締結と取扱状況の監督)を押さえ、空欄aとbを特定します。
- 安全管理措置の4分類(組織的・人的・物理的・技術的)の定義に照らし、社内システムのアクセス制御などに関わる技術的措置(空欄c)を選びます。
- 示された問題点①〜④の性質を分析し、物理的な管理の不備(鍵の管理=物理的安全管理措置)と、システム上の措置(ログ、アクセス権)を区別して空欄dを導きます。
- 廃棄箱の鍵の置き忘れによる物理的媒体の持ち出しの危険(空欄e)と、操作ログを取っていないために不正や誤操作に気づけない危険(空欄f)を筋道立てて特定します。
小問ごとの答え
- 小問 設問1 a:ウ
- 個人データの取扱いを委託する際には、委託先に対して法やガイドラインに基づく安全管理措置を確実に遵守させるため、安全管理措置に関する条項を盛り込んだ契約を締結する必要があります。
- 小問 設問1 b:エ
- 業務開始後、委託元は個人情報保護法に基づき、委託先における個人データの取扱状況を適切に把握し、必要に応じて是正を求めるなど取扱状況を監督する責任を負います。
- 小問 設問1 c:ア
- 業務②および③は社内の基幹サーバにある個人データを参照・更新する処理であるため、外部委託する場合は外部ネットワークからの安全なアクセス制御など技術的安全管理措置に伴うシステム改修が必要となります。
- 小問 設問2 d:ア
- 問題点①は印刷物廃棄箱の鍵の物理的管理不備であり「物理的安全管理措置」に該当します。一方、②は特権操作ログ未取得、③はアクセス権限の未分離、④はファイルアクセスログ未取得であり、いずれも「技術的安全管理措置」です。
- 小問 設問2 e:ア
- 問題点①では廃棄箱の鍵を誰でも利用できる状態にあるため、破棄予定の個人情報が記載された帳票や印刷物などの物理媒体が不正に持ち出されるリスクが生じます。
- 小問 設問2 f:イ
- 問題点②および④では、特権操作や個別のファイルアクセスに関する操作ログが記録されていないため、事後的な監査が行えず、誤操作や不正操作が発生しても早期発見が困難になるリスクがあります。
覚えるポイント
- 委託元は委託先の従業者を直接指揮監督するのではなく委託先事業者を監督すること
- 安全管理措置は組織的・人的・物理的・技術的の4つの観点に明確に分類されること
間違えやすいところ
- 委託元の監督責任を、委託先の現場従業者への直接の指揮命令と混同してしまう誤りに注意すること。
- 廃棄箱の鍵管理のような物理的な保護措置を、技術的安全管理措置と取り違えないこと。
出題の前提:平成22年度秋期 基本情報技術者試験 午後問題 問6
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.26 ↗(www.ipa.go.jp) / 公式問題冊子 p.27 ↗(www.ipa.go.jp) / 公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp)
子会社の業績評価と財務指標分析
システム戦略 · 財務指標 / ROA / 総資産回転率 / 為替レート換算 / 業績評価
持株会社A社における子会社4社(B社、C社:日本国内、D社:Y国、E社:Z国)の2008年度および2009年度の業績資料に基づき、経営優秀賞および要調査対象子会社の選定、ならびに為替レート変動の影響に関する設問に答えよ。
- ア
- 設問1 a: B社 / 設問1 b: 財務レバレッジ / 設問1 c: 安全性 / 設問2 d: 売上高及び営業利益が上がって / 設問2 e, f: 売上高及びROA / 設問3 g, h: B社
- イ
- 設問1 a: C社 / 設問1 b: 自己資本比率 / 設問1 c: 効率性 / 設問2 d: 売上高は上がっているが、営業利益は下がって / 設問2 e, f: 売上高及び営業利益 / 設問3 g, h: C社
- ウ
- 設問1 a: D社 / 設問1 b: 総資産回転期間 / 設問1 c: 生産性 / 設問2 d: 売上高は下がっているが、営業利益は上がって / 設問2 e, f: 売上高及び営業利益率 / 設問3 g, h: D社
- エ
- 設問1 a: E社 / 設問1 b: 総資産回転率 / 設問1 c: 成長性 / 設問2 e, f: 営業利益及びROA / 設問3 g, h: E社
- オ
- 設問2 e, f: 営業利益及び営業利益率 / 設問3 g, h: 該当なし
- カ
- 設問2 e, f: 営業利益率及びROA
解答・解説を表示
解答
設問1 a: エ, 設問1 b: エ, 設問1 c: イ, 設問2 d: ア, 設問2 e: イ, 設問2 f: カ, 設問3 g: ウ, 設問3 h: イ
解説
まず要点:ROA(総資産利益率)は「利益率×回転率」に分けられ、収益性と資産の運用の効率性の両面から評価します。また、海外の子会社を見るときは、為替レートの影響を受ける金額と、影響を受けない比率の指標を区別することが欠かせません。
解き方
- 黒字かどうかの判定と公式の分解をもとに、設問1の除外する企業と空欄(総資産回転率・効率性)を特定します。
- 為替レートを使って現地通貨ベースの数値を計算し、円換算した値との差や、比率の指標が変わらないことを確かめます。
- 各社のすべての指標の前年比の増減を計算し、経営優秀賞と要調査対象の条件に合う会社を選び出します。
小問ごとの答え
- 小問 設問1 a:エ
- 2009年度において営業利益が-300百万円、経常利益が0百万円であり、ともに黒字である条件を満たさないためE社が除外されます。
- 小問 設問1 b:エ
- ROA=経常利益/総資産=(経常利益/売上高)×(売上高/総資産)=経常利益率×総資産回転率であるため、bには総資産回転率が入ります。
- 小問 設問1 c:イ
- 総資産回転率は保有する資産をどれだけ効率的に活用して売上を上げたかを示す指標であるため、効率性を評価できます。
- 小問 設問2 d:ア
- D社の業績を現地通貨Yドルに換算すると、売上高は300→330、営業利益は15→17と両方上がっています。
- 小問 設問2 e:イ
- 売上高や営業利益などの金額指標は為替レート変動によって日本円換算値が変化するため、eには「売上高及び営業利益」が入ります。
- 小問 設問2 f:カ
- 比率指標である営業利益率(営業利益/売上高)やROA(経常利益/総資産)は、分子分母ともに同一レートで換算されるため為替レートが変動しても値は変わりません。
- 小問 設問3 g:ウ
- 国内子会社は日本円、在外子会社は現地通貨で評価すると、D社のみが売上高・営業利益率・ROAの全指標を向上させており、経営優秀賞に該当します。
- 小問 設問3 h:イ
- C社は売上高が約11.4%減、営業利益が約29.1%減と、ともに前年度比10%以上減少しているため、要調査対象子会社となります。
覚えるポイント
- ROA=経常利益率×総資産回転率(収益性×効率性)
- 在外子会社評価では為替要因を除外するため現地通貨ベースでの分析が有効
間違えやすいところ
- 為替レートで円換算した金額が減ったことを、業績そのものの悪化と取り違えないこと。
- 比率の指標(ROAや利益率)も為替変動で値が変わると誤解しないこと。
出題の前提:問題文および提示資料(表1、表2、表3)に記載された財務データと評価条件に基づく。
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp) / 公式問題冊子 p.32 ↗(www.ipa.go.jp)
符号付き2進整数の乗算アルゴリズム
データ構造及びアルゴリズム · 2進数の乗算 / 2の補数 / 算術シフト / ブースのアルゴリズム
4ビット符号付き2進整数 M と N の積を加減算とシフト演算により求める二つのプログラム(プログラム1、プログラム2)の処理過程および計算効率に関する設問に答えよ。
- ア
- 設問1 a: 00101 / 設問1 b, c: 0000100 / 設問2 d: 与えられたMの値が1のとき加算処理を0にできる / 設問2 e, f: 1 / 設問2 g: -2^0 + 2^3
- イ
- 設問1 a: 01101 / 設問1 b, c: 0000101 / 設問2 d: 与えられたNの値が1のとき加算処理を0にできる / 設問2 e, f: 2 / 設問2 g: -2^0 + 2^4
- ウ
- 設問1 a: 100101 / 設問1 b, c: 0001111 / 設問2 d: 中間結果のシフトとNのビットの順次取出しを1回のシフトで済ませる / 設問2 e, f: 3 / 設問2 g: -2^1 + 2^3
- エ
- 設問1 a: 111011 / 設問1 b, c: 0010001 / 設問2 d: 中間結果のシフトによって与えられたNの値の符号検査をなくせる / 設問2 e, f: 4 / 設問2 g: -2^1 + 2^4
- オ
- 設問1 b, c: 1110001 / 設問2 e, f: 5
- カ
- 設問1 b, c: 1111011 / 設問2 e, f: 6
解答・解説を表示
解答
設問1 a: エ, 設問1 b: オ, 設問1 c: イ, 設問2 d: ウ, 設問2 e: オ, 設問2 f: ウ, 設問2 g: ア
解説
まず要点:2進数の掛け算は、部分積を足してはシフトする操作を繰り返す基本のやり方に対し、ブースのアルゴリズムを使うと、続けて並んだ1を「引き算と足し算の組」に置き換えられ、演算の回数を大きく減らせます。
解き方
- 算術右シフトでは、空いた最上位ビットに直前の符号ビットが入る決まりに沿ってビット列を追いかけます。
- プログラム1と2のループの作り方の違いを比べ、シフト操作を効率化する目的(設問2 d)を押さえます。
- 負数を符号拡張したときの1の個数と、ビット反転の最大回数から、加減算の回数を導きます。
小問ごとの答え
- 小問 設問1 a:エ
- 加算後のR上位に算術右シフトを行うと、最上位に符号ビット1が補充されるため、ビット12〜7は111011となります。
- 小問 設問1 b:オ
- 2回目の加算(11101+11011=11000)後の算術右シフトにより、ビット12〜6は1110001となります。
- 小問 設問1 c:イ
- プログラム2の2回目のシフト後の上位7ビット(ビット9〜3)の内容は0000101となります。
- 小問 設問2 d:ウ
- Rの下位にNを設定することで、1回の算術右シフトで部分積の桁揃えと乗数のビット検査を同時に行えます。
- 小問 設問2 e:オ
- N<0のとき8ビット符号拡張により上位4ビットはすべて1となり、下位4ビットにも1が最低1個あるため、加算は最低5回行われます。
- 小問 設問2 f:ウ
- プログラム2では加減算の回数はビットの反転回数に依存し、Nが負数の場合でも反転回数は最大3回で済みます。
- 小問 設問2 g:ア
- 7=8-1=2^3-2^0 であるため、M×7はM×(-2^0 + 2^3)として計算できます。
覚えるポイント
- 算術右シフトでは最上位ビット(符号ビット)と同じ値が補充される
- ブースのアルゴリズムでは連続する1を(2^(k+1)-2^m)の加減算に圧縮できる
間違えやすいところ
- 算術シフトのときに、論理シフトのようにいつも0を補充してしまう誤りに注意すること。
- 負数を符号拡張すると上位ビットがすべて1で埋まることを見落とさないこと。
出題の前提:提示されたプログラム仕様、擬似言語の構文規則、および2の補数表現の算術規則に基づく。
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.34 ↗(www.ipa.go.jp) / 公式問題冊子 p.35 ↗(www.ipa.go.jp) / 公式問題冊子 p.36 ↗(www.ipa.go.jp) / 公式問題冊子 p.37 ↗(www.ipa.go.jp) / 公式問題冊子 p.38 ↗(www.ipa.go.jp)
バスの到着待ち時間および運行遅延時間の計算プログラム
ソフトウェア開発 · C言語 / 配列と構造体 / バスロケーションシステム
路線上の停留所において、バスの到着待ち時間および運行遅延時間を計算・更新するCプログラムに関する設問に答えよ。
- ア
- 設問1 a: bus_id == bus[j].id
- イ
- 設問1 a: bus_id != bus[j].id
- ウ
- 設問1 a: bus_id == j
- エ
- 設問1 a: bus_id != j
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ウ, 設問1 c: エ, 設問1 d: イ, 設問2 e: エ, 設問2 f: イ
解説
まず要点:複数のバスの位置をまとめて管理し、前後の車両との位置の差や標準の所要時間から、各停留所での待ち時間と遅延時間を計算する。バスにはそれぞれを区別する番号(バスID)があり、同じ番号のデータを配列から探して更新する。前の車両と後ろの車両の走行区間を使うことで、待ち時間や遅延の広がりを求められる。
解き方
- 更新したいバスIDと同じ番号を持つデータを配列の中から探し、そのバスの現在位置(今いる停留所の番号)を書き換える。
- そのバスのすぐ前を走る先行車両と、すぐ後ろを走る後続車両が、どの停留所の間を走っているかを調べる。
- 区間ごとの標準の所要時間と、実際の遅れの差を足し合わせて、各停留所の到着待ち時間と遅延時間を求める。
小問ごとの答え
- 小問 設問1 a:ア
- 更新対象となるバスの車体番号bus_idと一致する配列要素を探索するため、条件式はbus_id == bus[j].idとなります。
- 小問 設問1 b:ウ
- succeedingおよびprecedingには該当バスが現在走行している区間番号を格納するため、bus[j].cur_posを代入します。
- 小問 設問1 c:エ
- 停留所busstopに次に到着するバスが存在しない場合、succeedingの値は初期値の-1となるため、待ち時間を0とする条件はsucceeding == -1です。
- 小問 設問1 d:イ
- 直前の停留所までの到着待ち時間に自区間の標準所要時間を加算して求めるため、+= route[i - 1].wait_timeとなります。
- 小問 設問2 e:エ
- 直前までの遅延時間に、当該区間で新たに発生した所要時間の差分(act_time - route[busstop].std_time)を累積加算します。
- 小問 設問2 f:イ
- 先行または後続のバスの運行遅延時間を取得・設定するため、対象車両jの現在の遅延時間であるbus[j].cur_delayを代入します。
覚えるポイント
- 区間番号は区間の始まりとなる停留所番号と一致する仕様を確認すること。
- 先行バス・後続バスが存在しない場合の番兵値(-1やSTPNUM-1)に注意すること。
間違えやすいところ
- 待ち時間を計算するとき、直前の「待ち時間」ではなく「標準の所要時間」を足してしまう間違い。
- 遅延時間を更新するとき、増えた分だけでなく実測値そのものを足してしまう間違い。
出題の前提:平成22年度秋期基本情報技術者試験午後問9
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.39 ↗(www.ipa.go.jp) / 公式問題冊子 p.40 ↗(www.ipa.go.jp) / 公式問題冊子 p.41 ↗(www.ipa.go.jp) / 公式問題冊子 p.42 ↗(www.ipa.go.jp) / 公式問題冊子 p.43 ↗(www.ipa.go.jp) / 公式問題冊子 p.44 ↗(www.ipa.go.jp) / 公式問題冊子 p.45 ↗(www.ipa.go.jp)
有料自動車道路のインターチェンジ別売上と利用台数の集計
ソフトウェア開発 · COBOL / ファイル処理 / 整列・集計 / 条件分岐
有料自動車道路の売上ファイルを読み込み、インターチェンジ別売上および利用区間別利用台数を集計・整列して出力するCOBOLプログラムに関する設問に答えよ。
- ア
- 設問1 a〜c: ADD SECT-NUM(SAL-IN SAL-OUT) TO TOTAL
- イ
- 設問1 a〜c: ADD 1 TO IC-TOTAL(CNT1)
- ウ
- 設問1 a〜c: ADD 1 TO SECT-NUM(SAL-IN SAL-OUT)
- エ
- 設問1 a〜c: ADD IC-TOTAL(CNT1) TO SECT-NUM(SAL-IN SAL-OUT)
- オ
- 設問1 a〜c: ADD IC-TOTAL(CNT1) TO TOTAL
- カ
- 設問1 a〜c: MOVE IC-TOTAL(CNT1) TO SORT-DATA
- キ
- 設問1 a〜c: MOVE SECT-NUM(CNT1 CNT2) TO SORT-DATA
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: オ, 設問1 c: キ, 設問1 d: イ, 設問2 e: イ, 設問2 f: ウ, 設問2 g: カ, 設問2 h: ケ
解説
まず要点:COBOLの集計処理では、表(二次元配列)に件数を数えて足し込み、SORT命令で並べ替え、EVALUATE命令で条件によって処理を分ける。売上ファイルを読みながら、どのインターチェンジから乗って降りたかの区間ごとに台数を数えたり、インターチェンジごとの売上を合計したりする。表のどの添字(行・列の番号)に足すかを正しく指定することが大切である。
解き方
- 入力ファイルを1件ずつ読み込み、乗ったインターチェンジごとの売上と、利用した区間ごとの台数を多次元の表に足し込んで集計する。
- 集計した区間ごとの利用台数を並べ替え用ファイルに渡し、台数の多い順に並べて上位の区間を出力する。
- 追加の割引ルールに従い、乗ったインターチェンジと降りたインターチェンジの差から区間数を求め、条件分岐でそれぞれの割引率を決める。
小問ごとの答え
- 小問 設問1 a:ウ
- 入車ICと出車ICを添字とする二次元表の利用台数をカウントアップするため、「ADD 1 TO SECT-NUM(SAL-IN SAL-OUT)」を実行します。
- 小問 設問1 b:オ
- 各ICの売上集計値を全体の総合計TOTALに累積加算するため、「ADD IC-TOTAL(CNT1) TO TOTAL」とします。
- 小問 設問1 c:キ
- 整列用レコードの利用台数項目SORT-DATAに、二次元表から取得した区間台数SECT-NUM(CNT1 CNT2)を代入します。
- 小問 設問1 d:イ
- 10区間を超え、かつ直前の利用台数より少なくなった場合に終了させるため、「CNT1 > 10 AND SORT-DATA < PREV-NUM」が適切です。
- 小問 設問2 e:イ
- 売上レコード1件ごとに割引計算と各プランの売上集計を行うため、CNT-PROC内の行53と54の間に追加します。
- 小問 設問2 f:ウ
- プランXが割引なし(1.0倍)、プランYが10%割引(0.9倍)となる利用区間数は3〜4区間であるため「3 THRU 4」です。
- 小問 設問2 g:カ
- プランXが20%割引(0.8倍)、プランYが10%割引(0.9倍)となる利用区間数は5〜6区間であるため「5 THRU 6」です。
- 小問 設問2 h:ケ
- プランX、プランYともに20%割引(0.8倍)となるのは7区間以上(最大9区間)であるため「7 THRU 9」です。
覚えるポイント
- COBOLのSORT機能(INPUT PROCEDURE / OUTPUT PROCEDURE)とRELEASE/RETURN文の役割を理解すること。
- 同一順位の要素をすべて出力する場合の終了判定条件(直前の値との比較)を正しく組み立てること。
間違えやすいところ
- 10番目と同じ台数の区間をすべて出す仕様なのに、不等号に等号(<=)を付けてしまい、同数の区間を出さずに打ち切ってしまう間違い。
- 割引が適用される区間数の境目(3〜4、5〜6、7〜9の組み合わせ)を間違えてしまうミス。
出題の前提:平成22年度秋期基本情報技術者試験午後問10
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.46 ↗(www.ipa.go.jp) / 公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp) / 公式問題冊子 p.50 ↗(www.ipa.go.jp) / 公式問題冊子 p.51 ↗(www.ipa.go.jp)
電子会議システムのマルチスレッドプログラミング(Java)
ソフトウェア開発 · Java / マルチスレッド / 排他制御 / 同期 / オブジェクト指向
電子会議システムのサーバおよびクライアントを実装したJavaプログラム(プログラム1〜4)に関する設問に答えよ。キューへのメッセージ格納・取得におけるスレッド間の協調動作、セッション管理、クラス継承およびスレッドセーフなコレクション操作に関する理解が問われる。
- 設問1 a ア
- !queue.isEmpty()
- 設問1 a イ
- queue.isEmpty()
- 設問1 a ウ
- queue.size() != MAX_SIZE
- 設問1 a エ
- queue.size() < MAX_SIZE
- 設問1 a オ
- queue.size() == MAX_SIZE
- 設問1 b ア
- session.get(message)
- 設問1 b イ
- session.get(server)
- 設問1 b ウ
- session.get(sessionsTable)
- 設問1 b エ
- sessionsTable.get(message)
- 設問1 b オ
- sessionsTable.get(server)
- 設問1 b カ
- sessionsTable.get(session)
- 設問1 c ア
- queue
- 設問1 c イ
- server
- 設問1 c ウ
- session
- 設問1 c エ
- sessionsTable
- 設問1 c オ
- this
- 設問1 d ア
- abstract
- 設問1 d イ
- extends
- 設問1 d ウ
- implements
- 設問1 d エ
- static
- 設問1 d オ
- throws
- 設問1 e ア
- super()
- 設問1 e イ
- super(name)
- 設問1 e ウ
- super(this)
- 設問1 e エ
- this()
- 設問1 e オ
- this(name)
- 設問2 ア
- クラスConfClientのインスタンスがそれぞれ別スレッドとして同時に動くことを想定すると、一度にフィールドqueueで参照されるLinkedListのインスタンスにアクセスが集中することが考えられる。そこで、一時点でqueueにアクセスできるスレッドを一つにして、システムに負荷がかかりすぎるのを防ぐ。
- 設問2 イ
- クラスConfClientのインスタンスがそれぞれ別スレッドとして同時に動くことを想定すると、タイミングによってはフィールドqueueで参照されるLinkedListのインスタンスに格納されている他のスレッドが書き込んだメッセージを読み出すことができ、セキュリティ上問題となる。そこで、一時点でqueueにアクセスできるスレッドを一つにして、queueに既に書き込まれているメッセージを読み出せないようにする。
- 設問2 ウ
- クラスConfClientのインスタンスとクラスConfServerのインスタンスは別スレッドとして動くので、フィールドqueueで参照されるLinkedListのインスタンスに対しての操作が同時に実行されることがある。そこで、一時点でqueueにアクセスできるスレッドを一つにして、データの内部状態に矛盾が起きないようにする。
- 設問2 エ
- クラスConfClientのインスタンスの個数が多いとフィールドqueueで参照されるLinkedListのインスタンスに格納するメッセージ数の増大によってメモリ不足によるエラーが発生し、ConfServerを実行しているスレッドが停止する可能性がある。そこで、ConfClientのインスタンスの個数を制限して、エラーを起こさないようにする。
解答・解説を表示
解答
設問1 a: イ, 設問1 b: カ, 設問1 c: オ, 設問1 d: イ, 設問1 e: イ, 設問2: ウ
解説
まず要点:Javaで複数のスレッド(同時に動く処理の流れ)が同じデータを使うときは、同時に触って中身がこわれないようにする排他制御と、条件がそろうまで待つwait/notifyAllによる同期を正しく組み合わせる必要がある。キュー(データを入れておく箱)が空なら取り出しを待ち、いっぱいなら格納を待つように、状態に応じた待機が欠かせない。
解き方
- 各クラス(MessageQueue、ConfServer、ConfClient、TestClient)の役割と、スレッドがどう動くか(各クライアントとConfServerがそれぞれ独立して動く)をつかむ。
- キューの待機条件、マップから値を取り出す式、thisによる自分自身の参照、継承と親コンストラクタ呼び出しの書き方を照らし合わせて空欄a〜eを埋める。
- synchronizedの2つの目的である「待機と通知による同期」と「共有データの破損防止(排他制御)」の視点で設問2の選択肢を検討する。
小問ごとの答え
- 小問 設問1 a:イ
- takeメソッドはキューが空のときにメッセージが追加されるまでwait()で待機する仕様であるため、条件式はqueue.isEmpty()が適切である。
- 小問 設問1 b:カ
- sessionsTableはSessionをキー、ConfClientを値とするMapである。キーであるsessionに対応するConfClientを取得してdisplayMessageを呼ぶため、sessionsTable.get(session)となる。
- 小問 設問1 c:オ
- Sessionクラスのlogoutメソッド内から、自身(現在のSessionインスタンス)を引数としてConfServerのlogoutImpl(Session session)に渡すため、thisを指定する。
- 小問 設問1 d:イ
- ConfClientは抽象クラス(abstract class)として定義されているため、サブクラスTestClientでこれを継承するにはextendsキーワードを用いる。
- 小問 設問1 e:イ
- 親クラスConfClientには引数付きコンストラクタConfClient(String name)が定義されており、サブクラスのコンストラクタ先頭でsuper(name)を呼び出して名前を初期化する。
- 小問 設問2:ウ
- LinkedListはスレッドセーフではないため、クライアントスレッドとサーバ側の配送スレッドが同時にリスト構造を変更するとデータ構造の破壊や不整合が発生する。synchronizedにより排他制御を行うことで内部状態の矛盾を防いでいる。
覚えるポイント
- Javaの抽象クラスの継承にはextendsを用い、親コンストラクタ呼出しにはsuper()を用いる。非スレッドセーフなコレクションには排他制御が必須である。
間違えやすいところ
- Mapから値を取り出すとき、キーと値の対応を混同しやすい。また内部クラスのメソッドから自分のインスタンスを渡すときはthisを使う。
出題の前提:平成22年度秋期 基本情報技術者試験 午後 問11
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.52 ↗(www.ipa.go.jp) / 公式問題冊子 p.53 ↗(www.ipa.go.jp) / 公式問題冊子 p.54 ↗(www.ipa.go.jp) / 公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp) / 公式問題冊子 p.57 ↗(www.ipa.go.jp) / 公式問題冊子 p.58 ↗(www.ipa.go.jp)
ビット列を逆転するプログラム(アセンブラ CASL II)
ソフトウェア開発 · CASL II / アセンブラ / ビット演算 / 論理シフト / 算術シフト
ビット列の並びを左右逆転させるアセンブラ副プログラム群(REVRS, LREVRS, PREVRS)に関する設問に答えよ。1語16ビットの反転処理、複数語(n語)の反転処理、および1語内の部分ビット列α(先頭からpビット離れたqビット長)のみを反転する処理のアルゴリズムを追跡する。
- 設問1 a ア
- JMI ON
- 設問1 a イ
- JNZ ON
- 設問1 a ウ
- JOV ON
- 設問1 a エ
- JPL ON
- 設問1 b ア
- SLL GR4, -1, GR2
- 設問1 b イ
- SLL GR4, 0, GR2
- 設問1 b ウ
- SRL GR4, -1, GR2
- 設問1 b エ
- SRL GR4, 0, GR2
- 設問2 c ア
- JMI LOOP1
- 設問2 c イ
- JNZ LOOP1
- 設問2 c ウ
- JNZ LOOP2
- 設問2 c エ
- JPL LOOP1
- 設問2 c オ
- JZE FIN3
- 設問2 c カ
- JZE LOOP2
- 設問2 d ア
- JMI LOOP1
- 設問2 d イ
- JNZ LOOP1
- 設問2 d ウ
- JNZ LOOP2
- 設問2 d エ
- JPL LOOP1
- 設問2 d オ
- JZE FIN3
- 設問2 d カ
- JZE LOOP2
- 設問3 e ア
- OR GR6, GR5
- 設問3 e イ
- OR GR6, 0, GR1
- 設問3 e ウ
- SLL GR5, 0, GR6
- 設問3 e エ
- SLL GR5, 0, GR3
- 設問3 f ア
- OR GR6, GR5
- 設問3 f イ
- OR GR6, 0, GR1
- 設問3 f ウ
- SLL GR5, 0, GR6
- 設問3 f エ
- SLL GR5, 0, GR3
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: イ, 設問2 c: ア, 設問2 d: ウ, 設問3 e: ウ, 設問3 f: ア
解説
まず要点:CASL IIでは、ビットをずらすシフト命令で外に押し出されたビットがOF(あふれフラグ)に残る。また、アドレスを「0,GR2」のように書くと、インデックスレジスタの値をずらすビット数として使える。あふれたビットをOFで調べ、可変のシフト数で位置を合わせるのがポイントである。
解き方
- プログラム1(REVRS)を追い、SRLの直後にあふれたビットをOF(JOV命令)で判定していることと、早く終わるときの残りビットのシフト(SLL GR4,0,GR2)を確かめる。
- プログラム2(LREVRS)で、第1段の「語単位の反転(ポインタGR3とGR4の比較によるJMI)」と第2段の「各語のビット反転(語数GR2のカウントダウンによるJNZ)」の二重構造をつかむ。
- プログラム3(PREVRS)で、qビットの部分ビット列をシフト(16-qビットの左シフトなど)で取り出し、マスクで消した元データにORで合成する手順を確かめる。
小問ごとの答え
- 小問 設問1 a:ウ
- SRL命令によりレジスタから最後に送り出されたビットはOF(オーバーフローフラグ)に設定される。送り出されたビットが1のときONへ分岐してGR4の最下位に1を立てるため、JOV ONが適切である。
- 小問 設問1 b:イ
- 元のビット列の残りがすべて0になった場合、残りのシフト回数(GR2に保持)だけGR4を左シフトして位置を合わせる必要がある。実効アドレスとしてGR2の値をシフト数とするため、SLL GR4, 0, GR2となる。
- 小問 設問2 c:ア
- 両端の語から中央に向かって語全体を交換する処理である。CPA GR3, GR4で先頭側のポインタGR3と末尾側のポインタGR4を算術比較し、GR3 < GR4(結果が負)の間ループを継続するため、JMI LOOP1となる。
- 小問 設問2 d:ウ
- 各語のビット列を反転する処理で、語数カウンタGR2を1減算(SUBA GR2, =1)し、まだ語が残っている間(GR2が0でない間)LOOP2を繰り返すため、JNZ LOOP2となる。
- 小問 設問3 e:ウ
- 反転済みビット列GR5から部分ビット列α(qビット)を取り出し元の位置(先頭からpビット)に合わせるため、GR6(16-q)だけ左シフトして上位に詰める。したがってSLL GR5, 0, GR6が正解である。
- 小問 設問3 f:ア
- GR6にはα部分を0クリアした元のビット列が残っており、GR5には所定位置に移動させた反転済みαが格納されている。両者の論理和をとって合成するため、OR GR6, GR5となる。
覚えるポイント
- CASL IIのシフト命令では、追い出された最後のビットがOFに入るためJOV命令で分岐判定できる。アドレス部にレジスタを指定すると可変ビットシフトが実現できる。
間違えやすいところ
- CPA命令の大小による分岐(JMIは第1オペランドが小さいとき)と、引き算の後のゼロ判定(JNZ)を混同しやすい。
出題の前提:平成22年度秋期 基本情報技術者試験 午後 問12
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.59 ↗(www.ipa.go.jp) / 公式問題冊子 p.60 ↗(www.ipa.go.jp) / 公式問題冊子 p.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp)
シャンプーの価格弾力性分析と表計算ワークシートの作成
ソフトウェア開発(表計算) · 表計算ソフトの計算式 / 相対参照と絶対参照 / 条件判定(IF関数) / 表引き関数(垂直照合・水平照合) / 価格弾力性分析
日用品メーカN社におけるシャンプーの価格弾力性分析、値上げ検討、および広告実施に伴う売上・利益予測に関するワークシート(「価格弾力性分析」「値上げ」「広告」)の作成に関する仕様を読み、設問1〜3の空欄[ a ]〜[ i ]に入る適切な式や語句を解答群の中から選べ。
- 設問1 a
- ア: A7=B2, イ: A$7=B$2, ウ: A$7=$B$2, エ: $A7=B$2, オ: $A7=$B2, カ: B7=B3, キ: B$7=B$3, ク: B$7=$B3, ケ: $B7=B$3, コ: $B7=$B3
- 設問1 b
- ア: ((A7-B$2)/B$2), イ: ((B7-B$3)/B$3), ウ: (($A7-B$2)/B$2), エ: (($B7-B$3)/B$3), オ: -((A7-B$2)/B$2), カ: -((B7-B$3)/B$3), キ: -(($A7-B$2)/B$2), ク: -(($B7-B$3)/B$3)
- 設問1 c
- ア: ((B7-B$3)/B$3), イ: ((A$7-B$2)/B$2), ウ: (($A7-B$2)/B$2), エ: ((B$7-B$2)/B$2), オ: (($B7-$B3)/B$3), カ: ((B$7-B3)/B$3)
- 設問2 d
- ア: B10,$E$2〜$G$5,I$2, イ: B10,$E$2〜$G$5,$I2, ウ: B$10,$E$2〜$G$5,I$2, エ: B$10,$E$2〜$G$5,$I2, オ: $B10,$E$2〜$G$5,I$2, カ: $B10,$E$2〜$G$5,$I2
- 設問2 e
- ア: B4*B$13, イ: $B4*B13, ウ: $B4*$B13, エ: $C4*B13, オ: $C4*B$13, カ: $C4*$B13
- 設問2 f
- ア: (B6*B11+$B7)*B14, イ: ($B6*B11+$B7)*B14, ウ: ($B6*B11+$B7)*$B14, エ: (C6*B11+$C7)*B14, オ: ($C6*B11+$C7)*B14, カ: ($C6*B11+$C7)*$B14
- 設問2 g
- ア: B15-B16-B5-B15*B8, イ: B15-B16-B$5-B15*B$8, ウ: B15-B16-$B5-B15*$B8, エ: B15-B16-C5-B15*C8, オ: B15-B16-C$5-B15*C$8, カ: B15-B16-$C5-B15*$C8
- 設問3 h
- ア〜ク: 各種計算式, ケ: (1+B4)*IF($B1=値上!$B1,水平照合($B2,値上!$B10〜$E13,4),水平照合($B2,値上!$F10〜$I13,4))
- 設問3 i
- ア〜ウ・オ〜ク: 各種計算式, エ: (値上!$B6*水平照合($B2,値上!$B10〜$E11,2)+値上!$B7)*B6
解答・解説を表示
解答
設問1 a: エ, 設問1 b: カ, 設問1 c: ウ, 設問2 d: エ, 設問2 e: イ, 設問2 f: オ, 設問2 g: ウ, 設問3 h: ケ, 設問3 i: エ
解説
まず要点:表計算で数式を作るときは、コピーしたときに参照がずれないよう、絶対参照($列$行)、複合参照($列行や列$行)、相対参照を正しく使い分ける。IF関数で条件によって処理を分け、垂直照合・水平照合で表から値を引くときの書き方(照合値、照合範囲、列/行の位置)を正確にそろえるのが基本である。
解き方
- 各ワークシートの作りと、利益・売上・変動費・価格弾力性などの計算式の決め方を確認する。
- 数式を入れる起点のセルと、コピーされる範囲(行方向・列方向)をとらえ、固定すべき列や行を$記号で指定する。
- 垂直照合・水平照合の引数(照合値、範囲、列位置/行位置)と、引く対象の表の配置を対応させて正解を選ぶ。
小問ごとの答え
- 小問 設問1 a:エ
- 現行価格と同じ価格の行では母分が0となるためハイフンを表示する。セルD7に入力してD7〜E15に複写するため、行の価格はA列固定($A7)、ブランドごとの現行価格は2行目固定(B$2)として比較する「$A7=B$2」が正しい。
- 小問 設問1 b:カ
- 価格弾力性の定義式は「-(購入意向率の変化率/価格の変化率)」である。分子bには、マイナス符号が付いた購入意向率の変化率「-((B7-B$3)/B$3)」が入る。列は普及品B列・高級品C列へ相対移動し、基準の購入意向率は3行目固定(B$3)となる。
- 小問 設問1 c:ウ
- 分母cには価格の変化率が入る。価格はA列固定・各行参照($A7)、現行価格は2行目固定・ブランド列参照(B$2)であるため、「(($A7-B$2)/B$2)」が正しい。
- 小問 設問2 d:エ
- セルB11に入力してB11〜I12に複写する。垂直照合の照合値は案(10行目固定)なので「B$10」、照合範囲は固定で「$E$2〜$G$5」、列位置はB11(容量)ではI2、B12(価格)ではI3を参照するため列固定・行相対の「$I2」とする。
- 小問 設問2 e:イ
- セルB14(売上数量=市場規模×購入意向率)に入力しC14〜I14に複写する。普及品の市場規模はB4固定($B4)、購入意向率は各列13行目を参照するため「$B4*B13」が正しい。
- 小問 設問2 f:オ
- 高級品(C16〜I16)の製造変動費=(原料単価×容量+容器単価)×売上数量を求める。高級品の原料単価は$C6、容器単価は$C7、容量はB11(各列相対)、売上数量はB14(各列相対)なので「($C6*B11+$C7)*B14」が正しい。
- 小問 設問2 g:ウ
- 利益=売上金額-製造変動費-製造固定費-販売管理費(売上金額×販売管理費比率)である。普及品側の式なので、製造固定費は$B5、販売管理費比率は$B8となり、「B15-B16-$B5-B15*$B8」が正しい。
- 小問 設問3 h:ケ
- 広告実施後の購入意向率は「広告実施前の購入意向率×(1+広告効果率)」である。B4が広告効果率なので「(1+B4)*…」となり、値上シートからの参照行位置は購入意向率が格納されている4行目(行13)を指定する。
- 小問 設問3 i:エ
- 高級品の製造変動費=(原料単価×容量+容器単価)×売上数量である。値上シートの高級品原料単価は$B6(値上シートのC6ではなく普及品・高級品で参照を分けるIFの高級品分岐なので$B6ではなく、IF条件が真なら普及品、偽なら高級品。本式はIFの偽側:高級品原料単価はC6、容器単価はC7)…と見せかけて、問題文の式は「IF($B1=値上!$B1, [普及品の式], [高級品の式: i ])」である。高級品原料単価は値上!$B6ではなく値上!$C6、容量は値上!$F10〜$I11の2行目(行11)、容器単価は値上!$C7、売上数量はB6なので「(値上!$C6*水平照合($B2,値上!$B10〜$E11,2)+値上!$C7)*B6」の形となるが、解答群エは「(値上!$B6*水平照合($B2,値上!$B10〜$E11,2)+値上!$B7)*B6」で正答。※問題文のIF文は「IF($B1=値上!$B1, i, [高級品の式])」であり、空欄iは普及品側の計算式であるため、普及品の原料単価$B6、容器単価$B7、照合範囲$B10〜$E11、行位置2(容量)を参照するエが正しい。
覚えるポイント
- 数式複写時の複合参照(横に複写するなら行固定、縦に複写するなら列固定)を意識する。
- 水平照合の第3引数は「行位置」、垂直照合の第3引数は「列位置」である。
- 増加率・効果率を乗じる際は (1 + 増加率) を乗算する。
間違えやすいところ
- 価格弾力性の式の先頭にあるマイナス符号を見落とし、プラスとマイナスを逆にしてしまう間違い。
- 水平照合で、照合範囲の一番上の行を1行目としたときの「行位置」を、シート全体の行番号と混同する間違い。
- IF関数の第2引数(条件が正しいとき)と第3引数(正しくないとき)が、どちらのブランドに対応するかを取り違える間違い。
出題の前提:平成22年度秋期 基本情報技術者試験 午後問題 問13 および公式解答・採点講評に基づく。
出典:IPA『2010年度 秋期 午後』
公式問題冊子 p.63 ↗(www.ipa.go.jp) / 公式問題冊子 p.64 ↗(www.ipa.go.jp) / 公式問題冊子 p.65 ↗(www.ipa.go.jp) / 公式問題冊子 p.66 ↗(www.ipa.go.jp) / 公式問題冊子 p.67 ↗(www.ipa.go.jp) / 公式問題冊子 p.68 ↗(www.ipa.go.jp) / 公式問題冊子 p.69 ↗(www.ipa.go.jp) / 公式問題冊子 p.70 ↗(www.ipa.go.jp) / 公式問題冊子 p.71 ↗(www.ipa.go.jp)
2010年度 秋期 午後
参照した公式資料
IPAが公開した2010年度 秋期 午後の問題・解答資料です。

