pulpul 日本の試験

基本情報技術者 過去問題

基本情報技術者 2018年 秋期 午後 問題

基本情報技術者 2018年 秋期 午後の問題文33問です。この冊子のうち1問は、図版が中心であるなどの理由で掲載していません。図・表・別冊資料と正解は掲載していませんので、出典の公表資料またはアプリでご確認ください。

共通の文章

情報セキュリティ事故と対策。自動車の販売代理店であるA社は,Webサイトで自動車のカタログ請求を受け付けている。Webサイトは,Webアプリケーションソフト(以下,Webアプリという)が稼働するWebサーバと,データベースが稼働するデータベースサーバ(以下,DBサーバという)で構成されている。WebサーバはA社のDMZに設置され,DBサーバはA社の社内LANに接続されている。Webサイトの管理はB氏が,A社の社内LANに接続されている保守用PCからアクセスして行っている。カタログ請求者は,Webブラウザからインターネット経由でHTTP over TLSによってWebサイトにアクセスする。 【カタログ請求者の情報の登録】A社では,情報提供や購入支援を行うこと,及びカタログ請求者が別のカタログを請求したいときなどに,登録した電子メールアドレスとパスワードを使用してログインできるようにすることを目的として,カタログ請求者の情報を保持し,利用することの同意を得ている。同意が得られたときは,氏名,住所,電話番号,電子メールアドレス,パスワード,購入予定時期,購入予算,希望車種などの情報をWebアプリに入力してもらい,データベースに登録している。パスワードはハッシュ化し,それ以外の情報は平文でデータベースに格納している。A社では,カタログ請求者から要求があったときだけ,データベースからそのカタログ請求者の情報を消去する運用としている。 【カタログ請求者への対応】A社では,カタログ請求者へのカタログ送付後の購入支援を,データベースに登録されている情報を基に,電子メールと電話で行っている。 【情報セキュリティ事故の発生】ある日,A社の社員から,「A社のカタログ請求者一覧」と称する情報がインターネットの掲示板に公開されているとB氏に連絡があった。公開されている情報をB氏が確認したところ,データベースに登録されている情報の一部であったので,自社のデータベースから情報が流出したと判断して上司に報告した。B氏は上司からの指示を受けて,Webサイトのサービスを停止し,情報が流出した原因と流出した情報の範囲を特定することにした。 【情報セキュリティ事故の原因と流出した情報の範囲】B氏の調査の結果,WebアプリにSQLインジェクションの脆弱性があることが分かった。そのことからB氏は,攻撃者がインターネット経由でSQLインジェクション攻撃を行い,データベースに登録されているカタログ請求者の情報を不正に取得したと推測した。Webサーバとデータベースではアクセスログを取得しない設定にしていたこともあり,流出した情報の範囲は特定できなかった。そこで,データベースに登録されている全ての情報が流出したことを前提に,A社では,データベースに登録されている全てのカタログ請求者に情報の流出について連絡するとともに,対策を講じることにした。 【情報セキュリティ事故を踏まえたシステム面での対策】B氏は,今回の情報セキュリティ事故を踏まえたシステム面での対策案を,表1のようにまとめた。 表1 表1「情報セキュリティ事故を踏まえたシステム面での対策案」 列見出し:目的|対策 SQLインジェクション攻撃からの防御|SQL文の組立てはプレースホルダで実装する。/a 情報流出リスクの低減|b 情報流出の原因と流出した情報の範囲の特定|c

問問1 設問1

本文中の下線①について,この攻撃の説明として適切な答えを,解答群の中から選べ。

  • ア 攻撃者が,DNSに登録されているドメインの情報をインターネット経由で外部から改ざんすることによって,カタログ請求者を攻撃者のWebサイトに誘導し,カタログ請求者のWebブラウザで不正スクリプトを実行させる。
  • イ 攻撃者が,インターネット経由でDBサーバに不正ログインする。
  • ウ 攻撃者が,インターネット経由でWebアプリに,データベース操作の命令文を入力することによって,データベースを不正に操作する。
  • エ 攻撃者が,インターネット経由で送信されている情報を盗聴する。

出典:平成30年度 秋期 基本情報技術者試験 午後 問1 設問1

問問1 設問2

表1中の空欄に入れる対策として最も適切な答えを,解答群の中から選べ。 aに関する解答群 ア Webアプリへの入力パラメタには,Webサーバ内のファイル名を直接指定できないようにする。 イ Webサーバのメモリを直接操作するような命令を記述できないプログラム言語を用いて,Webアプリを作り直す。 ウ Webページに出力する要素に対して,エスケープ処理を施す。 エ データベース操作の命令文の組立てを文字列連結によって行う場合は,連結する文字列にエスケープ処理を施す。 bに関する解答群 ア カタログ請求者の情報の適切な保管期間を定め,カタログ請求者の同意を得た上で,保管期間を過ぎた時点でデータベースから消去する。 イ カタログ請求者の情報を,カタログ送付後に直ちに,データベースから消去する。 ウ カタログ請求者へ送付する電子メールにディジタル署名を付ける。 エ データベースに登録されている情報を定期的にバックアップする。 cに関する解答群 ア Webサイトの管理に使用する保守用PCは,必要なときだけ起動する。 イ WebサーバとDBサーバにインストールするミドルウェアは,必要最小限にする。 ウ WebサーバとDBサーバのハードディスクのデフラグメンテーションを,定期的に行う。 エ データベースへのアクセスログを取得する。

  • A-ア Webアプリへの入力パラメタには,Webサーバ内のファイル名を直接指定できないようにする。
  • A-イ Webサーバのメモリを直接操作するような命令を記述できないプログラム言語を用いて,Webアプリを作り直す。
  • A-ウ Webページに出力する要素に対して,エスケープ処理を施す。
  • A-エ データベース操作の命令文の組立てを文字列連結によって行う場合は,連結する文字列にエスケープ処理を施す。
  • B-ア カタログ請求者の情報の適切な保管期間を定め,カタログ請求者の同意を得た上で,保管期間を過ぎた時点でデータベースから消去する。
  • B-イ カタログ請求者の情報を,カタログ送付後に直ちに,データベースから消去する。
  • B-ウ カタログ請求者へ送付する電子メールにディジタル署名を付ける。
  • B-エ データベースに登録されている情報を定期的にバックアップする。
  • C-ア Webサイトの管理に使用する保守用PCは,必要なときだけ起動する。
  • C-イ WebサーバとDBサーバにインストールするミドルウェアは,必要最小限にする。
  • C-ウ WebサーバとDBサーバのハードディスクのデフラグメンテーションを,定期的に行う。
  • C-エ データベースへのアクセスログを取得する。

出典:平成30年度 秋期 基本情報技術者試験 午後 問1 設問2

問問1 設問3

B氏は上司から,表1にまとめた対策案だけで十分なのか検討せよとの指示を受けた。そこで,社外のセキュリティコンサルタント会社に相談したところ,「Webアプリに脆弱性がないか調査をした方がよい」と助言され,Webアプリの一部について脆弱性の調査を依頼した。その結果,クロスサイトスクリプティングの脆弱性が存在することが判明した。また,「Webアプリの他の部分にも脆弱性があることが疑われるので,Webアプリ全体の調査を行うとともに,新たな対策を講じた方がよい」と助言された。新たな対策として適切な答えを,解答群の中から選べ。

  • ア DBサーバを,Webサーバと同じく,DMZに設置する。
  • イ 不正な通信を遮断するために,WAF(Web Application Firewall)を導入する。
  • ウ Webサーバを増設して冗長化した構成にする。
  • エ 保守用PCのログインパスワードには英数字及び記号を使用し,推測が難しい複雑なものを設定する。

出典:平成30年度 秋期 基本情報技術者試験 午後 問1 設問3

共通の文章

問2 プロセスのスケジューリングに関する次の記述を読んで,設問1,2に答えよ。 OSの機能の一つに,プロセスのCPUへの割当てがある。プロセスをCPUに割り当てる順序(以下,実行順序という)を決定する方式として,本問で示すラウンドロビン方式と優先度順方式を考える。プロセスが実行されるコンピュータのCPUは一つであり,CPUは一度に一つのプロセスしか実行できないものとする。 ラウンドロビン方式では,キューを用いて,複数のプロセスを一定時間(以下,タイムクウォンタムという)を限度にCPUに割り当てて実行する。ラウンドロビン方式でプロセスの実行順序を決定する例を,図1に示す。 優先度順方式では,ラウンドロビン方式と同様にキューを用いて,複数のプロセスをタイムクウォンタムを限度にCPUに割り当てて実行する。この方式では,プロセスには優先度が与えられ,優先度ごとに決められたキューに登録される。優先度順方式でプロセスの実行順序を決定する例を,図4に示す。優先度は1~5の5段階であり,値の大きい方が優先度は高い。プロセスをキューから取り出すときは,プロセスが登録されているキューの中で,優先度の最も高いキューの先頭からプロセスを取り出す。 図1 ラウンドロビン方式でプロセスの実行順序を決定する例 キューに登録されているプロセスの状態を「実行可能」,実行中のプロセスの状態を「実行」,入出力の完了を待っているプロセスの状態を「待ち」と呼ぶ。プロセスを生成順にキューの末尾へ登録する。実行中のプロセスがない場合は,キューの先頭からプロセスを一つ取り出してCPUに割り当て,実行を開始する。実行中のプロセスの実行が終了すると,そのプロセスを消滅させる。タイムクウォンタムが経過したら実行を中断し,キューの末尾に登録する。実行中のプロセスが入出力を開始したら実行を中断する。入出力が完了したプロセスはキューの末尾に登録する。実行の中断はタイムクウォンタムの経過と入出力の開始だけで行い,「待ち」への遷移は入出力の開始だけで行う。OSによるオーバヘッドはない。図の凡例では,円がプロセス,括弧内の状態名がプロセスの状態を示す。 図2 プロセスXの処理順序 プロセスXの処理順序は,処理1(CPUを使用する)→入出力待ち1(CPUを使用しない)→処理2(CPUを使用する)→入出力待ち2(CPUを使用しない)→処理3(CPUを使用する)。 表1 プロセスXの処理時間及び待ち時間 単位はミリ秒。列は「処理1」「入出力待ち1」「処理2」「入出力待ち2」「処理3」。プロセスXの値は順に30,30,50,30,10。処理時間は,処理1,処理2及び処理3のそれぞれが実行を開始してから終了するまでに必要なCPUの使用時間。待ち時間は,入出力待ち1及び入出力待ち2のそれぞれが入出力を開始してから完了するまでに要する時間であり,その間CPUを使用しない。 図3 状態遷移 状態は「生成」「実行可能」「実行」「待ち」「消滅」。遷移①は実行可能から実行へ,②は実行から待ちへ,③は待ちから実行可能へ,④は実行から実行可能へ向かう。 図4 優先度順方式でプロセスの実行順序を決定する例 図4の優先度順方式では,生成時に優先度3を与える。実行中にタイムクウォンタムが経過して実行を中断した場合,現在の優先度が1なら優先度1を与え,現在の優先度が2~5なら1段階下げた優先度を与える。入出力が完了した場合は優先度5を与える。優先度ごとにキューがあり,実行可能なプロセスは該当する優先度のキューに登録される。実行中のプロセスが入出力を開始すると「待ち」になり,入出力完了後にキューへ登録される。タイムクウォンタム経過後はキューへ戻る。図の凡例では,円がプロセス,括弧内の状態名がプロセスの状態を示す。 表2 プロセスA,B,Cの生成時刻,処理時間及び待ち時間 単位はミリ秒。列は「プロセス名」「生成時刻」「処理1」「入出力待ち1」「処理2」「入出力待ち2」「処理3」。Aの値は0,30,20,50,30,10。Bの値は10,30,30,30,30,30。Cの値は30,20,10,20,10,90。生成時刻はプロセスAが生成された時刻からの経過時間。A,B,Cの三つが全て消滅するまで他のプロセスは新たに生成されず,OSによるオーバヘッドもない。入出力装置は同時に動作可能であり,同じ時間帯に複数のプロセスが「待ち」になっても待ち時間は表のとおりで変わらない。複数プロセスの入出力が同時に完了した場合,入出力開始から完了までの時間が最も長かったプロセスを先にキューに登録する。

問問2 設問1

タイムクウォンタムが20ミリ秒のとき,プロセスXが生成されてから消滅するまでに,図3に示す①~④の遷移が起こる回数の組合せとして正しい答えを,解答群の中から選べ。

  • ア ① 3回,② 2回,③ 2回,④ 0回
  • イ ① 3回,② 2回,③ 2回,④ 3回
  • ウ ① 3回,② 2回,③ 2回,④ 4回
  • エ ① 6回,② 2回,③ 2回,④ 0回
  • オ ① 6回,② 2回,③ 2回,④ 3回
  • カ ① 6回,② 2回,③ 2回,④ 4回

出典:平成30年度 秋期 基本情報技術者試験 午後 問2 設問1

問問2 設問2

表1に示すプロセスXを,図4に示す優先度順方式で実行する場合を考える。タイムクウォンタムが20ミリ秒のとき,プロセスXが生成されてから消滅するまでの優先度の推移を選べ。また,図4に示す優先度順方式において,「実行」「実行可能」及び「待ち」のプロセスが一つもないとき,表2に示す三つのプロセスA,B,Cが順次生成される場合を考える。タイムクウォンタムが20ミリ秒のとき,プロセスBの処理1が実行を開始する時刻は,プロセスAの生成時刻から何ミリ秒後か。また,プロセスAの処理1が終了する時刻は,プロセスAの生成時刻から何ミリ秒後か。 aに関する解答群 ア 3 → 2 → 5 → 4 → 3 → 2 イ 3 → 2 → 5 → 4 → 3 → 5 ウ 3 → 3 → 5 → 3 → 1 エ 3 → 4 → 5 → 4 → 3 → 5 b、cに関する解答群 ア 10 イ 20 ウ 30 エ 40 オ 50 カ 60 キ 70 ク 80 ケ 90

  • A-ア 3 → 2 → 5 → 4 → 3 → 2
  • A-イ 3 → 2 → 5 → 4 → 3 → 5
  • A-ウ 3 → 3 → 5 → 3 → 1
  • A-エ 3 → 4 → 5 → 4 → 3 → 5
  • B-ア 10
  • B-イ 20
  • B-ウ 30
  • B-エ 40
  • B-オ 50
  • B-カ 60
  • B-キ 70
  • B-ク 80
  • B-ケ 90
  • C-ア 10
  • C-イ 20
  • C-ウ 30
  • C-エ 40
  • C-オ 50
  • C-カ 60
  • C-キ 70
  • C-ク 80
  • C-ケ 90

出典:平成30年度 秋期 基本情報技術者試験 午後 問2 設問2

共通の文章

