旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2013年度 秋期 午後の概要
論理演算と加算器の設計
ハードウェア · 論理回路 / 真理値表 / 半加算器 / 全加算器 / 桁あふれ検出
論理演算(AND, OR, XOR, NOT, NAND, NOR)の真理値表に基づく等価回路の構成、2進数1ビットを加算する半加算器および全加算器の内部構成、ならびに4ビット符号付き2進整数加算器における桁あふれ検出回路(VF)およびゼロ検出回路(ZF)の設計に関する問題である。
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ア, 設問2: オ, 設問3: エ, 設問4 c: オ, 設問4 d: ウ
解説
まず要点:論理回路では、半加算器(2進数の1桁を足す回路)の和をXOR(2つの入力が違うときだけ1になる演算)で、桁上がりをAND(両方が1のときだけ1になる演算)で表します。さらにド・モルガンの法則を使うと、NOT(反転)とANDやORを組み合わせてNANDやNORと同じ働きの回路が作れます。符号付き2進数のオーバーフロー(計算結果が表せる範囲を超えること)は、最上位ビットへの桁上がりと最上位ビットからの桁上がりが食い違うことで見つけられます。全ビットが0かどうかは、NORとANDを組み合わせて判定します。
解き方
- ド・モルガンの法則を使い、NOTと基本の論理回路を組み合わせてNANDやNORと同じ働きの回路を見つけます。
- 半加算器の真理値表から、和がXOR、桁上がりがANDになることを確かめ、全加算器では2つの桁上がりをORでまとめることを確認します。
- 4ビット加算器のオーバーフローは最上位への桁上がりと最上位からの桁上がりが違うことで気づけるのでXORを使い、全ビットが0かの判定にはNORを使うと分かります。
小問ごとの答え
- 小問 設問1 a:イ
- NANDの論理式は NOT(X AND Y) であり、ド・モルガンの法則により (NOT X) OR (NOT Y) と等価になります。入力XとYをそれぞれNOT回路に通した後にOR回路へ入力している回路イがNANDを表します。選択肢アは (NOT X) AND (NOT Y) = NOT(X OR Y) でありNOR回路、ウは (NOT X) XOR (NOT Y) = X XOR Y、エは NOT(X XOR Y) でありXNOR回路です。
- 小問 設問1 b:ア
- NORの論理式は NOT(X OR Y) であり、ド・モルガンの法則により (NOT X) AND (NOT Y) と等価になります。入力XとYをそれぞれNOT回路に通した後にAND回路へ入力している回路アがNORを表します。回路イはNAND回路、回路ウはXOR回路、回路エはXNOR回路です。
- 小問 設問2:オ
- 半加算器の和Zは、入力XとYが (0,1) または (1,0) のときに1となり、(0,0) または (1,1) のときに0となるため、排他的論理和 XOR(X, Y) です。桁上がりCはXとYが共に1のときのみ1となるため AND(X, Y) です。図1のZを出力する空欄に入る論理素子はXOR(オ)です。選択肢ア(AND)は桁上がりC用、イ(NAND)、ウ(NOR)、エ(OR)は和の真理値表と一致しません。
- 小問 設問3:エ
- 全加算器において、全体の桁上がりCは「XとYの加算で桁上がりが生じる(1つ目の半加算器のC)」または「XとYの和とCinの加算で桁上がりが生じる(2つ目の半加算器のC)」のいずれかの場合に1となります。これら2つの桁上がり信号が同時に1になることはないため、両者の論理和をとるOR回路(エ)が接続されます。選択肢ア(AND)、イ(NAND)、ウ(NOR)では正しい桁上がり条件を満たせません。
- 小問 設問4 c:オ
- 符号付き加算において、最上位ビット(符号ビット)への桁上がりC3と、最上位ビットからの桁上がりC4が一致しない場合にオーバーフロー(桁あふれ)が生じます(β部分:C3=0かつC4=1、またはC3=1かつC4=0)。2入力の値が異なるときに1を出力する論理素子はXOR(オ)であるため、空欄cにはXORが入ります。選択肢ア(AND)、イ(NAND)、ウ(NOR)、エ(OR)では不一致を検出できません。
- 小問 設問4 d:ウ
- 加算結果 S1〜S4 が全て0のときに ZF=1 とする必要があります。図5では2ビットずつ [ d ] に入力し、その2つの出力をANDゲートに通しています。ANDゲートの出力が1になるには両方の [ d ] の出力が1である必要があります。入力の2ビットが共に0のときだけ1を出力するゲートは否定論理和 NOR(ウ)です。S1 NOR S2 が1(S1=0かつS2=0)、かつ S3 NOR S4 が1(S3=0かつS4=0)のとき、ZF=1 となります。
覚えるポイント
- 半加算器の和はXOR、桁上がりはANDである。
- 全加算器の最終的な桁上がりは2つの半加算器の桁上がりのORである。
- 符号付き2進加算のオーバーフロー検出は、最上位への桁上がりと最上位からの桁上がりのXORである。
間違えやすいところ
- ド・モルガンの法則で、NOTを入力側につけたANDがNOR、NOTを入力側につけたORがNANDになる関係を逆に覚えやすいので注意します。
- オーバーフローを単に最上位からの桁上がりC4が起きたことだと勘違いし、C3とのXORで判定する点を忘れがちです。
出題の前提:平成25年度秋期基本情報技術者試験 午後 問1
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.5 ↗(www.ipa.go.jp) / 公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp) / 公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp)
選手情報を管理する関係データベースの設計及び運用
データベース · 関係データベース / 正規化 / SQL / 集計関数 / テーブル設計変更
少年野球リーグ(8チーム参加、1シーズン総当たり戦)の選手情報および試合成績を管理する関係データベースについて、テーブル設計(第1正規化)、レコード件数の計算、SQLによる成績集計、およびシーズン途中の移籍に対応するための設計変更に関する問題である。
解答・解説を表示
解答
設問1 a: イ, 設問1 b: イ, 設問2 c: イ, 設問3 d: ア, 設問4 e: エ, 設問4 f: ア
解説
まず要点:関係データベースでは、1つの欄に繰り返しの値が入らないように別の表に分けると第1正規形(表をきれいに整理した形)になります。SQLで集計するときは、GROUP BY(同じ値ごとにまとめる命令)に集計しない列を書き、ORDER BY(並べ替えの命令)で降順や昇順を決めます。移籍や所属の変更がある業務では、上書きすると過去の記録が変わってしまうので、所属の履歴を残す連関テーブル(2つの表を結び付ける表)を用意します。
解き方
- 総当たり戦の試合数は n(n-1)/2 で求め、1試合あたり2チーム分の記録があることから結果表の総記録数を計算します。
- SQLの集計では、SELECT句で集計しない列をGROUP BYに書き、指定された降順(DESC)で並べ替えます。
- 選手表のチーム番号を上書きした場合と新しい選手番号を付けた場合で、打席表と結び付けたときにチーム別か選手別かの集計が崩れないかを確かめます。
小問ごとの答え
- 小問 設問1 a:イ
- チーム表に対戦成績を持たせると、総当たり戦の対戦ごとに繰返し項目が発生します。繰返し項目を排除して独立した別の表(日程表・結果表)に分離する作業は「第1正規化」(イ)に該当します。第2正規化(ウ)は部分関数従属の排除、第3正規化(エ)は推移的関数従属の排除、インデックス設定(ア)やセキュリティ強化(オ)は正規化の概念ではありません。
- 小問 設問1 b:イ
- 8チームによる総当たり戦の試合数は、組み合わせの計算により 8C2 = (8 × 7) / 2 = 28試合 です。結果表は1試合につき対戦する2チーム分のデータ(2レコード)を格納するため、1シーズンで作成されるレコード件数は 28試合 × 2 = 56件(イ)となります。
- 小問 設問2 c:イ
- SELECT句でチーム番号、チーム名と集計関数SUMを使用しているため、GROUP BY句には集計関数以外の列「チーム表.チーム番号, チーム表.チーム名」を指定する必要があります。並び順は「勝点が多いチームから降順、勝点が等しい場合は総得点の降順」なので「ORDER BY 勝点 DESC, 総得点 DESC」となります。したがって選択肢イが正解です。アは昇順(ASC)、ウ・エはGROUP BY句が欠落しています。
- 小問 設問3 d:ア
- WHERE句の副問合せによって打撃結果が「ホームラン」のレコードに絞り込まれているため、ホームラン数は打席表の対象レコード数を数える COUNT(*)(d1)で集計します(打点の合計ではホームラン以外の打点も含まれる恐れがあり不適)。またホームラン数が多い順(降順)に表示するため並び順指定は DESC(d2)となります。したがって d1: COUNT(*), d2: DESC の組合せである選択肢アが正解です。
- 小問 設問4 e:エ
- 選手表のチーム番号を移籍先の新しいチームに上書き更新すると、移籍前の過去の試合で打ったホームランも現在のチームで打ったものとして集計されてしまいます。そのため「チームごとのホームラン数」(エ)が正しく集計できなくなります。なお、チームごとの勝点(イ)や総得点(ウ)は結果表に直接チーム番号が記録されているため影響を受けず、選手個人の成績(ア)も選手番号で集計できるため影響しません。
- 小問 設問4 f:ア
- 移籍した選手に対して新しい選手番号を割り振って登録すると、同一選手でありながら移籍前と移籍後で異なる選手番号を持つことになります。これにより、打席表の打者番号が分散してしまい、シーズンを通した「選手ごとのホームラン数」(ア)を正しく集計できなくなります。
覚えるポイント
- 繰返し項目の排除は第1正規化である。
- nチームの総当たり戦の試合数は n(n - 1) / 2 である。
- 履歴情報をマスターテーブルの直接更新で管理すると、過去のトランザクション集計で所属が狂う。
間違えやすいところ
- 総当たり戦の試合数28をそのまま結果表の件数にしてしまい、1試合に2チーム分の記録があることを忘れがちです。
- ホームラン数の集計で打点を合計すればよいと勘違いしがちですが、ホームラン以外の打点もあるためCOUNT(*)が正しいです。
出題の前提:平成25年度秋期基本情報技術者試験 午後 問2
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp) / 公式問題冊子 p.14 ↗(www.ipa.go.jp)
インターネットプロトコルのアドレス表記
ネットワーク · IPv6 / アドレス表記法 / 6to4 / アドレス圧縮
インターネットプロトコル(IP)のアドレス表記に関する次の文章を読み、設問1〜2の各問いに答えよ。 [IPv6のアドレス空間と表記] IPv4は32ビットで表され、アドレス数は2^32個(約43億個)である。世界の人口約70億人に対して不足するため、128ビットのアドレス空間(2^128個、約3.4×10^38個)を持つIPv6が開発された。世界中の人口に均等に割り当てると1人当たり約 [ a ] 個使える計算になる。 IPv6は128ビットを16ビットごとに区切り、各16ビットセクションを16進数で表してコロン(:)で区切る。表記の圧縮規則として以下がある。 (1) 各16ビットセクションの先行する0を省略する(0000のときは0とする)。 (2) 0の16ビットセクションが連続する場合、連続する2個のコロン(::)で1か所だけ置換して表すことができる。 プレフィックス長は先頭からのビット数を10進数で表し、スラッシュ(/)で区切る。 [移行技術 6to4] IPv4からIPv6への移行技術の一つである6to4では、IPv4のグローバルアドレスを使用する。6to4で使用するIPv6アドレスの最初の16ビットは必ず「2002」であり、続いてIPv4のグローバルアドレスをそのまま付けた [ b ] ビットがIPv6アドレスのプレフィックスとなる。例えば、IPv4グローバルアドレスが「203.0.113.128」の場合、IPv6アドレスのプレフィックスは [ c ] / [ b ] となる。 [基本形と圧縮形の対応] 表1の空欄 [ d ] 〜 [ f ] に入る適切な基本形または最も短く表現する圧縮形を求めよ。
- 設問1 a ア
- 4.9×10^27
- 設問1 a イ
- 4.9×10^28
- 設問1 a ウ
- 4.9×10^29
- 設問1 a エ
- 1.4×10^117
- 設問1 a オ
- 1.4×10^118
- 設問1 a カ
- 1.4×10^119
- 設問1 b ア
- 32
- 設問1 b イ
- 40
- 設問1 b ウ
- 48
- 設問1 b エ
- 56
- 設問1 b オ
- 64
- 設問1 b カ
- 72
- 設問1 b キ
- 80
- 設問1 b ク
- 88
- 設問1 b ケ
- 96
- 設問1 c ア
- 2002::cb00:7180
- 設問1 c イ
- 2002:0:0:cb00:7180::
- 設問1 c ウ
- 2002:203:0:113:128::
- 設問1 c エ
- 2002:cb:0:71:80::
- 設問1 c オ
- 2002:cb00:7180::
- 設問1 c カ
- 203:0:113:128::
- 設問1 c キ
- cb00:7180::
- 設問2 d ア
- 2001:0db8:0000:0000:0000:0000:0000:0021
- 設問2 d イ
- 2001:0db8:0000:0000:0000:0000:0000:2:01
- 設問2 d ウ
- 2001:0db8:0000:0000:0000:0000:0002:0001
- 設問2 d エ
- 2001:0db8:0000:0000:0000:0002:0001
- 設問2 d オ
- 2001:0db8:0000:0000:0000:0002:0001
- 設問2 d カ
- 2001:0db8:0000:0000:0002:0001:0000
- 設問2 d キ
- 2001:0db8:0000:0000:0002:0001:0000:0000
- 設問2 e ア
- 2001:0db8::cd30::
- 設問2 e イ
- 2001:0db8::cd30:0:0:0
- 設問2 e ウ
- 2001:0db8:0:0:cd30
- 設問2 e エ
- 2001:0db8:0:0:cd30::
- 設問2 e オ
- 2001:db8::cd30::
- 設問2 e カ
- 2001:db8::cd30:0:0:0
- 設問2 e キ
- 2001:db8:0:0:cd30
- 設問2 e ク
- 2001:db8:0:0:cd30::
- 設問2 f ア
- ::0:1
- 設問2 f イ
- ::0001
- 設問2 f ウ
- ::1
- 設問2 f エ
- :0::1
- 設問2 f オ
- 0::1
- 設問2 f カ
- 0:0::1
- 設問2 f キ
- 0000::1
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ウ, 設問1 c: オ, 設問2 d: ウ, 設問2 e: ク, 設問2 f: ウ
解説
まず要点:IPv6アドレスは128ビットを16ビットずつ8つに分け、それぞれを16進数4桁で書いてコロン(:)で区切ります。書き方を短くする規則は2つで、各区分の先頭の0を省くことと、0だけの区分が続く場所を1か所だけ「::」にまとめることです。最も短く書くには、0が最も長く続く場所を「::」にします。
解き方
- アドレス空間の計算では、指数を使った割り算を行い、有効数字と指数の部分を整理して1人あたりの数を求めます。
- 6to4では、IPv4の各8ビットを16進数2桁に直して2つずつまとめ、先頭の2002の後ろに置いて48ビットを導きます。
- 圧縮形と基本形の変換では、区分の総数が8つであることと、各区分の先頭の0を省く・0の続きを最も長く「::」にする規則を正確に当てはめます。
小問ごとの答え
- 小問 設問1 a:イ
- IPv6の総アドレス数約3.4×10^38個を世界人口約70億人(7.0×10^9人)で割ると、(3.4×10^38)/(7.0×10^9) ≒ 0.4857×10^29 = 4.857×10^28 ≒ 4.9×10^28個となります。
- 小問 設問1 b:ウ
- 6to4プレフィックスは、固定の先頭16ビット「2002::/16」に32ビットのIPv4アドレスを付加して構成されるため、16+32=48ビットとなります。
- 小問 設問1 c:オ
- IPv4アドレス203.0.113.128を16進数に直すと203=cb, 0=00, 113=71, 128=80となり、16ビット単位で「cb00」「7180」となります。先頭の「2002」と結合して残りを省略表記「::」で表すと「2002:cb00:7180::」となります。
- 小問 設問2 d:ウ
- 圧縮形「2001:db8::2:1」において、明示されているセクションは先頭の2001, 0db8と末尾の0002, 0001の4つです。IPv6アドレスは計8セクション(128ビット)であるため、省略された中央の連続する0セクションは4つ(0000:0000:0000:0000)となり、基本形は「2001:0db8:0000:0000:0000:0000:0002:0001」です。
- 小問 設問2 e:ク
- 基本形「2001:0db8:0000:0000:cd30:0000:0000:0000」で、0000が連続する箇所は第3〜4セクション(2個)と第6〜8セクション(3個)の2か所あります。「最も短く表現する」ためには、より長い3個連続の部分を「::」に置き換えます。残る第3〜4セクションは先行ゼロを省いた「0:0」とし、0db8も先行ゼロを省いて「db8」とするため、「2001:db8:0:0:cd30::」となります。
- 小問 設問2 f:ウ
- 基本形「0000:0000:0000:0000:0000:0000:0000:0001」は、先頭から連続する7個の0000を「::」で圧縮し、最後の「0001」は先行ゼロを省いて「1」と表記するため、「::1」(ループバックアドレス)となります。
覚えるポイント
- IPv6は128ビット長で、16ビット(4桁の16進数)ごとにコロンで区切られた8セクション構成です。
- 「::」はアドレス内で1回のみ使用可能で、最も連続する0セクションが多い部分を置換します。
間違えやすいところ
- IPv4アドレスを6to4アドレスに入れるとき、10進数のまま書いてしまう間違いに注意します。
- 同じアドレスの中で「::」を2回以上使ってしまう書き方の違反に注意します。
出題の前提:基本情報技術者試験シラバス・IPv6アドレス表記規格(RFC 4291 / RFC 5952)に基づく。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.15 ↗(www.ipa.go.jp) / 公式問題冊子 p.16 ↗(www.ipa.go.jp) / 公式問題冊子 p.17 ↗(www.ipa.go.jp) / 公式問題冊子 p.18 ↗(www.ipa.go.jp)
VPN (Virtual Private Network)
情報セキュリティ · IPsec / Diffie-Hellman鍵交換 / ディジタル署名 / 公開鍵暗号
IPsecを用いたVPNの導入に関する次の文章を読み、設問1〜3の各問いに答えよ。 [Diffie-Hellman鍵交換] IPsecでは、暗号化鍵を安全に共有する仕組みとしてDH法(Diffie-Hellman鍵交換法)を利用する。 M事業所VPNルータとN事業所VPNルータに事前に共有された素数Zがある。M事業所は乱数Xを生成して鍵A=2^X mod Zを計算しN事業所へ送信する。N事業所は乱数Yを生成して鍵B=2^Y mod Zを計算しM事業所へ送信する。M事業所はDH鍵=鍵B^X mod Zを、N事業所はDH鍵=鍵A^Y mod Zを計算し、共通のDH鍵を生成する。 [相手VPNルータの認証] 送信側VPNルータは、平文データを共通鍵で暗号化して暗号文を作成する。また、認証用ハッシュ値を計算し、[ a ] でディジタル署名を作成する。暗号文と署名をインターネット経由で受信側に送る。 受信側VPNルータは、暗号文を [ b ] で復号してデータを取り出し、ハッシュ値を計算する(署名検証用ハッシュ値)。一方、署名を [ c ] で復号して送信側の認証用ハッシュ値を取り出し、両ハッシュ値の一致を確認することで相手を認証する。 [IPsecの導入効果] IPsecはOSI基本参照モデルの [ d ] 層で動作するため、上位アプリケーションを変更せずにセキュリティを確保できる。パケットを暗号化することで [ e ] を行い、ディジタル署名により [ f ] 及び改ざんの検知を行う。
- 設問1 ア
- 2
- 設問1 イ
- 5
- 設問1 ウ
- 7
- 設問1 エ
- 10
- 設問1 オ
- 13
- 設問2 a〜c ア
- 共通鍵
- 設問2 a〜c イ
- 受信側の公開鍵
- 設問2 a〜c ウ
- 受信側の秘密鍵
- 設問2 a〜c エ
- 送信側の公開鍵
- 設問2 a〜c オ
- 送信側の秘密鍵
- 設問3 d ア
- アプリケーション
- 設問3 d イ
- データリンク
- 設問3 d ウ
- トランスポート
- 設問3 d エ
- ネットワーク
- 設問3 e, f ア
- DoS攻撃の対策
- 設問3 e, f イ
- ウイルス感染の検知
- 設問3 e, f ウ
- セキュリティホールの修正
- 設問3 e, f エ
- 送受信するデータの圧縮
- 設問3 e, f オ
- 盗聴の対策
- 設問3 e, f カ
- なりすましの検知
解答・解説を表示
解答
設問1: エ, 設問2 a: オ, 設問2 b: ア, 設問2 c: エ, 設問3 d: エ, 設問3 e: オ, 設問3 f: カ
解説
まず要点:IPsec(IPを安全に送るためのしくみ)はネットワーク層で動き、IPパケット(通信のひとかたまり)を守ります。暗号化に使う鍵の共有には、秘密を先に渡さなくても安全に鍵を共有できるDiffie-Hellman法を使います。通信の中身を隠す機密性(盗聴対策)は共通鍵暗号で、改ざんの検知と送信者の確認(なりすましの検知)は公開鍵暗号を使ったディジタル署名とハッシュ関数で実現します。
解き方
- Diffie-Hellmanの式に従って鍵Aと鍵Bを mod Z で計算し、相手の鍵と自分の秘密の乱数からDH鍵を求めます。
- ディジタル署名の決まりに沿って、署名の作成は送信側の秘密鍵、確認は送信側の公開鍵、共通鍵暗号の復号は共通鍵だと対応付けます。
- IPsecが動く階層(ネットワーク層)と、暗号化・署名が守る内容(盗聴対策となりすまし防止)を整理します。
小問ごとの答え
- 小問 設問1:エ
- Z=11, X=7, Y=5 のとき、鍵A=2^7 mod 11=128 mod 11=7(128=11×11+7)、鍵B=2^5 mod 11=32 mod 11=10(32=11×2+10)となります。DH鍵は 鍵B^X mod Z=10^7 mod 11=(-1)^7 mod 11=-1 ≡ 10 と計算でき、エの10が正解です。(鍵A^Y mod Z=7^5 mod 11=(49)^2×7 mod 11=5^2×7 mod 11=25×7 mod 11=3×7 mod 11=21 mod 11=10 とも検算可能)
- 小問 設問2 a:オ
- ディジタル署名の作成は送信者本人にしか行えないようにするため、送信側自身の秘密鍵(オ)を用いてハッシュ値を暗号化します。
- 小問 設問2 b:ア
- データ本体は共通鍵暗号方式によって暗号化されているため、受信側で平文データに戻すには暗号化時と同一の共通鍵(ア)で復号します。
- 小問 設問2 c:エ
- ディジタル署名の検証では、送信者が自身の秘密鍵で暗号化した署名を、誰でも入手可能な送信側の公開鍵(エ)で復号して認証用ハッシュ値を取り出します。
- 小問 設問3 d:エ
- IPsecはネットワーク層(第3層)でセキュリティ機能を提供するプロトコルスイートであり、エが正解です。
- 小問 設問3 e:オ
- パケット全体(またはペイロード)を暗号化することにより、通信経路上での第三者によるデータの盗聴を防止(オ)します。
- 小問 設問3 f:カ
- ディジタル署名により、送信者が正規の相手であること(送信者認証)を確認して「なりすまし」を検知(カ)し、ハッシュ値の一致により「改ざん」を検知します。
覚えるポイント
- Diffie-Hellman法:共通の生成元と素数を用い、各端末の秘密数と公開値のべき乗剰余により共通鍵を算出する。
- ディジタル署名:作成は「送信者の秘密鍵」、検証は「送信者の公開鍵」を使用する。
間違えやすいところ
- ディジタル署名の作成を受信側の鍵や送信側の公開鍵と混同しやすいので注意します。
- IPsecが動く層をネットワーク層ではなくトランスポート層(TLSなど)と混同しやすいので注意します。
出題の前提:基本情報技術者試験シラバス・IPsec技術仕様に基づく。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.19 ↗(www.ipa.go.jp) / 公式問題冊子 p.20 ↗(www.ipa.go.jp) / 公式問題冊子 p.21 ↗(www.ipa.go.jp) / 公式問題冊子 p.22 ↗(www.ipa.go.jp)
ソフトウェアのテスト設計(ホワイトボックステストと制御フローグラフ)
ソフトウェア設計 · 制御フローテスト / 分岐網羅 / 短絡評価 / 制御フローグラフ / マッケーブの循環的複雑度
ソフトウェアのテスト設計に関するホワイトボックステスト(分岐網羅基準および制御フローグラフに基づくテストケース導出)について、設問1〜3に答えよ。
- ア
- 設問ごとに異なる選択肢群から選択
- イ
- 設問ごとに異なる選択肢群から選択
- ウ
- 設問ごとに異なる選択肢群から選択
- エ
- 設問ごとに異なる選択肢群から選択
- オ
- 設問ごとに異なる選択肢群から選択
- カ
- 設問ごとに異なる選択肢群から選択
- キ
- 設問ごとに異なる選択肢群から選択
解答・解説を表示
解答
設問1 a: ウ, 設問1 b: キ, 設問2 c: ア, 設問2 d: エ, 設問2 e: カ, 設問2 f: オ, 設問3 g: イ, 設問3 h: オ
解説
まず要点:ホワイトボックステストの分岐網羅(ぶんきもうら)は、各分岐の真と偽の両方を少なくとも1回通るようにテストを設計します。短絡評価(たんらくひょうか)では、ORは左側が真なら右側を調べず、ANDは左側が偽なら右側を調べません。循環的複雑度(マッケーブの複雑度)は「辺の数 − 点の数 + 2」で、独立した経路の数を表します。
解き方
- 設問1では、テストケースの変数の値に従って論理式を左から順に調べ、短絡評価で省かれる条件を見つけます。
- 設問2では、図2の命令や判定の番号を、図3の制御フローグラフの分岐や合流と1対1で対応付けます。
- 設問3では、分岐網羅に必要な最小のテストケース数を考え、次に制御フローグラフの辺と点を数えて循環的複雑度Sを計算します。
小問ごとの答え
- 小問 設問1 a:ウ
- テストケース①(x=11, a=9, b=19, c=10, d=10)では、まず(a < 10)が9 < 10で真となるため、短絡評価によりor演算の右辺である(b < 20)は評価されません。次に(c > 10)が10 > 10で偽となるため、短絡評価によりand演算の右辺である(d > 10)は評価されません。したがって「b < 20 と d > 10 が評価されない」となります。
- 小問 設問1 b:キ
- テストケース②(x=11, a=10, b=20, c=11, d=11)では、(a < 10)は10 < 10で偽となり短絡評価されず(b < 20)も評価されます(20 < 20で偽)。続く(c > 10)は11 > 10で真となり短絡評価されず(d > 10)も評価されます(11 > 10で真)。よって「全ての単独条件が評価される」となります。
- 小問 設問2 c:ア
- 図3のノード②(func1())から進む分岐点cは、プログラムの最初の条件判定である(a < 10)に対応するため、ノード番号は③となります。
- 小問 設問2 d:エ
- ノード⑤(func2())から下に向かう処理はノード⑥(func3())です。図3においてノード⑤の下に位置し、その後エッジが⑦へ合流するノードdは⑥となります。
- 小問 設問2 e:カ
- ノード⑦から右下の⑧へ行かず左へ抜ける分岐(偽の経路)、またはループの本体の最後で実行される処理はノード⑩(func5())です。ノード⑩を実行した後にループ先頭の①へと戻る構造になっているため、eは⑩となります。
- 小問 設問2 f:オ
- ノード⑦(c > 10)が真のときに次に判定される条件は⑧(d > 10)です。したがって⑦から下に向かう判定ノードfは⑧となります。
- 小問 設問3 g:イ
- 図1のプログラムには、ループ判定x>10(真/偽)、分岐(a<10) or (b<20)(真/偽)、分岐(c>10) and (d>10)(真/偽)があります。すべての分岐の真・偽経路を少なくとも1回実行(分岐網羅)するためには、最低限3個のテストケースが必要です。
- 小問 設問3 h:オ
- 最小の経路数Sは式「エッジの数 - ノードの数 + 2」で求められます。図3のグラフにはS, Eを含めて11個のノードがあり、エッジ数は15本あります。計算すると 15 - 11 + 2 = 6 となります。
覚えるポイント
- OR演算は左辺が真なら右辺は評価されない
- AND演算は左辺が偽なら右辺は評価されない
- 循環的複雑度 = エッジ数 - ノード数 + 2
間違えやすいところ
- 短絡評価の決まりを忘れて、すべての条件式を調べてしまう間違いに注意します。
- 制御フローグラフの入口の点Sと出口の点Eを、点の数に数え忘れる間違いに注意します。
出題の前提:平成25年度秋期基本情報技術者試験午後問題 問5
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.23 ↗(www.ipa.go.jp) / 公式問題冊子 p.24 ↗(www.ipa.go.jp) / 公式問題冊子 p.25 ↗(www.ipa.go.jp) / 公式問題冊子 p.26 ↗(www.ipa.go.jp) / 公式問題冊子 p.27 ↗(www.ipa.go.jp)
プロジェクトの実績管理(進捗率・生産性・作業計画の見直し)
プロジェクトマネジメント · 進捗管理 / 生産性 / 作業工数見積り / スケジュール短縮
プロジェクトの実績管理に関する問題文を読み、内部設計工程の進捗分析およびプログラミング工程の計画変更について、設問1・2に答えよ。
- ア
- 設問ごとに異なる選択肢群から選択
- イ
- 設問ごとに異なる選択肢群から選択
- ウ
- 設問ごとに異なる選択肢群から選択
- エ
- 設問ごとに異なる選択肢群から選択
- オ
- 設問ごとに異なる選択肢群から選択
- カ
- 設問ごとに異なる選択肢群から選択
- キ
- 設問ごとに異なる選択肢群から選択
解答・解説を表示
解答
設問1 a: イ, 設問1 b: ア, 設問1 c: ア, 設問2 d: ウ, 設問2 e: キ, 設問2 f: ア
解説
まず要点:プロジェクトの実績管理では、計画の進捗率と実際の進捗率の差を見て、生産性(作業量を投下した工数で割った値)を計画と比べて遅れの原因を探ります。工程を短くしたり計画を変えたりするときは、週に使える工数の上限(人数×週の労働時間)や作業の順番の決まりを守るように工数を配り直します。
解き方
- 設問1:第2週の終わりでの計画と実績の完了数から進捗率を出して差を求め、共通と固有の順番の決まりから生産性を計算し、残り工数を予測します。
- 設問2(d):見直す前と後の標準工数からプログラミングの総工数を計算し、削減できる工数を求めます。
- 設問2(e):週400人時の上限と、週の終わりに仕掛かりを残さない条件のもとで、共通から順に第4週・第5週・第6週へ割り当てられる本数を計算します。
- 設問2(f):表4の各週の本数について、共通と固有の内訳から工数を計算し、週ごとの工数の最大差を求めます。
小問ごとの答え
- 小問 設問1 a:イ
- 2週経過時点の計画完了本数は第1週50本+第2週50本=100本で、計画進捗率は 100 / 120 ≒ 83.33% です。実績完了本数は第1週40本+第2週50本=90本で、実績進捗率は 90 / 120 = 75.00% です。差分は 83.33 - 75.00 = 8.33ポイントとなり、約8ポイント下回っています。
- 小問 設問1 b:ア
- 共通プログラム30本は先行して行われるため、第1週の実績40本の内訳は共通30本+固有10本です。第2週の実績50本は全て固有プログラムです。第2週の固有プログラムの生産性は 50本 / 400人時 = 0.125本/人時(1本あたり8人時)で計画値通りです。一方、第1週の共通30本の工数は、第1週の固有10本に掛かった工数(10本×8人時=80人時)を引くと 380 - 80 = 300人時となり、共通プログラム1本あたり 300 / 30 = 10人時(生産性0.10本/人時)です。計画値(1本あたり8人時)を下回っているのは「共通プログラム」です。
- 小問 設問1 c:ア
- 残りのプログラム本数は 120 - 90 = 30本であり、すべて固有プログラムです。第2週から固有プログラムの実績は1本あたり8人時であるため、残りの予測工数は 30本 × 8人時 = 240人時となります。
- 小問 設問2 d:ウ
- 当初のプログラミング総工数は、共通30本×10人時 + 固有90本×10人時 = 1,200人時でした。変更後は共通30本×8人時 + 固有90本×9人時 = 240 + 810 = 1,050人時となります。したがって削減工数は 1,200 - 1,050 = 150人時です。
- 小問 設問2 e:キ
- メンバ10名×1日8時間×5日=400人時/週が各週の工数上限です。第3週にプログラミングを10本(共通10本=80人時)行います。第4週は残り共通20本(160人時)を行い、残りの 400 - 160 = 240人時で固有を 240 / 9 = 26.66...本まで可能ですが、仕掛りを残さない整数本数として固有26本(234人時)を行います。第4週の合計本数は 20 + 26 = 46本(394人時)。第5週は固有プログラムを上限400人時以内で最大 44本(44×9=396人時)行います。第6週は残りの固有プログラム 90 - 26 - 44 = 20本(180人時)となります。したがって本数の並びは第4週46、第5週44、第6週20(選択肢キ)となります。
- 小問 設問2 f:ア
- 表4の本数は第4週38本、第5週36本、第6週36本です。第3週に共通10本を実施済みなので、第4週は残り共通20本(20×8=160人時)+固有18本(18×9=162人時)=322人時です。第5週は固有36本(36×9=324人時)、第6週は固有36本(36×9=324人時)です。第4〜6週の各週工数は322人時、324人時、324人時となり、工数の差は最大で 324 - 322 = 2人時です。
覚えるポイント
- 進捗率(%) = (完了本数 / 総本数) × 100
- 共通プログラムを先行して完了させてから固有プログラムに着手する
- 週の工数上限 = 人数 × 1日あたりの上限時間 × 稼働日数
間違えやすいところ
- 第1週と第2週で共通プログラムと固有プログラムが混ざっているのを見落とし、生産性を間違えやすいので注意します。
- 週の終わりに仕掛かりを残さない(端数の工数を持ち越せない)条件を計算で忘れないように注意します。
出題の前提:平成25年度秋期基本情報技術者試験午後問題 問6
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.28 ↗(www.ipa.go.jp) / 公式問題冊子 p.29 ↗(www.ipa.go.jp) / 公式問題冊子 p.30 ↗(www.ipa.go.jp) / 公式問題冊子 p.31 ↗(www.ipa.go.jp)
販売管理システムの見直しに伴う業務改善
システム戦略 · 業務プロセス改善 / 在庫管理 / 安全在庫の集約効果
美容用品卸売業者A社における販売管理システムの見直しおよび物流倉庫への在庫集約に伴う業務改善に関する問題である。現状の業務分析から得られた問題点と改善案、システム改修の要求事項、ならびに在庫集約モデル式を用いた在庫削減効果の試算について、設問1〜3に答えよ。
- 設問1 a ア
- 営業所に市場の生の声
- 設問1 a イ
- 営業所に注文内容
- 設問1 a ウ
- 顧客に在庫数
- 設問1 a エ
- 物流担当に注文内容
- 設問1 b ア
- 営業所に商品発送
- 設問1 b イ
- 顧客に一括発送
- 設問1 b ウ
- メーカから商品発送
- 設問1 b エ
- メーカに一括発注
- 設問2 c ア
- 営業担当
- 設問2 c イ
- 顧客
- 設問2 c ウ
- 事務担当
- 設問2 c エ
- 販売管理システム
- 設問2 d ア
- 顧客を訪問する回数が削減される
- 設問2 d イ
- 受発注処理や在庫管理に費やす時間が削減される
- 設問2 d ウ
- 全ての商品で発注点と発注量が同じになる
- 設問2 d エ
- ニーズを効率よく聴くことができる
- 設問3 e ア
- 283
- 設問3 e イ
- 307
- 設問3 e ウ
- 465
- 設問3 e エ
- 565
- 設問3 f ア
- 需要比率が各営業所で均一に近い商品の場合に高い
- 設問3 f イ
- 需要比率が特定の営業所に偏在している商品の場合に高い
- 設問3 f ウ
- 需要比率が偏在している商品と均一に近い商品とでは、どちらが高いかは一概には言えない
- 設問3 f エ
- どの商品も、各営業所の需要比率に関係なく同じである
解答・解説を表示
解答
設問1 a: エ, 設問1 b: エ, 設問2 c: ウ, 設問2 d: イ, 設問3 e: イ, 設問3 f: ア
解説
まず要点:在庫を1か所に集めると、回転在庫(売れて入れ替わる分)の合計は需要の総量で決まるので変わりませんが、安全在庫(不足を防ぐために余分に持つ分)は大きく減ります。これは各拠点の需要のばらつきが打ち消し合う「平方根の法則(リスクプーリング)」によるものです。需要が各拠点に均等に分かれている商品ほど、集約でばらつきが消えて在庫が減りやすくなります。
解き方
- 業務分析の現状と改善案を比べ、各業務の担当者の変更とシステム機能の要件(a、b)、業務改善の効果(c、d)を特定します。
- 与えられた総在庫数の式に従って、商品Kの回転在庫の合計と安全在庫を計算し、総在庫数を求めます(e)。
- 商品K(需要が各拠点に分散)と商品L(需要が特定の拠点に偏る)の削減量を比べ、需要の分け方と削減効果の関係を導きます(f)。
小問ごとの答え
- 小問 設問1 a:エ
- 改善案(1)では「営業担当は、注文内容を電子情報にして物流担当に伝える」とあり、これを携帯端末からの入力によって即時にシステムに反映させるため、空欄aには「物流担当に注文内容」が入る。
- 小問 設問1 b:エ
- 改善案(3)では「メーカへの発注は営業所から行わず、物流担当がまとめて行う」とあり、物流担当が一元管理して発注点・発注量を設定できるようにするため、空欄bには「メーカに一括発注」が入る。
- 小問 設問2 c:ウ
- 現状の営業所の「事務担当」が受発注処理や他営業所への在庫融通手配・在庫管理に多くの時間を費やしていたため、倉庫の集約により作業が軽減されるのは事務担当である。
- 小問 設問2 d:イ
- 問題点(3)「事務担当が受発注処理や在庫管理に費やす時間が増えている。他営業所の在庫確認や、営業所間での商品の発送作業と受取り作業にも手間が掛かっている」を解消する効果であるため、「受発注処理や在庫管理に費やす時間が削減される」が入る。
- 小問 設問3 e:イ
- 商品Kの集約後の総在庫数は、回転在庫数の合計(25+30+20+10+10=95)と集約後安全在庫数の和となる。安全在庫の計算式は (Σ安全在庫数) / (Σ√需要比率) であり、Σ安全在庫数は 100+150+100+70+50 = 470。分母は √0.2×3 + √0.3 + √0.1 = 0.45×3 + 0.55 + 0.32 = 1.35 + 0.87 = 2.22。したがって安全在庫数は 470 / 2.22 ≒ 211.71。総在庫数は 95 + 211.71 = 306.71 となり、小数第1位を四捨五入して 307 となる。
- 小問 設問3 f:ア
- 商品Kは集約前総在庫が 95+470=565 から 307 に約258削減される。一方、商品Lは集約前総在庫が 95+470=565、集約後が 465 で削減数は 100 にとどまる。商品Kのように需要比率が各営業所で均一に近い(分散している)ほど集約による安全在庫の削減効果が高くなる。
覚えるポイント
- 安全在庫の集約効果は需要が分散(均一)しているほど大きく、特定拠点に集中しているほど小さい。
間違えやすいところ
- 総在庫数を求めるときに、集約後の安全在庫だけでなく回転在庫の合計95も足すのを忘れないよう注意します。
出題の前提:問題文中に示された業務現状・改善案および総在庫数推定の算術式。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.32 ↗(www.ipa.go.jp) / 公式問題冊子 p.33 ↗(www.ipa.go.jp) / 公式問題冊子 p.34 ↗(www.ipa.go.jp) / 公式問題冊子 p.35 ↗(www.ipa.go.jp) / 公式問題冊子 p.36 ↗(www.ipa.go.jp)
文字列の圧縮・復元アルゴリズム
データ構造及びアルゴリズム · 文字列処理 / データ圧縮 / LZ77符号化 / 擬似言語
文字列中に繰り返し出現する文字並びを制御記号「$」、距離、一致文字数で表す圧縮列に置き換えるアルゴリズムおよびその復元アルゴリズムに関する問題である。副プログラム Compress と Decompress の処理手順、空欄 a〜e の補完、および復元時の処理回数 f について、設問1・2に答えよ。
- 設問1 a ア
- Pindex - Distance >= 0
- 設問1 a イ
- Pindex - Plength >= 0
- 設問1 a ウ
- Plength - Distance >= 0
- 設問1 a エ
- Plength - Pindex >= 0
- 設問1 b ア
- Plaindata[Pindex + Distance]
- 設問1 b イ
- Plaindata[Pindex + Distance + Fitnum]
- 設問1 b ウ
- Plaindata[Pindex - Distance]
- 設問1 b エ
- Plaindata[Pindex - Distance + Fitnum]
- 設問1 c ア
- Cindex <- Cindex + 1
- 設問1 c イ
- Distance <- Distance + 1
- 設問1 c ウ
- Fitnum <- Fitnum + 1
- 設問1 c エ
- Pindex <- Pindex + 1
- 設問1 c オ
- Plength <- Plength + 1
- 設問1 d ア
- Pindex <- Pindex + 1
- 設問1 d イ
- Pindex <- Pindex + 3
- 設問1 d ウ
- Pindex <- Pindex + Maxdistance
- 設問1 d エ
- Pindex <- Pindex + Maxfitnum
- 設問1 e ア
- Compresseddata[Pindex + Start + Fitcnt]
- 設問1 e イ
- Compresseddata[Pindex - Start + Fitcnt]
- 設問1 e ウ
- Plaindata[Pindex + Start + Fitcnt]
- 設問1 e エ
- Plaindata[Pindex - Start + Fitcnt]
- 設問2 f ア
- 3
- 設問2 f イ
- 4
- 設問2 f ウ
- 5
- 設問2 f エ
- 6
- 設問2 f オ
- 7
- 設問2 f カ
- 8
解答・解説を表示
解答
設問1 a: ア, 設問1 b: エ, 設問1 c: イ, 設問1 d: エ, 設問1 e: エ, 設問2 f: カ
解説
まず要点:辞書式圧縮(LZ77方式の変形)では、前にある同じ文字の並びを探し、一定の長さ(この問題では4文字以上)が一致したら「さかのぼる距離」と「一致した長さ」の組に置き換えます。復元するときは、普通の文字はそのまま出し、制御記号($)が来たら、すでに戻した前の位置から指定された数だけコピーします。
解き方
- Compressのループ変数(Distance、Fitnum、Pindex)の役割をとらえ、文字列の境界の条件式a、文字を比べる式b、距離の加算c、インデックスの更新dを特定します。
- Decompressの復元のしくみから、復元済みのPlaindataを見る添字の式eを導きます。
- 設問2の文字列について、4文字以上の最も長い一致を前方に探して、圧縮される部分とそのまま出る文字を特定し、普通の文字の個数(αの実行回数)を数えます。
小問ごとの答え
- 小問 設問1 a:ア
- 比較対象の先頭位置は Pindex から Distance 文字前であり、文字列の先頭(添字0)未満になってはならないため、Pindex - Distance >= 0 が条件となる。
- 小問 設問1 b:エ
- 圧縮対象文字 Plaindata[Pindex + Fitnum] と比較するのは、Distance 文字前から始まる比較対象文字 Plaindata[Pindex - Distance + Fitnum] である。
- 小問 設問1 c:イ
- Distance を 4 から始めて最大 26 文字前まで順次増やしながら比較文字位置を移動させるため、ループの更新処理として Distance <- Distance + 1 を行う。
- 小問 設問1 d:エ
- 圧縮列に置換した場合、圧縮対象となった文字数(Maxfitnum 文字)だけ次の圧縮位置を先方に進める必要があるため、Pindex <- Pindex + Maxfitnum とする。
- 小問 設問1 e:エ
- 復元処理では、既に Plaindata に復元済みの位置 Pindex から Start 文字前の位置を基準として、順に文字をコピーするため、Plaindata[Pindex - Start + Fitcnt] となる。
- 小問 設問2 f:カ
- プログラム2の α 部分(Plaindata[Pindex] <- Compresseddata[Cindex])が実行される回数は、圧縮されずにそのまま非制御記号として出力された文字数に等しい。与えられた文字列「ABCDEFGABCDEABCDEFEFGABCD」において、先頭「ABCDEFG」(7文字)はそのまま出力。続く「ABCDE」は直前の「ABCDE」と5文字一致(圧縮列置換)。続く「ABCDE」も直前の「ABCDE」と5文字一致(圧縮列置換)。続く「F」(1文字)は一致長不足でそのまま出力。続く「EFGABCD」は直前の「EFGABCD」と7文字一致(圧縮列置換)。したがって非制御文字は先頭7文字と「F」の1文字の計8文字となり、αは8回実行される。
覚えるポイント
- LZ77形式の復元では、制御記号以外の文字がそのまま出力配列にコピーされ、制御記号は過去の出力バッファを参照して展開される。
間違えやすいところ
- 設問2で先頭のABCDEFGの7文字だけでなく、途中で1回だけ出て一致の長さに足りず圧縮されないFを見落として7回と間違えやすいので注意します。
出題の前提:問題文のアルゴリズム仕様および提示された擬似言語プログラム1・2。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.37 ↗(www.ipa.go.jp) / 公式問題冊子 p.38 ↗(www.ipa.go.jp) / 公式問題冊子 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)
英単語の辞書順比較プログラム(C言語)
ソフトウェア開発 · C言語 / 文字列処理 / strcmp / 文字情報配列
英大文字、英小文字、ハイフン(-)、ピリオド(.)を含む2つの英単語を辞書順で比較するCプログラムに関する次の設問に答えよ。 設問1: 引数word1を“A.D.”、word2を“ad-”として関数diccmpを実行した。関数diccmpのreturn文を実行する直前でのattr1の内容(a)、attr2の内容(b)、rcの内容(c)として正しいものをそれぞれ選べ。 設問2: 4個の単語“CO”、“Co.”、“co-”、“co.”をdiccmpで相互に比較したときの辞書順の大小関係(d)として正しいものを選べ。 設問3: 引数が仕様の条件を満たさない場合の動作に関する表1中の空欄(e〜g)に入る最も適切な記述をそれぞれ選べ。
- ア
- 設問1 a/b: 01 / 設問1 c: 0 / 設問2 d: “CO” < “Co.” < “co-” < “co.” / 設問3 e: 空文字列として扱い,プログラムは正常に終了する / 設問3 f: 30個目の英字 / 設問3 g: その文字が“-”,“.”以外の場合はその文字を無視するが,“- ”又は“.”の場合は配列の定義範囲外への書込みが発生するので,予期できない結果となる
- イ
- 設問1 a/b: 02 / 設問1 c: 正の値 / 設問2 d: “CO” < “Co.” < “co.” < “co-” / 設問3 e: 配列に何も値を設定せずに比較をするので,予期できない結果となる / 設問3 f: 30個目の英字(直後の文字が“-”又は“.”の場合はその文字) / 設問3 g: その文字を無視する
- ウ
- 設問1 a/b: 11 / 設問1 c: 負の値 / 設問2 d: “Co.” < “CO” < “co-” < “co.” / 設問3 e: 配列の定義範囲外への書込みが発生するので,予期できない結果となる / 設問3 f: 30文字目 / 設問3 g: 配列の定義範囲外への書込みが発生するので,予期できない結果となる
- エ
- 設問1 a/b: 22 / 設問2 d: “co-” < “co.” < “Co.” < “CO” / 設問3 e: プログラムが終了しない / 設問3 f: 30文字目(30文字目が英字で31文字目が“-”又は“.”の場合は31文字目) / 設問3 g: プログラムが終了しない
- オ
- 設問1 a/b: 41 / 設問2 d: “co.” < “co-” < “CO” < “Co.”
- カ
- 設問1 a/b: 42 / 設問2 d: “co.” < “co-” < “Co.” < “CO”
- キ
- 設問1 a/b: 55
- ク
- 設問1 a/b: 66
解答・解説を表示
解答
設問1 a: ク, 設問1 b: ア, 設問1 c: イ, 設問2 d: エ, 設問3 e: ア, 設問3 f: エ, 設問3 g: イ
解説
まず要点:辞書順の比較では、まず大文字と小文字を同じ形に直した文字列で比べ、同じだったら大文字・小文字や記号の違いを表す情報で細かい順番を決めます。同じ英字でも、大文字か小文字か、うしろに記号が付くかで順序が変わるためです。
解き方
- diccnv関数の動きを順に追い、各文字が大文字か小文字か、すぐ後ろに記号が付くかで決まる文字属性コード('0'〜'6')の求め方を理解します。
- 基本文字列が同じだったときは、strcmp(attr1, attr2)による辞書順の判定方法にしたがって比較結果を求めます。
小問ごとの答え
- 小問 設問1 a:ク
- 引数word1の“A.D.”は、英大文字'A'('4')に'.'が続くため+2されて'6'、'D'('4')に'.'が続くため+2されて'6'となり、attr1は“66”になります。
- 小問 設問1 b:ア
- 引数word2の“ad-”は、小文字'a'('0')の直後に英字'd'が来るため加算なしで'0'、'd'('0')の直後に'-'が続くため+1されて'1'となり、attr2は“01”になります。
- 小問 設問1 c:イ
- 基本文字列char1とchar2は共に“ad”で一致するため、strcmp(attr1, attr2)の比較が行われます。attr1(“66”)とattr2(“01”)の先頭文字を比較すると'6' > '0'なので正の値が返されます。
- 小問 設問2 d:エ
- 基本文字列は全て“co”です。文字情報列は、“co-”が“01”、“co.”が“02”、“Co.”が“42”、“CO”が“44”となるため、辞書順昇順では“co-” < “co.” < “Co.” < “CO”となります。
- 小問 設問3 e:ア
- 文字列の長さが0(wordx[0] == '\0')の場合、while条件の判定で即座にループを抜け、charx[0]とattrx[0]に'\0'が設定されて空文字列として正常終了します。
- 小問 設問3 f:エ
- while文はwpos < 30の間継続し、30文字目が英字で31文字目が'-'または'.'の場合はループ内部でwpos++されるため、最大で31文字目までが有効に処理されます。
- 小問 設問3 g:イ
- 先頭文字が英字でない場合、isalpha(ch)が偽となって文字変換やcposの加算が行われず、そのまま次の文字の走査に進むため、その文字は単に無視されます。
覚えるポイント
- 辞書順比較は基本文字列の一致後に属性情報文字列のstrcmpで判定する手法が定石です。
間違えやすいところ
- 記号「-」や「.」が単独の文字ではなく、直前の英字の属性として1文字分の情報にまとめられる点を見落とさないよう注意します。
出題の前提:平成25年度秋期基本情報技術者試験午後問9の問題文および公式解答・採点講評。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.45 ↗(www.ipa.go.jp) / 公式問題冊子 p.46 ↗(www.ipa.go.jp) / 公式問題冊子 p.47 ↗(www.ipa.go.jp) / 公式問題冊子 p.48 ↗(www.ipa.go.jp) / 公式問題冊子 p.49 ↗(www.ipa.go.jp)
テニスコート予約管理プログラム(COBOL)
ソフトウェア開発 · COBOL / 索引ファイル / 多次元テーブル走査 / 条件判定
事業所内にある4面のテニスコートの予約を受け付けるCOBOLサブプログラムに関する次の設問に答えよ。 設問1: プログラム中の空欄(a〜d)に入れる正しい答えを解群から選べ。 設問2: 隣合わせのコートを希望する機能(PRM-NEXT=1)の追加に伴い、2面予約時にフェンスを挟んだコート(1・2番コートと3・4番コートの間)が割り当てられた場合は予約不可(RSV-NOTE=4)とするための変更内容(e〜g:順不同)を解群から選べ。
- ア
- 設問1 a〜c: COMPUTE TIME-START = PRM-TIME - 7 / 設問1 d: CHK-NG / 設問2 e〜g: ((COURT-NO(1) = 1 OR 2) AND (COURT-NO(2) = 3 OR 4))
- イ
- 設問1 a〜c: MOVE BKUP-AREA TO RSV-COURT(COURT-CNT) / 設問1 d: CHK-OK / 設問2 e〜g: (COURT-CNT = 3 OR 4)
- ウ
- 設問1 a〜c: MOVE COURT-CNT TO KEEP-COURT / 設問1 d: KEEP-COURT NOT = ZERO / 設問2 e〜g: (COURT-NO(1) = 1 OR 3)
- エ
- 設問1 a〜c: MOVE PRM-TIME TO TIME-CNT / 設問1 d: PRM-NUM NOT = KEEP-COURT / 設問2 e〜g: NEXT-OFF
- オ
- 設問1 a〜c: MOVE RSV-RNO(COURT-CNT TIME-CNT) TO PRM-RNO / 設問1 d: PRM-NUM = KEEP-COURT / 設問2 e〜g: NEXT-ON
- カ
- 設問1 a〜c: MOVE TIME-CNT TO COURT-CNT / 設問2 e〜g: PRM-NUM = 2
- キ
- 設問1 a〜c: SET CHK-NG TO TRUE / 設問2 e〜g: RSV-OK
- ク
- 設問1 a〜c: SET CHK-OK TO TRUE
解答・解説を表示
解答
設問1 a: ア, 設問1 b: ク, 設問1 c: イ, 設問1 d: エ, 設問2 e: ア, 設問2 f: オ, 設問2 g: カ (e〜gは順不同)
解説
まず要点:COBOLで表(テーブル)を扱うときは、時間帯のような業務上の番号と配列の添字のずれを正しく換算し、仮に書き換えた内容は失敗したときに退避領域から元に戻す必要があります。番号と添字を取り違えると誤った場所を参照し、戻し忘れると予約の状態が壊れてしまうためです。
解き方
- 時間帯と添字の対応(8時台が1、9時台が2…)から、添字を求める計算式を導きます。
- ループの中でのチェックフラグの初期化、失敗したときの退避領域からの復元、希望面数が確保できたかの判定を順に特定します。
- 仕様変更の要件(隣合わせ希望で2面予約のとき、フェンスをまたぐ配置を見つける)を論理積の条件として整理します。
小問ごとの答え
- 小問 設問1 a:ア
- 予約可能な時間帯は8時から16時台の9要素(添字1〜9)であるため、8時台を添字1に対応させるにはPRM-TIMEから7を減算する必要があります。
- 小問 設問1 b:ク
- 各コートの空き状況を時間帯ごとに検査するループの直前で、検査状態フラグを初期化するためにSET CHK-OK TO TRUEを実行します。
- 小問 設問1 c:イ
- 空きがなく途中で予約不可(CHK-NG)となった場合、それまでに仮登録した時間帯の予約番号を元に戻すため、退避しておいたBKUP-AREAをRSV-COURT(COURT-CNT)へ復帰させます。
- 小問 設問1 d:エ
- 確保できた面数KEEP-COURTが希望面数PRM-NUMと一致しない(NOT =)場合、希望通りの予約ができなかったとして予約NG(RSV-NG)を設定します。
- 小問 設問2 e:ア
- コートは番号の小さい順に確保されるため、確保された2面COURT-NO(1)とCOURT-NO(2)について、一方が1番または2番コート、他方が3番または4番コートである条件を指定します。
- 小問 設問2 f:オ
- 隣合わせ希望フラグが有効(PRM-NEXT = 1)である条件として、88レベルのNEXT-ONを判定に含めます。
- 小問 設問2 g:カ
- 仕様よりフェンスを挟んだ予約を禁止するのは希望面数が2面の場合に限られるため、PRM-NUM = 2を条件に含めます。
覚えるポイント
- COBOLの88レベル条件名は、フラグの値設定(SET)やIF条件での直感的な状態判定に多用されます。
間違えやすいところ
- 添字計算の基準(8時台が1)を間違えて、PRM-TIMEをそのまま添字として使ってしまうミスに注意します。
出題の前提:平成25年度秋期基本情報技術者試験午後問10の問題文および公式解答・採点講評。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.50 ↗(www.ipa.go.jp) / 公式問題冊子 p.51 ↗(www.ipa.go.jp) / 公式問題冊子 p.52 ↗(www.ipa.go.jp) / 公式問題冊子 p.53 ↗(www.ipa.go.jp) / 公式問題冊子 p.54 ↗(www.ipa.go.jp)
ディレクトリ木構造の生成と探索プログラム
ソフトウェア開発 · Java / 木構造 / 再帰呼出し / オブジェクト指向
ディレクトリパスから木構造を生成および探索するJavaプログラムに関する次の設問に答えよ。
- ア
- 設問ごとに提示された解答群のア
- イ
- 設問ごとに提示された解答群のイ
- ウ
- 設問ごとに提示された解答群のウ
- エ
- 設問ごとに提示された解答群のエ
- オ
- 設問ごとに提示された解答群のオ
- カ
- 設問ごとに提示された解答群のカ
解答・解説を表示
解答
設問1 a: イ, 設問1 b: エ, 設問1 c: エ, 設問1 d: ウ, 設問1 e: イ, 設問2: ウ, 設問3 f: エ
解説
まず要点:木構造では、どの節点(ノード)も自分を頂点とする小さな木の根として、同じ手順を繰り返し呼び出して扱います。パス文字列を分解したり子をすべて探したりするときは、再帰呼出しとリストの走査を組み合わせ、根かどうか・葉(子がない)かどうかの終了条件を正しく決めることが大切です。
解き方
- ノードの初期化の決まり(根の名前は空文字列、親はnull)を確認し、コンストラクタに渡す引数を決めます。
- 例外になる条件である、空文字列または絶対パスを表す論理条件式を導きます。
- Testerクラスの各add呼出しで追加されるノードを木の図に表し、重複しない新しく作られるインスタンスの総数を数えます。
- 末尾のスラッシュを付ける条件が変わったことに合わせ、葉(子が0個)を判定するListインタフェースのメソッドを選びます。
小問ごとの答え
- 小問 設問1 a:イ
- 引数を取らないコンストラクタDirectoryNode()はルートノードを生成します。ルートノードは名前が空文字列""であり、親ノードが存在しないため親への参照はnullとなります。したがって、2引数のコンストラクタを呼び出す記述はthis("", null)となります。
- 小問 設問1 b:エ
- addメソッドは「引数pathが空文字列又は絶対パスを表すなら、IllegalArgumentExceptionを投げる」という仕様です。絶対パスは先頭が"/"で始まるためpath.startsWith("/")で判定し、空文字列は"".equals(path)で判定して両者の論理和(||)を取ります。
- 小問 設問1 c:エ
- pathメソッドは自ノードがルートノードのときに"/"を返します。ルートノードである判定条件は親ノードへの参照parentがnullであることなので、parent == nullが適切です。
- 小問 設問1 d:ウ
- findメソッドにおいて自ノード直下に指定名の子ノードが存在する場合、findChild(name)により取得されたnodeインスタンスを結果リストretに追加するため、ret.add(node)となります。
- 小問 設問1 e:イ
- 自ノードの子ノードを頂点とするすべての部分木に対しても再帰的に探索を行うため、各子ノードのfindメソッドに対して検索対象のディレクトリ名である引数nameをそのまま渡します。
- 小問 設問2:ウ
- DirectoryNodeTester実行時の木構造は、ルートノード""(1)、root直下の"usr"(2)、usr直下の"bin"(3)、"local"(4)、local直下の"bin"(5)、"lib"(6)、root直下の"opt"(7)、opt直下の"local"(8)の計8個のノードが生成されます。
- 小問 設問3 f:エ
- 子ノードを持たないリーフノードの場合にのみ末尾の"/"を付けずに返す変更を行います。childrenフィールドはArrayListインスタンスで初期化されているためnullにはならず、リストが空である判定はchildren.isEmpty()で行います。
覚えるポイント
- Javaのコレクションにおいて、インスタンスが生成済みのリストが要素を持たない判定にはisEmpty()を使用する。
間違えやすいところ
- List型のフィールドがnew ArrayList<>()で初期化されているのに、要素数0の判定に== nullを使ってしまう誤りです。
出題の前提:平成25年度秋期 基本情報技術者試験 午後 問11
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.55 ↗(www.ipa.go.jp) / 公式問題冊子 p.56 ↗(www.ipa.go.jp) / 公式問題冊子 p.57 ↗(www.ipa.go.jp) / 公式問題冊子 p.58 ↗(www.ipa.go.jp) / 公式問題冊子 p.59 ↗(www.ipa.go.jp)
アセンブラによる時間文字列と秒数値の相互変換
ソフトウェア開発 · CASL II / COMET II / ビットシフト / 進数変換
CASL IIで記述された、4桁の数字列の時間(分秒)と数値の秒との相互変換プログラムおよび平均値算出プログラムに関する次の設問に答えよ。
- ア
- 設問ごとに提示された解答群のア
- イ
- 設問ごとに提示された解答群のイ
- ウ
- 設問ごとに提示された解答群のウ
- エ
- 設問ごとに提示された解答群のエ
- オ
- 設問ごとに提示された解答群のオ
- カ
- 設問ごとに提示された解答群のカ
- キ
- 設問ごとに提示された解答群のキ
解答・解説を表示
解答
設問1 a: イ, 設問1 b: カ, 設問1 c: ア, 設問2 d: イ, 設問2 e: ウ, 設問3 f: ア, 設問3 g: キ
解説
まず要点:CASL IIにはかけ算・わり算の命令がないので、かけ算は「かけられる数を左にずらしながら、かける数のビットを調べて足す」方法で行います。わり算は「引けるだけ引く」繰り返し、または2の累乗で割るときの右論理シフトで行います。
解き方
- プログラム1の、ビットシフトを使ったかけ算ループの流れを追い、かける数が0でない間の分岐条件を特定します。
- プログラム2の、引き算の繰り返しによるわり算で、商を入れるレジスタ(GR5)と余りを入れるレジスタ(GR0)を特定します。
- かけ算の表(10, 6, 10)にあるビット1の数を合計し、ADDA命令が実行される回数を求めます。
- 秒数274を各単位(600, 60, 10)で割った商を求め、SUBA命令が実行される回数の合計を求めます。
- 4選手のタイムの合計をGR4にため、4で割るために右へ2ビットシフトする命令を当てはめます。
小問ごとの答え
- 小問 設問1 a:イ
- プログラム1の掛け算ループLOOP2では、乗数GR4を右シフトして最下位ビットを溢れさせ(JOV)、溢れた場合はINCRでGR5にGR0を加算してCONTへ進みます。溢れなかった場合はGR4がまだ0でなければ(JNZ)そのままCONTへ分岐してGR0を左シフトする必要があるため、JNZ CONTが入ります。
- 小問 設問1 b:カ
- プログラム2の割り算処理では、商がGR5に蓄算されます。NEXTでは商の数値を数字文字に変換するため'0'(#0030)との論理和を取り領域へ格納するので、レジスタはGR5(選択肢カ)です。
- 小問 設問1 c:ア
- LOOP3を抜けた後、最後に残った余り(1秒の桁)はGR0に保持されています。これを文字コード化して格納するため、OR c, ='0'の対象はGR0(選択肢ア)となります。
- 小問 設問2 d:イ
- プログラム1の掛け算ルーチンで行19(INCR)のADDAが実行される回数は、各桁の重み(VALUE1: 10, 6, 10)の2進表現におけるビット1の総数と一致します。10は1010(2)で2個、6は0110(2)で2個、10は1010(2)で2個であるため、合計2+2+2=6回実行されます。
- 小問 設問2 e:ウ
- 274秒を変換する場合、600での減算は0回、60での減算は4回(274-240=34)、10での減算は3回(34-30=4)行われます。したがって行番号10のSUBA命令の合計実行回数は0+4+3=7回となります。
- 小問 設問3 f:ア
- プログラム3のLOOP5内では各選手のタイム(秒)がTOSECによりGR0に返されるため、4人分のタイムの累計を保持するGR4に加算する命令「ADDA GR4, GR0」が必要です。
- 小問 設問3 g:キ
- 4名のタイムの合計値(GR4)から平均値を求めるには4で除算します。COMET IIの1語長において正の整数を4で割る処理は、右へ2ビット論理シフトすることと等価であるため「SRL GR4, 2」が適切です。
覚えるポイント
- CASL IIで正の整数を2^nで除算する場合、右論理シフトSRLをnビット実行することで商(小数点以下切り捨て)が得られる。
間違えやすいところ
- 平均を求めるときに4で割る操作を左シフト(SLL)と混同したり、シフト数を1ビット(2で割る)と間違えたりするミスです。
出題の前提:平成25年度秋期 基本情報技術者試験 午後 問12
出典:IPA『2013年度 秋期 午後』
公式問題冊子 p.60 ↗(www.ipa.go.jp) / 公式問題冊子 p.61 ↗(www.ipa.go.jp) / 公式問題冊子 p.62 ↗(www.ipa.go.jp) / 公式問題冊子 p.63 ↗(www.ipa.go.jp) / 公式問題冊子 p.64 ↗(www.ipa.go.jp)
知人関係の情報に基づく受講学生のグループ分け(表計算)
ソフトウェア開発 · 表計算 / 協調フィルタリング / マクロ / 表引き / 照合一致
ある科目を受講する学生50人を、知人関係の類似度に基づいて1グループ10人、計5グループに分ける表計算ワークシートおよびマクロに関する問題である。ワークシート“グループ分け”の推薦機能における空欄 a 〜 d、およびグループ分けを自動化するマクロ Grouping における空欄 e 〜 g に当てはまる最も適切なものを解答群から選べ。
- ア
- 設問1 cの正答「照合一致(1, P3~P52, 0)」などを含む選択肢記号
- イ
- 設問1 b「$A3, C$2」、設問1 d「表引き(Q3~Q52, C55, 1)」、設問2 g「相対(B2, C55, G55) ← 1」の正答
- ウ
- 設問1 a「論理積($H3=1, C$53=0)」、設問2 f「NumUsers」などの誤答選択肢
- エ
- 設問1 a「論理積($H3=1, C$53=1)」、設問2 f「NumUsers * (NumGroups - 1)」などの誤答選択肢
- オ
- 設問1 a「論理和($H3=0, C$53=0)」、設問1 d「照合検索(C55, Q3~Q52, A3~A52)」などの誤答選択肢
- カ
- 設問2 eの正答「相対(B2, 相対(B2, 0, I), I) ← 1」を含む選択肢記号
- キ
- 設問2 fの正答「NumUsers - NumGroups」を含む選択肢記号
- ク
- 設問1 aの正答「論理和($H3=1, C$53=1)」を含む選択肢記号
解答・解説を表示
解答
設問1 a: ク, 設問1 b: イ, 設問1 c: ア, 設問1 d: イ, 設問2 e: カ, 設問2 f: キ, 設問2 g: イ
解説
まず要点:表計算ソフトでグループ分けをするときは、似ている度合いを並べた表からの表引きや、照合関数を使った優先順位の制御、マクロによる繰り返しの処理を正しく理解して式やコードを組み立てる必要があります。
解き方
- 設問1では、ワークシートの各列(H列の割当て済フラグ、53行目の定員充足フラグ、P列の順位、Q列のグループ番号)の役割を読み取り、条件式や参照セル番地の絶対・相対の指定を整理します。
- 設問2では、マクロの2重ループの初期化の直後に行うグループ長の初期割当ての式と、残りの学生数を正しく求めて1人ずつ推薦割当てをするループの条件式を導きます。
小問ごとの答え
- 小問 設問1 a:ク
- 学生が既にいずれかのグループに割り当てられている条件は「$H3=1」、対応グループの学生数が10人(定員充足)である条件は「C$53=1」であり、いずれか一方でも満たす場合に-1を設定するため、論理和($H3=1, C$53=1)が適切です。
- 小問 設問1 b:イ
- 表引き関数で類似度行列を参照する際、行位置は行3の学生の受講者番号が格納された「$A3」、列位置は各グループのグループ長の受講者番号が格納された行2の「C$2」を指定します。
- 小問 設問1 c:ア
- 類似度最大の学生(順位が1位の学生)のうち受講者番号が最も小さい行を探すため、P3~P52の範囲で最初に1が現れる相対位置を求める「照合一致(1, P3~P52, 0)」を入力します。
- 小問 設問1 d:イ
- 推薦された学生(受講者番号はセルC55)の候補グループ番号は列Qに格納されているため、範囲Q3~Q52から行番号C55・列番号1を取り出す「表引き(Q3~Q52, C55, 1)」となります。
- 小問 設問2 e:カ
- グループ長を各グループに初期割当てするため、セルB2から列方向I番目にあるグループ長の受講者番号「相対(B2, 0, I)」を行方向オフセットとし、列方向I番目のセルを1にする「相対(B2, 相対(B2, 0, I), I) ← 1」を実行します。
- 小問 設問2 f:キ
- 全受講者数NumUsers(50人)のうち、手順②でグループ数NumGroups(5人)のグループ長が既に割り当てられているため、推薦によって割り当てる残りの人数は「NumUsers - NumGroups」(45回)となります。
- 小問 設問2 g:イ
- 推薦された学生の受講者番号はセルC55、グループ番号はセルG55に入力されているため、基準セルB2に対して行オフセットC55、列オフセットG55のセルに1を代入する「相対(B2, C55, G55) ← 1」を行います。
覚えるポイント
- 表引き関数の引数は「表引き(範囲, 行位置, 列位置)」の順序である。
- 照合一致関数の検索の指定0は完全一致であり、先頭から最初に見つかった位置を返す。
間違えやすいところ
- マクロの推薦ループの回数で、グループ長としてすでに割り当てた5人分を引き忘れてNumUsersとしてしまう誤りです。
- セルを複写するときの相対参照・絶対参照($記号の有無)を行側と列側で混同する誤りです。
出題の前提:基本情報技術者試験 表計算ソフトの機能・用語の仕様に基づく。
出典:IPA『2013年度 秋期 午後』
公式問題冊子 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)
2013年度 秋期 午後
参照した公式資料
IPAが公開した2013年度 秋期 午後の問題・解答資料です。