問3 コンサートチケット販売サイトの関係データベースの設計及び運用に関する次の記述を読んで,設問1~4に答えよ。 D社は,Web上で会員制のコンサートチケット販売サイトを運営している。販売サイトのシステムは販売サブシステムと席予約サブシステムから構成され,販売サブシステムで購入申込み及び決済を処理し,席予約サブシステムで座席指定を処理する。本問では,販売サブシステムだけを取り扱う。 販売サブシステムで利用しているデータベースの表構成とデータの格納例を図1に示す。下線付きの項目は主キーである。 図1 販売サブシステムの表構成と格納例 図1 販売サブシステムで利用しているデータベースの表構成とデータの格納例。下線付きの項目は主キー。 会員表:会員ID(主キー)、氏名、電子メールアドレス。例:K00001|情報太郎|taro@example.com。 商品表:コンサートID(主キー)、コンサート情報、開催日時。例:C00001|クリスマスコンサート 2018 in 東京 出演:Xバンド…|2018-12-24 18:00:00。 商品詳細表:コンサートID(主キー)、席種、価格、発売席数。例:C00001|S|6000|500。 決済表:販売ID(主キー)、決済日、決済額。例:H000001|2018-09-29|12000。 販売表:販売ID(主キー)、会員ID、コンサートID、席種、席数、販売日、販売額、決済期限日。例:H000001|K00001|C00001|S|2|2018-09-02|12000|2018-10-01。 席と販売サブシステムの説明 コンサートの席の説明:(1) コンサートの席種には,S,A及びBがある。(2) 各席種の価格(常に有料)及び発売席数は,コンサートごとに異なる。 販売サブシステムの説明:(1) 販売サブシステムは取り扱うコンサートの席種ごとの販売可能な席数を管理する。(2) 会員が購入申込みを行うと,販売サブシステムは一意な販売IDを生成して販売表にレコードを追加する。(3) 会員が支払手続を行うと,決済処理として販売サブシステムは販売IDを主キーとするレコードを決済表に追加する。決済日はレコードを追加した日とする。(4) 販売サブシステムは決済期限日の翌日に,決済期限日を過ぎた販売表中のレコードと販売IDが同じレコードが決済表にない場合,その購入申込みは取り消されたものとして,バッチ処理によって決済表に当該販売IDを主キーとするレコードを追加する。このレコードの決済日はNULLで,決済額は-1とする。(5) バッチ処理は,毎夜0~4時の販売サイトのシステムのメンテナンス時間帯に行う。(6) 会員が購入を申し込んだ席数が,その時点で販売可能な席数を上回る場合には,販売サブシステムは「販売終了」と表示し,この購入申込みを受け付けない。 図2 修正した会員表、決済表及び販売表の表構成 設問4の変更後の表構成。ポイント制度導入時に追加した列は0で初期化する。会員表:会員ID(主キー)、氏名、電子メールアドレス、ポイント残高。決済表:販売ID(主キー)、決済日、決済額、付与ポイント。販売表:販売ID(主キー)、会員ID、コンサートID、席種、席数、販売日、販売額、決済期限日、使用ポイント。 設問4のポイント制度とバッチ処理の条件 会員は購入申込み時に,1ポイント1円としてポイント残高の範囲で,販売額に充当するポイント数を指定する。販売サブシステムは,指定したポイント数を使用ポイントに格納し,ポイント残高から減じる。会員は,販売額から使用ポイントを差し引いた金額を決済額として支払う。販売額の全額にポイントを充当した場合は,販売サブシステムは購入申込み時に支払手続が行われたものとし,決済処理として決済表にレコードを追加する。 ポイント制度の導入時に追加したバッチ処理によって,前日に決済処理された販売IDごとに,その決済額が20,000円以上,10,000円以上20,000円未満,10,000円未満の場合に,それぞれ3%,2%,1%のポイントを付与する。付与したポイント数は,付与ポイントに格納し,ポイント残高に加える。NOW,DATEDIFFは設問3で使用したユーザ定義関数と同じであり,FLOORは引数の値以下で最大の整数値を返す関数である。

問問3 設問1

データベースのデータの整合性を保つためにDDLで制約をつけている。図1の表構成において,列名とその列に指定する制約の正しい組合せを,解答群の中から選べ。

  • ア 決済表.決済額|検査制約
  • イ 決済表.決済日|非NULL制約
  • ウ 商品詳細表.席種|参照制約
  • エ 販売表.会員ID|一意性制約

出典:平成30年度 秋期 基本情報技術者試験 午後 問3 設問1

問問3 設問2

「販売終了」の表示判定を行うために,販売できない席数を求める必要がある。販売できない席数を出力するSQL文の空欄に入れる正しい答えを,解答群の中から選べ。ここで,コンサートIDはC00001,席種はSである。a1とa2に入れる答えは,aに関する解答群の中から組合せとして正しいものを選ぶものとする。 SELECT SUM(販売表.席数) FROM 販売表 [a1] 決済表 ON 販売表.販売ID = 決済表.販売ID WHERE 販売表.コンサートID = 'C00001' AND 販売表.席種 = 'S' AND [a2]

  • ア a1:INNER JOIN。a2:決済表.決済額 = -1
  • イ a1:INNER JOIN。a2:決済表.決済額 >= 0
  • ウ a1:LEFT OUTER JOIN。a2:(決済表.決済額 IS NULL OR 決済表.決済額 = -1)
  • エ a1:LEFT OUTER JOIN。a2:(決済表.決済額 IS NULL OR 決済表.決済額 >= 0)
  • オ a1:RIGHT OUTER JOIN。a2:(決済表.決済額 IS NULL OR 決済表.決済額 = -1)
  • カ a1:RIGHT OUTER JOIN。a2:(決済表.決済額 IS NULL OR 決済表.決済額 >= 0)

出典:平成30年度 秋期 基本情報技術者試験 午後 問3 設問2

問問3 設問3

決済期限日まで残り3日となっても支払手続が行われていない購入申込みがある会員に,支払手続を促す電子メールを送る。この会員の氏名,電子メールアドレス及び販売IDを出力するSQL文の空欄に入れる正しい答えを,解答群の中から選べ。NOWはSQLを実行した日の日付を返すユーザ定義関数であり,DATEDIFFはともに日付である二つの引数を受け取って第1引数から第2引数を引いた日数を整数値で返すユーザ定義関数である。 SELECT 会員表.氏名,会員表.電子メールアドレス,販売表.販売ID [b]

  • ア FROM 会員表,販売表 WHERE DATEDIFF(販売表.決済期限日,NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID NOT IN (SELECT 販売ID FROM 決済表)
  • イ FROM 会員表,販売表 WHERE DATEDIFF(販売表.決済期限日,NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID IN (SELECT 販売ID FROM 決済表 WHERE 決済額 >= 0)
  • ウ FROM 会員表,販売表,決済表 WHERE DATEDIFF(販売表.決済期限日,NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID = 決済表.販売ID
  • エ FROM 会員表,販売表,決済表 WHERE DATEDIFF(販売表.決済期限日,NOW()) = 3 AND 販売表.会員ID = 会員表.会員ID AND 販売表.販売ID = 決済表.販売ID AND 決済表.決済額 <> -1

出典:平成30年度 秋期 基本情報技術者試験 午後 問3 設問3

問問3 設問4

会員への優待サービスのために,ポイント制度を導入する。そのために修正した会員表,決済表及び販売表の表構成を図2に示す。ポイント制度を導入するときに追加した列は0で初期化する。 会員は購入申込み時に,1ポイント1円としてポイント残高の範囲で,販売額に充当するポイント数を指定する。販売サブシステムは,指定したポイント数を使用ポイントに格納し,ポイント残高から減じる。会員は,販売額から使用ポイントを差し引いた金額を決済額として支払う。販売額の全額にポイントを充当した場合は,販売サブシステムは購入申込み時に支払手続が行われたものとし,決済処理として決済表にレコードを追加する。ポイント制度の導入時に追加したバッチ処理によって,前日に決済処理された販売IDごとに,その決済額が20,000円以上,10,000円以上20,000円未満,10,000円未満の場合に,それぞれ3%,2%,1%のポイントを付与する。付与したポイント数は,付与ポイントに格納し,ポイント残高に加える。決済表の付与ポイントを更新する正しいSQL文を,解答群の中から選べ。NOW,DATEDIFFは設問3で使用したユーザ定義関数と同じであり,FLOORは引数の値以下で最大の整数値を返す関数である。

  • ア INSERT INTO 決済表(付与ポイント) SELECT IF 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) ELSEIF 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END WHERE DATEDIFF(NOW(),決済日) = 1
  • イ UPDATE 決済表 SET 付与ポイント = ( CASE 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) WHEN 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END ) WHERE DATEDIFF(NOW(),決済日) = 1
  • ウ UPDATE 決済表 SET 付与ポイント = ( CASE WHEN 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) WHEN 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END ) WHERE DATEDIFF(NOW(),決済日) = 1
  • エ UPDATE 決済表 SET 付与ポイント = ( IF 決済額 >= 20000 THEN FLOOR(決済額 * 0.03) ELSEIF 決済額 >= 10000 THEN FLOOR(決済額 * 0.02) ELSE FLOOR(決済額 * 0.01) END ) WHERE DATEDIFF(NOW(),決済日) = 1

出典:平成30年度 秋期 基本情報技術者試験 午後 問3 設問4

共通の文章

問4 ネットワークの障害分析と対策に関する次の記述を読んで,設問に答えよ。 G社は,ソフトウェア開発会社である。G社のネットワーク構成を図1に示す。 図1中の各セグメントには,図に記された機器を含む複数の機器が配置されており,各機器はセグメントごとに用意されたスイッチにLANケーブルで接続されている。 社員は,事務作業を事務セグメント内のPCを使用して行い,ソフトウェア開発作業を開発プロジェクトごとに設けられた開発セグメント内のPCを使用して行う。現在,開発セグメントは,開発セグメント1から開発セグメント10まである。 事務セグメント内のPCは,リモートデスクトップ(手元のPCをクライアントとして,他のPCをGUIで遠隔操作する技術であり,操作される側がサーバになる)のクライアント機能(以下,リモートデスクトップ機能という)又はSSHを用いて,開発セグメント内のPCを遠隔操作できる。 開発セグメント内のPCは,事務セグメント内のファイルサーバにアクセスできる。 事務セグメント内のPCからインターネット上に公開されたWebサイトを閲覧する際には,DMZセグメント内のプロキシサーバを経由する。 ルータBは,内蔵のパケットフィルタ型のファイアウォール機能によってセグメント間の通信の可否を制御しており,上記(3)~(5)に必要な通信だけを許可している。ルータBのファイアウォール機能は,送信元ネットワークから,宛先ネットワークの指定したポート番号への通信の可否を制御するものであって,許可した通信の応答パケットの通過も許可する。 【障害の発生】 ある日,「事務セグメント内のPC B-1から,リモートデスクトップ機能を用いて,開発セグメント1内のPC 1-1を遠隔操作しようとしたが,接続できなかった」と報告があったので,障害箇所を特定するために原因の切分けを行った。 初めに,事務セグメント内のPC B-2から,PC 1-1にリモートデスクトップ機能を用いて接続を試みたが,失敗した。 次に,PC B-1からSSHを用いてログインした開発セグメント1内のPC 1-2でpingコマンドを実行し,PC 1-1から応答が返ってくることを確認した。 これらのことから,障害の原因としてaやbの不具合が考えられたので,これらに不具合があるかどうかを調査して,原因を特定した。 【セグメントの追加】 新しい開発プロジェクトの立上げに伴い,開発セグメント11をネットワークに追加した。開発セグメント11は,開発セグメント1~10と同様にスイッチ11でルータBと接続する。ルータBのファイアウォールに追加した設定を表1に示す。ところが,表1の設定には誤りがあり,開発セグメント11に接続されたPCに関して,cことが分かった。 事務セグメントと開発セグメント11のネットワークアドレスは,表2のとおりである。 【障害発生の予防】 現在のネットワーク構成では,社内のセグメント間の全ての通信がルータBを経由するので,ルータBの過負荷によって社内ネットワークに障害が発生することが懸念される。そこで,ルータCを増設することによって負荷を分散させることとし,増設後の構成として構成案1と構成案2の二つを検討した。構成案1及び構成案2における,ルータとスイッチの接続形態を図2に示す。 構成案1では,セグメントごとにルータBかルータCのどちらかのルータを使用するように設定することによって,負荷を分散させる。このとき,ルータの冗長化技術を用いて,一方のルータに障害が発生したときは,もう一方のルータが使用されるように構成する。 構成案2では,ルータBとルータCの役割を分けることによって,負荷を分散させる。ルータCに,事務セグメントと開発セグメントの間の通信を中継する役割をもたせる。 G社ではdことやeことを重視して,構成案1を採用することにした。 図1 図1「G社のネットワーク構成」。インターネットはルータAに接続し,ルータAはスイッチAに接続する。スイッチAはDMZセグメント内のプロキシサーバに接続する。スイッチAはルータBにも接続する。ルータBは,事務セグメントのスイッチB,開発セグメント1のスイッチ1,開発セグメント2のスイッチ2,…,開発セグメント10のスイッチ10に接続する。事務セグメントにはファイルサーバとPC B-1,PC B-2,…,PC B-nがあり,スイッチBに接続する。開発セグメント1にはPC 1-1,PC 1-2,…,PC 1-mがあり,スイッチ1に接続する。DMZセグメントにはプロキシサーバがある。 表1 表1「ルータBのファイアウォールに追加した設定」。列見出しは「送信元ネットワーク」「宛先ネットワーク」「ポート番号(サービス)」「可否」。行は順に、10.0.0.0/16|10.1.11.0/24|445(ファイル)|可;10.0.0.0/16|10.1.11.0/24|22(SSH)|可;10.0.0.0/16|10.1.11.0/24|3389(リモートデスクトップ)|可。 表2 表2「事務セグメントと開発セグメント11のネットワークアドレス」。列見出しは「セグメント」「ネットワークアドレス」。行は「事務セグメント」|10.0.0.0/16、「開発セグメント11」|10.1.11.0/24。 図2 図2「ルータとスイッチの接続形態」。構成案1では、ルータAはスイッチAにつながり、スイッチAはルータBとルータCの両方につながる。ルータBとルータCは、それぞれスイッチB、スイッチ1、スイッチ2、…、スイッチ11につながる。構成案2では、ルータA―スイッチA―ルータB―スイッチB―ルータCの順につながり、ルータCはさらにスイッチ1、スイッチ2、…、スイッチ11につながる。

問問4

本文中の[空欄]に入れる適切な答えを,解答群の中から選べ。 a、bに関する解答群 ア PC 1-1のLANポート イ PC 1-1のソフトウェア ウ スイッチ1 エ スイッチB オ 設定を含むルータBのソフトウェア カ ルータBのLANポート cに関する解答群 ア 事務セグメント内のPCからSSHを用いて当該PCを遠隔操作できない イ 事務セグメント内のPCからリモートデスクトップ機能を用いて当該PCを遠隔操作できない ウ 当該PCから事務セグメント内のファイルサーバにアクセスできない d、eに関する解答群 ア 可用性を高められる イ 機密性を高められる ウ 障害発生時に原因を特定しやすい エ セグメント間で通信する際に経由する機器が少なくなる オ ルータB,Cとスイッチ間をつなぐLANケーブルの本数が少なくて済む カ ルータBとルータCの負荷に大きな差が生じないように調整できる

  • A-ア PC 1-1のLANポート
  • A-イ PC 1-1のソフトウェア
  • A-ウ スイッチ1
  • A-エ スイッチB
  • A-オ 設定を含むルータBのソフトウェア
  • A-カ ルータBのLANポート
  • B-ア PC 1-1のLANポート
  • B-イ PC 1-1のソフトウェア
  • B-ウ スイッチ1
  • B-エ スイッチB
  • B-オ 設定を含むルータBのソフトウェア
  • B-カ ルータBのLANポート
  • C-ア 事務セグメント内のPCからSSHを用いて当該PCを遠隔操作できない
  • C-イ 事務セグメント内のPCからリモートデスクトップ機能を用いて当該PCを遠隔操作できない
  • C-ウ 当該PCから事務セグメント内のファイルサーバにアクセスできない
  • D-ア 可用性を高められる
  • D-イ 機密性を高められる
  • D-ウ 障害発生時に原因を特定しやすい
  • D-エ セグメント間で通信する際に経由する機器が少なくなる
  • D-オ ルータB,Cとスイッチ間をつなぐLANケーブルの本数が少なくて済む
  • D-カ ルータBとルータCの負荷に大きな差が生じないように調整できる
  • E-ア 可用性を高められる
  • E-イ 機密性を高められる
  • E-ウ 障害発生時に原因を特定しやすい
  • E-エ セグメント間で通信する際に経由する機器が少なくなる
  • E-オ ルータB,Cとスイッチ間をつなぐLANケーブルの本数が少なくて済む
  • E-カ ルータBとルータCの負荷に大きな差が生じないように調整できる

出典:平成30年度 秋期 基本情報技術者試験 午後 問4

共通の文章

問5 購買管理システムで行う処理に関する次の記述を読んで,設問1~3に答えよ。 自動車用アクセサリ類を製造しているK社では,購買部門が部品を発注する際に利用する購買管理システムを構築中である。システム部のC君は,購買ファイル更新可否チェック処理の開発を担当することになった。 購買ファイル更新可否チェック処理では,部品の購入依頼情報を格納したファイル(以下,依頼ファイルという)中の各レコードについて,購買ファイルを更新できるかどうかをチェックする。更新することができないレコードは,更新対象外依頼ファイルに出力する。更新することができるレコードは,更新用依頼ファイルに出力し,一連の処理として実行する購買ファイル更新処理に引き渡す。ここで,依頼ファイルは,1日に1回,バッチ処理時間帯に製造部門から受け取る。依頼ファイルには,過去に受け取った購入依頼情報のレコードは含まれない。購買ファイル更新可否チェック処理の位置付けを,図1に示す。 依頼ファイル及び購買ファイルのレコードの項目を表1に,その項目の説明を表2に示す。更新用依頼ファイル及び更新対象外依頼ファイルのレコードの項目は,依頼ファイルのレコードの項目と同じである。 図1 図1「購買ファイル更新可否チェック処理の位置付け」:製造部門から購買管理システムへ依頼ファイルを渡す。システム内で依頼ファイルを購買ファイル更新可否チェック処理に入力し,結果を更新用依頼ファイル又は更新対象外依頼ファイルに出力する。更新用依頼ファイルは購買ファイル更新処理に渡され,購買ファイルを更新する。購買ファイルの情報はチェック処理で参照される。 表1 表1「依頼ファイル及び購買ファイルのレコードの項目」:依頼ファイルの項目は,依頼ID(主キー),依頼日時,品番,個数,納期,依頼者,依頼種別。購買ファイルの項目は,依頼ID(主キー),依頼日時,品番,個数,納期,依頼者,購買ステータス。 表2 表2「依頼ファイル及び購買ファイルのレコードの項目の説明」:依頼ID=購入依頼情報を識別するための一意な番号。購入依頼情報を新規に作成するときに製造部門で採番して設定し,変更又は削除のときも新規作成時の依頼IDを設定する。依頼日時=依頼ファイルにレコードを格納した日時。品番=発注する部品の品番。個数=発注する部品の個数。納期=納品希望日。依頼者=製造部門の担当者名。依頼種別には「登録」「変更」「削除」がある。購買ステータスには「購買受付」「見積り中」「発注済」「納品済」がある。 表2 注記 表2の注記:(1) 依頼種別には,依頼者が購入依頼情報を新規に作成するときは「登録」,変更するときは「変更」,削除するときは「削除」が設定される。(2) 購買ステータスには,購買部門が発注先に見積りを依頼する前は「購買受付」,見積りを依頼して発注するまでの間は「見積り中」,発注して納品されるまでの間は「発注済」,納品後は「納品済」が設定される。 処理概要 購買ファイル更新可否チェック処理の概要:(1) 依頼ファイルのレコードのうち,依頼IDと依頼種別を除く項目の内容は正しいものとする。(2) 依頼IDの昇順に整列された依頼ファイルのレコードを先頭から順に読み込み,全てのレコードについて次の処理を行う。①購買ファイルに同じ依頼IDをもつレコードがない場合,読み込んだレコードの依頼種別が「登録」であれば対象レコード出力処理で更新用依頼ファイルに出力する。②購買ファイルに同じ依頼IDをもつレコードがある場合,購買ステータスが「購買受付」又は「見積り中」で,かつ依頼種別が「変更」又は「削除」であれば,対象レコード出力処理で更新用依頼ファイルに出力する。③①②で更新用依頼ファイルに出力しなかったレコードを,対象外レコード出力処理で更新対象外依頼ファイルに出力する。 図2 図2「購買ファイル更新可否チェック処理の流れ図」:開始後,依頼ファイル,購買ファイル,更新用依頼ファイル,更新対象外依頼ファイルを開き,依頼ファイルの先頭レコードを読む。依頼ファイルのレコードがなくなるまで繰り返す。読み込んだレコードの依頼IDをキーに購買ファイルを検索し,一致するレコードがあれば読み込む。レコードを読み込んだかを判定し,Noなら空欄a1を判定する。a1がYesなら対象レコード出力,Noなら対象外レコード出力。レコードを読み込んだ場合は,購買ステータスが「購買受付」又は「見積り中」かを判定し,Noなら対象外レコード出力。Yesなら依頼種別が「変更」かを判定し,Yesなら対象レコード出力。Noなら空欄a2を判定し,Yesなら対象レコード出力,Noなら対象外レコード出力。続いて依頼ファイルの次のレコードを読み,依頼ファイル処理の終わりに達したらファイルを閉じて終了する。図中の「依頼種別」は依頼ファイルから読み込んだレコードの依頼種別の値,「購買ステータス」は購買ファイルから読み込んだレコードの購買ステータスの値を表す。 表3 表3「出力するファイルの決定表」:列は条件1~15。各列の条件値は次のとおり(Y=条件成立,N=条件不成立,—=条件に該当しない)。購買ステータス「購買受付」:Y,Y,Y,—,—,—,—,—,—,—,—,—,—,—,—。購買ステータス「見積り中」:—,—,—,Y,Y,Y,—,—,—,—,—,—,—,—,—。購買ステータス「発注済」:—,—,—,—,—,—,Y,Y,Y,—,—,—,—,—,—。購買ステータス「納品済」:—,—,—,—,—,—,—,—,—,Y,Y,Y,—,—,—。依頼種別「登録」:Y,—,—,Y,空欄b,—,Y,—,—,Y,—,空欄c,Y,—,—。依頼種別「変更」:—,Y,—,—,空欄b,—,—,Y,—,—,Y,空欄c,—,Y,—。依頼種別「削除」:—,—,Y,—,空欄b,Y,—,—,Y,—,—,空欄c,—,—,Y。更新用依頼ファイルに出力:—,X,X,—,空欄b,X,—,—,—,—,—,空欄c,X,—,—。動作(更新対象外依頼ファイルに出力):X,—,—,X,空欄b,—,X,X,X,X,X,空欄c,—,X,X。注1:依頼ファイルから読み込んだレコードと依頼IDが同じ購買ファイルのレコードがある。注2:更新対象外依頼ファイルに出力。 表4 表4「購買ファイルのテスト用レコード」:列は依頼ID,依頼日時,品番,個数,納期,依頼者,購買ステータス。行は以下のとおり。10000003|2018-10-19 10:00|A|100|2018-12-10|山田|購買受付。10000004|2018-10-19 11:00|B|300|2018-12-10|鈴木|見積り中。10000005|2018-10-19 11:00|D|100|2018-12-10|田中|見積り中。10000006|2018-10-19 11:00|C|200|2018-12-11|佐藤|発注済。 表5 表5「依頼ファイルのテスト用レコード」:列は依頼ID,依頼日時,品番,個数,納期,依頼者,依頼種別。行は以下のとおり。10000003|2018-10-20 10:00|A|100|2018-12-10|山田|削除。10000004|2018-10-20 11:00|B|400|2018-12-10|鈴木|登録。10000005|2018-10-20 11:05|D|200|2018-12-10|田中|変更。10000006|2018-10-20 11:10|C|200|2018-12-11|佐藤|削除。10000007|2018-10-20 11:15|E|300|2018-12-08|佐藤|登録。10000008|2018-10-20 12:00|F|300|2018-12-08|斎藤|変更。

問問5 設問1

図2中の空欄に入れる適切な答えを,解答群の中から選べ。

  • ア a1:依頼種別=「登録」;a2:依頼種別=「削除」
  • イ a1:依頼種別=「登録」;a2:依頼種別≠「削除」
  • ウ a1:依頼種別≠「登録」;a2:依頼種別=「削除」
  • エ a1:依頼種別≠「登録」;a2:依頼種別≠「削除」
  • オ a1:依頼種別=「変更」;a2:依頼種別=「削除」
  • カ a1:依頼種別=「変更」;a2:依頼種別≠「削除」

出典:平成30年度 秋期 基本情報技術者試験 午後 問5 設問1

問問5 設問2

購買ファイル更新可否チェック処理のテストケースを設計する。テストケースに漏れがないように,処理で出力するファイルに着目して決定表を作成した。出力するファイルの決定表を表3に示す。表3中の空欄に入れる適切な答えを,解答群の中から選べ。 b、cに関する解答群 ア —|Y|—|X|— イ —|Y|—|—|X ウ —|Y|—|—|— エ —|—|Y|X|— オ —|—|Y|—|X カ —|—|Y|—|—

  • B-ア —|Y|—|X|—
  • B-イ —|Y|—|—|X
  • B-ウ —|Y|—|—|—
  • B-エ —|—|Y|X|—
  • B-オ —|—|Y|—|X
  • B-カ —|—|Y|—|—
  • C-ア —|Y|—|X|—
  • C-イ —|Y|—|—|X
  • C-ウ —|Y|—|—|—
  • C-エ —|—|Y|X|—
  • C-オ —|—|Y|—|X
  • C-カ —|—|Y|—|—

出典:平成30年度 秋期 基本情報技術者試験 午後 問5 設問2

問問5 設問3

購買ファイル更新可否チェック処理のテストのためにテスト用レコードを作成した。購買ファイルには表4に示すテスト用レコードを,依頼ファイルには表5に示すテスト用レコードを,事前に格納しておいた。これらのテスト用レコードを用いて処理を実行した場合,図2の破線で囲んだ処理のうち,対象外レコード出力処理では依頼IDが空欄dのレコードが処理され,対象レコード出力処理では依頼IDが空欄eのレコードが処理される。 dに関する解答群 ア 10000003 イ 10000004 ウ 10000005 エ 10000006 オ 10000007 eに関する解答群 ア 10000003 と 10000005 イ 10000004 と 10000005 ウ 10000004 と 10000006 エ 10000005 と 10000008

  • D-ア 10000003
  • D-イ 10000004
  • D-ウ 10000005
  • D-エ 10000006
  • D-オ 10000007
  • E-ア 10000003 と 10000005
  • E-イ 10000004 と 10000005
  • E-ウ 10000004 と 10000006
  • E-エ 10000005 と 10000008

出典:平成30年度 秋期 基本情報技術者試験 午後 問5 設問3

共通の文章

問6 プロジェクトのスケジュール作成に関する次の記述を読んで,設問1,2に答えよ。 W社は,業務効率化を目的として,紙のりん議書を回付して行っている申請承認に関わる業務を電子化するプロジェクト(以下,りん議書電子化プロジェクトという)を立ち上げた。 【りん議書電子化プロジェクトの概要】 りん議書電子化プロジェクトでは,紙のりん議書を電子帳票化するシステム(以下,電子帳票システムという)を,W社の情報システム部が新規に開発する。電子帳票化されたりん議書の回付(以下,りん議書回付という)には,クラウドサービスプロバイダが提供している回付業務のクラウドサービス(以下,回付サービスという)を,比較検討の上,導入して利用する。 図1 アローダイアグラムの例 図1「アローダイアグラムの例」。結合点は丸で示し,実線の矢印は作業名と所要日数を示す。破線の矢印はダミー作業を示す。作業と結合点の対応は次のとおり。A:1→3,1日。B:1→2,2日。ダミー作業:2→3。C:3→4,3日。D:3→6,4日。E:3→5,2日。F:2→5,2日。G:4→6,2日。H:4→8,5日。I:6→7,2日。J:6→8,2日。K:7→8,3日。ダミー作業:5→6。 設問1の解答群 設問1の解答群。aに関する解答群(作業名):ア=A,C,G,I,K。イ=A,D,I,K。ウ=B,C,G,I,K。エ=B,C,H。オ=B,D,I,K。カ=B,F,I,K。 bに関する解答群:ア=9。イ=10。ウ=11。エ=12。オ=13。 cに関する解答群:ア=4日と7日。イ=4日と8日。ウ=5日と8日。エ=5日と9日。オ=7日と10日。カ=7日と11日。 dに関する解答群:ア=0。イ=1。ウ=2。エ=3。オ=4。 表1 作業一覧表 表1「作業一覧表」。列は作業名,作業項目,所要日数,作業内容。 A|プロジェクト計画作成|20日|スケジュールや体制,要員配置など,プロジェクトの計画を作成する。 B|業務要件定義|30日|紙のりん議書の電子帳票化及びりん議書回付に関する業務要件を定義する。 C|システム要件定義|20日|電子帳票システムに関しては,紙のりん議書を電子帳票化する業務要件を満たすソフトウェア構成及びハードウェアとミドルウェアの構成を定義する。回付サービスに関しては,電子帳票システムとの連携要件¹を定義する。 D|ハードウェア,ミドルウェア調達|30日|電子帳票システムのシステム要件に適合したハードウェアとミドルウェアを調達する。 E|ハードウェア設置,ミドルウェア設定|30日|調達したハードウェアを設置し,外部設計で定義したミドルウェアのパラメタ²設定を行う。 F|回付サービスの候補選定|10日|りん議書回付の業務要件に適合する回付サービスの候補を選定する。できるだけ多くの回付サービスを候補とするために,りん議書回付に関する業務要件だけを前提として選定を行い,電子帳票システムとの連携要件は前提としない。 G|回付サービスの適合性検証,決定|40日|候補として選定した回付サービスについて,それぞれ業務要件との適合性検証,システム要件定義で定義した電子帳票システムとの連携要件の適合性検証を実施し,導入する回付サービスを決定する。 H|回付サービスの利用準備|40日|回付サービスを利用するための各種パラメタ設定などを行う。 I|外部設計|20日|システム要件を基に電子帳票システムのソフトウェアの外部設計,ミドルウェアのパラメタ定義を行う。 J|内部設計|20日|外部設計を基に電子帳票システムの内部設計を行う。 K|プログラム開発,単体テスト|30日|内部設計を基に電子帳票システムのプログラム開発と単体テストを行う。 L|結合テスト|20日|電子帳票システムと回付サービスを連携させた結合テストを行う。 M|総合テスト|20日|実運用を想定した総合的なテストを行う。 N|本番移行|10日|各種のシステム資源を稼働環境に移行する。 注¹ 連携要件とは,電子帳票システムとの連携に必要となる機能,データ項目及びインタフェースである。 注² ミドルウェアの外部仕様は,公開されている。 図2 作成途中のアローダイアグラム 図2「作成途中のアローダイアグラム」。結合点は丸,矢印上の文字は作業名,数値は所要日数を示す。作業の対応は次のとおり。A:1→2,20日。B:2→3,30日。C:3→4,20日。D:4→9,30日。E:9→10,30日。F:3→5,10日。G:5→6,40日。H:6→10,40日。I:4→7,20日。J:7→8,20日。K:8→10,30日。L:10→11,20日。M:11→12,20日。N:12→13,10日。図は作成途中で,ダミー作業が二つ欠けている。 設問2の解答群 設問2のe,fに関する解答群(結合点間に追加するダミー作業):ア=結合点2から結合点9。イ=結合点3から結合点9。ウ=結合点4から結合点5。エ=結合点4から結合点6。オ=結合点6から結合点7。カ=結合点6から結合点8。キ=結合点6から結合点12。ク=結合点7から結合点9。 gに関する解答群:ア=160。イ=170。ウ=180。エ=190。オ=200。カ=210。

問問6 設問1

プロジェクトマネージャのQ君は,りん議書電子化プロジェクトのスケジュールをアローダイアグラムを用いて作成することにした。アローダイアグラムの例を図1に示す。図1のクリティカルパスはaであり,全ての作業を完了するために必要な所要日数(以下,総所要日数という)はb日である。また,作業Jについて,最早開始日と最遅開始日はcであり,余裕日数はd日である。結合点1から始まる作業の開始日は0日とする。余裕日数とは,当該作業に先行する作業が遅れなしに完了したとき,総所要日数を増加させることなく,当該作業が遅れてもよい日数である。 aに関する解答群 ア A,C,G,I,K イ A,D,I,K ウ B,C,G,I,K エ B,C,H オ B,D,I,K カ B,F,I,K bに関する解答群 ア 9 イ 10 ウ 11 エ 12 オ 13 cに関する解答群 ア 4日と7日 イ 4日と8日 ウ 5日と8日 エ 5日と9日 オ 7日と10日 カ 7日と11日 dに関する解答群 ア 0 イ 1 ウ 2 エ 3 オ 4

  • A-ア A,C,G,I,K
  • A-イ A,D,I,K
  • A-ウ B,C,G,I,K
  • A-エ B,C,H
  • A-オ B,D,I,K
  • A-カ B,F,I,K
  • B-ア 9
  • B-イ 10
  • B-ウ 11
  • B-エ 12
  • B-オ 13
  • C-ア 4日と7日
  • C-イ 4日と8日
  • C-ウ 5日と8日
  • C-エ 5日と9日
  • C-オ 7日と10日
  • C-カ 7日と11日
  • D-ア 0
  • D-イ 1
  • D-ウ 2
  • D-エ 3
  • D-オ 4

出典:平成30年度 秋期 基本情報技術者試験 午後 問6 設問1

問問6 設問2

Q君は,りん議書電子化プロジェクトのスケジュール作成に当たり,プロジェクトで実施する作業を,表1に示す作業一覧表にまとめ,作業の流れを整理中である。作成途中のアローダイアグラムを,図2に示す。作成途中のアローダイアグラムには,二つのダミー作業が欠けている。りん議書電子化プロジェクトのスケジュールを正しく表現するためには,eとfにダミー作業を追加する必要がある。ダミー作業追加後のアローダイアグラムにおいて,りん議書電子化プロジェクトの総所要日数はg日である。 e、fに関する解答群 ア 結合点2から結合点9 イ 結合点3から結合点9 ウ 結合点4から結合点5 エ 結合点4から結合点6 オ 結合点6から結合点7 カ 結合点6から結合点8 キ 結合点6から結合点12 ク 結合点7から結合点9 gに関する解答群 ア 160 イ 170 ウ 180 エ 190 オ 200 カ 210

  • E-ア 結合点2から結合点9
  • E-イ 結合点3から結合点9
  • E-ウ 結合点4から結合点5
  • E-エ 結合点4から結合点6
  • E-オ 結合点6から結合点7
  • E-カ 結合点6から結合点8
  • E-キ 結合点6から結合点12
  • E-ク 結合点7から結合点9
  • F-ア 結合点2から結合点9
  • F-イ 結合点3から結合点9
  • F-ウ 結合点4から結合点5
  • F-エ 結合点4から結合点6
  • F-オ 結合点6から結合点7
  • F-カ 結合点6から結合点8
  • F-キ 結合点6から結合点12
  • F-ク 結合点7から結合点9
  • G-ア 160
  • G-イ 170
  • G-ウ 180
  • G-エ 190
  • G-オ 200
  • G-カ 210

出典:平成30年度 秋期 基本情報技術者試験 午後 問6 設問2

共通の文章

問7 広告制作業務の現状把握と改善に関する次の記述を読んで,設問1~3に答えよ。 X社は,新聞,雑誌,カタログ誌などの紙媒体に掲載する広告(以下,紙広告という)及びインターネット上のWebサイトに掲載する広告(以下,Web広告という)を取り扱う広告制作会社であり,複数の拠点で業務を行っている。 各拠点では,担当するエリア内で営業活動を行い,エリア内の顧客から受け取った広告原稿を基に,広告を制作する。各拠点の体制は図1のとおりである。 X社では,広告原稿の受渡しを手渡しで行っている。制作部門では,営業部門から広告原稿をいつ受け取り,営業部門にいつ返却のために渡したかを,授受管理簿に記録する。授受管理簿には,広告原稿を用いて作業を行う担当者が誰であるかも,併せて記入している。授受管理簿の様式を図2に示す。 図1 図1「各拠点の体制」。拠点の枠内に営業部門と制作部門がある。制作部門の下に管理グループ,審査グループ,作成グループがあり,作成グループの下に紙広告チームとWeb広告チームがある。 図2 図2「授受管理簿の様式」。列は左から,通番,受付日,営業担当者,顧客名,紙広告原稿枚数,Web広告原稿枚数,返却日,返却事由,作業担当者(審査担当者,紙広告作成担当者,Web広告作成担当者)。 制作部門での作業の流れ 制作部門での作業の流れ。 (1) 管理グループの作業1 ① 営業部門から受け取った広告原稿を確認し,授受管理簿の通番,受付日,営業担当者,顧客名,紙広告原稿枚数,Web広告原稿枚数の欄に記入する。広告原稿が紙広告又はWeb広告の一方だけの場合は,広告原稿のない方の原稿枚数は「-」とする。 ② 広告原稿の形式的な点検(枚数の過不足,折れや汚れの有無など)を行う。 ③ 点検の結果,不備がある場合は,返却のために広告原稿を営業部門に渡す。授受管理簿の返却日,返却事由の欄に記入する。返却事由は「原稿不備」とする。営業部門に渡すときに,待ちは発生しない。 ④ 点検の結果,不備がない場合は,作業担当者を決定し,審査担当者,紙広告作成担当者,Web広告作成担当者の欄に記入する。広告原稿が紙広告又はWeb広告の一方だけの場合は,広告原稿のない方の作成担当者は「-」とする。記入した後,広告原稿を審査担当者に渡す。審査担当者に渡すときに,待ちは発生しない。 (2) 審査グループの作業 ① 広告原稿の内容がX社の広告制作基準に違反していないかどうかを審査し,審査結果を「適」又は「不適」として,審査票を起票する。 ② 広告原稿と審査票を管理グループに渡す。管理グループに渡すときに,待ちは発生しない。 (3) 管理グループの作業2 ① 審査結果が「不適」であれば,審査票の写しをとり,審査票の原本は保管する。その写しを添えて,返却のために広告原稿を営業部門に渡す。授受管理簿の返却日,返却事由の欄に記入する。返却事由は「基準違反」とする。営業部門に渡すときに,待ちは発生しない。 ② 審査結果が「適」であれば,審査票の原本を保管し,広告原稿を紙広告とWeb広告とに分けて,それぞれを決定している作成担当者に渡す。他の作業を行っている場合は,作業の終了を待って渡す。他の作業を行っていない場合は,すぐに渡す。 (4) 作成グループの作業 ① 受け取った広告原稿を基に,広告を作成する。 ② 作成完了後,作成担当者が,作成した広告(以下,作成済広告という)と広告原稿を管理グループに渡す。管理グループに渡すときに,待ちは発生しない。 (5) 管理グループの作業3 ① 紙広告とWeb広告について,受け取った広告原稿と作成済広告がそろっているかどうかを授受管理簿と照合して確認する。 ② 確認の結果,紙広告とWeb広告について,どちらかに不足がある場合は,必要なものが全てそろうまで待つ。 ③ 確認の結果,紙広告とWeb広告について,必要なものが全てそろっている場合は,営業部門に広告原稿と作成済広告を渡す。授受管理簿の返却日,返却事由の欄に記入する。返却事由は「作成完了」とする。営業部門に広告原稿と作成済広告を渡すときに,待ちは発生しない。 図3 図3「10月11日における授受管理簿」。列は図2の様式と同じ。行の値は以下のとおり。通番1:受付日10月4日,営業担当者佐々木,顧客名は網掛け(非表示),紙広告原稿2枚,Web広告原稿2枚,返却日10月10日,返却事由「作成完了」,審査担当者佐藤,紙広告作成担当者高橋,Web広告作成担当者伊藤。通番2:10月5日,山口,顧客名は網掛け(非表示),紙広告原稿3枚,Web広告原稿「-」,返却日10月5日,返却事由「原稿不備」,作業担当者欄は空欄。通番3:10月5日,松本,顧客名は網掛け(非表示),紙広告原稿「-」,Web広告原稿3枚,返却日10月6日,返却事由「基準違反」,審査担当者佐藤,紙広告作成担当者「-」,Web広告作成担当者渡辺。通番4:10月6日,松本,顧客名は網掛け(非表示),紙広告原稿5枚,Web広告原稿「-」,返却日10月10日,返却事由「作成完了」,審査担当者鈴木,紙広告作成担当者田中,Web広告作成担当者「-」。通番5:10月7日,山口,顧客名は網掛け(非表示),紙広告原稿「-」,Web広告原稿2枚,返却日10月10日,返却事由「作成完了」,審査担当者佐藤,紙広告作成担当者「-」,Web広告作成担当者山本。通番6:10月11日,佐々木,顧客名は網掛け(非表示),紙広告原稿「-」,Web広告原稿5枚。返却日,返却事由,作業担当者欄は空欄であり,設問1の記入対象。 注記:網掛けの部分は表示していない。空白の部分は未記入であることを示す。 表1 表1「管理グループが行った作業(図3の通番4)」。項番1「受渡し」の件数は9。その内訳として,広告原稿の受け(対営業部門),広告原稿の渡し(対営業部門),広告原稿の受け(制作部門内),広告原稿の渡し(制作部門内),作成済広告の受け(制作部門内),作成済広告の渡し(対営業部門),審査票の受け(制作部門内)の各行があり,件数欄は網掛けで表示されていない。項番2「広告原稿の形式的な点検」1件,項番3「作業担当者の決定」1件,項番4「審査票の原本を保管」1件,項番5「授受管理簿の記入」は件数欄が網掛けで表示されていない。注記:網掛けの部分は表示していない。

問問7 設問1

10月11日における授受管理簿を図3に示す。通番6の行の広告原稿については,【制作部門での作業の流れ】(1)④の作業を実施し,完了したところである。図3中の空欄に入れる適切な答えを,解答群の中から選べ。

  • ア 返却日:空欄。返却事由:空欄。審査担当者:佐藤。紙広告作成担当者:-。Web広告作成担当者:渡辺。
  • イ 返却日:空欄。返却事由:空欄。審査担当者:佐藤。紙広告作成担当者:-。Web広告作成担当者:-。
  • ウ 返却日:10月11日。返却事由:原稿不備。審査担当者:佐藤。紙広告作成担当者:-。Web広告作成担当者:渡辺。
  • エ 返却日:10月11日。返却事由:原稿不備。審査担当者:空欄。紙広告作成担当者:空欄。Web広告作成担当者:空欄。

出典:平成30年度 秋期 基本情報技術者試験 午後 問7 設問1

問問7 設問2

作成グループにおいて,広告原稿の「紛失事故」騒動が発生した。「紛失事故」の原因は,Web広告作成担当者が,広告原稿を保管した場所を勘違いしていたことであった。広告原稿は翌日に発見されて事なきを得たが,X社の作業方法では,広告原稿をグループ間で受け渡すとき及び営業部門に渡すときに待ちが発生する場合がある。この場合に,一時的な保管が必要となって,「紛失事故」が誘発されるおそれがある。【制作部門での作業の流れ】のうち,作成グループの作業以外の作業で,広告原稿の一時的な保管に伴って「紛失事故」が誘発されるおそれがある作業として適切な答えを二つ,解答群の中から選べ。

  • ア 管理グループの作業1
  • イ 管理グループの作業2
  • ウ 管理グループの作業3
  • エ 審査グループの作業

出典:平成30年度 秋期 基本情報技術者試験 午後 問7 設問2

問問7 設問3

X社では,「紛失事故」が誘発されるおそれを低減させ,管理グループの作業を軽減させるために,広告原稿については電子化を行って,サーバ上で共有することで,これまでの手渡しによる受渡しの作業をなくすことを構想している。広告原稿を電子化する時点の候補として,営業部門が制作部門に渡す直前(以下,営業出口という)と,制作部門が営業部門から受け取った直後(以下,制作入口という)が挙がっている。ここで,作成済広告の受渡しは,手渡しのままとする。 次の記述中の空欄a,bに入れる適切な答えを,解答群の中から選べ。 図3の通番4に対応する制作部門での一連の作業において管理グループが行った作業を,表1に整理した。項番1の受渡し作業に関して,広告原稿,審査票,作成済広告のそれぞれについて,管理グループが受けた作業を行った件数と,管理グループが渡しの作業を行った件数の合計は9件であった。広告原稿の電子化をどこで行うかによって,項番1の受渡し作業のうち,手渡しによる作業の合計件数は異なる。電子化を営業出口で行った場合はa件になり,制作入口で行った場合はb件になる。ここで,電子化を制作入口で行った場合には,営業部門への渡しは手渡しで行うものとする。 a、bに関する解答群 ア 2 イ 3 ウ 4 エ 5 オ 6 カ 7 キ 8 ク 9

  • A-ア 2
  • A-イ 3
  • A-ウ 4
  • A-エ 5
  • A-オ 6
  • A-カ 7
  • A-キ 8
  • A-ク 9
  • B-ア 2
  • B-イ 3
  • B-ウ 4
  • B-エ 5
  • B-オ 6
  • B-カ 7
  • B-キ 8
  • B-ク 9

出典:平成30年度 秋期 基本情報技術者試験 午後 問7 設問3

共通の文章

問8 次のプログラムの説明及びプログラムを読んで,設問1~3に答える。整数式を受け取って,その値を返すプログラムである。例えば,例1に示す整数式「2×(34−(5+67)÷8)」を受け取ると,その値50を返す。 プログラムの説明と全体 【プログラムの説明】 (1) 整数式は,文字の列で与えられる。整数式は,符号のない数字0~9の並び,演算子(+,−,×,÷),括弧((,))で構成される。 (2) 引数Expression[]で整数式を,引数ExpLenで整数式の文字数を,それぞれ受け取る。 (3) プログラム中の破線で囲んだ解析処理の部分では,受け取った整数式を解析し,計算に必要な情報を配列及び変数に設定する。 (4) プログラム中の破線で囲んだ計算処理の部分では,(3)で設定した情報を用いて整数式の値を計算する。整数式の値は,Value[0]に得られる。 (5) 各配列の添字は0から始まる。各配列の要素数は,十分に大きいものとする。 (6) 受け取った整数式に誤りはないものとする。また,計算の過程で,あふれやゼロ除算は発生しないものとする。 【プログラム】 整数型関数:compute(文字型:Expression[],整数型:ExpLen) 文字型:Operator[100] 整数型:OpCnt,Priority[100],Value[100] 文字型:chr 整数型:i,ip,nest 破線で囲まれた解析処理(詳細は「プログラム(解析処理の部分)」) 破線で囲まれた計算処理(詳細は「プログラム(計算処理の部分)」) return Value[0] プログラム(解析処理の部分) 【プログラム(解析処理の部分)】 OpCnt ← 0 Value[0] ← 0 nest ← 0 i を 0 から ExpLen 未満まで 1 ずつ増やしながら繰り返す。  chr ← Expression[i]  chr が '0' 以上かつ '9' 以下なら,Value[OpCnt] ← 10 × Value[OpCnt] + int(chr)  chr が '+','−','×','÷' のいずれかなら,   Operator[OpCnt] ← chr   chr が '+' または '−' なら Priority[OpCnt] ← nest + 1   それ以外なら Priority[OpCnt] ← nest + 2   OpCnt ← OpCnt + 1   Value[OpCnt] ← 0  chr が '(' なら nest ← nest + 10  chr が ')' なら nest ← nest − 10 プログラム(計算処理の部分) 【プログラム(計算処理の部分)】 OpCnt > 0 の間,繰り返す。  ⑤ ip ← 0  ⑥ i を 1 から OpCnt 未満まで 1 ずつ増やしながら繰り返す。   ⑦ Priority[ip] < Priority[i] なら ip ← i  chr ← Operator[ip]  chr = '+' なら Value[ip] ← Value[ip] + Value[ip + 1]  chr = '−' なら Value[ip] ← Value[ip] − Value[ip + 1]  chr = '×' なら Value[ip] ← Value[ip] × Value[ip + 1]  chr = '÷' なら Value[ip] ← Value[ip] ÷ Value[ip + 1]  i を ip + 1 から OpCnt 未満まで 1 ずつ増やしながら繰り返す。   Value[i] ← Value[i + 1]   Operator[i − 1] ← Operator[i]   Priority[i − 1] ← Priority[i]  OpCnt ← OpCnt − 1 図1 図1「プログラム(解析処理の部分)を実行した直後の状態」。Expression[] の添字0~14の文字は順に「2」「×」「(」「3」「4」「−」「(」「5」「+」「6」「7」「)」「÷」「8」「)」。Value[0..4] は順に 2,34,5,67,8。Operator[0..3] は順に ×,−,+,÷。Priority[0..3] は順に 2,11,21,12。OpCnt は4。 図2 図2「プログラム(計算処理の部分)の最外側の繰返しを1回実行した直後の状態」。Value[0..3] は順に 2,34,72,8。Operator[0..2] は順に ×,−,÷。Priority[0..2] は順に 2,11,12。OpCnt は3。 設問1の共通記述 設問1の記述。プログラム(解析処理の部分)の行①~④で用いている定数について考える。行③及び④の処理では,定数として10を用いているが,この定数は10である必要はない。このプログラムにおいて,定数が a であれば常に正しい演算順序が保証される。また,行①及び②の処理では,定数として1及び2を用いているが,次のように書き換えることが可能である。ここで,priLow及びpriHighは整数の定数を表し,その値は priLow < priHigh とする。 ① Priority[OpCnt] ← nest + priLow ② Priority[OpCnt] ← nest + priHigh このように表現したとき,行③及び④の処理では,nestの値を増減する定数が b のときに限り正しい演算順序が保証されることになる。 設問2の共通記述 設問2の記述。優先順位の等しい演算子が複数個含まれている整数式では,プログラム(計算処理の部分)は演算を左から順に実行する。演算を左から順に実行するか右から順に実行するかは,行 c1 の内容が c2 か c3 かで決まる。演算の実行順序によって計算結果が異なることがある。例として,次の四つの整数式を考える。 ケース1:(12+3+1)×4×2 ケース2:(12+3+1)÷4÷2 ケース3:(12−3−1)×4×2 ケース4:(12−3−1)÷4÷2 これらのケースのうち,演算を左から実行しても右から実行しても,プログラムによる計算結果が等しくなるのはケース d である。 図3 図3「整数式 2×(−1) についてプログラム(解析処理の部分)を実行した結果」。Expression[] の添字0~5の文字は順に「2」「×」「(」「−」「1」「)」。Value[0] は2,Value[1] は f と示されている。Operator[0] は×。Priority[0] は2。OpCnt は g。図の網掛け部分(値が格納されているとは限らない)は表示していない。

問問8 設問1

プログラム(解析処理の部分)に関する次の記述中の空欄 a,b に入れる正しい答えを,解答群の中から選べ。 aに関する解答群 ア 1以上 イ 2以上 ウ 11以下 エ 12以下 bに関する解答群 ア priHigh以上 イ priHigh+1以上 ウ priHigh − priLow以上 エ priHigh − priLow+1以上

  • A-ア 1以上
  • A-イ 2以上
  • A-ウ 11以下
  • A-エ 12以下
  • B-ア priHigh以上
  • B-イ priHigh+1以上
  • B-ウ priHigh − priLow以上
  • B-エ priHigh − priLow+1以上

出典:平成30年度 秋期 基本情報技術者試験 午後 問8 設問1

問問8 設問2

優先順位の等しい演算子が複数個含まれている整数式の演算の実行順序について考察する。プログラムに関する次の記述中の空欄 c,d に入れる正しい答えを,解答群の中から選べ。c1~c3に入れる答えは,cに関する解答群から組合せとして正しいものを選ぶ。 cに関する解答群 ア c1:⑤;c2:ip ← 0;c3:ip ← OpCnt − 1 イ c1:⑥;c2:i:1,i < OpCnt,1;c3:i:OpCnt,i > 0,−1 ウ c1:⑥;c2:i:1,i < OpCnt,1;c3:i:OpCnt − 1,i > 0,−1 エ c1:⑦;c2:Priority[ip] < Priority[i];c3:Priority[ip] ≤ Priority[i] dに関する解答群 ア 1 イ 1及び2 ウ 1及び3 エ 1及び4

  • C-ア c1:⑤;c2:ip ← 0;c3:ip ← OpCnt − 1
  • C-イ c1:⑥;c2:i:1,i < OpCnt,1;c3:i:OpCnt,i > 0,−1
  • C-ウ c1:⑥;c2:i:1,i < OpCnt,1;c3:i:OpCnt − 1,i > 0,−1
  • C-エ c1:⑦;c2:Priority[ip] < Priority[i];c3:Priority[ip] ≤ Priority[i]
  • D-ア 1
  • D-イ 1及び2
  • D-ウ 1及び3
  • D-エ 1及び4

出典:平成30年度 秋期 基本情報技術者試験 午後 問8 設問2

問問8 設問3

符号付き整数定数(数字の並びの先頭に符号+又は−を付けた定数)を含む整数式を考える。符号付き整数定数は,例2のように括弧で囲んで記述する。ただし,符号付き整数定数の直前の文字が演算子でない場合は,例3のように括弧で囲まなくてもよい。 例2:(+2)×((−3)+(−4)) 例3:+2×(−3+(−4)) 符号付き整数定数を含む整数式 2×(−1) についてプログラム(解析処理の部分)を実行した結果を図3に示す。このように,符号付き整数定数を含む整数式を受け取ったとき,プログラムは e。図3中の空欄 f,g に入る値も選べ。 eに関する解答群 ア 整数式が符号付き整数定数で始まる場合に,正しい値を返さない イ 整数式中に符号 − の付いた符号付き整数定数がある場合に,正しい値を返さない ウ 整数式中に二つ以上の符号付き整数定数が含まれる場合に,正しい値を返さない エ 正しい値を返す f、gに関する解答群 ア −1 イ 0 ウ 1 エ 2

  • E-ア 整数式が符号付き整数定数で始まる場合に,正しい値を返さない
  • E-イ 整数式中に符号 − の付いた符号付き整数定数がある場合に,正しい値を返さない
  • E-ウ 整数式中に二つ以上の符号付き整数定数が含まれる場合に,正しい値を返さない
  • E-エ 正しい値を返す
  • F-ア −1
  • F-イ 0
  • F-ウ 1
  • F-エ 2
  • G-ア −1
  • G-イ 0
  • G-ウ 1
  • G-エ 2

出典:平成30年度 秋期 基本情報技術者試験 午後 問8 設問3

共通の文章

問9「次のCプログラムの説明及びプログラムを読んで,設問1~3に答えよ。」本問は,図1に示す路線構成の鉄道模型における列車の運行をシミュレーションするプログラムである。表1は,図1の説明である。 図1・表1 図1「鉄道模型の路線構成及び列車位置」および表1「図1の説明」。区間の出口で接続する区間:区間0→区間2、区間1→区間2、区間2→区間3、区間3→区間4および区間7、区間4→区間5および区間6、区間5→なし、区間6→なし、区間7→区間8、区間8→なし。各区間内の列車(行先):区間0=列車4(終着駅Z)、区間1=列車3(終着駅X)、区間2=なし、区間3=列車2(終着駅Y)、区間4=列車1(終着駅X)、区間5=なし、区間6=なし、区間7=なし、区間8=列車0(終着駅Z)。図には始発駅A、始発駅B、終着駅X・Y・Zが示されている。 列車を進行させるルール 「列車を進行させるルール」:(1) 各列車は,あらかじめ決められた始発駅から,あらかじめ決められた終着駅を行先として,路線を後戻りすることなく進行する。(2) 一つの区間には,同時に一つの列車しかいることができない。(3) 各区間の入口には信号機があり,赤又は緑を表示する。(4) 各列車は,終着駅を出口とする区間にいるときは無条件に進行できる。終着駅を出口とする区間にいる列車が進行した場合,その列車は路線上から取り除かれる。(5) 各列車は,現在いる区間の出口で接続する区間(以下,次区間という)が次の条件をいずれも満たしたとき,次区間に進行できる。①次区間の信号機の表示が緑である。②次区間に進行すると,最終的には行先とする終着駅に到達できる。(6) 次の二つの処理を繰り返し実行して各列車を進行させる。①路線を構成する全ての区間の信号機それぞれについて,区間内に列車がいるときは表示を赤に,列車がいないときは表示を緑にする。②路線を構成する全ての区間それぞれについて,次の処理を行う。(ア) 終着駅を出口とする区間に列車がいる場合は,(4)に従って列車を進行させ,路線上から取り除く。(イ) (ア)で述べた以外の区間に列車がいる場合は,(5)に従って進行できる列車を進行させ,進行した区間の信号機の表示を赤にする。 プログラム1の説明 「プログラム1の説明」:(1) 構造体 block_info は鉄道模型の区間を表す。struct block_info { struct train_info* train; struct block_info* next[2]; int signal; }; train は区間内にいる列車を表した構造体 train_info へのポインタで,列車がいないときは NULL。next は次区間を表す block_info へのポインタを格納する配列(大きさは2)。終着駅を出口とする区間では,いずれの要素にも NULL を設定する。次区間が一つしかなければ,そのポインタは最初の要素に設定し,2番目の要素には NULL を設定する。signal は信号機に表示する色で,RED は赤,GREEN は緑。 (2) 構造体 train_info は鉄道模型の列車を表す。struct train_info { int number; struct block_info* dest; }; number は列車の番号,dest は列車の終着駅を出口とする区間を表す block_info へのポインタ。 (3) 関数 set_signals の仕様:全ての区間の信号機それぞれについて,区間内に列車がいるときは赤,列車がいないときは緑にする。引数 blocks は全ての区間を表した block_info の配列,nblocks は blocks の要素数。 プログラム1 プログラム1:#include <stddef.h>、#define RED (0)、#define GREEN (1)。struct train_info { int number; struct block_info* dest; }; struct block_info { struct train_info* train; struct block_info* next[2]; int signal; }; void set_signals(struct block_info[], int); void set_signals(struct block_info blocks[], int nblocks) { int i; struct block_info* block; for (i = 0; i < nblocks; i++) { block = &blocks[i]; if ([a]) { block->signal = GREEN; } else { block->signal = RED; } } } プログラム2の説明 「プログラム2の説明」:(1) 関数 proceed の仕様:全ての区間それぞれについて,進行できる列車がいるかどうかを判定し,進行できると判定された列車を進行させる。終着駅を出口とする区間にいる列車を進行させた場合,その列車を路線上から取り除く。出口で他の区間と接続する区間にいる列車を進行させた場合,進行した区間の信号機の表示を赤にする。引数 blocks は全ての区間を表した block_info の配列,nblocks は blocks の要素数。(2) 関数 proceed から呼び出される関数 find_block の仕様:引数 block で示す区間が,引数 dest で示す区間に最終的に到達できる経路上にあるかどうかを判定する。引数 block は判定対象の区間を表した block_info へのポインタ,dest は列車の終着駅を出口とする区間を表した block_info へのポインタ。到達できるとき1,到達できないとき0を返す。 プログラム2 プログラム2:#include <stddef.h>。void proceed(struct block_info[], int); int find_block(struct block_info*, struct block_info*); void proceed(struct block_info blocks[], int nblocks) { int i, j; struct block_info* block; for (i = nblocks - 1; i >= 0; i--) { block = &blocks[i]; if (block->train == NULL) { continue; } if ([b]) { block->train = NULL; continue; } for (j = 0; j < 2; j++) { if (block->next[j] == NULL) { continue; } if (block->next[j]->signal == RED) { continue; } if (find_block(block->next[j], block->train->dest) == 1) { block->next[j]->train = block->train; block->next[j]->signal = RED; block->train = NULL; [c]; } } } }。関数 find_block の本体:int find_block(struct block_info* block, struct block_info* dest) { int i; if (block == dest) { return 1; } for (i = 0; i < 2; i++) { if (block->next[i] == NULL) { continue; } if (find_block([d]) == 1) { return 1; } } return 0; } プログラム3 プログラム3:void start(struct block_info[], int); void start(struct block_info blocks[], int nblocks) { int i; set_signals(blocks, nblocks); for (i = 0; i < 4; i++) { proceed(blocks, nblocks); set_signals(blocks, nblocks); } }

問問9 設問1

設問1 プログラム1中の空欄に入れる正しい答えを,解答群の中から選べ。

  • ア block->next[0]->train == NULL
  • イ block->next[1]->train == NULL
  • ウ block->next[0]->train == NULL || block->next[1]->train == NULL
  • エ block->next[0]->train == NULL && block->next[1]->train == NULL
  • オ block->signal == RED
  • カ block->train == NULL
  • キ block->train != NULL

出典:平成30年度 秋期 基本情報技術者試験 午後 問9 設問1

問問9 設問2

設問2 関数 proceed は,進行できる全ての列車を進行させるプログラムである。プログラム2中の空欄に入れる正しい答えを,解答群の中から選べ。 bに関する解答群 ア block->train->dest == NULL イ block->train->dest != NULL ウ block == block->train->dest エ block != block->train->dest cに関する解答群 ア break イ continue ウ return dに関する解答群 ア dest, block イ dest, block->next[i] ウ block, dest エ block, block->next[i] オ block->next[i], dest カ block->next[i], block

  • B-ア block->train->dest == NULL
  • B-イ block->train->dest != NULL
  • B-ウ block == block->train->dest
  • B-エ block != block->train->dest
  • C-ア break
  • C-イ continue
  • C-ウ return
  • D-ア dest, block
  • D-イ dest, block->next[i]
  • D-ウ block, dest
  • D-エ block, block->next[i]
  • D-オ block->next[i], dest
  • D-カ block->next[i], block

出典:平成30年度 秋期 基本情報技術者試験 午後 問9 設問2

問問9 設問3

設問3 図1に示した鉄道模型の路線構成及び列車位置を表現した,構造体 block_info の配列を第1引数とし,その要素数9を第2引数として,プログラム3を実行した。プログラム3の実行が終了したときの状態について述べた次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。ここで,blocks[n] は区間nを示す。列車4がいるのは区間[e]である。また,区間[e]の出口で接続する区間は[f]。 eに関する解答群 ア 0 イ 2 ウ 3 エ 7 fに関する解答群 ア 一つあり,その信号機は緑を表示している イ 一つあり,その信号機は赤を表示している ウ 二つあり,それらの信号機はいずれも緑を表示している エ 二つあり,それらの信号機はいずれも赤を表示している オ 二つあり,それらの信号機は,一方が緑を,もう一方が赤を表示している

  • E-ア 0
  • E-イ 2
  • E-ウ 3
  • E-エ 7
  • F-ア 一つあり,その信号機は緑を表示している
  • F-イ 一つあり,その信号機は赤を表示している
  • F-ウ 二つあり,それらの信号機はいずれも緑を表示している
  • F-エ 二つあり,それらの信号機はいずれも赤を表示している
  • F-オ 二つあり,それらの信号機は,一方が緑を,もう一方が赤を表示している

出典:平成30年度 秋期 基本情報技術者試験 午後 問9 設問3

共通の文章

問10 次のCOBOLプログラムの説明及びプログラムを読んで,設問1~3に答えよ。 【プログラムの説明】 従業員の社内資格の保有状況を管理するプログラムである。 情報サービス企業であるP社には社内資格として資格1~4があり,従業員に取得を奨励している。社内資格を取得するための試験(以下,資格試験という)は定期的に実施しており,全従業員の保有状況を保有資格ファイルで管理する。P社の事業年度は4月から翌年3月までであり,上期(4月~9月)と下期(10月~翌年3月)の2期から成る。資格試験に合格した従業員の情報は合格ファイルに1期分を蓄積する。上期の合格者を蓄積した合格ファイルは10月初めに,下期の合格者を蓄積した合格ファイルは4月初めにプログラムを実行して,保有資格ファイルに反映する運用である。従業員は,合格した資格試験を再度受験することはない。 図1 保有資格ファイルのレコード様式 図1「保有資格ファイルのレコード様式」。索引ファイルで,全従業員のレコードが格納されている。主キーは従業員番号。プログラムでは乱呼出し法で入出力する。レコードの項目は,従業員番号(8桁),保有状況の資格1(8桁),資格2(8桁),資格3(8桁),資格4(8桁)。資格1~4には,従業員番号で示される従業員が各資格試験に合格した日付として,西暦の年・月・日をそれぞれ4桁・2桁・2桁で格納する。合格していない場合には0が格納される。 図2 合格ファイルのレコード様式 図2「合格ファイルのレコード様式」。順ファイルで,資格試験に合格した従業員のレコードが格納される。同じ従業員が複数の資格試験に合格した場合は,合格した資格試験ごとにレコードが格納される。レコードは順不同で格納されている。項目は従業員番号(8桁),資格種別(1桁),合格日(8桁)。資格種別には合格した資格試験を表す値が格納され,資格1は1,資格2は2,資格3は3,資格4は4。合格日には,合格した日付として西暦の年・月・日をそれぞれ4桁・2桁・2桁で格納する。 条件 保有資格ファイルには,合格ファイルの従業員番号で示される従業員のレコードが必ず存在する。 プログラム プログラム(行番号付き)。空欄a,b,cは原本の空欄のまま示す。 1 DATA DIVISION. 2 FILE SECTION. 3 SD SRT-FILE. 4 01 SRT-REC. 5 02 SRT-NO PIC X(8). 6 02 SRT-CD PIC 9(1). 7 02 SRT-DATE PIC 9(8). 8 FD QLF-FILE. 9 01 QLF-REC. 10 02 QLF-NO PIC X(8). 11 02 QLF-INF. 12 03 QLF-DATE PIC 9(8) OCCURS 4. 13 FD PAS-FILE. 14 01 PAS-REC. 15 02 PAS-NO PIC X(8). 16 02 PAS-CD PIC 9(1). 17 02 PAS-DATE PIC 9(8). 18 WORKING-STORAGE SECTION. 19 77 SRT-FLAG PIC X(1) VALUE SPACE. 20 88 SRT-EOF VALUE "E". 21 77 CR-NO PIC X(8) VALUE SPACE. 22 PROCEDURE DIVISION. 23 MAIN-PROC. 24 OPEN I-O QLF-FILE. 25 SORT SRT-FILE ASCENDING KEY SRT-NO 26 USING PAS-FILE 27 OUTPUT PROCEDURE IS RET-PROC. 28 CLOSE QLF-FILE. 29 STOP RUN. 30 RET-PROC. 31 PERFORM TEST BEFORE UNTIL SRT-EOF 32 RETURN SRT-FILE AT END SET SRT-EOF TO TRUE 33 [空欄a] 34 NOT AT END PERFORM UPD-PROC 35 END-RETURN 36 END-PERFORM. 37 UPD-PROC. 38 IF [空欄b] THEN 39 PERFORM WRI-PROC 40 MOVE SRT-NO TO QLF-NO 41 READ QLF-FILE END-READ 42 MOVE QLF-NO TO CR-NO 43 END-IF 44 [空欄c]. 45 WRI-PROC. 46 IF CR-NO NOT = SPACE THEN 47 REWRITE QLF-REC 48 END-IF. 49 表1 プログラムの変更内容1 表1「プログラムの変更内容1」。行番号21と22の間に「77 W-CNT PIC 9(4).」を追加する。また、行番号の指定位置に次の処理を追加する。 PERFORM VARYING W-CNT FROM 1 BY 1 UNTIL W-CNT > 4 OR QLF-DATE(W-CNT) = ZERO CONTINUE END-PERFORM IF [空欄e] THEN DISPLAY "EMPLOYEE-NO:" QLF-NO " COMPLETE" END-IF 表2 プログラムの変更内容2 表2「プログラムの変更内容2」。行番号18と19の間に次を追加する。 01 W-LIC. 02 W-NUM PIC 9(4) OCCURS 4 VALUE ZERO. 行番号28と29の間に次のDISPLAY文を追加する。 DISPLAY W-NUM(1) ", " W-NUM(2) ", " W-NUM(3) ", " W-NUM(4) 行番号44と45の間に次を追加する。 ADD 1 TO W-NUM(SRT-CD)

問問10 設問1

設問1 プログラム中の空欄a,b,cに入れる正しい答えを,解答群の中から選べ。 aに関する解答群 ア MOVE SPACE TO CR-NO イ PERFORM UPD-PROC ウ PERFORM WRI-PROC エ REWRITE QLF-REC bに関する解答群 ア CR-NO = SPACE イ SRT-NO = CR-NO ウ SRT-NO = SPACE エ SRT-NO NOT = CR-NO cに関する解答群 ア MOVE QLF-DATE(SRT-CD) TO QLF-DATE(SRT-CD + 1) イ MOVE SRT-DATE TO QLF-DATE(SRT-CD) ウ MOVE SRT-NO TO QLF-DATE(SRT-CD) エ MOVE ZERO TO QLF-DATE(SRT-CD)

  • A-ア MOVE SPACE TO CR-NO
  • A-イ PERFORM UPD-PROC
  • A-ウ PERFORM WRI-PROC
  • A-エ REWRITE QLF-REC
  • B-ア CR-NO = SPACE
  • B-イ SRT-NO = CR-NO
  • B-ウ SRT-NO = SPACE
  • B-エ SRT-NO NOT = CR-NO
  • C-ア MOVE QLF-DATE(SRT-CD) TO QLF-DATE(SRT-CD + 1)
  • C-イ MOVE SRT-DATE TO QLF-DATE(SRT-CD)
  • C-ウ MOVE SRT-NO TO QLF-DATE(SRT-CD)
  • C-エ MOVE ZERO TO QLF-DATE(SRT-CD)

出典:平成30年度 秋期 基本情報技術者試験 午後 問10 設問1

問問10 設問2

設問2 P社では,社内資格を四つ全て取得した従業員を表彰している。合格ファイルの内容を保有資格ファイルに反映するとき,新たに表彰の対象となった従業員の従業員番号を表示するようにプログラムを変更する。表1中の空欄d,eに入れる正しい答えを,解答群の中から選べ。 dに関する解答群 ア 行番号33と34の間 イ 行番号35と36の間 ウ 行番号42と43の間 エ 行番号46と47の間 eに関する解答群 ア QLF-DATE(CR-NO) = ZERO イ QLF-DATE(W-CNT) = ZERO ウ QLF-INF NOT = ALL ZERO エ W-CNT > 4

  • D-ア 行番号33と34の間
  • D-イ 行番号35と36の間
  • D-ウ 行番号42と43の間
  • D-エ 行番号46と47の間
  • E-ア QLF-DATE(CR-NO) = ZERO
  • E-イ QLF-DATE(W-CNT) = ZERO
  • E-ウ QLF-INF NOT = ALL ZERO
  • E-エ W-CNT > 4

出典:平成30年度 秋期 基本情報技術者試験 午後 問10 設問2

問問10 設問3

設問3 プログラムを表2に示すとおりに変更して,通常の運用どおり10月初めに実行した。行番号28と29の間に追加したDISPLAY文によって表示される内容に関する説明として適切な答えを,解答群の中から選べ。ここで,プログラムは設問2の変更を行う前のものとする。また,対象となる従業員の数は,10,000未満である。

  • ア 当該事業年度の上期に,各資格試験に合格した従業員の数
  • イ 当該事業年度の上期に,各資格試験を受験した従業員の数
  • ウ 当該事業年度の上期までに,各資格試験に合格した従業員の数
  • エ 当該事業年度の上期までに,各資格試験に合格していない従業員の数

出典:平成30年度 秋期 基本情報技術者試験 午後 問10 設問3

共通の文章

問11 次のJavaプログラムの説明及びプログラムを読んで、設問1、2に答えよ。 【プログラムの説明】 図1のように、文書の書式を表すひな形に置換表を適用して、出力文書を得るプログラムである。 ひな形は、0個以上の置換指示と、0個以上のそのまま出力される置換指示以外の部分が連なるテキストである。置換指示は、キー名称を〈と〉で囲ったものである。ひな形中で、〈と〉は置換指示としてキー名称を囲う用途にだけ使用できる。 置換表は、キー名称とこれに対応する文字列の並びとの組を一つ以上記述したテキストであり、それぞれの組みは「”キー名称”:[文字列の並び]」の形式で記述する。組みを二つ以上記述するときは、コンマで区切る。文字列の並びには、置換に用いる文字列(以下、置換用文字列という)を二重引用符で囲んだものを一つ以上記述する。置換用文字列を二つ以上記述するときは、コンマで区切る。 ひな形に置換表を適用すると、ひな形中の〈キー名称〉は、置換表中のキー名称に対応する文字列の並びに含まれる置換用文字列が一つだけのときはその文字列で置換される。二つ以上あるときは、各置換用文字列の間に改行を挟んだ上で、並び順に連結した文字列で置換される。 このプログラムでは、ひな形を、0個以上の置換指示と0個以上の置換指示以外の部分が連なる文字ストリームとして扱う。個々の置換指示及び個々の置換指示以外の部分をフラグメントと呼ぶ。インタフェース Fragment はフラグメントを表す。クラス Replacer は置換指示を表す。クラス PassThrough は置換指示以外の部分を表す。 クラス TemplateParser のメソッド parse は、ひな形を表す文字ストリームからフラグメントのリストを構築し、クラス Template のインスタンスを生成して返す。ひな形に誤りはないものとする。クラス Template は、ひな形をフラグメントのリストとして保持する。メソッド apply は、ひな形に置換表を適用して出力文書を文字列で返す。置換表には、このひな形に含まれるキー名称とそれに対応する文字列の並びが含まれているものとする。 クラス ReplacementTableParser のメソッド parse は、置換表を表す文字ストリームから、キー名称とそれに対応する文字列の並びのマップを構築して返す。置換表に誤りはないものとする(プログラムは省略)。 クラス TemplateTester はテスト用のプログラムである。テキストファイル template.txt が図1のひな形と同じ内容であって、テキストファイル replacementTable.txt が図1の置換表と同じ内容であるとき、実行結果は図1の出力文書と同じになる。 図1 図1「ひな形に置換表を適用して出力文書を得る例」。ひな形の内容: <名前>様 <名前>様のお買上げ明細は次のとおりです。 <明細> -------------------------------- 合計;<合計>円 置換表の内容: ”名前”:[”情報太郎”], ”明細”:[”メモリ;5,000円”,”HDD;9,000円”], ”合計”:[”14,000”] 矢印「適用」は置換表からひな形への適用を示す。出力文書: 情報太郎様 情報太郎様のお買上げ明細は次のとおりです。 メモリ;5,000円 HDD;9,000円 -------------------------------- 合計;14,000円 プログラム1 プログラム1: import java.util.List; import java.util.Map; public interface Fragment { String replace(Map<String, List<String>> table); } プログラム2 プログラム2(aは空欄): import java.util.List; import java.util.Map; public class Replacer [a] Fragment { final String key; Replacer(CharSequence cs) { key = cs.toString(); } public String replace(Map<String, List<String>> table) { return String.join("\n", table.get(key)); } } プログラム3 プログラム3(aは空欄): import java.util.List; import java.util.Map; public class PassThrough [a] Fragment { final String str; PassThrough(CharSequence cs) { str = cs.toString(); } public String replace(Map<String, List<String>> table) { return str; } } プログラム4 プログラム4(b、c、dは空欄): import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; public class TemplateParser { static public Template parse(Reader reader) throws IOException { StringBuilder buf = new StringBuilder(); List<Fragment> fragmentList = new ArrayList<>(); int c; while ((c = reader.read()) >= 0) { switch (c) { case '<': fragmentList.add(new [b]); buf = new StringBuilder(); break; case '>': fragmentList.add(new [c]); buf = new StringBuilder(); break; default: buf.append((char) c); } } fragmentList.add(new PassThrough(buf)); return [d]; } } プログラム5 プログラム5(eは空欄): import java.util.List; import java.util.Map; public class Template { List<Fragment> fragmentList; Template(List<Fragment> fragmentList) { this.fragmentList = fragmentList; } public String apply(Map<String, List<String>> table) { StringBuilder sb = new StringBuilder(); for (Fragment fragment : fragmentList) { sb.append(fragment.replace([e])); } return sb.toString(); } } プログラム6 プログラム6: import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.List; import java.util.Map; public class TemplateTester { public static void main(String... args) throws IOException { try ( Reader tReader = new FileReader("template.txt"); Reader rReader = new FileReader("replacementTable.txt") ) { Template template = TemplateParser.parse(tReader); Map<String, List<String>> table = ReplacementTableParser.parse(rReader); System.out.print(template.apply(table)); } } } 関連API仕様(p.75) Java API(物理PDFページ75):java.io.Reader は文字ストリームを読み込む抽象クラス。int read() は単一の文字を読み込み、読み込まれた文字を char 値から int 型に変換した0~65535の範囲の値として返す。ストリームの終わりに達した後は−1を返す。入出力エラー時は IOException。java.io.FileReader(String fileName) は指定ファイルを読み込む新しい FileReader を作る。java.util.List<E> の boolean add(E e) は指定要素をリストの最後に追加する(戻り値 true)。 関連API仕様(p.76) Java API(物理PDFページ76):java.util.ArrayList<E>() は空のリストを作る。java.util.Map<K,V> の V get(Object key) は指定キーに対応付けられた値を返し、値がなければ null を返す。java.lang.CharSequence は char 値のシーケンスを表す。java.lang.StringBuilder() は空のシーケンスを作る。append(char c) は指定 char 値を末尾に追加し、append(CharSequence cs) は指定シーケンスを末尾に追加する。いずれもこのオブジェクトへの参照を返す。 関連API仕様・正誤表(p.77、正誤表p.2) Java API(物理PDFページ77):java.lang.String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements) は、elements が返す全ての char 値のシーケンスを、delimiter が返す char 値のシーケンスを間に挟んで連結し、含まれる全ての char 値を順に並べた文字列を返す。elements が要素を返さないときは空文字列を返す。要素が一つだけのときは、そのシーケンスに含まれる全ての char 値を順に並べた文字列を返す。公式正誤表(物理PDFページ2)は、仕様説明の引数名を「delimiter — elementsが返すシーケンスを連結する際に間に挟むchar値のシーケンス」「elements — 連結対象のchar値のシーケンスを返す反復子」と訂正している。

問問11 設問1

プログラム中の空欄に入れる正しい答えを、解答群の中から選べ。 aに関する解答群 ア extends イ interface ウ implements エ throws b、cに関する解答群 ア Fragment(buf) イ Fragment(c) ウ PassThrough(buf) エ PassThrough(c) オ Replacer(buf) カ Replacer(c) dに関する解答群 ア fragmentList イ new Template(buf) ウ new Template(fragmentList) エ new Template(reader) eに関する解答群 ア fragment イ fragmentList ウ sb エ table

  • A-ア extends
  • A-イ interface
  • A-ウ implements
  • A-エ throws
  • B-ア Fragment(buf)
  • B-イ Fragment(c)
  • B-ウ PassThrough(buf)
  • B-エ PassThrough(c)
  • B-オ Replacer(buf)
  • B-カ Replacer(c)
  • C-ア Fragment(buf)
  • C-イ Fragment(c)
  • C-ウ PassThrough(buf)
  • C-エ PassThrough(c)
  • C-オ Replacer(buf)
  • C-カ Replacer(c)
  • D-ア fragmentList
  • D-イ new Template(buf)
  • D-ウ new Template(fragmentList)
  • D-エ new Template(reader)
  • E-ア fragment
  • E-イ fragmentList
  • E-ウ sb
  • E-エ table

出典:平成30年度 秋期 基本情報技術者試験 午後 問11 設問1

問問11 設問2

次の記述中の空欄に入れる正しい答えを、解答群の中から選べ。〈と〉は置換指示としてキー名称を囲う用途以外では、ひな形中で使用することができない。そこで、これらの文字を他の用途でも使用できるように、次の2行をプログラム4のクラスTemplateParserのαの位置に挿入した。これによって、\ に続く1文字(\ が複数個連続するときは奇数個目に続く1文字)は、置換指示以外の部分やキー名称の一部として扱われる。ここで、続く1文字は必ず読めるものとする。 case '\\' : [f] ;

  • ア break
  • イ buf.append((char) c)
  • ウ buf.append((char) c); break
  • エ buf.append((char) reader.read())
  • オ buf.append((char) reader.read()); break

出典:平成30年度 秋期 基本情報技術者試験 午後 問11 設問2

共通の文章

問12 次のアセンブラプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 【プログラムの説明】 1970年1月1日(以下,基準日という)から,指定された日付までの日数を求める副プログラム群である。日付は,全て西暦(グレゴリオ暦)の日付であり,基準日以降でなければならない。 (1) プログラム1は,基準日から指定された日付までの日数を計算する副プログラム DAYOFFST である。日付は,GR2に設定されたアドレスから始まる連続した3語に年,月,日を表す数値でこの順に格納され,誤りはないものとする。基準日を0日目とし,指定された日付までの日数を,符号のない数値(0~65535)としてGR0に設定して呼出し元に戻る。ただし,日付は基準日から65535日目までの日付で与えられる。 (2) プログラム2は,うるう年を判定する副プログラム LEAPYEAR である。GR2に設定された年が平年の場合は0を,うるう年の場合は1を,GR0に設定して呼出し元に戻る。年が平年であるか,うるう年であるかの判定は,次の順に行う。 ① 年が4で割り切れない場合,平年とする。 ② 年が4で割り切れ,かつ100で割り切れない場合,うるう年とする。 ③ 年が400で割り切れる場合,うるう年とする。 ④ ①~③のいずれでも決定しなかった場合,平年とする。 (3) 副プログラム DIVISIBL は,GR2に設定された整数値がGR3に設定された整数値で割り切れる場合は1を,割り切れない場合は0を,GR0に設定して呼出し元に戻る。プログラムのソースコードは,省略する。 (4) 各副プログラムから戻るとき,汎用レジスタGR1~GR7の内容は元に戻す。 プログラム1 プログラム1 DAYOFFST(空欄a,bを含む)。行番号とコメントを含む原文のプログラム。 プログラム1の本文 1 DAYOFFST START 2 RPUSH 3 LD GR5,0,GR2 ; GR5: 年 4 LD GR3,1,GR2 ; GR3: 月 5 LD GR1,2,GR2 ; GR1: 日 6 SUBL GR1,=1 ; GR1で日数をカウント 7 a 8 ADDL GR1,-1,GR4 ; 1月1日からの日数(平年)を求める 9 CPA GR3,=3 ; 月が3月以降のときうるう年を考慮 10 JMI SKIP 11 LD GR2,GR5 12 CALL LEAPYEAR 13 ADDL GR1,GR0 14 SKIP LD GR2,=1970 ; 1970年から(年−1)年までの間(ただし, 15 LOOP CPA GR2,GR5 ; 年>1970),1年の日数を加算 16 b 17 CALL LEAPYEAR 18 ADDL GR0,=365 19 ADDL GR1,GR0 20 ADDA GR2,=1 21 JUMP LOOP 22 BREAK LD GR0,GR1 23 EXIT RPOP 24 RET 25 ; ACCMDAYSは,平年の各月1日の1月1日からの日数(1月1日は0日) 26 ACCMDAYS DC 0,31,59,90,120,151,181,212,243,273,304,334 27 END プログラム2 プログラム2 LEAPYEAR(空欄c,dを含む)。行番号を含む原文のプログラム。 プログラム2の本文 1 LEAPYEAR START 2 RPUSH 3 SUBA GR0,GR0 4 LD GR3,GR2 5 AND GR3,=3 6 c 7 LD GR3,=100 8 CALL DIVISIBL 9 d 10 JNZ FIN 11 LD GR3,=400 12 CALL DIVISIBL 13 FIN RPOP 14 RET 15 END 参考資料:COMET II命令・フラグ仕様 COMET IIの仕様のうち,空欄と設問に関係する命令・フラグの仕様。 ・GRは16ビットの汎用レジスタGR0~GR7。主記憶は65536語で,アドレスは0~65535。数値は16ビットの2進数で表し,負数は2の補数で表す。 ・LD r1,r2 は r1←(r2)。LD r,adr[,x] は r←(実効アドレス)。LAD r,adr[,x] は r←実効アドレス。 ・ADDA r1,r2 は r1←(r1)+(r2)。ADDL r1,r2 は r1←(r1)+(r2)を論理加算として行う。SUBL r1,r2 は r1←(r1)−(r2)を論理減算として行う。各演算命令はFRを設定する。算術演算のOFは結果が−32768~32767に収まらない場合1,論理演算のOFは結果が0~65535に収まらない場合1となり,それ以外は0。 ・AND r1,r2 は r1←(r1) AND (r2)。 ・CPA r1,r2 は算術比較,CPL r1,r2 は論理比較を行い,結果に応じてFRのSF,ZFを設定する。比較結果が等しいときSF=0,ZF=1;左辺が大きいときSF=0,ZF=0;左辺が小さいときSF=1,ZF=0。 ・JMI adr はSF=1のとき分岐。JNZ adr はZF=0のとき分岐。JZE adr はZF=1のとき分岐。JPL adr はOF=0かつSF=0のとき分岐。JOV adr はOF=1のとき分岐。JUMP adr は無条件に分岐。 ・CALL adr は副プログラムを呼び出し,RETは呼出し元に戻る。RPUSHはGRの内容をGR1,GR2,…,GR7の順序でスタックに格納する。RPOPはスタックの内容を取り出し,GR7,GR6,…,GR1の順序でGRに格納する。 ・GR0~GR7,GR1~GR7は命令のGRオペランドとして指定できる。リテラルは「=」を付けて記述する。 ・FRはOF,SF,ZFからなる。表中の○*1は演算命令によるFR設定(OFも設定される),○*2はOFが変更されず,SFとZFに演算結果の最後に送り出されたビットの値が設定されることを示す。 aに関する解答群 プログラム1の空欄aに関する解答群。 ア LAD GR4,ACCMDAYS イ LAD GR4,ACCMDAYS,GR3 ウ LAD GR4,ACCMDAYS,GR5 エ LD GR4,ACCMDAYS オ LD GR4,ACCMDAYS,GR3 カ LD GR4,ACCMDAYS,GR5 bに関する解答群 プログラム1の空欄bに関する解答群。 ア JMI BREAK イ JNZ BREAK ウ JOV BREAK エ JPL BREAK オ JUMP BREAK カ JZE BREAK cに関する解答群 プログラム2の空欄cに関する解答群。 ア JMI FIN イ JNZ FIN ウ JOV FIN エ JUMP FIN オ JZE FIN dに関する解答群 プログラム2の空欄dに関する解答群。 ア AND GR0,=#FFFE イ AND GR0,=1 ウ OR GR0,=#FFFE エ OR GR0,=1 オ XOR GR0,=#FFFE カ XOR GR0,=1

問問12 設問1

プログラム中の空欄に入れる正しい答えを,解答群の中から選べ。 aに関する解答群 ア LAD GR4,ACCMDAYS イ LAD GR4,ACCMDAYS,GR3 ウ LAD GR4,ACCMDAYS,GR5 エ LD GR4,ACCMDAYS オ LD GR4,ACCMDAYS,GR3 カ LD GR4,ACCMDAYS,GR5 bに関する解答群 ア JMI BREAK イ JNZ BREAK ウ JOV BREAK エ JPL BREAK オ JUMP BREAK カ JZE BREAK cに関する解答群 ア JMI FIN イ JNZ FIN ウ JOV FIN エ JUMP FIN オ JZE FIN dに関する解答群 ア AND GR0,=#FFFE イ AND GR0,=1 ウ OR GR0,=#FFFE エ OR GR0,=1 オ XOR GR0,=#FFFE カ XOR GR0,=1

  • A-ア LAD GR4,ACCMDAYS
  • A-イ LAD GR4,ACCMDAYS,GR3
  • A-ウ LAD GR4,ACCMDAYS,GR5
  • A-エ LD GR4,ACCMDAYS
  • A-オ LD GR4,ACCMDAYS,GR3
  • A-カ LD GR4,ACCMDAYS,GR5
  • B-ア JMI BREAK
  • B-イ JNZ BREAK
  • B-ウ JOV BREAK
  • B-エ JPL BREAK
  • B-オ JUMP BREAK
  • B-カ JZE BREAK
  • C-ア JMI FIN
  • C-イ JNZ FIN
  • C-ウ JOV FIN
  • C-エ JUMP FIN
  • C-オ JZE FIN
  • D-ア AND GR0,=#FFFE
  • D-イ AND GR0,=1
  • D-ウ OR GR0,=#FFFE
  • D-エ OR GR0,=1
  • D-オ XOR GR0,=#FFFE
  • D-カ XOR GR0,=1

出典:平成30年度 秋期 基本情報技術者試験 午後 問12 設問1

問問12 設問2

次の記述中の空欄に入れる正しい答えを,解答群の中から選べ。 副プログラムDAYOFFSTに,基準日から65536日目以降32767年12月31日までの日付を与えた場合には,あふれが発生し,正しい結果を返すことができない。あふれが発生したことを呼出し元に通知するために,フラグレジスタFRのOFが1の状態で呼出し元に戻るようにしたい。このためには,プログラム1の行番号eの行の直後にf命令を挿入し,ラベルEXITの行に分岐する必要がある。 eに関する解答群 ア 8 イ 13 ウ 18 エ 19 オ 20 fに関する解答群 ア JMI イ JNZ ウ JOV エ JPL オ JZE

  • E-ア 8
  • E-イ 13
  • E-ウ 18
  • E-エ 19
  • E-オ 20
  • F-ア JMI
  • F-イ JNZ
  • F-ウ JOV
  • F-エ JPL
  • F-オ JZE

出典:平成30年度 秋期 基本情報技術者試験 午後 問12 設問2

共通の文章

問13「表計算」。次の表計算のワークシート及びマクロの説明を読んで、設問1~3に答える。Z社は、店舗の窓口で自社商品に関する諸手続のサービスを行っている。来店した顧客が受付機のボタンを押すと、1から始まる連番の受付番号を記した受付票が発行される。窓口では、受付番号の順に担当者がPCを用いて業務処理用サーバ(以下、業務サーバ)の機能を利用しながらサービスを行う。最近、顧客へのアンケートで「待ち時間が長い」との意見が増えたので、表計算ソフトを用いて待ち時間の状況などを分析することにした。なお、本問において、関数「条件付個数」は、セル範囲に含まれる空白セルでないセルのうち検索条件の記述で指定された条件を満たすセルの個数を返す。 図1 ワークシート「来店状況」の例と説明 【ワークシート:「来店状況」】業務サーバには、顧客に対して行ったサービスに関するデータが受付番号ごとに記録される。分析に必要なデータを得るため、ある1日のデータを業務サーバから抽出、加工してワークシート「来店状況」に入力した。列A~Fの3行目以降には、受付票発行後にサービスを受けた窓口利用者のデータが入力される。1受付番号につき1レコードを同一行に入力し、受付番号の昇順に整列する。データ件数は5件以上250件以下。最後のデータ行より下の各セルは空白。業務サーバは時間を分単位の整数値で保持し、時刻を午前0時00分からの経過分数として保持する。時間・時刻の計算にはその整数値を用い、表示形式はhh:mm(時:分)。列A=受付番号、B=受付時刻、C=サービス種別、D=窓口番号、E=開始時刻、F=サービス時間、G=終了時刻、H=待ち時間、I=待ち人数、J=待ち時間順位。受付票の発行は10時00分に開始し、19時00分に終了。サービス種別はA、B、Cの3種類で、すべて1日に1回以上利用される。窓口は3つで番号1、2、3。どの窓口でもすべての種別のサービスを行う。列Eは窓口でサービスを開始した時刻、Fはサービスに掛かった時間。図1の例では、1行目B1に窓口数3。2行目は各列の見出し。例として、3行目は受付番号1、受付時刻10:02、種別A、窓口1、開始10:02、サービス時間0:14、終了10:16、待ち時間0:00、待ち人数0、順位78。4行目は番号2、10:08、A、窓口2、10:08、0:13、10:21、0:00、0、79。5行目は番号3、10:13、C、窓口3、10:13、0:22、10:35、0:00、0、80。109行目は番号110、18:52、B、窓口1、19:55、0:09、20:04、1:03、13、38。110行目以降の例示行は空白。データ処理では、G3に終了時刻を求める式「IF(A3=null,null,E3+F3)」を入力し、G4~G252に複写する。H3に待ち時間を求める式「IF(A3=null,null,E3-B3)」を入力し、H4~H252に複写する。I3に待ち人数を求める式「IF(A3=null,null,a)」を入力し、I4~I252に複写する。待ち時間0の窓口利用者は待ち人数に含めない。J3に待ち時間順位を求める式を入力し、J4~J252に複写する。待ち時間が等しいデータが複数あるときは、受付番号の小さいデータを上位とする。順位の式は「IF(A3=null,null,条件付個数(H$3:H$252,>H3)+条件付個数(H$3:H3,=H3))」。図1のキャプションは「ワークシート『来店状況』の例」。 図2 ワークシート「分析」の例 【ワークシート:「分析」】「来店状況」のデータを基に分析するため、セルA2~D12に「時間帯別分析」、セルF2~I6に「種別分析」、セルF9~I14に「待ち時間分析(上位5件)」の表を格納する。図2の表の列見出しと例の値は次のとおり。時間帯別分析:列A「受付時間帯から」、B「まで」、C「受付人数」、D「平均待ち時間」。4~12行の時間帯は10:00~10:59、11:00~11:59、12:00~12:59、13:00~13:59、14:00~14:59、15:00~15:59、16:00~16:59、17:00~17:59、18:00~18:59。各時間帯の受付人数は順に7、9、9、12、18、21、15、9、7、平均待ち時間は順に0:00、0:00、0:00、0:00、0:14、0:50、1:27、1:32、1:17。種別分析:列F「サービス種別」、G「件数」、H「構成比率」、I「平均サービス時間」。Aは62件、57.9%、0:14。Bは29件、27.1%、0:08。Cは16件、15.0%、0:24。待ち時間分析(上位5件):列F「順位」、G「受付番号」、H「受付時刻」、I「待ち時間」。順位1~5の例は、1/92/16:59/1:38、2/97/17:24/1:37、3/99/17:34/1:37、4/91/16:57/1:35、5/93/17:02/1:35。図2のキャプションは「ワークシート『分析』の例」。 設問1 空欄aの解答群 設問1の空欄aに関する解答群。選択肢は原本順。ア:条件付個数(E3:E$252, >B3)。イ:条件付個数(E$3:E3, <B3)。ウ:条件付個数(E$3:E3, >B3)。エ:条件付個数(G3:G$252, >B3)。オ:条件付個数(G3:G$252, <B3)。カ:条件付個数(G$3:G3, >B3)。設問1には「問題誤りにつき、問13を選択した受験者全員正解の措置済み」と記載されている。 設問2 空欄bの解答群 設問2の空欄bに関する解答群。選択肢は原本順。ア:条件付個数(来店状況!B$3:B$252, >A4)-条件付個数(来店状況!B$3:B$252, >A5)。イ:条件付個数(来店状況!B$3:B$252, >A4)-条件付個数(来店状況!B$3:B$252, >B4)。ウ:条件付個数(来店状況!B$3:B$252, >B4)-条件付個数(来店状況!B$3:B$252, >A4)。エ:条件付個数(来店状況!B$3:B$252, <A4)-条件付個数(来店状況!B$3:B$252, ≦B4)。オ:条件付個数(来店状況!B$3:B$252, ≦B4)-条件付個数(来店状況!B$3:B$252, <A4)。 設問2 空欄cの解答群 設問2の空欄cに関する解答群。選択肢は原本順。ア:合計(来店状況!F$3:F$252)/G4*H4。イ:条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252)/G4。ウ:条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252)/合計(G$4:G$6)。エ:条件付合計(来店状況!F$3:F$252, =F4, 来店状況!C$3:C$252)/G4。オ:条件付合計(来店状況!F$3:F$252, =F4, 来店状況!C$3:C$252)/合計(G$4:G$6)。カ:平均(来店状況!F$3:F$252)*H4。 設問2 空欄dの解答群 設問2の空欄dに関する解答群。選択肢は原本順。ア:照合検索(F10, 来店状況!A$3:A$252, 来店状況!J$3:J$252)。イ:照合検索(F10, 来店状況!J$3:J$252, 来店状況!A$3:A$252)。ウ:垂直照合(順位(F10, 来店状況!H$3:H$252, 1), 来店状況!A$3:J$252, 1, 0)。エ:垂直照合(F10, 来店状況!A$3:J$252, 10, 0)。オ:表引き(来店状況!A$3:A$252, 順位(F10, 来店状況!H$3:H$252, 1), 1)。カ:表引き(来店状況!J$3:J$252, 照合一致(F10, 来店状況!A$3:A$252, 0), 1)。 マクロqueue_simulationの説明と図式 【マクロ:queue_simulationの説明】待ち時間の短縮策を検討するため、窓口数を変えたときのサービスを行う窓口の窓口番号、開始時刻、終了時刻、待ち時間及び待ち人数の変化をシミュレーションするマクロqueue_simulationを作成し、ワークシート「来店状況」に格納した。シミュレーションに使う窓口数を「来店状況」セルB1に入力し、受付番号、受付時刻、サービス種別及びサービス時間は「来店状況」セルA3~F252の内容をそのまま用いる。窓口数は1~8を指定できる。前者終了時刻を格納する配列end_timeを用意し、添字1~8は窓口番号1~8に対応し、全要素の初期値は0。処理行位置を格納する変数work_lineの初期値は1。3行目から全データの処理が終わるまで処理を繰り返す。①配列end_timeの要素のうち最小値をもつ要素を探し、添字を窓口番号として処理行の列Dに格納する。前者終了時刻が等しい窓口が複数ある場合は、番号最小の窓口を選ぶ。②①の最小値が処理行の列Bの受付時刻より小さい場合は受付時刻を、そうでなければ①の最小値を開始時刻として処理行の列Eに格納する。③選んだ窓口の前者終了時刻を更新するため、配列end_timeの該当窓口要素に処理行の列Gの終了時刻を格納する。④work_lineに1を加える。マクロの図式には、数値型変数i、work_line、sw、配列end_time[9]、min_time、min_noが示され、iを1からB1まで1ずつ増やしてend_time[i]←0とする初期化、work_line←1、sw←0、論理積(sw=0, work_line≦250)の間の処理がある。min_no←1、min_time←end_time[1]とし、iを2からB1まで1ずつ増やすループ内に空欄eと、その後min_time←end_time[i]、min_no←iの処理が示される。続いて相対(A2, work_line, 3)←空欄f。相対(A2, work_line, 1)>min_timeの判定に応じ、列Eに相対(A2, work_line, 1)またはmin_timeを格納する。さらに空欄g、work_line←work_line+1を実行し、相対(A2, work_line, 0)=nullならsw←1とする。相対(A2, work_line, n)はセルA2を基準にした相対参照の記法。 設問3 空欄eの解答群 設問3の空欄eに関する解答群。選択肢は原本順。ア:min_time<end_time[i]。イ:min_time<end_time[min_no]。ウ:min_time<相対(A2, work_line, 1)。エ:min_time>end_time[i]。オ:min_time>end_time[min_no]。カ:min_time>相対(A2, work_line, 1)。 設問3 空欄fの解答群 設問3の空欄fに関する解答群。選択肢は原本順。ア:end_time[i]。イ:end_time[min_no]。ウ:i。エ:min_no。オ:min_time。カ:work_line。 設問3 空欄gの解答群 設問3の空欄gに関する解答群。選択肢は原本順。ア:end_time[min_no]←min_time。イ:end_time[min_no]←相対(A2, work_line, 4)。ウ:end_time[min_no]←相対(A2, work_line, 6)。エ:end_time[work_line]←min_time。オ:end_time[work_line]←相対(A2, work_line, 4)。カ:end_time[work_line]←相対(A2, work_line, 6)。 設問1の公式措置 設問1は問題誤りにつき,問13を選択した受験者全員正解の措置済み

問問13 設問2

ワークシート「分析」に関する次の記述中の[空欄]に入れる正しい答えを,解答群の中から選べ。 (1) 集計の区分を1時間ごとの時間帯とし,セルA4~B12に,各時間帯の始まりの時刻(毎時00分)と終わりの時刻(毎時59分)を上から順に入力する。また,セルF4~F6にサービスの種別を,セルF10~F14に待ち時間の順位を示す数値1~5を入力する。 (2) セルC4に,ワークシート「来店状況」のデータから,受付時刻が当該行の時間帯にあるデータの個数を求める次の式を入力し,セルC5~C12に複写する。 [b] (3) セルD4に,ワークシート「来店状況」のデータから,受付時刻が当該行の時間帯にあるデータの待ち時間の平均値を求める式を入力し,セルD5~D12に複写する。ここで,当該行の時間帯の受付人数が0のときの待ち時間の平均値は0とする。 (4) セルG4に,ワークシート「来店状況」のデータから,サービス種別が当該行のサービス種別と一致するデータの件数を求める式を入力し,セルG5~G6に複写する。また,セルH4に全サービス件数に対する当該行の件数の構成比率を求める式を入力し,セルH5~H6に複写する。 (5) セルI4に,ワークシート「来店状況」のデータから,サービス種別が当該行のサービス種別と一致するデータのサービス時間の平均値を求める次の式を入力し,セルI5~I6に複写する。 切捨て([c], 0) (6) セルG10に,ワークシート「来店状況」のデータから,待ち時間順位がセルF10の順位に該当するデータの受付番号を求める次の式を入力し,セルG11~G14に複写する。 [d] (7) セルH10に,ワークシート「来店状況」のデータから,セルG10の受付番号に該当するデータの受付時刻を求める式を入力し,セルH11~H14に複写する。 (8) セルI10に,ワークシート「来店状況」のデータから,セルG10の受付番号に該当するデータの待ち時間を求める式を入力し,セルI11~I14に複写する。 bに関する解答群 ア 条件付個数(来店状況!B$3:B$252, >A4)-条件付個数(来店状況!B$3:B$252, >A5) イ 条件付個数(来店状況!B$3:B$252, >A4)-条件付個数(来店状況!B$3:B$252, >B4) ウ 条件付個数(来店状況!B$3:B$252, >B4)-条件付個数(来店状況!B$3:B$252, >A4) エ 条件付個数(来店状況!B$3:B$252, <A4)-条件付個数(来店状況!B$3:B$252, ≦B4) オ 条件付個数(来店状況!B$3:B$252, ≦B4)-条件付個数(来店状況!B$3:B$252, <A4) cに関する解答群 ア 合計(来店状況!F$3:F$252)/G4*H4 イ 条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252)/G4 ウ 条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252)/合計(G$4:G$6) エ 条件付合計(来店状況!F$3:F$252, =F4, 来店状況!C$3:C$252)/G4 オ 条件付合計(来店状況!F$3:F$252, =F4, 来店状況!C$3:C$252)/合計(G$4:G$6) カ 平均(来店状況!F$3:F$252)*H4 dに関する解答群 ア 照合検索(F10, 来店状況!A$3:A$252, 来店状況!J$3:J$252) イ 照合検索(F10, 来店状況!J$3:J$252, 来店状況!A$3:A$252) ウ 垂直照合(順位(F10, 来店状況!H$3:H$252, 1), 来店状況!A$3:J$252, 1, 0) エ 垂直照合(F10, 来店状況!A$3:J$252, 10, 0) オ 表引き(来店状況!A$3:A$252, 順位(F10, 来店状況!H$3:H$252, 1), 1) カ 表引き(来店状況!J$3:J$252, 照合一致(F10, 来店状況!A$3:A$252, 0), 1)

  • B-ア 条件付個数(来店状況!B$3:B$252, >A4)-条件付個数(来店状況!B$3:B$252, >A5)
  • B-イ 条件付個数(来店状況!B$3:B$252, >A4)-条件付個数(来店状況!B$3:B$252, >B4)
  • B-ウ 条件付個数(来店状況!B$3:B$252, >B4)-条件付個数(来店状況!B$3:B$252, >A4)
  • B-エ 条件付個数(来店状況!B$3:B$252, <A4)-条件付個数(来店状況!B$3:B$252, ≦B4)
  • B-オ 条件付個数(来店状況!B$3:B$252, ≦B4)-条件付個数(来店状況!B$3:B$252, <A4)
  • C-ア 合計(来店状況!F$3:F$252)/G4*H4
  • C-イ 条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252)/G4
  • C-ウ 条件付合計(来店状況!C$3:C$252, =F4, 来店状況!F$3:F$252)/合計(G$4:G$6)
  • C-エ 条件付合計(来店状況!F$3:F$252, =F4, 来店状況!C$3:C$252)/G4
  • C-オ 条件付合計(来店状況!F$3:F$252, =F4, 来店状況!C$3:C$252)/合計(G$4:G$6)
  • C-カ 平均(来店状況!F$3:F$252)*H4
  • D-ア 照合検索(F10, 来店状況!A$3:A$252, 来店状況!J$3:J$252)
  • D-イ 照合検索(F10, 来店状況!J$3:J$252, 来店状況!A$3:A$252)
  • D-ウ 垂直照合(順位(F10, 来店状況!H$3:H$252, 1), 来店状況!A$3:J$252, 1, 0)
  • D-エ 垂直照合(F10, 来店状況!A$3:J$252, 10, 0)
  • D-オ 表引き(来店状況!A$3:A$252, 順位(F10, 来店状況!H$3:H$252, 1), 1)
  • D-カ 表引き(来店状況!J$3:J$252, 照合一致(F10, 来店状況!A$3:A$252, 0), 1)

出典:平成30年度 秋期 基本情報技術者試験 午後 問13 設問2

問問13 設問3

マクロqueue_simulationの図式にある空欄e、f、gに入れるものをそれぞれ解答群から選ぶ。 eに関する解答群 ア min_time<end_time[i] イ min_time<end_time[min_no] ウ min_time<相対(A2, work_line, 1) エ min_time>end_time[i] オ min_time>end_time[min_no] カ min_time>相対(A2, work_line, 1) fに関する解答群 ア end_time[i] イ end_time[min_no] ウ i エ min_no オ min_time カ work_line gに関する解答群 ア end_time[min_no]←min_time イ end_time[min_no]←相対(A2, work_line, 4) ウ end_time[min_no]←相対(A2, work_line, 6) エ end_time[work_line]←min_time オ end_time[work_line]←相対(A2, work_line, 4) カ end_time[work_line]←相対(A2, work_line, 6)

  • E-ア min_time<end_time[i]
  • E-イ min_time<end_time[min_no]
  • E-ウ min_time<相対(A2, work_line, 1)
  • E-エ min_time>end_time[i]
  • E-オ min_time>end_time[min_no]
  • E-カ min_time>相対(A2, work_line, 1)
  • F-ア end_time[i]
  • F-イ end_time[min_no]
  • F-ウ i
  • F-エ min_no
  • F-オ min_time
  • F-カ work_line
  • G-ア end_time[min_no]←min_time
  • G-イ end_time[min_no]←相対(A2, work_line, 4)
  • G-ウ end_time[min_no]←相対(A2, work_line, 6)
  • G-エ end_time[work_line]←min_time
  • G-オ end_time[work_line]←相対(A2, work_line, 4)
  • G-カ end_time[work_line]←相対(A2, work_line, 6)

出典:平成30年度 秋期 基本情報技術者試験 午後 問13 設問3

出典

各問題の下に出典を記載しています。

公表資料(PDF)