<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>今週の午後問題 | 基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</title>
	<atom:link href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Wed, 10 Jun 2026 00:47:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.29</generator>
	<item>
		<title>今週の午後問題〔解答〕アルゴリズム  文字列の誤りの検出 2017 年度 秋期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h29a_algorithm/</link>
		<pubDate>Fri, 05 Nov 2021 02:30:59 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[午後問題の解説]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6176</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまにも解答してもらっています！ 今週の午後問題は「文字列の誤りの検出」でしたが、皆さん、手応えは [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h29a_algorithm/">今週の午後問題〔解答〕アルゴリズム  文字列の誤りの検出 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまにも解答してもらっています！</p>
<p>今週の午後問題は<a href="../h29a_algorithm/">「文字列の誤りの検出」</a>でしたが、皆さん、手応えはいかがでしょうか?</p>
<p>金曜になりましたので、<span class="u">出題の 解答 と 矢沢久雄さんによる 解説 に加えて、皆さんの正解率を公開</span>します。
</div>
<style>.sub-title{font-size:.9em}blockquote > p{color:#607d8b}pre{font-size:1em;padding:1em;background:#eeeeee;}pre,article,code{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}</style>
<h2>今週の午後問題<br />
<span class="grey-text sub-title">2017 年度 秋期 文字列の誤りの検出</span></p>
<p class="pink chip white-text sub-title">解答と解説</p>
</h2>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>a</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p>calcCheckCharacter 関数において、論理型の変数 is_even は、<span class="u">変数名から「偶数（ even ）であるか（ is ）」を意味している</span>ことがわかります。</p>
<p>is_even が空欄 a1 と等しいとき、単に文字の値を足す処理を行っています。説明文に</p>
<blockquote><p>偶数番目の文字に割り当てた数値は、そのまま全て足し合わせる</p></blockquote>
<p>とあるので、空欄 a1 は true です。</p>
<p>validateChackCharacter 関数において、論理型の変数 is_odd は、<span class="U">変数名から「奇数（ odd ）であるか（ is ）」を意味している</span>ことがわかります。</p>
<p>is_odd が空欄 a2 と等しいとき、単に文字の値を足す処理を行っています。説明文に</p>
<blockquote><p>奇数番目の文字に割り当てた数値は、そのまま全て足し合わせる</p></blockquote>
<p>とあるので、空欄 a2 は true です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>b</p>
<p><span class="chip bold">正解</span> ウ</p>
<div class="divider"></div>
<p>空欄 b の前にある繰り返し処理で、変数 sum に、説明文の</p>
<blockquote><p>03.　01 と 02 の結果を足し合わせる</p></blockquote>
<p>の結果が得られます。</p>
<p>したがって、空欄 b は、説明文の</p>
<blockquote><p>04.　N から 、 03 で求めた総和を N で割った余りを引く。さらにその結果を、 N で割り、余りを求める</p></blockquote>
<p>に該当します。</p>
<p>したがって、空欄 b は、 (N &#8211; sum  %  N) % N です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>c</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p>変数 ret_value は、 validateCheckCharacter 関数の戻り値です。空欄 c の条件が true のとき、 ret_value に false が格納されています。</p>
<p>したがって、<span class="u">空欄 c には、検査文字付文字列に誤りがある条件が入ります</span>。説明文に</p>
<blockquote><p>04.　03 で求めた総和が N で割り切れる場合は、検査文字付文字列に誤りがないと判定する。 N で割り切れない場合は、検査文字付文字列に誤りがあると判定する</p></blockquote>
<p>とあるので、空欄 c は、 sum % N ≠ 0 です。割り切れないことは、割り算の余りが 0 でないことで判断できます。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>d</p>
<p><span class="chip bold">正解</span> オ</p>
<div class="divider"></div>
<p>説明文に、</p>
<blockquote><p>複数文字に誤りがある場合には、誤りがないと判定されることがある</p></blockquote>
<p>とあるので、 ipa␣␣f に対して、複数文字に誤りがある api␣␣f （ケース 2 ）、 pia␣␣f （ケース 3 ）、 ␣␣apif （ケース 4 ）を検証します。</p>
<dl class="inline">
<dt>文字</dt>
<dd>数値</dd>
<dt>_</dt>
<dd>0</dd>
<dt>i</dt>
<dd>12</dd>
<dt>p</dt>
<dd>19</dd>
<dt>a</dt>
<dd>4</dd>
<dt>f</dt>
<dd>9</dd>
</dl>
<dl class="inline">
<span class="u">api␣␣f （ケース 2 ）の検証</span></p>
<dt>f</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>9</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0 × 2 = 0 、 0 ÷ 30 = 0 あまり 0 、 0 + 0 = 0</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0</dd>
<dt>i</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>12 × 2 = 24 、24 ÷ 30 = 0 あまり 24 、 0 + 24 = 24</dd>
<dt>p</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>19</dd>
<dt>a</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>4 × 2 = 8 、8 ÷ 30 = 0 あまり 8 、 0 + 8 = 8</dd>
</dl>
<p>すべてを足し合わせると、<br />
9 + 0 + 0 + 24 + 19 + 8 = 60</p>
<p>60 は N = 30 で割り切れるので、誤りがあるのに、誤りがないと判断されます。</p>
<dl class="inline">
<span class="u">pia␣␣f （ケース 3 ）の検証</span></p>
<dt>f</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>9</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0 × 2 = 0 、 0 ÷ 30 = 0 あまり 0 、 0 + 0 = 0</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0</dd>
<dt>a</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>4 × 2 = 8 、 8 ÷ 30 = 0 あまり 8 、 0 + 8 = 8</dd>
<dt>i</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>12</dd>
<dt>p</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>19 × 2 = 38 、 38 ÷ 30 = 1 あまり 8 、 1 + 8 = 9</dd>
</dl>
<p>すべてを足し合わせると、<br />
9 + 0 + 0 + 8 + 12 + 9 = 38</p>
<p>38 は N = 30 で割り切れないので、誤りがあると適切に判断されます。</p>
<dl class="inline">
<span class="u">␣␣apif （ケース 4 ）の検証</span></p>
<dt>f</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>9</dd>
<dt>i</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>12 × 2 = 24 、 24 ÷ 30 = 0 あまり 24 、 0 + 24 = 24</dd>
<dt>p</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>19</dd>
<dt>a</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>4 × 2 = 8 、 8 ÷ 30 = 0 あまり 8 、 0 + 8 = 8</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0 × 2 = 0 、 0 ÷ 30 = 0 あまり 0 、 0 + 0 = 0</dd>
</dl>
<p>すべてを足し合わせると、<br />
9 + 24 + 19 + 8 + 0 + 0 = 60</p>
<p>60 は N = 30 で割り切れるので、誤りがあるのに、誤りがないと判断されます。</p>
<p>したがって、誤りがあるのに誤りがないと判断されるのは、ケース 2 とケース 4 です（選択肢オ）。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 3</span>e</p>
<p><span class="chip bold">正解</span> ウ</p>
<div class="divider"></div>
<p>5 列目を縦に見た ␣s␣␣ という文字列の検査文字を求めます。</p>
<dl class="inline">
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0 × 2  = 0 、 0 ÷ 2 = 0 あまり 0 、 0 + 0 = 0</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0</dd>
<dt>s</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>22 × 2  = 44 、 44 ÷ 30 = 1 あまり 14 、1 + 14 = 15</dd>
<dt>␣</dt>
<dd><i class="material-icons mag_rt05">more_horiz</i>0</dd>
</dl>
<p>すべてを足し合わせると、<br />
0 + 15 + 0 + 0 = 15</p>
<p>30 から、 15 を 30 で割った余りの 15 を引くと、<br />
30 &#8211; 15 = 15</p>
<p>この 15 を 30 で割った余りの 15 に対応する l （選択肢ウ）が検査文字になります。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 4</span>f</p>
<p><span class="chip bold">正解</span> カ</p>
<div class="divider"></div>
<p>表 4 のケースには、すべて 1 文字以上の誤りがあります。したがって、図 3 の 1 行目に、表 4 のどのケースを入れても、縦方向で 1 文字の誤りが生じる部分が 1 か所以上生じます。</p>
<p>関数 validateCheckCharacter は、誤りが 1 文字であれば、誤りを検出できます。そして、 1 つでも誤りがあると判定された場合は、検査文字列表に誤りがあると判定するのですから、検査文字付表に誤りがないと判定されるケースは、ありません（選択肢カ）。
</p></div>
<h2>みんなの解答</h2>
<p>ご解答いただいた皆さん、ありがとうございました！</p>
<p>手応えはいかがでしたでしょうか?</p>
<p>&nbsp;</p>
<p>なお、以下はこの問題の <a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2017h29_2/2018h29a_fe_pm_cmnt.pdf#page=3" rel="noopener" target="_blank">IPA の講評</a>です。今後の参考になれば幸いです。</p>
<div class="background grey-text c-round">
　問 8 では，検査文字を利用した文字列の誤り検出について出題した。<br />
　設問 1 では， a の正答率は低く，あまり理解されていなかった。プログラムの説明から， is_even の値及び is_odd の値と文字の順番との関係が理解できれば，正答できた。 b ， c の正答率は平均的で，おおむね理解されていた。<br />
　設問 2 と設問 3 の正答率は平均的で，おおむね理解されていた。<br />
　設問 4 の正答率は低く，あまり理解されていなかった。いずれのケースでも， &#8220;ipa␣␣f&#8221; と文字が異なる列位置において，図 3 の縦方向の文字列は，図 2 の縦方向の検査文字付文字列に対して 1 文字誤りがある。このことが分かれば，正答できた。<br />
　実務において，文字列の誤りを検出するプログラムはよく利用されるが，誤りを検出できないケースがあることも理解しておいてほしい。このことを踏まえた上で，用途に応じて適切な検出プログラムを適用する能力が求められるので，身につけておいてほしい。
</div>
<p>2022 年度 下期試験向け今週の午後問題はこれで終了です！　この連載が過去問題に演習で使われることを願っています !!</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h29a_algorithm/">今週の午後問題〔解答〕アルゴリズム  文字列の誤りの検出 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔問題〕アルゴリズム  文字列の誤りの検出 2017 年度 秋期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h29a_algorithm/</link>
		<pubDate>Sun, 31 Oct 2021 23:30:06 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6157</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまも参加して解答できます！　その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h29a_algorithm/">今週の午後問題〔問題〕アルゴリズム  文字列の誤りの検出 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまも参加して解答できます！　<span class="u">その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開</span>し、皆さんの正解率も発表します。</p>
<p>今回が<span class="bold">「アルゴリズム特集」</span>、最後の出題です！また今週の午後問も受験締切が近づいたので、一旦、お休みします。</p>
<p>最後を飾るのは<span class="bold"> 「 2017 年度 秋期 文字列の誤りの検出」</span>です。</p>
<p>ぜひ腕試しにお使い下さい！
</p></div>
<style>pre{font-size:1em;padding:1em;line-height:1.8;background:#fafafa;position:relative;}pre.with-cursol{padding-left:4em;}article,pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}ol.decimal-leading-zero li{list-style-type:decimal-leading-zero}ol.background{padding-left:3em!important}details{padding:2em;}table{font-size:.9em;}th{text-align:center}details p{color:"#607d8b"}summary:hover{cursor:pointer;}summary{display:inline-block;}.chip span::after{content:"\e5cf";font-family:"Material Icons";vertical-align:middle;margin-left:.5em;}summary::-webkit-details-marker{display:none;}details[open] .chip span::after{content:"\e5ce";}.iframe-container{overflow:auto;margin:2em auto;height:100%}@media screen and (max-width:600px){dd{margin-left:1em;}}</style>
<h2>今週の午後問題<br />2017 年度 秋期 アルゴリズム 文字列の誤りの検出</h2>
<div class="divider mag_h30"></div>
<p class="bold">問 1</p>
<p>　次のプログラムの説明及びプログラムを読んで，設問 1 ～ 4 に答えよ。</p>
<div class="mag_lt10">
　文字列の誤りを検出するために， N 種類の文字に 0，1，&#8230; ， N &#8211; 1 の整数値を重複なく割り当て，検査文字を生成するプログラムと，元となる文字列の末尾に検査文字を追加した検査文字付文字列を検証するプログラムである。ここで扱う 30 種類の文字，及び文字に割り当てた数値を，表 1 に示す。空白文字は &#8220;␣&#8221; と表記する。</p>
<p class="background c-round blue-grey-text mag_h30 small-text hide-on-med-and-up">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、表は右にスクロールできます
</p>
<div class="table-container">
<table class="responsive-width centered">
<caption>表 1 　文字，及び文字に割り当てた数値</caption>
<tr>
<th>文字</th>
<td>␣</td>
<td>.</td>
<td>,</td>
<td>?</td>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
<td>e</td>
<td>f</td>
<td>g</td>
<td>h</td>
<td>i</td>
<td>j</td>
<td>k</td>
</tr>
<tr>
<th>数値</th>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
</tr>
<tr>
<th>文字</th>
<td>l</td>
<td>m</td>
<td>n</td>
<td>o</td>
<td>p</td>
<td>q</td>
<td>r</td>
<td>s</td>
<td>t</td>
<td>u</td>
<td>v</td>
<td>w</td>
<td>x</td>
<td>y</td>
<td>z</td>
</tr>
<tr>
<th>数値</th>
<td>15</td>
<td>16</td>
<td>17</td>
<td>18</td>
<td>19</td>
<td>20</td>
<td>21</td>
<td>22</td>
<td>23</td>
<td>24</td>
<td>25</td>
<td>26</td>
<td>27</td>
<td>28</td>
<td>29</td>
</tr>
</table>
</div>
<p class="mag_tp50">〔プログラムの説明〕</p>
<p>　検査文字の生成と検査文字付文字列の検証の手順を示す。</p>
<ol class="background c-round">
<li>検査文字の生成
<ol class="decimal-leading-zero">
<li>文字列の末尾の文字を 1 番目の文字とし，文字列の先頭に向かって奇数番目の文字に割り当てた数値を 2 倍して N で割り，商と余りの和を求め，全て足し合わせる。</li>
<li>偶数番目の文字に割り当てた数値は，そのまま全て足し合わせる。</li>
<li>01 と 02 の結果を足し合わせる。</li>
<li>N から 03 で求めた総和を N で割った余りを引く。さらにその結果を， N で割り，余りを求める。求めた数値に対応する文字を検査文字とする。</li>
</ol>
</li>
<li>検査文字付文字列の検証
<ol class="decimal-leading-zero">
<li>検査文字付文字列の末尾の文字を 1 番目の文字とし，文字列の先頭に向かって偶数番目の文字に割り当てた数値を 2 倍して N で割り，商と余りの和を求め，全て足し合わせる。</li>
<li>奇数番目の文字に割り当てた数値は，そのまま全て足し合わせる。</li>
<li>01 と 02 の結果を足し合わせる。</li>
<li>03 で求めた総和が N で割り切れる場合は，検査文字付文字列に誤りがないと判定する。 N で割り切れない場合は，検査文字付文字列に誤りがあると判定する。</li>
</ol>
</li>
</ol>
<p class="mat_tp30">〔検査文字付文字列の生成例〕</p>
<p>　表 1 及び検査文字の生成の手順を用いることによって，文字列 ipa␣␣ に対し，生成される検査文字は f である。</p>
<p>　検査文字付文字列は，文字列の末尾に検査文字を追加し， ipa␣␣f となる。</p>
<p class="mag_tp50">〔プログラムの仕様〕</p>
<p>各関数の仕様を 1. ～ 4.に示す。ここで，配列の添字は 1 から始まるものとする。</p>
<ol class="background c-round">
<li>関数 calcCheckCharacter は，文字列及び文字列長を用いて生成した検査文字を返す。関数 calcCheckCharacter の引数及び返却値の仕様は，表 2 のとおりである。
<div class="table-container">
<table class="responsive-width">
<caption>表 2 　関数 calcCheckCharacter の引数及び返却値の仕様</caption>
<thead>
<tr>
<th>引数/返却値</th>
<th>データ型</th>
<th>入力/出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th>input[]</th>
<td>文字型</td>
<td>入力</td>
<td>文字列が格納されている 1 次元配列</td>
</tr>
<tr>
<th>len</th>
<td>整数型</td>
<td>入力</td>
<td>文字列の文字列長( 1 以上)</td>
</tr>
<tr>
<th>返却値</th>
<td>文字型</td>
<td>出力</td>
<td>生成した検査文字を返す。</td>
</tr>
</tbody>
</table>
</div>
<p>　関数 calcCheckCharacter は，関数 getValue, 関数 getChar を使用する。
</li>
<li>関数 validateCheckCharacter は，検査文字付文字列を検証し，検証結果を返す。関数 validateCheckCharacter の引数及び返却値の仕様は，表 3 のとおりである。
<div class="table-container">
<table class="responsive-width">
<caption>表 3 　関数 validateCheckCharacter の引数及び返却値の仕様</caption>
<thead>
<tr>
<th>引数/返却値</th>
<th>データ型</th>
<th>入力/出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th>input[]</th>
<td>文字型</td>
<td>入力</td>
<td>検査文字付文字列が格納されている 1 次元配列</td>
</tr>
<tr>
<th>len</th>
<td>整数型</td>
<td>入力</td>
<td>検査文字付文字列の文字列長 ( 2 以上) </td>
</tr>
<tr>
<th>返却値</th>
<td>論理型</td>
<td>出力</td>
<td>検査文字付文字列に誤りがないと判定した場合は true ，<br />誤りがあると判定した場合は false を返す。</td>
</tr>
</tbody>
</table>
</div>
<p>　関数 validateCheckCharacter は，関数 getValue を使用する。
</li>
<li>関数 getValue は，表 1 に従い，引数として与えられた文字に割り当てた数値を返す。</li>
<li>関数 getChar は，表 1 に従い，引数として与えられた数値に対応する文字を返す。</li>
</ol>
<p class="bold mag_tp30">設問 1</p>
<p>　プログラム中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。ここで， a1 と a2 に入れる答えは， a に関する解答群の中から組合せとして正しいものを選ぶものとする。</p>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム</div>
<p class="background c-round blue-grey-text mag_h30 small-text hide-on-med-and-up">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、プログラムは右にスクロールできます
</p>
<pre>○文字型関数 : calcCheckCharacter(文字型: input[], 整数型: len)
○整数型: N, sum, i, value, check_value
○論理型: is_even
･ N ← 30
･ sum ← 0
･ is_even ← false
■ i: len, i > 0, -1
| ･ value ← getValue(input[i])
| ▲ is_even = <span class="blank">a1</span>
| | ･ sum ← sum + value
|-+---
| | sum ← sum + (value × 2) ÷ N + (value × 2) % N
| ▼
| ･ is_even ← not is_even
■
･ check_value ← <span class="blank">b</span>
･ return getChar(check_value)</pre>
<pre>○論理型関数: validateCheckCharacter(文字型: input[], 整数型: len)
○整数型: N, sum, i, value
○論理型: is_odd, ret_value
･ N ← 30
･ sum ← 0
･ is_odd ← true
･ ret_value ← true
■ i: len, i > 0, -1
| ･ value ← getValue(input[i])
| ▲ is_odd = <span class="blank">a2</span>
| | ･ sum ← sum + value
|-+---
| | ･ sum ← sum + (value × 2) ÷ N + (value × 2) % N
| ▼
| ･ is_odd ← not is_odd
■
▲ <span class="blank">c</span>
| ･ ret_value ← false
▼
return ret_value</pre>
<p class="mag_tp30">a に関する解答群</p>
<table class="centered" style="font-size:1em; width:70%">
<thead>
<th></th>
<th>al</th>
<th>a2</th>
</thead>
<tbody>
<tr>
<th>ア</th>
<td>false</td>
<td>false</td>
</tr>
<tr>
<th>イ</th>
<td>false</td>
<td>true</td>
</tr>
<tr>
<th>ウ</th>
<td>true</td>
<td>false</td>
</tr>
<tr>
<th>エ</th>
<td>true</td>
<td>true</td>
</tr>
</tbody>
</table>
<p class="mag_tp30">b に関する解答群</p>
<p>ア　N &#8211; sum % N<br />
イ　sum % N<br />
ウ　(N &#8211; sum % N) % N<br />
エ　(sum &#8211; N) % N</p>
<p class="mag_tp30">c に関する解答群</p>
<p>ア　sum ÷ N = 0<br />
イ　sum ÷ N ≠ 0<br />
ウ　sum % N = 0<br />
エ　sum % N ≠ 0</p>
<p class="mag_tp30 bold">設問 2</p>
<p>　次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background c-round">
　本プログラムでは，検査文字付文字列の誤りが 1 文字であれば，誤りを検出できる。しかし，複数の文字に誤りがある場合には，誤りがないと判定されることがある。例えば，関数 validateCheckCharacter で表 4 に示す検査文字付文字列を検証した場合，誤りがないと判定されるケースは，<span class="blank">d</span>。ここで，文字列 ipa␣␣ に対し生成される検査文字は f である。</p>
<table class="centered responsive-width">
<caption>表 4 　検査文字付文字列</caption>
<thead>
<tr>
<th>ケース</th>
<th>検査文字付文字列</th>
</tr>
</thead>
<tbody>
<tr>
<th>1</th>
<td>ipb␣␣f</td>
</tr>
<tr>
<th>2</th>
<td>api␣␣f</td>
</tr>
<tr>
<th>3</th>
<td>pia␣␣f</td>
</tr>
<tr>
<th>4</th>
<td>␣␣apif</td>
</tr>
</tbody>
</table>
</div>
<p>d に関する解答群</p>
<p>ア　1 と 2 と 3 と 4 である<br />
イ　2 である<br />
ウ　2 と 3 である<br />
エ　2 と 3 と 4 である<br />
オ　2 と 4 である<br />
カ　ない</p>
<p class="mag_tp30 bold">設問 3</p>
<p>　次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background c-round">
　本プログラムを文字列長が同じである複数の文字列に対して適用することを考える (図 1 参照)。</p>
<figure>
  <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h29a_q8_figure_1.jpg" loading="lazy"><figcaption>図 1 　作成中の検査文字付表</figcaption></figure>
<p class="mat_tp30">〔考え方〕</p>
<p>　文字列長が n である m 個の文字列について考える。文字列に対して， (m + 1) 行 (n + 1) 列の表を用意する。以後，この表を検査文字付表という。</p>
<dl>
<dt>1. 検査文字の生成</dt>
<dd>　例えば，文字列長が 5 である 4 個の文字列 ipa␣␣ ，tests ， make␣ ，it.␣␣ を，図 1 の太枠内のように，各文字列の先頭の位置を最左列に揃え，各文字列を上の行から順に格納して，表を作成する。この表の太枠内の各行各列をそれぞれ文字列とみなして検査文字を生成し，最右列と最下行に格納する。</p>
<p>　この手順で作成した検査文字付表を図 2 に示す。作成した検査文字付表の 5 行 5 列目 (網掛け部分) の検査文字は<span class="blank">e</span>である。</p>
<figure>
  <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h29a_q8_figure_2.jpg" loading="lazy"><figcaption>図 2 　完成した検査文字付表</figcaption></figure>
</dd>
<dt>2. 検査文字付表の検証</dt>
<dd>　1. で作成した検査文字付表の，最下行を除く各行と最右列を除く各列を文字列とみなし，それぞれ関数 validateCheckCharacter で検証した結果，全て誤りがないと判定された場合には，検査文字付表に誤りがないと判定する。一つでも誤りがあると判定された場合は，検査文字付表に誤りがあると判定する。</dd>
</dl>
</div>
<p>e に関する解答群</p>
<p>ア　j　　イ　k　　ウ　l　　エ　m</p>
<p class="mag_tp30 bold">設問 4</p>
<p>　次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background c-round">
　図 2 の 1 行目の検査文字付文字列を取り除いた，図 3 の検査文字付表について考える。表 4 のケース 1 ～ 4 の検査文字付文字列を順に，図 3 の 1 行目に格納して検証した場合，検査文字付表に誤りがないと判定されるケースは，<span class="blank">f</span>。</p>
<figure>
  <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/11/h29a_q8_figure_3.jpg" loading="lazy"><figcaption><span class="small-text">注記 5 行 5 列目 (網掛け部分) には、設問 3 の正しい答えが入っているものとする。</span><br />
  図 3 　1 行目を取り除いた検査文字付表</figcaption></figure>
</div>
<p>f に関する解答群</p>
<p>ア　1 と 2 と 3 と 4 である<br />
イ　2 である<br />
ウ　2 と 3 である<br />
エ　2 と 3 と 4 である<br />
オ　2 と 4 である<br />
カ　ない
</p></div>
<div class="divider mag_tp60 mag_bt30"></div>
<details class="grey lighten-5 blue-grey-text c-round">
<summary class="chip"><span>問題のヒント</span></summary>
<p>文字列の誤りを検出するために、検査文字の生成および検証を行うプログラムです。データの誤りの検出方法には、チェックサム、チェックディジット、ハミング符号、 CRC などがありますが、ここでは、出題者独自の方法が使われています。</p>
<p>問題の前半部は、プログラムの穴埋めです。</p>
<p>検査文字の生成と検証の手順が詳しく示されているので、その手順とプログラムを対応付ければ、穴埋めができるでしょう。その際に、<span class="u">プログラムの変数名に注目</span>してください。</p>
<p>たとえば、 is_even は「偶数である」という意味で、 is_odd は「奇数である」という意味です。これらの変数名が、プログラムを読み取るヒントになります。</p>
<p>&nbsp;</p>
<p>問題の後半部は、検査文字の生成と検証の手順に従って、具体的な文字列で検査文字の生成と検証を行う、という内容です。少し時間がかかると思いますが、手作業で丁寧に検査文字の生成と検証を行ってください。</p>
<p>全体として、問題に示された手順を読み取ることが重要な問題です。<br />
</details>
<h2>みんなの解答欄</h2>
<p>こちらから解答できます！</p>
<div class="iframe-container center">
  <iframe src="https://docs.google.com/forms/d/e/1FAIpQLSdsA44pWiXAaH3FdzFC3OTI6KxIJSwwkvKuQTctCvqwEhXYew/viewform?embedded=true" width="100%" height="2000" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div>
<p>今週の金曜に解答解説ページを、ご解答頂いた方の正解率とともに公開します !!</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h29a_algorithm/">今週の午後問題〔問題〕アルゴリズム  文字列の誤りの検出 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔解答〕アルゴリズム  ヒープの性質を利用したデータの整列 2018 年度 春期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h30h_algorithm/</link>
		<pubDate>Thu, 28 Oct 2021 23:30:32 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[午後問題の解説]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6149</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまにも解答してもらっています！ 今週の午後問題は「ヒープの性質を利用したデータの整列」でしたが、 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h30h_algorithm/">今週の午後問題〔解答〕アルゴリズム  ヒープの性質を利用したデータの整列 2018 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまにも解答してもらっています！</p>
<p>今週の午後問題は<a href="../h30h_algorithm/">「ヒープの性質を利用したデータの整列」</a>でしたが、皆さん、手応えはいかがでしょうか?</p>
<p>金曜になりましたので、<span class="u">出題の 解答 と 矢沢久雄さんによる 解説 に加えて、皆さんの正解率を公開</span>します。
</div>
<style>.sub-title{font-size:.9em}blockquote > p{color:#607d8b}pre{font-size:1em;padding:1em;background:#eeeeee;}pre,article,code{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}</style>
<h2>今週の午後問題<br />
<span class="grey-text sub-title">2018 年度 春期 ヒープの性質を利用したデータの整列</span></p>
<p class="pink chip white-text sub-title">解答と解説</p>
</h2>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>a</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>heap の末端に追加されたデータは、そのデータが親より大きい限り、データと親を交換することを繰り返します。</p>
<p>したがって、空欄 a は、「データ ＞ 親」を意味する heap[k] > heap[parent(k)] が適切です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>b</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p>heap[k] と heap[parent(k)] の値を交換するので、 <code>swap(heap, h, parent(k))</code> が適切です。</p>
<p>空欄 b には、 parent(k) が入ります。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>c</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p>1 回目の処理では、 last = 6 であり副プログラム swap によって、 heap[0] の 60 と、 heap[6] の 20 が交換されます。</p>
<p>したがって、 heap[0] の値は、 20 になります。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>d</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>この部分の説明は、副プログラム downHeap の 7 行目の</p>
<pre>heap[tmp] ≦ heap[rchild(n)]</pre>
<p>に該当します。 5 行目で tmp に lchild(n) を代入しているので、 7 行目は </p>
<pre>heap[lchild(n)] ≦ heap[rchild(n)]</pre>
<p>と同じです。</p>
<p>したがって、</p>
<blockquote><p>右側の子が左側の子以上のときには</p></blockquote>
<p>という条件になります。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>e</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>1 回目の処理では、 heap[0] の左側の子が heap[1] = 30 で、右側の子が heap[2] = 45 です。</p>
<pre>| ▲ heap[tmp] > heap[n]
| | ･ swap (heap, n, tmp)
| +---
| | ･ return                /* downHeap から抜ける */
| ▼
| ･ n ← tmp</pre>
<p>これは、</p>
<blockquote><p>右側の子が左側の子以上のときには</p></blockquote>
<p>という条件に一致するので、 15 行目では tmp に右側の子の要素番号の 2 が格納されています。
</p></div>
<h2>みんなの解答</h2>
<p>ご解答いただいた皆さん、ありがとうございました！</p>
<p>手応えはいかがでしたでしょうか?</p>
<p>&nbsp;</p>
<p>なお、以下はこの問題の <a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30_2/2018h30a_fe_pm_cmnt.pdf#page=3" rel="noopener" target="_blank">IPA の講評</a>です。今後の参考になれば幸いです。</p>
<div class="background grey-text c-round">
　問 8 では，整数型のデータを，ヒープの性質を満たすように配列に格納（ヒープを配列で実現）する処理，配列に格納した整数型のデータをヒープソートで昇順に整列する処理について出題した。<br />
　設問 1 の正答率は平均的で，おおむね理解されていた。ヒープの構造と配列 heap に格納されるデータの関係を理解し，配列 heap にデータを追加する位置が，対応する親の値との関係で，どのように決まるのかを理解すれば，正答できた。<br />
　設問 2 では， c の正答率は平均的で，おおむね理解されていた。プログラムの動作の説明と配列に格納されているデータを対応付ければ，正答できた。 d， e の正答率は低く，あまり理解されていなかった。d  ではウと， e ではオと誤って解答した受験者が見受けられた。 d は，副プログラム downHeap の行番号 5 ～ 10 で使われている変数及び関数と行番号 7 の条件式で使われている関係演算子に着目すれば，正答できた。 e は，変数 n の値が 0 で配列 heap の要素番号 1 ～ 5 の内容が図 2 のとおりであることに着目して，副プログラム downHeap の行番号 5 ～ 10 の処理を追跡すれば，正答できた。<br />
　プログラムでアルゴリズムが正しく実現されていることを確認するためには，プログラムの説明とプログラム中で使用されている変数の意味や処理の条件を対応付けてプログラムの動きを追跡する能力が求められるので，身につけておいてほしい。
</div>
<p>来週は「アルゴリズム特集」の最終問題です！　試験期間が残りわずかになるので、腕試ししてみてください！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h30h_algorithm/">今週の午後問題〔解答〕アルゴリズム  ヒープの性質を利用したデータの整列 2018 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔問題〕アルゴリズム  ヒープの性質を利用したデータの整列 2018 年度 春期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h30h_algorithm/</link>
		<pubDate>Sun, 24 Oct 2021 23:30:20 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6125</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまも参加して解答できます！　その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h30h_algorithm/">今週の午後問題〔問題〕アルゴリズム  ヒープの性質を利用したデータの整列 2018 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまも参加して解答できます！　<span class="u">その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開</span>し、皆さんの正解率も発表します。</p>
<p>今週から<span class="bold">「アルゴリズム」</span>に絞って出題中です！今回は<span class="bold"> 「 2018 年度 春期 ヒープの性質を利用したデータの整列」</span>です。</p>
<p>ぜひ腕試しにお使い下さい！
</p></div>
<style>pre{font-size:1em;padding:1em;background:#fafafa;position:relative}article,code{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}table{font-size:.85em}ol.decimal-leading-zero li{list-style-type:decimal-leading-zero}ol.background{padding-left:3em!important}.position-relative{position:relative;}details{padding:2em;}table{width:80%}details p{color:"#607d8b"}summary:hover{cursor:pointer;}summary{display:inline-block;}.chip span::after{content:"\e5cf";font-family:"Material Icons";vertical-align:middle;margin-left:.5em;}summary::-webkit-details-marker{display:none;}details[open] .chip span::after{content:"\e5ce";}.iframe-container{overflow:auto;margin:2em auto;height:100%}dl.inline dd{margin-left:2em}@media screen and (min-width:601px){.responsive-width{width:85%}}@media screen and (max-width:600px){.left-margin{margin-left:1em;}}</style>
<h2>今週の午後問題<br />2018 年度 春期 アルゴリズム ヒープの性質を利用したデータの整列</h2>
<div class="divider mag_h30"></div>
<p class="bold">問 1</p>
<p>　次のプログラムの説明及びプログラムを読んで，設問 1 ， 2 に答えよ。</p>
<div class="mag_lt10">
　ヒープの性質を利用して，データを昇順に整列するアルゴリズムを考える。ヒープは二分木であり，本問では，親は一つ又は二つの子をもち，親の値は子の値よりも常に大きいか等しいという性質をもつものとする。ヒープの例を図 1 に示す。図 1 において，丸は節を，丸の中の数値は各節が保持する値を表す。子をもつ節を，その子に対する親と呼ぶ。親をもたない節を根と呼び，根は最大の値をもつ。</p>
<figure>
  <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h30h_q8_figure_1.jpg" loading="lazy"><figcaption>図 1 　ヒープの例</figcaption></figure>
<p>〔プログラム 1 の説明〕</p>
<ol class="background c-round">
<li>配列の要素番号は， 0 から始まる。 </li>
<li>副プログラム makeHeap は，整数型の 1 次元配列 data に格納されている hnum 個 (hnum > 0) のデータを，次の 01 ~ 03 の規則で整数型の 1 次元配列 heap に格納して，ヒープを配列で実現する。この状態を， &#8220;配列 heap は，ヒープの性質を満たしている&#8221; という。
<ol class="decimal-leading-zero">
<li>配列要素 heap[i] (i = 0，1，2，&#8230;) は，節に対応する。配列要素 heap[i] には，節が保持する値を格納する。</li>
<li>配列要素 heap[0] は，根に対応する。</li>
<li>配列要素 heap[i] (i = 0，1，2，&#8230;) に対応する節の左側の子は配列要素 heap[2 × i + 1] に対応し，右側の子は配列要素 heap[2 × i + 2] に対応する。子が一つの場合，左側の子として扱う。</li>
</ol>
</li>
<li>図 1 のヒープの例に対応した配列 heap の内容を，図 2 に示す。<br />
<figure>
    <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h30h_q8_figure_2.jpg" loading="lazy"><figcaption><span class="small-text">注記 印 → は，始点，終点の二つの配列要素に対応する節が，親子関係にあることを表す。</span><br />
    図 2 　図 1 のヒープの例に対応した配列 heap の内容</figcaption></figure>
</li>
<li>親の要素番号と子の要素番号を関係付ける三つの関数がある。
<ol class="decimal-leading-zero">
<li>
<dl>
<dt>整数型: lchild(整数型: i )</dt>
<dd>要素番号 i の配列要素に対応する節の左側の子の配列要素の要素番号 2 × i + 1 を計算して返却する。 </dd>
</li>
<li>
<dl>
<dt>整数型: rchild(整数型: i )</dt>
<dd>要素番号 i の配列要素に対応する節の右側の子の配列要素の要素番号 2 × i + 2 を計算して返却する。</dd>
</li>
<li>
<dl>
<dt>整数型: parent(整数型: i )</dt>
<dd>要素番号 i の配列要素に対応する節の親の配列要素の要素番号 (i &#8211; 1) = 2 (小数点以下切捨て) を計算して返却する。</dd>
</li>
</ol>
</li>
<li>副プログラム swap は，二つの配列要素に格納されている値を交換する。</li>
<li>副プログラム makeHeap の引数の仕様を表 1 に，副プログラム swap の引数の仕様を表 2 に示す。</li>
</ol>
<table class="responsive-width">
<caption>表 1 　副プログラム makeHeap の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th>data[]</th>
<td>整数型</td>
<td>入力</td>
<td>データが格納されている 1 次元配列</td>
</tr>
<tr>
<th>heap[]</th>
<td>整数型</td>
<td>出力</td>
<td>ヒープの性質を満たすようにデータを格納する 1 次元配列</td>
</tr>
<tr>
<th>hnum</th>
<td>整数型</td>
<td>入力</td>
<td>データの個数</td>
</tr>
</tbody>
</table>
<table class="responsive-width">
<caption>表 2 　副プログラム swap の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th>heap[]</th>
<td>整数型</td>
<td>入力/出力</td>
<td>交換対象のデータが格納されている 1 次元配列</td>
</tr>
<tr>
<th>i</th>
<td>整数型</td>
<td>入力</td>
<td>交換対象の要素番号</td>
</tr>
<tr>
<th>j</th>
<td>整数型</td>
<td>入力</td>
<td>交換対象の要素番号</td>
</tr>
</tbody>
</table>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム 1</div>
<p class="background c-round blue-grey-text mag_h30 small-text hide-on-med-and-up">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、プログラムは右にスクロールできます
</p>
<pre><code class="language-none">○副プログラム: makeHeap( 整数型: data[], 整数型: heap[], 整数型: hnum )
○整数型: i, k
■ i : 0, i &lt; hnum, 1
| ･ heap[i] ← data[i]        /* heap にデータを追加 */
| ･ k ← i
| ■ k > 0
| | ▲ "[   a   ]"
| | | ･ swap(heap, k, "[   b   ]")
| | | ･ k ← parent(k)
| | +---
| | | ･ break              /* 内側の繰返し処理から抜ける */
| | ▼
| ■
■

○副プログラム: swap( 整数型: heap[], 整数型: i, 整数型: j )
○整数型: tmp
･ tmp ← heap[i]
･ heap[i] ← heap[j]
･ heap[j] ← tmp</code></pre>
<p class="bold mag_tp30">設問 1</p>
<p>プログラム 1 中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p>a に関する解答群</p>
<p>ア　heap[k] > heap[lchild(k)]<br />
イ　heap[k] > heap[parent(k)]<br />
ウ　heap[k] > heap[rchild(k)]<br />
エ　heap[k] &lt; heap[lchild(k)]<br />
オ　heap[k] &lt; heap[parent(k)]<br />
カ　heap[k] &lt; heap[rchild(k)]</p>
<p class="mag_tp30">b に関する解答群</p>
<p>ア　heap[hnum &#8211; 1]<br />
イ　heap[k]<br />
ウ　parent(hnum &#8211; 1)<br />
エ　parent(k)</p>
<p class="bold mag_tp30">設問 2</p>
<p>〔プログラム 2 の動作〕の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p>〔プログラム 2 の説明〕</p>
<ol class="background c-round">
<li>副プログラム heapSort は，最初に副プログラム makeHeap を使って，配列 heap にデータを格納する。配列 heap は，整列対象領域と整列済みデータ領域に分かれている (図 3 参照)。 last は，整列対象領域の最後の配列要素の要素番号を示している。最初は，配列 heap 全体が整列対象領域であり，このとき last の値は hnum &#8211; 1 である。<br />
<figure>
    <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h30h_q8_figure_3.jpg" loading="lazy"><figcaption>図 3 　配列 heap における整列対象領域と整列済みデータ領域</figcaption></figure>
</li>
<li>整列対象領域がヒープの性質を満たすとき，配列要素 heap[0] の値は，この領域での最大の値となっている。そこで，配列要素 heap[0] の値と配列要素 heap[last] の値を交換し， last の値を 1 減らして，整列対象領域の範囲を狭め，整列済みデータ領域を広げる。値の交換によって，整列対象領域はヒープの性質を満たさなくなるので，副プログラム downHeap を使って，整列対象領域のデータがヒープの性質を満たすように再構成する。これを繰り返すことによって，整列済みデータ領域には昇順に整列されたデータが格納されることになる。</li>
<li>副プログラム heapSort の引数の仕様を表 3 に，副プログラム heapSort で使用する副プログラム downHeap の引数の仕様を表 4 に示す。</li>
</ol>
<table class="responsive-width">
<caption>表 3 　副プログラム heapSort の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th>data[]</th>
<td>整数型</td>
<td>入力</td>
<td>整列対象のデータが格納されている 1 次元配列</td>
</tr>
<tr>
<th>heap[]</th>
<td>整数型</td>
<td>出力</td>
<td>整列済みのデータを格納する 1 次元配列</td>
</tr>
<tr>
<th>hnum</th>
<td>整数型</td>
<td>入力</td>
<td>データの個数</td>
</tr>
</tbody>
</table>
<table class="responsive-width">
<caption>表 4 　副プログラム downHeap の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th>heap[]</th>
<td>整数型</td>
<td>入力/出力</td>
<td>整列対象のデータを格納する 1 次元配列</td>
</tr>
<tr>
<th>hlast</th>
<td>整数型</td>
<td>入力</td>
<td>整列対象領域の最後の要素番号</td>
</tr>
</tbody>
</table>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム 2</div>
<p><span class="grey-text small-text">(行番号)</span></p>
<pre class="line-numbers"><code class="language-none">○副プログラム: heapSort( 整数型: data[], 整数型: heap[], 整数型: hnum )
○整数型: last
･ makeHeap(data, heap, hnum)
■ last: hnum - 1, last > 0, -1
| ･ swap(heap, 0, last)        /* heap[0] と heap[last] の値を交換 */
| ･ downHeap(heap, last - 1)   /* heap を再構成 */
■</code><span class="blue-text" style="position:absolute;top:4.5em;left:22em;"><i class="material-icons blue-text">fast_rewind</i><i class="material-icons blue-text">fast_rewind</i><i class="material-icons blue-text">fast_rewind</i>α</span></pre>
<p><span class="grey-text small-text">(行番号)</span></p>
<pre class="line-numbers"><code class="language-none">○副プログラム: downHeap( 整数型: heap[], 整数型: hlast )
○整数型 : n, tmp
･ n ← 0
■ lchild(n) ≦ hlast
| ･ tmp ← lchild(n)
| ▲ rchild(n) ≦ hlast
| | ▲ heap[tmp] ≦ heap[rchild(n)]
| | | ･ tmp ← rchild(n)
| | ▼
| ▼
| ▲ heap[tmp] > heap[n]
| | ･ swap (heap, n, tmp)
| +---
| | ･ return                /* downHeap から抜ける */
| ▼
| ･ n ← tmp
■</code></pre>
<p class="mag_tp30">〔プログラム 2 の動作〕</p>
<div class="background c-round">
　副プログラム heapSort の行番号 3 の実行が終了した直後の α における配列 heap の内容は，図 2 のとおりであった。このとき，副プログラム heapSort の行番号 4 から行番号 7 までの 1 回目の繰返し処理について考える。</p>
<p>　副プログラム heapSort の行番号 5 の副プログラム swap の実行が終了した直後の 配列要素 heap[0] の値は，<span class="blank">c</span>となる。このため，配列 heap の要素番号 0 から hnum &#8211; 2 までのデータは，根に対応する配列要素 heap[0] が最大の値をもつというヒープの性質を満たさなくなる。</p>
<p>　副プログラム heapSort の行番号 6 で呼び出している副プログラム downHeap は，配列 heap の整列対象領域の要素番号 0 から hlast までのデータがヒープの性質を満たすように，その領域のデータを次の手順で再構成する。</p>
<ol>
<li>配列要素の値の大きさを比較する際に使用する要素番号を n とし， n の初期値を 0 とする。</li>
<li>要素番号 n の配列要素に対応する節の左側の子の要素番号を tmp に代入する。要素番号 n の子が二つあり (rchild(n) ≦ hlast) ，右側の子の値が左側の子の値<span class="blank">d</span>，右側の子の要素番号を tmp に代入する。</li>
<li>子に対応する配列要素 heap[tmp] の値と，その親に対応する配列要素 heap[n] の値とを比較し，配列要素 heap[tmp] の値が大きければ，配列要素 heap[n] の値と配列要素 heap[tmp] の値を交換し， tmp を次の n として 2. に戻る。ここで，副プログラム downHeap の行番号 15 において最初に n に代入する tmp の値は，<span class="blank">e</span>である。</li>
</ol>
</div>
<p>c に関する解答群</p>
<p>ア　5　　イ　10　　ウ　15　　エ　20</p>
<p class="mag_tp30">d に関する解答群</p>
<p>ア　以下のときには　　<br class="hide-on-med-and-up">イ　以上のときには<br />
ウ　よりも大きいときには　　<br class="hide-on-med-and-up">エ　よりも小さいときには</p>
<p class="mag_tp30">e に関する解答群</p>
<p>ア　1　　イ　2　　ウ　3<br />
エ　4　　オ　5　　カ　6
</p></div>
<div class="divider mag_tp60 mag_bt30"></div>
<details class="grey lighten-5 blue-grey-text c-round">
<summary class="chip"><span>問題のヒント</span></summary>
<p>ヒープというデータ構造を使った、ヒープソートがテーマです。<span class="u">ヒープもヒープソートも、基本情報技術者試験のシラバス（出題内容の細目を示した資料）に示されているので、あらかじめ知っておくべきこと</span>です。</p>
<p>ヒープ（ heap ）は、「堆積物」という意味であり、<span class="u">一般的に上（親）にあるデータが下（子）にあるデータより小さくなるように配置しますが、この問題では、逆になっていることに注意</span>してください。これは、ヒープから取り出したデータを格納する手順の都合です。</p>
<p>堆積物という意味であっても、プログラムにおけるヒープは、二分木として表現されます。二分木では、 1 つの要素が 2 つの要素につながります。つながりの情報は、連結リストのポインタで示すこともできますが、この問題では、ヒープを表す配列に要素を格納する際のルールによって、二分木の親と子のつながりを示しています。</p>
<p><span class="u">問題にヒープの例が示されているので、それを想定して手順の説明とプログラムを読むとわかりやすい</span>でしょう。<br />
</details>
<h2>みんなの解答欄</h2>
<p>こちらから解答できます！</p>
<div class="iframe-container center">
  <iframe src="https://docs.google.com/forms/d/e/1FAIpQLSc2BejbTIZExIcMu6SoLfNdbMk-C_jpVJNOLUSdpqeIWtCnmA/viewform?embedded=true" width="100%" height="1800" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div>
<p>今週の金曜に解答解説ページを、ご解答頂いた方の正解率とともに公開します !!</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h30h_algorithm/">今週の午後問題〔問題〕アルゴリズム  ヒープの性質を利用したデータの整列 2018 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔解答〕アルゴリズム  整数式の解析と計算 2018 年度 秋期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h30a_algorithm/</link>
		<pubDate>Fri, 22 Oct 2021 02:30:53 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[午後問題の解説]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6112</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまにも解答してもらっています！ 今週の午後問題は「整数式の解析と計算」でしたが、皆さん、手応えは [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h30a_algorithm/">今週の午後問題〔解答〕アルゴリズム  整数式の解析と計算 2018 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまにも解答してもらっています！</p>
<p>今週の午後問題は<a href="../h30a_algorithm/">「整数式の解析と計算」</a>でしたが、皆さん、手応えはいかがでしょうか?</p>
<p>金曜になりましたので、<span class="u">出題の 解答 と 矢沢久雄さんによる 解説 に加えて、皆さんの正解率を公開</span>します。
</div>
<style>.sub-title{font-size:.9em}dl.inline dd{margin-left:2em}blockquote > p{color:#607d8b}pre,code{font-size:1em;padding:1em;line-height:1.8;background:#eeeeee;position:relative;}article,pre,code{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}.encircled-number{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;}</style>
<h2>今週の午後問題<br />
<span class="grey-text sub-title">2018 年度 秋期 整数式の解析と計算</span></p>
<p class="pink chip white-text sub-title">解答と解説</p>
</h2>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>a</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>演算の優先順位を示す Priority[] には、変数 nest の値が格納されます。 nest の初期値を 0 として、加減算なら nest を + 1 し、そうでないなら（乗除算なら） nest を + 2 します。</p>
<p class="background c-round blue-grey-text small-text hide-on-med-and-up mag_h10">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、プログラムは右にスクロールできます
</p>
<pre>| | ▲ (chr = '+') or (chr = '-')
| | | ･ Priority[OpCnt] ← nest + 1
| |-+-----
| | | ･ Priority[OpCnt] ← nest + 2
| | ▼</pre>
<p><span class="encircled-number">3</span> の部分では、開きカッコなら nest を + 10 し、閉じカッコなら nest を &#8211; 10 しています。</p>
<pre>| ▲ chr = '('
| | ･ nest ← nest + 10
| ▼
| ▲ chr = ')'
| | ･ nest ← nest – 10
| ▼</pre>
<p>これは、<span class="u">カッコで囲まれた演算を優先させるため</span>です。</p>
<p>カッコで囲まれた加減算を乗除算より優先させるためには、 3 以上の優先順位を付ける必要があります。加減算であることで + 1 されるので、さらに + 2 以上にすれば、 3 以上の優先順位になります。</p>
<p>したがって、イの 2 以上が正解です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>b</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p>priLow は加減算の優先順位を示す値で、 priHigh は乗除算の優先順位を示す値です。</p>
<p>カッコの優先順位の値は、</p>
<pre>priLow + カッコの優先順位の値 > priHigh</pre>
<p>になればよいので、</p>
<pre>カッコの優先順位の値 > priHigh - priLow</pre>
<p>です。</p>
<p>priHigh &#8211; priLow より大きいのですから、 priHigh &#8211; priLow + 1 以上です。</p>
<p>したがって、エが正解です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>c</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p><span class="chip"><i class="material-icons blue-text mag_rt05">code</i>プログラム（計算処理の部分）</span>の <span class="encircled-number">5</span> 、<span class="encircled-number">6</span> 、および <span class="encircled-number">7</span> のループは、最も優先順位が高い演算の要素番号を ip に得る処理を行っています。</p>
<pre>| ■ i: 1, i &lt; OpCnt, 1
| | ▲ Priority[ip] &lt; Priority[i]
| | | ･ ip ← i
| | ▼
| ■</pre>
<p><span class="encircled-number">7</span> の条件は、 <code>Priority[ip] &lt; Priority[i]</code> なので、<span class="u">同じ優先順位の演算を後で見つけても、前にある演算が優先され左から演算</span>されます。</p>
<p>この部分を <code>Priority[ip] ≦ Priority[i]</code> にすれば、同じ（ = ）優先順位の演算を後で見つけると、後にある演算が優先され右から演算されます。</p>
<p>したがって、エが正解です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>d</p>
<p><span class="chip bold">正解</span> ア</p>
<div class="divider"></div>
<p>同じ演算が並んでいる部分を左から演算しても右から演算しても同じ結果になるのは、 + と × です。 + と × だけが並んでいるのは、ケース 1 だけです。</p>
<p>したがって、アが正解です。
</p></div>
<div class="background c-round">
<p><span class="bold">設問 3</p>
<p><span class="mag_rt10">e</span><span class="chip bold">正解</span> エ</p>
<p><span class="mag_rt10">f</span><span class="chip bold">正解</span> イ</p>
<p><span class="mag_rt10">g</span><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p>問題文に示された　2　×　(-1) という計算式を <span class="chip"><i class="material-icons blue-text mag_rt05">code</i>プログラム（解析処理の部分）</span> で処理した結果は、以下のようになります。 [?] は、配列の要素に値が格納されていないことを示します。</p>
<pre>Expression	[2] [×] [(] [-] [1] [)] 
Value[]         [2] [0] [1] [?] [?] [?] 
Operator[]	[×] [-] [?] [?] [?] [?]   OptCnt[2] 
Priority[]	[2] [11] [?] [?] [?] [?]  nest[1]</pre>
<p>Value[] の左から 2 つ目の要素は [0] です。したがって、空欄 f の正解はイです。</p>
<p>OptCnt の値は 2 です。したがって、空欄 g の正解はエです。</p>
<p><span class="chip"><i class="material-icons blue-text mag_rt05">code</i>プログラム（解析処理の部分）</span>で処理した結果は、 Priority[] の値の大きい順に、その位置にある演算が行われます。</p>
<p>まず、 0 &#8211; 1 という演算が行われ、結果として -1 が得られます。<br />
次に、 2 × -1 という演算が行われ、結果として -2 が得られます。これは、 2 × （-1） という計算式の正しい演算結果です。</p>
<p>したがって、空欄 e の正解はエです。
</p></div>
<h2>みんなの解答</h2>
<p>ご解答いただいた皆さん、ありがとうございました！</p>
<p>手応えはいかがでしたでしょうか?</p>
<p>&nbsp;</p>
<p>なお、以下はこの問題の <a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30_2/2018h30a_fe_pm_cmnt.pdf#page=3" rel="noopener" target="_blank">IPA の講評</a>です。今後の参考になれば幸いです。</p>
<div class="background grey-text c-round">
　問 8 では，整数式を受け取って，その値を返すプログラムを題材に，配列を用いた基本的な文字処理及び数値処理について出題した。<br />
　設問 1 では， a の正答率は平均的で，おおむね理解されていた。 b の正答率は低く，あまり理解されていなかった。括弧内の加減算の優先順位が，括弧外の乗除算の優先順位よりも高ければよいことに着目すれば，正答できた。<br />
　設問 2 の正答率は低く，あまり理解されていなかった。 c では，ウと誤って解答した受験者が見受けられた。ウの場合，行 <span class="encircled-number">5</span> で ip に設定する値が 0 のままでは，正しい処理ができない。 d では，ウと誤って解答した受験者が多く見受けられた。括弧内の減算の結果が変わることを見落としたものと思われる。<br />
　設問 3 では， g の正答率は平均的で，おおむね理解されていた。 e と f の正答率は低く，あまり理解されていなかった。 e ではイと， f ではウと誤って解答した受験者が多く見受けられた。図 3 の式について， <span class="chip"><i class="material-icons blue-text mag_rt05">code</i>プログラム（解析処理の部分）</span> の動作を追跡すれば，正答できた。<br />
　プログラム中の定数をより一般的な表現に拡張できる能力，及びプログラムの動作を実際に追跡できる能力は重要なので，身につけておいてほしい。
</div>
<p>来週もひきつづき「アルゴリズム問題」を出題します！　多くの方が苦手にしがちなので、これを機会にじっくり挑戦してみてください！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h30a_algorithm/">今週の午後問題〔解答〕アルゴリズム  整数式の解析と計算 2018 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔問題〕アルゴリズム  整数式の解析と計算 2018 年度 秋期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h30a_algorithm/</link>
		<pubDate>Sun, 17 Oct 2021 23:30:45 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6077</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまも参加して解答できます！　その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h30a_algorithm/">今週の午後問題〔問題〕アルゴリズム  整数式の解析と計算 2018 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまも参加して解答できます！　<span class="u">その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開</span>し、皆さんの正解率も発表します。</p>
<p>今週から<span class="bold">「アルゴリズム」</span>に絞って出題中です！今回は<span class="bold"> 「 2018 年度 秋期 整数式の解析と計算」</span>です。</p>
<p>ぜひ腕試しにお使い下さい！
</p></div>
<style>pre{font-size:1em;padding:1em;line-height:1.8;background:#fafafa;position:relative;}pre.with-cursol{padding-left:4em;}article,pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}.left-margin{margin-left: 2em;}.dashed{border:.2em dashed #607d8b;padding:.25em 2em;margin:.5em;display:inline-block}.cursol{position:absolute;left:1em}.cursol-1::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'1'}.cursol-2::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'2'}.cursol-3::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'3'}.cursol-4::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'4'}.cursol-5::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'5'}.cursol-6::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'6'}.cursol-7::before{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;vertical-align:middle;content:'7'}.cursol::after{font-family:'Material Icons';content:'arrow_forward';color:#2196f3;vertical-align:middle;}.encircled-number{color:white;background:#2196f3;padding:.2em .5em;font-size:1em;border-radius:50%;}ol.background{padding-left:3em!important}details{padding:2em;}table{width:80%}details p{color:"#607d8b"}summary:hover{cursor:pointer;}summary{display:inline-block;}.chip span::after{content:"\e5cf";font-family:"Material Icons";vertical-align:middle;margin-left:.5em;}summary::-webkit-details-marker{display:none;}details[open] .chip span::after{content:"\e5ce";}.iframe-container{overflow:auto;margin:2em auto;height:100%}dl.inline dd{margin-left:2em}@media screen and (min-width:601px){.responsive-width{width:85%}}@media screen and (max-width:600px){.left-margin{margin-left:1em;}}</style>
<h2>今週の午後問題<br />2018 年度 秋期 アルゴリズム 整数式の解析と計算</h2>
<div class="divider mag_h30"></div>
<p class="bold">問 1</p>
<p>　次のプログラムの説明及びプログラムを読んで，設問 1 ～ 3 に答えよ。</p>
<div class="mag_lt10">
　整数式を受け取って，その値を返すプログラムである。例えば，例 1 に示す整数式を受け取ると，その値 50 を返す。</p>
<p class="left-margin">例 1: 2 × (34 &#8211; (5 + 67) ÷ 8)</p>
<p>〔プログラム 1 の説明〕</p>
<ol class="background c-round">
<li>整数式は，文字の列で与えられる。整数式は，次のもので構成される。
<ul>
<li>符号のない数字 0 ～ 9 の並び</li>
<li>演算子 : +，-，×，÷</li>
<li>括弧: (，)</li>
</ul>
</li>
<li>引数 Expression[] で整数式を，引数 ExpLen で整数式の文字数を，それぞれ受け取る。</li>
<li>プログラム中の破線で囲んだ解析処理の部分では，受け取った整数式を解析し，計算に必要な情報を配列及び変数に設定する。 </li>
<li>プログラム中の破線で囲んだ計算処理の部分では， 3. で設定した情報を用いて，整数式の値を計算する。整数式の値は， Value[0] に得られる。 </li>
<li>各配列の添字は， 0 から始まる。各配列の要素数は，十分に大きいものとする。 </li>
<li>受け取った整数式に誤りはないものとする。また，計算の過程で，あふれやゼロ除算は発生しないものとする。</li>
</ol>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム</div>
<p class="background c-round blue-grey-text mag_h30 small-text hide-on-med-and-up">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、プログラムは右にスクロールできます
</p>
<pre>○整数型関数 : Compute(文字型: Expression[], 整数型: ExpLen)
○文字型: Operator[100]
○整数型: OpCnt, Priority[100], Value[100]
○文字型: chr
○整数型: i, ip, nest
<span class="dashed">解析処理(詳細は〔プログラム(解析処理の部分)〕に示す)</span>
<span class="dashed">計算処理(詳細は〔プログラム(計算処理の部分)〕に示す)</span>
･ return Value[0]</pre>
<p class="mag_tp40">〔プログラム (解析処理の部分) の説明〕</p>
<ol class="background c-round">
<li>Expression[] で渡された整数式を解析し，計算に必要な情報を配列 Operator[]，Priority[]，Value[] 及び変数 OpCnt に設定する。関数 int() は，引数の数字が表す値を整数型で返す。</li>
<li>例 1 の整数式について，プログラム(解析処理の部分)を実行した直後の各配列及び変数の状態を，図 1 に示す。<br />
<figure>
    <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h30a_q8_figure_1.jpg" loading="lazy"><figcaption>図 1 　プログラム (解析処理の部分) を実行した直後の状態</figcaption></figure>
</li>
</ol>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム (解析処理の部分)</div>
<pre class="with-cursol">･ OpCnt ← 0
･ Value[0] ← 0 
･ nest ← 0 
■ i: 0, i &lt; ExpLen, 1
| ･ chr + Expression[i]
| ▲ ('0' ≦ chr) and (chr ≦ '9')        /* 数字 0 ～ 9 か？ */
| | ･ Value[OpCnt] ← 10 x Value[OpCnt] + int(chr)
| ▼
| ▲ (chr = '+') or (chr = '-') or (chr = 'x') or (chr = '÷')
| | ･ Operator [OpCnt] ← chr
| | ▲ (chr = '+') or (chr = '-')
| | | ･ Priority[OpCnt] ← nest + 1
| |-+-----
| | | ･ Priority[OpCnt] ← nest + 2
| | ▼
| | ･ OpCnt ← OpCnt + 1
| | ･ Value[OpCnt] ← 0
| ▼
| ▲ chr = '('
| | ･ nest ← nest + 10
| ▼
| ▲ chr = ')'
| | ･ nest ← nest – 10
| ▼
■<span class="cursol-1 cursol" style="top:20.8em;"></span><span class="cursol-2 cursol" style="top:24.4em;"></span><span class="cursol-3 cursol" style="top:35.2em;"></span><span class="cursol-4 cursol" style="top:40.6em;"></span></pre>
<p class="mag_tp40">〔プログラム (計算処理の部分) の説明〕</p>
<ol class="background c-round">
<li>整数式の値を計算していく。図 1 に示す各配列及び変数の状態から，プログラム (計算処理の部分) の最外側の繰返しを 1 回実行した直後の各配列及び変数の状態を，図 2 に示す。<br />
<figure>
    <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h30a_q8_figure_2.jpg" loading="lazy"><figcaption>図 2 　プログラム (計算処理の部分) の最外側の繰返しを 1 回実行した直後の状態</figcaption></figure>
</li>
</ol>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム (計算処理の部分)</div>
<pre class="with-cursol">■ OpCnt > 0
| ･ ip ← 0
| ■ i: 1, i &lt; OpCnt, 1
| | ▲ Priority[ip] &lt; Priority[i]
| | | ･ ip ← i
| | ▼
| ■
| ･ chr ← Operator[ip]
| ▲ chr = '+'
| | ･ Value[ip] ← Value[ip] + Value[ip + 1]
| ▼
| ▲ chr = '-'
| | ･ Value[ip] ← Value[ip] - Value[ip + 1]
| ▼
| ▲ chr = 'x'
| | ･ Value[ip] ← Value[ip] x Value[ip + 1]
| ▼
| ▲ chr = '÷'
| | ･ Value[ip] ← Value[ip] ÷ Value[ip + 1]
| ▼
| ■ i: ip + 1, i &lt; OpCnt, 1
| | ･ Value[i] ← Value[i + 1]
| | ･ Operator[i - 1] ← Operator[i]
| | ･ Priority[i - 1] ← Priority[i]
| ■
| ･ OpCnt ← OpCnt - 1
■<span class="cursol-5 cursol" style="top:4.6em;"></span><span class="cursol-6 cursol" style="top:6.4em;"></span><span class="cursol-7 cursol" style="top:8.2em;"></pre>
<p class="bold mag_tp30">設問 1</p>
<p>プログラム (解析処理の部分) に関する次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background c-round">
　プログラム (解析処理の部分) の行 <span class="encircled-number">1</span> ～ <span class="encircled-number">4</span> で用いている定数について考察する。</p>
<p>　まず，行 <span class="encircled-number">3</span> 及び <span class="encircled-number">4</span> の処理では，定数として 10 を用いているが，この定数は 10 である必要はない。このプログラムにおいては，定数が<span class="blank">a</span>であれば常に正しい演算順序が保証される。</p>
<p>　また，行 <span class="encircled-number">1</span> 及び <span class="encircled-number">2</span> の処理では，定数として 1 及び 2 を用いているが，次に示すように書き換えることが可能である。ここで，priLow 及び priHigh は整数の定数を表し，その値は priLow &lt; priHigh とする。 </p>
<pre class="grey lighten-3">
<span class="encircled-number">1</span><i class="material-icons blue-text">arrow_forward</i> ･ Priority[OpCnt] ← nest + priLow
<span class="encircled-number">2</span><i class="material-icons blue-text">arrow_forward</i> ･ Priority[OpCnt] ← nest + priHigh
</pre>
<p>　このように表現したとき，行 <span class="encircled-number">3</span> 及び <span class="encircled-number">4</span> の処理では， nest の値を増減する定数が<span class="blank">b</span>のときに限り正しい演算順序が保証されることになる。
</div>
<p>a に関する解答群</p>
<p>ア　1 以上　　イ　2 以上<br />
ウ　11 以下　　エ　12 以下</p>
<p class="mag_tp30">b に関する解答群</p>
<p>ア　priHigh 以上　　<br class="hide-on-med-and-up">イ　priHigh + 1 以上<br />
ウ　priHigh &#8211; priLow 以上　　<br class="hide-on-med-and-up">エ　priHigh &#8211; priLow + 1 以上</p>
<p class="bold mag_tp30">設問 2</p>
<p>優先順位の等しい演算子が複数個含まれている整数式の，演算の実行順序について考察する。プログラムに関する次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。ここで， c1 ～ c3 に入れる答えは， c に関する解答群の中から組合せとして正しいものを選ぶものとする。</p>
<div class="background c-round">
　プログラム(計算処理の部分)では，優先順位の等しい演算子が複数個含まれている場合，演算を左から順に実行するようになっている。このプログラムでは，演算を左から順に実行するか右から順に実行するかは，行<span class="blank">c1</span>の内容が<span class="blank">c2</span>か<span class="blank">c3</span>かで決まる。</p>
<p>　演算の実行順序によって，計算結果が異なることがある。例えば，次の四つの整数式のケースを考える。</p>
<div class="left-margin">
ケース 1 : (12 + 3 + 1) × 4 × 2<br />
ケース 2 : (12 + 3 + 1) ÷ 4 ÷ 2<br />
ケース 3 : (12 &#8211; 3 &#8211; 1) × 4 × 2<br />
ケース 4 : (12 &#8211; 3 &#8211; 1) ÷ 4 ÷ 2
</div>
<p>　これらのケースのうち，演算を左から実行しても右から実行しても，プログラムによる計算結果が等しくなるのは，ケース<span class="blank">d</span>である。
</div>
<p>c に関する解答群</p>
<p class="background c-round blue-grey-text mag_h30 small-text hide-on-med-and-up">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、表は右にスクロールできます
</p>
<div class="table-container">
<table>
<thead>
<tr>
<th></th>
<th>c1 </th>
<th>c2 </th>
<th>c3</th>
</tr>
</thead>
<tbody>
<tr>
<th>ア</th>
<th><span class="encircled-number">5</span></th>
<td>ip ← 0</td>
<td>ip ← OpCnt &#8211; 1</td>
</tr>
<tr>
<th>イ</th>
<th><span class="encircled-number">6</span></th>
<td>i : 1, i &lt; OpCnt, 1</td>
<td>i: OpCnt, i > 0, -1</td>
</tr>
<tr>
<th>ウ</th>
<th><span class="encircled-number">6</span></th>
<td>i : 1, i &lt; Opcnt, 1</td>
<td>i: OpCnt &#8211; 1, i > 0, -1</td>
</tr>
<tr>
<th>エ</th>
<th><span class="encircled-number">7</span></th>
<td>Priority[ip] &lt; Priority[i]</td>
<td>Priority[ip] ≦ Priority[i]</td>
</tr>
</tbody>
</table>
</div>
<p class="mag_tp30">d に関する解答群</p>
<p>ア　1　　イ　1 及び 2<br />
ウ　1 及び 3　　エ　1 及び 4</p>
<p class="bold mag_tp30">設問 3</p>
<p>プログラムの動作に関する次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background c-round">
　符号付き整定数 (数字の並びの先頭に符号 + 又は &#8211; を付けた定数) を含む整数式を考える。符号付き整定数は，例 2 のように括弧で囲んで記述する。ただし，符号付き整定数の直前の文字が演算子でない場合は，例 3 のように括弧で囲まなくてもよい。</p>
<div class="left-margin">
例 2: (+2) × ((-3) + (-4))<br />
例 3: +2 × (-3 + (-4))
</div>
<p>　符号付き整定数を含む整数式 2 × (-1)についてプログラム (解析処理の部分) を実行した結果を，図 3 に示す。</p>
<p>　このように，符号付き整定数を含む整数式を受け取ったとき，プログラムは<span class="blank">e</span>。</p>
<figure>
  <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h30a_q8_figure_3.jpg" loading="lazy"><figcaption><span class="small-text">注記 網掛け部分 (値が格納されているとは限らない) は表示していない。</span><br />
  図 3 　整数式 2 × (-1) についてプログラム (解析処理の部分) を実行した結果</figcaption></figure>
</div>
<p>e に関する解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>整数式が符号付き整定数で始まる場合に、正しい値を返さない</dd>
<dt>イ</dt>
<dd>整数式中に符号 &#8211; の付いた符号付き整定数がある場合に,正しい値を返さない</dd>
<dt>ウ</dt>
<dd>整数式中に二つ以上の符号付き整定数が含まれる場合に,正しい値を返さない</dd>
<dt>工</dt>
<dd>正しい値を返す</dd>
</dl>
<p class="mag_tp30">f, g に関する解答群</p>
<p>ア　-1　　イ　0　　ウ　1　　エ　2
</p></div>
<div class="divider mag_tp60 mag_bt30"></div>
<details class="grey lighten-5 blue-grey-text c-round">
<summary class="chip"><span>問題のヒント</span></summary>
<p>2 × (34 &#8211; (5 + 67) ÷ 8) のような整数式を受け取って、その値を返すプログラムです。このテーマを聞いて「逆ポーランド記法」を思い浮かべるかもしれませんが、それとはまったく異なる手順が使われています。</p>
<p>手順は、詳しく示されています。プログラムは、一切穴埋めがなく、完成した状態になっています。プログラムの中に、 <span class="encircled-number">1</span> 、 <span class="encircled-number">2</span> 、 <span class="encircled-number">3</span> 、・・・ という番号が付けられ、それぞれの部分で「どのようなデータなら正しい演算順序になるか」という設問になっています。</p>
<p>つまり、<span class="u">このプログラムは、あらゆる整数式の値を正しく求められるものではない</span>のです。<span class="u">出題者が示した手順を読み取り、出題者の「こうしたらどうなる？」という設問に答える、という問題</span>です。</p>
<p>その際に、ポイントになるのは、<span class="bold">カッコや演算子の優先順位の判断</span>です。<br />
</details>
<h2>みんなの解答欄</h2>
<p>こちらから解答できます！</p>
<div class="iframe-container center">
  <iframe src="https://docs.google.com/forms/d/e/1FAIpQLSeRitYTDEHpbttmdSInCg0eGW_oAIh1fQ5tr4gdzGhfQDdBMQ/viewform?embedded=true" width="100%" height="2500" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div>
<p>今週の金曜に解答解説ページを、ご解答頂いた方の正解率とともに公開します !!</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h30a_algorithm/">今週の午後問題〔問題〕アルゴリズム  整数式の解析と計算 2018 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔解答〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h31h_algorithm/</link>
		<pubDate>Fri, 15 Oct 2021 02:30:43 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[午後問題の解説]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6070</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまにも解答してもらっています！ 今週の午後問題は「 ハフマン符号化を用いた文字列圧縮」でしたが、 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h31h_algorithm/">今週の午後問題〔解答〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまにも解答してもらっています！</p>
<p>今週の午後問題は<a href="../h31h_algorithm/">「 ハフマン符号化を用いた文字列圧縮」</a>でしたが、皆さん、手応えはいかがでしょうか？</p>
<p>金曜になりましたので、<span class="u">出題の 解答 と 矢沢久雄さんによる 解説 に加えて、皆さんの正解率を公開</span>します。
</div>
<style>.sub-title{font-size:.9em}dl.inline dd{margin-left:2em}blockquote > p{color:#607d8b}article,code{font-family:"Courier New","HCo Gotham SSm","Gotham","ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,"sans-serif"!important;}.background>p{color:#607d8b;}@media screen and (min-width:601px){.responsive-width{width:60%}}</style>
<h2>今週の午後問題<br />
<span class="grey-text sub-title">2019 年度 春期 ハフマン符号化を用いた文字列圧縮</span></p>
<p class="pink chip white-text sub-title">解答と解説</p>
</h2>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>a</p>
<p><span class="chip bold">正解</span> ア</p>
<div class="divider"></div>
<p>&#8220;ABBBBBBBCCCDD&#8221; という文字列のハフマン木は、以下のようになります。</p>
<figure>
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/10/h31h_q8_ans_figure.jpg" loading="lazy"><br />
</figure>
<p>このハフマン木をたどると、それぞれの文字のビット表現は、<br />
&#8220;A&#8221; が 010<br />
&#8220;B&#8221; が 1<br />
&#8220;C&#8221; が 00<br />
&#8220;D&#8221; が 011<br />
なので、選択肢アが正解です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>b</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>&#8220;A&#8221; ～ &#8220;D&#8221; のそれぞれを 2 ビットの固定長で表現すると、<br />
&#8220;ABBBBBBBCCCDD&#8221;<br />
という 13 文字の文字列は、</p>
<p class="curie-new">2 ビット × 13 文字 ＝ 26 ビット</p>
<p>になります。</p>
<p>1 文字ある &#8220;A&#8221; が 3 ビット、<br />
7 文字ある &#8220;B&#8221; が 1 ビット、<br />
3 文字ある &#8220;C&#8221; が 2 ビット、<br />
2 文字ある &#8220;D&#8221; が 3 ビット<br />
のハフマン符号で表現すると、</p>
<p class="curie-new">3 ビット × 1 文字 ＋ 1 ビット × 7 文字 ＋ 2 ビット × 3 文字 ＋ 3 ビット × 2 文字 ＝ 22 ビット<br />
になります。</p>
<p>したがって、圧縮率は、</p>
<p class="curie-new">22 ビット ÷ 26 ビット ≒ 0.85</p>
<p>であり、選択肢イが正解です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>c</p>
<p><span class="chip bold">正解</span> ウ</p>
<div class="divider"></div>
<p>空欄 c の直前で、 SortNode が呼び出され、出力として、 node[] に親が作成されていない節を表す要素組の要素番号を格納した配列が設定され、 nsize に node[] の要素数が設定されます。</p>
<pre><code class="language-none">• SortNode(size, parent, freq, nsize, node)
■ "[   c   ]"
| ･ i ← node[0]    /* 最も小さい値をもつ要素組の要素番号 */
| ･ j ← node[1]    /* 2 番目に小さい値をもつ要素組の要素番号 */
| ･ left[size] ← i
| ･ right[size] ← j
| ･ freq[size] ← freq[i] + freq[j] /* 子の値の合計 */
| ･ parent[i] ← size   /* 子に親の節の要素番号を格納 */
| ･ parent[j] ← size   /* 子に親の節の要素番号を格納 */
| ･ size + size + 1
| ･ SortNode(size, parent, freq, nsize, node)
■</code></pre>
<p>空欄 c の条件が真である限り繰り返される処理では、 node[0] と node[1] の要素組の要素番号を取り出して処理を行っています。</p>
<p>nsize の値が 2 以上でなければ、この処理を行えないので、空欄 c は、選択肢ウの nsize ≧ 2 が正解です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 2</span>d</p>
<p><span class="chip bold">正解</span> ア</p>
<div class="divider"></div>
<p>〔プログラム 1 の説明〕の 4. に、</p>
<blockquote><p>行番号 19 ～ 24 で親が作成されていない節を表す要素組の要素番号を抽出し</p></blockquote>
<p>とあります。</p>
<p>親が作成されていないことは、 parent[i] の値が -1 であることで判断できます。選択肢の中で、これに該当するのは、選択肢エの parent[i] &lt; 0 です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 3</span>e</p>
<p><span class="chip bold">正解</span> オ</p>
<div class="divider"></div>
<p>〔プログラム 2 の説明〕の 3. に、</p>
<blockquote><p>副プログラム Encode は，行番号 2 の条件が成り立つとき，副プログラム Encode を再帰的に呼び出す。これによって，ハフマン木を葉から根までたどっていく。</p></blockquote>
<p>とあります．これは、<span class="u">親が根でない限り、 Encode の再帰的な呼び出しを繰り返すということ</span>です。</p>
<p>親が根であるないことは、 parent[k] の値が -1 でないことで判断できます。選択肢の中で、これに該当するのは、選択肢オの parent[k] ≧ 0 です。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 3</span>f</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>空欄 f の条件が真のとき &#8220;0&#8221; を表示します。これは、根から葉の方向にたどっていくときに、<span class="u">現在の節が親の左側のとき</span>です。</p>
<p>親の要素番号は、 parent[k] です。その親の左側の要素番号は、 left[parent[k]] です。</p>
<p>これが、現在の節の要素番号 k と等しければ、現在の節が親の左側なので、その条件は、 left[parent[k]] ＝ k であり、選択肢イが正解です。
</p></div>
<h2>みんなの解答</h2>
<p>ご解答いただいた皆さん、ありがとうございました！</p>
<p>手応えはいかがでしたでしょうか？</p>
<p>&nbsp;</p>
<p>なお、以下はこの問題の <a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_1/2019h31h_fe_pm_cmnt.pdf#page=3" rel="noopener" target="_blank">IPA の講評</a>です。今後の参考になれば幸いです。</p>
<div class="background blue-grey-text c-round">
　問 8 では，ハフマン符号化を題材に，簡単な例での圧縮率の計算，配列で表現したハフマン木を作成する処理，及びハフマン木から文字のビット表現を作成して表示する再帰処理について出題した。 </p>
<p>　設問 1 では， a の正答率は高く，よく理解されていた。 b の正答率は低く，あまり理解されていなかった。ウと誤って解答した受験者が見受けられた。圧縮前の文字列のビット長は，文字数と各文字のビット表現のビット長である 2 との積で求められる。また，圧縮後の文字列のビット長は，文字のビット表現のビット長が文字の出現回数の多い順に 1 ビット， 2 ビット， 3 ビット， 3 ビットであり，文字の出現回数とその文字のビット長との積の総和で求められることが分かれば，正答できた。 </p>
<p>　設問 2 では， c の正答率は低く，あまり理解されていなかった。この繰返しの処理では，親が作成されていない二つの節から，親の節を作成すること，及び副プログラム SortNode が出力する nsize は，整列対象とした節の個数，すなわち親が作成されていない節の個数であることに気がつけば，正答できた。 d の正答率は低く，あまり理解されていなかった。キと誤って解答した受験者が見受けられた。副プログラムSortNodeは，親が作成されていない節を抽出する，すなわち配列 parent の要素の値が -1 の節を抽出することに気がつけば，正答できた。 </p>
<p>　設問 3 では， e の正答率は低く，あまり理解されていなかった。副プログラム Encode は葉から根まで再帰処理でたどる，すなわち根でなければ再帰処理を続けることに気がつけば，正答できた。 f の正答率は低く，あまり理解されていなかった。エと誤って解答した受験者が見受けられた。現在の節が親の左側の子であるということは，親の要素番号をもつ要素組の左側の子の要素番号が現在の要素番号と同じであるという条件に気がつけば，正答できた。 </p>
<p>　プログラムの作成においては，アルゴリズム及びプログラムの仕様を理解し，条件分岐や繰返しの条件を正しく実装する能力が，使用するプログラム言語を問わず求められるので，身につけておいてほしい。
</p></div>
<p>来週もひきつづき「アルゴリズム問題」を出題します！　多くの方が苦手にしがちなので、これを機会にじっくり挑戦してみてください！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h31h_algorithm/">今週の午後問題〔解答〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔問題〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h31h_algorithm/</link>
		<pubDate>Sun, 10 Oct 2021 23:30:11 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6007</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまも参加して解答できます！　その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h31h_algorithm/">今週の午後問題〔問題〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまも参加して解答できます！　<span class="u">その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開</span>し、皆さんの正解率も発表します。</p>
<p>今週から<span class="bold">「アルゴリズム」</span>に絞って出題中です！今回は<span class="bold"> 「 2019 年度 春期 ハフマン符号化を用いた文字列圧縮」</span>です。</p>
<p>ぜひ腕試しにお使い下さい！
</p></div>
<style>article,pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#263238!important;}pre{background:#424242!important;}table{font-size:.85em}pre > code{color:#fafafa!important;}.lower-roman li{list-style-type:lower-roman!important;}ol.background{padding-left:2.5em!important}th,table.forth-column-left-algin tbody tr td{text-align:center;}table.forth-column-left-algin tbody tr td:nth-child(4){text-align:left;}details{padding:2em;}details p{color:"#607d8b"}summary:hover{cursor:pointer;}summary{display:inline-block;}.chip span::after{content:"\e5cf";font-family:"Material Icons";vertical-align:middle;margin-left:.5em;}summary::-webkit-details-marker{display:none;}details[open] .chip span::after{content:"\e5ce";}.iframe-container{overflow:auto;margin:2em auto;height:100%}@media screen and (min-width:601px){.responsive-width{width:90%}}</style>
<h2>今週の午後問題<br />2019 年度 春期 アルゴリズム ハフマン符号化を用いた文字列圧縮</h2>
<div class="divider mag_h30"></div>
<p class="bold">問 1</p>
<p>　ハフマン符号化を用いた文字列圧縮に関する次の記述を読んで，設問 1 ～ 3 に答えよ。</p>
<div class="mag_lt10">
　&#8221;A&#8221; ～ &#8220;D&#8221; の 4 種類の文字から成る文字列をハフマン符号化によって圧縮する。ハフマン符号化では，出現回数の多い文字には短いビット列を，出現回数の少ない文字には長いビット列を割り当てる。ハフマン符号化による文字列の圧縮手順は，次の 1. ～ 4. のとおりである。</p>
<ol class="background c-round">
<li>文字列中の文字の出現回数を求め，出現回数表を作成する。例えば，文字列 &#8220;AAAABBCDCDDACCAAAAA&#8221; （以下，文字列 α という）中の文字の出現回数表は，表 1 のとおりになる。<br />
<table class="centered responsive-width mag_h30">
<caption>表 1 文字列 α 中の文字の出現回数表</caption>
<tr>
<th>文字</th>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<th>出現回数</th>
<td>10</td>
<td>2</td>
<td>4</td>
<td>3</td>
</tr>
</table>
</li>
<li>文字の出現回数表に基づいてハフマン木を作成する。<br />
ハフマン木の定義は，次のとおりである。</p>
<ul>
<li>節と枝で構成する二分木である。</li>
<li>親である節は，子である節を常に二つもち，子の節の値の和を値としてもつ。</li>
<li>子をもたない節（以下，葉という）は文字に対応し，出現回数を値としてもつ。</li>
<li>親をもたない節（以下，根という）は，文字列の文字数を値としてもつ。</li>
</ul>
<p>文字列 α に対応するハフマン木の例を，図 1 に示す。</p>
<figure>
    <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h31a_algo_figure.jpg" loading="lazy"><figcaption><span class="small-text">注記 丸の中の数値は各節がもつ値を表す。 &#8220;A&#8221; ～ &#8220;D&#8221; は葉に対応する文字を表す。</span><br />
    図 1 　文字列 α に対応するハフマン木の例</figcaption></figure>
<p>ハフマン木は，次の手順で配列によって実現する。</p>
<ol class="lower-roman">
<li>節の値を格納する 1 次元配列を用意する。</li>
<li>文字の出現回数表に基づいて，各文字に対応する葉の値を，配列の先頭の要素から順に格納する。</li>
<li>親が作成されていない節を二つ選択し，選択した順に左側の子，右側の子とする親の節を一つ作成する。この節の値を，配列中で値が格納されている最後の要素の次の要素に格納する。節の選択は節の値の小さい順に行い，同じ値をもつ節が二つ以上ある場合は，配列の先頭に近い要素に値が格納されている節を選択する。</li>
<li>親が作成されていない節が一つになるまで ⅲ を繰り返す。</li>
</ol>
</li>
<li>ハフマン木から文字のビット列（以下，ビット表現という）を次の手順で作成する。
<ol class="lower-roman">
<li>親と左側の子をつなぐ枝に 0 ，右側の子をつなぐ枝に 1 の値をもつビットを割り当てる。</li>
<li>文字ごとに根から対応する葉までたどったとき，枝のビット値を順に左から並べたものを各文字のビット表現とする。<br />
    図 2 に示すとおり，根から矢印のようにたどると，文字列 α の文字 &#8220;B&#8221; のビット表現は 010 となる。</p>
<figure>
      <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h31a_algo_figure2.jpg" loading="lazy"><figcaption><span class="small-text">注記 線分は枝を表し，枝の上の数値は各枝のビット値を表す。</span><br />
      図 2 　文字列 α における文字 &#8220;B&#8221; のビット表現の作成例</figcaption></figure>
</li>
</ol>
</li>
<li>文字列の全ての文字を 3. で得られたビット表現に置き換えて，ビット列を作成する。</li>
</ol>
<p class="bold mag_tp30">設問 1</p>
<p>次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background">
　文字列 &#8220;ABBBBBBBCCCDD&#8221; を，ハフマン符号化を用いて表現する。各文字とビット表現を示した表は<span class="blank">a</span>である。ハフマン符号化によって圧縮すると，文字 &#8220;A&#8221; ～ &#8220;D&#8221; をそれぞれ 2 ビットの固定長で表現したときの当該文字列の総ビット長に対する圧縮率は<span class="blank">b</span>となる。ここで，圧縮率は次式で計算した値の小数第 3 位を四捨五入して求める。</p>
<div class="row valign-wrapper">
<p>圧縮率 =</p>
<div class="small-text mag_lt10">
<p class="center">ハフマン符号化によって圧縮したときの総ビット長</p>
<div class="divider"></div>
<p class="center">2 ビットの固定長で表現したときの総ビット長</p>
</div>
</div>
</div>
<p>a に関する解答群</p>
<div class="row">
<div class="col m6 s12 mag_h20">
ア</p>
<table class="centered">
<tr>
<th>文字</th>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<th>ビット表現</th>
<td>010</td>
<td>1</td>
<td>00</td>
<td>011</td>
</tr>
</table>
</div>
<div class="col m6 s12 mag_h20">
イ</p>
<table class="centered">
<tr>
<th>文字</th>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<th>ビット表現</th>
<td>010</td>
<td>0</td>
<td>01</td>
<td>111</td>
</tr>
</table>
</div>
<div class="col m6 s12 mag_h20">
ウ</p>
<table class="centered">
<tr>
<th>文字</th>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<th>ビット表現</th>
<td>100</td>
<td>0</td>
<td>101</td>
<td>11</td>
</tr>
</table>
</div>
<div class="col m6 s12 mag_h20">
工</p>
<table class="centered">
<tr>
<th>文字</th>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr>
<tr>
<th>ビット表現</th>
<td>100</td>
<td>1</td>
<td>00</td>
<td>01</td>
</tr>
</table>
</div>
</div>
<p class="mag_tp30">b に関する解答群</p>
<p>ア　0.77　　イ　0.85　　ウ　0.88　　<br class="hide-on-med-and-up">エ　0.92</p>
<p class="bold mag_tp30">設問 2</p>
<p>ハフマン木を作成するプログラム 1 の説明及びプログラム 1 を読んで，プログラム 1 中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="background">
<p>〔プログラム 1 の説明〕</p>
<ol>
<li>四つの 1 次元配列 <code>parent</code>，<code>left</code>，<code>right</code> 及び <code>freq</code> の同じ要素番号に対応する要素の組み（以下，要素組という）によって，一つの節を表す。要素番号は 0 から始まる。四つの配列の大きさはいずれも十分に大きく，全ての要素は -1 で初期化されている。</li>
<li>図 3 に，図 1 に示したハフマン木を表現した場合の各配列の要素がもつ値を示す。配列 <code>parent</code> には親，配列 <code>left</code> には左側の子，配列 <code>right</code> には右側の子を表す要素組の要素番号がそれぞれ格納され，配列 <code>freq</code> には節の値が格納される。節が葉のとき，配列 <code>left</code> と配列 <code>right</code> の要素の値は，いずれも -1 である。図 3 では，要素番号 0 ～ 3の要素組が，順に文字 &#8220;A&#8221; ～ &#8220;D&#8221; の葉に対応している。節が根のとき，配列 <code>parent</code> の要素の値は -1 である。<br />
<figure>
      <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/10/h31a_algo_figure4.jpg" loading="lazy"><figcaption><span class="small-text">注記 矢印 <img src="../../wp-content/uploads/2021/10/h31a_algo_figure3.jpg" loading="lazy" style="vertical-align:middle"> は，始点，終点の二つの要素組に対応する節が子と親の関係にあることを示す。</span><br />
      図 3 　図 1 に示したハフマン木を表現する四つの配列</figcaption></figure>
</li>
<li>副プログラム Huffman は，次の 1 ～ 5 を受け取り，ハフマン木を表現する配列を作成する。
<ol class="lower-roman">
<li>葉である節の個数 <code>size</code></li>
<li>初期化された配列 <code>parent</code></li>
<li>初期化された配列 <code>left</code></li>
<li>初期化された配列 <code>right</code></li>
<li>初期化された後，文字の出現回数が要素番号 0 から順に格納された配列 <code>freq</code></li>
</ol>
</li>
<li>副プログラム SortNode は，親が作成されていない節を抽出し，節の値の昇順に整列し，節を表す要素組の要素番号を順に配列 node に格納し，その個数を変数 nsize に格納する。行番号 19 ～ 24 で親が作成されていない節を表す要素組の要素番号を抽出し，行番号 25 で節の値の昇順に整列する。</li>
<li>副プログラム Sort （プログラムは省略）は，節を表す要素組の要素番号の配列 node を受け取り，要素番号に対応する要素組が表す節の値が昇順となるように整列する。節の値が同じときの順序は並べ替える直前の順序に従う。</li>
<li>副プログラム Huffman，SortNode 及び Sort の引数の仕様を，表 2 ～ 4 に示す。</li>
</ol>
<table class="forth-column-left-algin">
<caption>表 2 　副プログラム Huffman の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th><code>size</code></th>
<td>整数型</td>
<td>入力/出力</td>
<td>節の個数</td>
</tr>
<tr>
<th><code>parent[]</code></th>
<td>整数型</td>
<td>入力/出力</td>
<td>節の親を表す要素組の要素番号を格納した配列</td>
</tr>
<tr>
<th><code>left[]</code></th>
<td>整数型</td>
<td>入力/出力</td>
<td>節の左側の子を表す要素組の要素番号を格納した配列</td>
</tr>
<tr>
<th><code>right[]</code></th>
<td>整数型</td>
<td>入力/出力</td>
<td>節の右側の子を表す要素組の要素番号を格納した配列</td>
</tr>
<tr>
<th><code>freq[]</code></th>
<td>整数型</td>
<td>入力/出力</td>
<td>節の値を格納した配列</td>
</tr>
</tbody>
</table>
<table class="forth-column-left-algin">
<caption>表 3 　副プログラム SortNode の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th><code>size</code></th>
<td>整数型</td>
<td>入力</td>
<td>節の個数</td>
</tr>
<tr>
<th><code>parent[]</code></th>
<td>整数型</td>
<td>入力</td>
<td>節の親を表す要素組の要素番号を格納した配列</td>
</tr>
<tr>
<th><code>freq[]</code></th>
<td>整数型</td>
<td>入力</td>
<td>節の値を格納した配列</td>
</tr>
<tr>
<th><code>nsize</code></th>
<td>整数型</td>
<td>出力</td>
<td>配列 node 中の，整列対象とした節の個数</td>
</tr>
<tr>
<th><code>node[]</code></th>
<td>整数型</td>
<td>出力</td>
<td>節の値の昇順に整列した，親が作成されていない節を表す要素組の要素番号を格納した配列</td>
</tr>
</tbody>
</table>
<table class="forth-column-left-algin">
<caption>表 4 　副プログラム Sort の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<th><code>freq[]</code></th>
<td>整数型</td>
<td>入力</td>
<td>節の値を格納した配列</td>
</tr>
<tr>
<th><code>nsize</code></th>
<td>整数型</td>
<td>入力</td>
<td>配列 node 中の，整列対象の節の個数</td>
</tr>
<tr>
<th><code>node[]</code></th>
<td>整数型</td>
<td>入力/出力</td>
<td>節を表す要素組の要素番号を格納した配列</td>
</tr>
</tbody>
</table>
</div>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム 1</div>
<p class="background c-round blue-grey-text mag_h30 small-text hide-on-med-and-up">
<i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンをご覧の際、プログラムは右にスクロールできます
</p>
<pre class="line-numbers"><code class="language-none">○副プログラム: Huffman(整数型: size, 整数型: parent[], 整数型: : left[], 整数型: right[], 整数型: freq[])
○整数型: i, j, nsize
○整数型: node[]
• SortNode(size, parent, freq, nsize, node)
■ "[   c   ]"
| ･ i ← node[0]    /* 最も小さい値をもつ要素組の要素番号 */
| ･ j ← node[1]    /* 2 番目に小さい値をもつ要素組の要素番号 */
| ･ left[size] ← i
| ･ right[size] ← j
| ･ freq[size] ← freq[i] + freq[j] /* 子の値の合計 */
| ･ parent[i] ← size   /* 子に親の節の要素番号を格納 */
| ･ parent[j] ← size   /* 子に親の節の要素番号を格納 */
| ･ size + size + 1
| ･ SortNode(size, parent, freq, nsize, node)
■

○副プログラム: SortNode(整数型: size, 整数型: parent[], 整数型: freq[], 整数型: nsize, 整数型: node[])
○整数型: i 
･ nsize ← 0
■ i: 0, i < size, 1
| ▲ "[   d   ]"
| | ･ node[nsize] ← i
| | ･ nsize ← nsize + 1
| ▼
■
･ Sort(freq, nsize, node)</code></pre>
<p class="mag_tp30">c， d に関する解答群</p>
<pre><code class="language-none">ア nsize ≧ 0  イ nsize ≧ 1  ウ nsize ≧ 2
エ parent[i] &lt; 0  オ parent[i] > 0  カ size ≦ nsize
キ size ≧ nsize</code></pre>
<p class="bold mag_tp30">設問 3</p>
<p>ハフマン木から文字のビット表現を作成して表示するプログラム 2 の説明及びプログラム 2 を読んで，プログラム 2 中のに入れる正しい答えを，解答群の中から選べ。</p>
<div class="background">
<p>〔プログラム 2 の説明〕</p>
<ol>
<li>ビット表現を求めたい文字に対応する葉を表す要素組の要素番号を，副プログラム Encode の引数 k に与えて呼び出すと，ハフマン木から文字のビット表現を作成して表示する。</li>
<li>副プログラム Encode の引数の仕様を，表 5 に示す。</li>
</ol>
<table class="forth-column-left-algin">
<caption>表 5 　副プログラム Encode の引数の仕様</caption>
<thead>
<tr>
<th>引数</th>
<th>データ型</th>
<th>入出力</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>k</td>
<td>整数型</td>
<td>入力</td>
<td>節を表す要素組の要素番号</td>
</tr>
<tr>
<td>parent[]</td>
<td>整数型</td>
<td>入力</td>
<td>節の親を表す要素組の要素番号を格納した配列</td>
</tr>
<tr>
<td>left[]</td>
<td>整数型</td>
<td>入力</td>
<td>節の左側の子を表す要素組の要素番号を格納した配列</td>
</tr>
</tbody>
</table>
<ol start="3">
<li>副プログラム Encode は，行番号 2 の条件が成り立つとき，副プログラム Encode を再帰的に呼び出す。これによって，ハフマン木を葉から根までたどっていく。</li>
<li>根にたどり着くと次は葉に向かってたどっていく。現在の節が親の左側の子のときは 0 を，右側の子のときは 1 を表示する。</li>
<li>関数 print は，引数で与えられた文字列を表示する。</li>
</ol>
</div>
<div class="chip mag_tp30 mag_bt10"><i class="material-icons blue-text mag_rt05">code</i>プログラム 2</div>
<pre class="line-numbers"><code class="language-none">○副プログラム: Encode(整数型:k, 整数型: parent[], 整数型: left[])
▲ "[   e   ]"
| ･ Encode(parent[k], parent, left)
| ▲ "[   f   ]"
| | ･ print("0")        /* 0 を表示する */
|-+---
| | ･ print("1")        /* 1 を表示する */
| ▼
▼ </code></pre>
<p class="mag_tp30">e に関する解答群</p>
<pre><code class="language-none">ア k ≧ 0  イ left[k] = -1  ウ left[k] ≧ 0
エ parent[k] = -1  オ parent[k] ≧ 0</code></pre>
<p class="mag_tp30">f に関する解答群</p>
<pre><code class="language-none">ア left[k] = k  イ left[parent[k]] = k
ウ parent[k] = k  エ parent[left[k]] = k</code></pre>
</div>
<div class="divider mag_tp60 mag_bt30"></div>
<details class="grey lighten-5 blue-grey-text c-round">
<summary class="chip"><span>問題のヒント</span></summary>
<p>この問題のテーマとなっているハフマン符号は、情報の基礎理論の分野で、基本情報技術者試験のシラバス（出題内容の細目を示した資料）に示されています。<span class="u">問題を解く前提知識として、ハフマン符号の仕組みと作り方を知っておきましょう</span>。</p>
<p>ハフマン符号化は、文字列の中で使われている個々の文字の出現回数を求め、<span class="u">出現頻度が多いほど短いビット数で符号化</span>します。これによって、すべての文字を同じビット数で符号化することに比べて、<span class="u">文字列全体のサイズを小さくできます</span>。</p>
<p>ハフマン符号は、ハフマン木を使って作ります。出現頻度が少ない順に文字をつないだ二分木を作り、木の根から目的の文字までたどるときに、<br />
左に行くときに 0 を<br />
右に行くときに 1 を<br />
割り当てるのです。</p>
<p>これによって、出現頻度が少ない文字ほど長いビット数で符号化されます。逆に言えば、出現頻度が多い文字ほど短いビット数で符号化されるのです。</p>
<p>以上の前提知識を持って、問題に取り組んでください。<br />
</details>
<h2>みんなの解答欄</h2>
<p>こちらから解答できます！</p>
<div class="iframe-container center">
  <iframe src="https://docs.google.com/forms/d/e/1FAIpQLScD7XL-QwMcol5OWPQwhHpJqHeBy9GVLT1fQ58lXXNfSmXDJg/viewform?embedded=true" width="100%" height="2474" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div>
<p>今週の金曜に解答解説ページを、ご解答頂いた方の正解率とともに公開します !!</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h31h_algorithm/">今週の午後問題〔問題〕アルゴリズム ハフマン符号化を用いた文字列圧縮 2019 年度 春期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔解答〕情報セキュリティ SSH による通信 2017 年度 秋期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h29a_sec/</link>
		<pubDate>Fri, 08 Oct 2021 02:30:29 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[公開鍵秘密鍵]]></category>
		<category><![CDATA[午後問題の解説]]></category>
		<category><![CDATA[情報セキュリティ]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=6003</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまにも解答してもらっています！ 今週の午後問題は「 SSH による通信」でしたが、皆さん、手応え [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h29a_sec/">今週の午後問題〔解答〕情報セキュリティ SSH による通信 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまにも解答してもらっています！</p>
<p>今週の午後問題は<a href="../h29a_sec/">「 SSH による通信」</a>でしたが、皆さん、手応えはいかがでしょうか？</p>
<p>金曜になりましたので、<span class="u">出題の 解答 と 矢沢久雄さんによる 解説 に加えて、皆さんの正解率を公開</span>します。
</div>
<style>.sub-title{font-size:.9em}dl.inline dd{margin-left:2em}blockquote > p{color:#607d8b}.background>p{color:#607d8b;}</style>
<h2>今週の午後問題<br />
<span class="grey-text sub-title">2017 年度 秋期 SSH による通信</span></p>
<p class="pink chip white-text sub-title">解答と解説</p>
</h2>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>a</p>
<p><span class="chip bold">正解</span> エ</p>
<div class="divider"></div>
<p><span class="u">ディジタル署名は、署名者の秘密鍵を使って署名し、署名者の公開鍵を使って検証</span>します。</p>
<p>ここでは、署名者がサーバなので、クライアントが</p>
<blockquote><p>サーバの公開鍵（選択肢エ）</p></blockquote>
<p>を使ってディジタル署名の検証をします。
</p></div>
<div class="background c-round">
<p><span class="bold mag_rt10">設問 1</span>b</p>
<p><span class="chip bold">正解</span> イ</p>
<div class="divider"></div>
<p>ここでは、署名者がクライアントなので、サーバが</p>
<blockquote><p>クライアントの公開鍵（選択肢イ）</p></blockquote>
<p>を使ってディジタル署名の検証をします。
</p></div>
<div class="background c-round">
<p class="bold">設問 2</p>
<p><span class="chip bold">正解</span> オ</p>
<div class="divider"></div>
<dl class="inline">
サーバによるセッション識別子のディジタル署名を検証するので、サーバとクライアントの間に悪意のある第三者が入ってなりすましをする</p>
<blockquote><p>中間者攻撃（選択肢オ）</p></blockquote>
<p>を防ぐことができます。
</p></div>
<div class="background c-round">
<p class="bold">設問 3</p>
<p><span class="chip bold">正解</span> ア</p>
<div class="divider"></div>
<p><span class="u">共通鍵暗号方式には、処理が高速という長所がありますが、鍵をネットワークで送れないという短所があります</span>。<br />
<span class="u">公開鍵暗号方式には、処理が低速という短所がありますが、一方の鍵をネットワークで送れるという長所があります</span>。</p>
<p>ここでは、公開鍵暗号方式ではなく共通鍵暗号方式を用いる理由を答えるので、</p>
<blockquote><p>共通鍵暗号方式は、公開鍵暗号方式よりも暗号処理が高速である（選択肢ア）</p></blockquote>
<p>が適切です。
</p></div>
<div class="background c-round">
<p class="bold">設問 4</p>
<p><span class="chip bold">正解</span> ア</p>
<div class="divider"></div>
<p>パスワード認証では、パスワードがサーバに送られますが、<span class="u">公開鍵認証では、パスワードがサーバに送られません</span>。</p>
<p>したがって、パスワード認証が公開鍵認証に比べて安全性が低い理由として適切なのは、</p>
<blockquote><p>サーバが攻撃者に乗っ取られていた場合、送信したパスワードを攻撃者に取得されてしまう（選択肢ア）</p></blockquote>
<p>です。</p>
<p>&nbsp;</p>
<p>正当なサーバとは異なるサーバに接続させられても利用者が気づけないことは、パスワード認証と公開鍵認証の違いには関係しないので、選択肢イは不適切です。</p>
<p>公開鍵認証では、パスワードを使わないので、選択肢ウは不適切です。</p>
<p>SSH セッションでは、暗号化通信でパスワード認証を行うので、パスワードが平文でネットワークを流れることはありません。したがって、選択肢エは不適切です。
</p></div>
<h2>みんなの解答</h2>
<p>ご解答いただいた皆さん、ありがとうございました！</p>
<p>では、正解率はいかがだったでしょうか？</p>
<figure>
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/10/h29a_sec_1a.jpg" loading="lazy"><br />
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/10/h29a_sec_1b.jpg" loading="lazy"><br />
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/10/h29a_sec_2.jpg" loading="lazy"><br />
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/10/h29a_sec_3.jpg" loading="lazy"><br />
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/10/h29a_sec_4.jpg" loading="lazy"><br />
</figure>
<p>&nbsp;</p>
<p>なお、以下はこの問題の <a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2017h29_2/2017h29a_fe_pm_cmnt.pdf" rel="noopener" target="_blank">IPA の講評</a>です。今後の参考になれば幸いです。</p>
<div class="background blue-grey-text c-round">
　問 1 では， SSH を題材に，暗号による安全な通信経路の確立や，利用者の認証について出題した。 </p>
<p>　設問 1 の正答率は平均的で，おおむね理解されていた。 </p>
<p>　設問 2 の正答率は低く，あまり理解されていなかった。ウと誤って解答した受験者が見受けられた。これは，解答群にあるような代表的な攻撃に関する理解が不十分であるためと思われる。代表的な攻撃について，その方法及び対策を，理解しておいてほしい。 </p>
<p>　設問 3 の正答率は平均的で，おおむね理解されていた。 </p>
<p>　設問 4 の正答率は低く，あまり理解されていなかった。エと誤って解答した受験者が見受けられた。 &#8220;パスワード認証&#8221; ではサーバに送られるものが &#8220;パスワード&#8221; であるのに対して， &#8220;公開鍵認証&#8221; ではサーバに送られるものは &#8220;公開鍵&#8221; である点に着目すれば，正答できた。 </p>
<p>　暗号を使った通信ソフトウェアを利用するに当たり，各暗号技術の特性を理解した上で，通信ソフトウェアで，どのような暗号がどのように用いられ，どのような役割を担っているかを正しく把握できる能力が求められるので，身につけておいてほしい。
</p></div>
<p>来週からは「アルゴリズム問題」を特集します！　多くの方が苦手にしがちなので、これを機会にじっくり挑戦してみてください！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/ans_h29a_sec/">今週の午後問題〔解答〕情報セキュリティ SSH による通信 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>今週の午後問題〔問題〕情報セキュリティ SSH による通信 2017 年度 秋期</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h29a_sec/</link>
		<pubDate>Sun, 03 Oct 2021 23:30:29 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[公開鍵秘密鍵]]></category>
		<category><![CDATA[情報セキュリティ]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=this_weeks_exercise&#038;p=5982</guid>
		<description><![CDATA[<p>今週の午後問題 このコーナーでは毎週月曜に午後の必須選択問題から 1 問ピックアップして出題し、 解答欄 を設け、読者の皆さまも参加して解答できます！　その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h29a_sec/">今週の午後問題〔問題〕情報セキュリティ SSH による通信 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
<div class="chip indigo white-text">今週の午後問題</div>
<p>このコーナーでは<span class="u">毎週月曜に午後の必須選択問題から 1 問ピックアップして出題</span>し、 解答欄 を設け、読者の皆さまも参加して解答できます！　<span class="u">その週の金曜にはその解答と 矢沢久雄 さんによる 解説 ページを公開</span>し、皆さんの正解率も発表します。</p>
<p>現在は<span class="bold">「情報セキュリティ」</span>に絞って出題中です！今回は<span class="bold"> 「 2017 年度 秋期 SSH による通信」</span>です。</p>
<p>ぜひ腕試しにお使い下さい！
</p></div>
<style>ol.background{padding-left:2.5em!important}dl.inline dd{margin-left:2em;}details{padding:2em;}details p{color:"#607d8b"}summary:hover{cursor:pointer;}summary{display:inline-block;}.chip span::after{content:"\e5cf";font-family:"Material Icons";vertical-align:middle;margin-left:.5em;}summary::-webkit-details-marker{display:none;}details[open] .chip span::after{content:"\e5ce";}.iframe-container{overflow:auto;margin:2em auto;height:100%}@media screen and (min-width:601px){.responsive-width{width:85%}}</style>
<h2>今週の午後問題<br />2017 年度 秋期 情報セキュリティ SSH による通信</h2>
<div class="divider mag_h30"></div>
<p class="bold">問 1</p>
<p>SSH による通信に関する次の記述を読んで，設問 1 ～ 4 に答えよ。</p>
<div class="mag_lt10">
　SSH は遠隔ログインのための通信プロトコル及びソフトウェアであり，通信データの盗聴対策や，通信相手のなりすましを防ぐ仕組みを備えている。 SSH では，サーバにログインしてデータをやり取りする通信 (以下，ログインセッションという) に先立って，安全な通信経路の確立と利用者認証を行う必要がある。安全な通信経路の確立，利用者認証及びログインセッションを合わせて SSH セッションと呼ぶ。その流れを，図 1 に示す。</p>
<figure>
  <img class="materialboxed z-depth-5 responsive-width pad_10" src="../../wp-content/uploads/2021/09/h20a_q1_figure.jpg" loading="lazy"><figcaption>図 1 　SSH セッションの流れ</figcaption></figure>
<p class="mag_tp30 mag_bt10">〔安全な通信経路の確立の概要〕</p>
<p>　安全な通信経路の確立は，次のようにして行う。</p>
<ol class="background c-round">
<li>クライアントがサーバにアクセスする。</li>
<li>サーバとクライアントが， SSH セッションで使用する暗号アルゴリズムについて合意する。</li>
<li>サーバとクライアントが，通信データの暗号化に使用するセッション鍵と，他の SSH セッションと区別するためのセッション識別子について合意する。</li>
<li><i class="material-icons blue-text">looks_one</i><span class="u">クライアントがサーバ認証を行う</span>。サーバ認証では，クライアントがあらかじめ入手して正当性を確認しておいた<span class="blank">a</span>を用い，サーバによるセッション識別子へのディジタル署名が正しいかどうかを検証する。</li>
<li>合意した暗号アルゴリズムとセッション鍵を用いて，<i class="material-icons blue-text">looks_two</i><span class="u">共通鍵暗号方式による通信データの暗号化</span>を開始する。これ以降の通信は，全て暗号化される。</li>
</ol>
<p class="mag_tp30 mag_bt10">〔利用者認証の概要〕</p>
<p>　クライアントからサーバへのログインでは，サーバは利用者認証を行う。 SSH の利用者認証の方式には，ディジタル署名を用いる &#8220;公開鍵認証&#8221; とパスワードを用いる &#8220;パスワード認証&#8221; がある。</p>
<p>　 &#8220;公開鍵認証&#8221; では，クライアントの公開鍵を事前にサーバに登録しておき，この登録されている公開鍵に対応する秘密鍵をクライアントがもっていることをサーバが確認する。この確認では，クライアントがセッション識別子などに対するディジタル署名をサーバに送信し，サーバが<span class="blank">b</span>を用いてディジタル署名を検証する。</p>
<p>　 &#8220;パスワード認証&#8221; では，クライアントが利用者 ID とパスワードを送信し，サーバは受け取ったパスワードが当該利用者のパスワードと一致していることを検証する。</p>
<p>　なお， <i class="material-icons blue-text">looks_3</i><span class="u">&#8220;パスワード認証&#8221; は， &#8220;公開鍵認証&#8221; に比べて，安全性が低いと考えられている</span>。</p>
<p class="bold mag_tp30">設問 1</p>
<p>本文中の<span class="blank"></span>に入れる適切な答えを，解答群の中から選べ。</p>
<p>a, b に関する解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>安全な通信経路の確立時に合意したセッション鍵</dd>
<dt>イ</dt>
<dd>クライアントの公開鍵</dd>
<dt>ウ</dt>
<dd>クライアントの秘密鍵</dd>
<dt>エ</dt>
<dd>サーバの公開鍵</dd>
<dt>オ</dt>
<dd>サーバの秘密鍵</dd>
</dl>
<p class="bold mag_tp30">設問 2</p>
<p>本文中の下線 <i class="material-icons blue-text">looks_one</i> によって防ぐことができる攻撃として適切な答えを，解答群の中から選べ。</p>
<p>解答群</p>
<p>ア　DoS 攻撃　　<br class="hide-on-med-and-up">イ　SQL インジェクション<br />
ウ　クロスサイトスクリプティング　　<br class="hide-on-med-and-up">エ　総当たり攻撃<br />
オ　中間者攻擊</p>
<p class="bold mag_tp30">設問 3</p>
<p>本文中の下線 <i class="material-icons blue-text">looks_two</i> について，通信データの暗号化に公開鍵暗号方式ではなく共通鍵暗号方式を用いる理由として適切な答えを，解答群の中から選べ。</p>
<p>解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>共通鍵暗号方式は，公開鍵暗号方式よりも暗号処理が高速である。</dd>
<dt>イ</dt>
<dd>共通鍵暗号方式は，公開鍵暗号方式よりも解読に時間が掛かる。</dd>
<dt>ウ</dt>
<dd>共通鍵暗号方式は，公開鍵暗号方式よりも鍵の再利用が容易である。</dd>
<dt>エ</dt>
<dd>共通鍵暗号方式は，公開鍵暗号方式よりも鍵の配布が容易である。</dd>
</dl>
<p class="bold mag_tp30">設問 4</p>
<p>本文中の下線 <i class="material-icons blue-text">looks_3</i> のように考えられている理由として適切な答えを，解答群の中から選べ。</p>
<p>解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>&#8220;パスワード認証&#8221; では，サーバが攻撃者に乗っ取られていた場合，送信したパスワードを攻撃者に取得されてしまう。</dd>
<dt>イ</dt>
<dd>&#8220;パスワード認証&#8221; では，正当なサーバとは異なるサーバに接続させられてしまっても利用者が気づけない。</dd>
<dt>ウ</dt>
<dd>&#8220;パスワード認証&#8221; では，パスワードだけを用いるが， &#8220;公開鍵認証&#8221; では，パスワードの他にディジタル署名も用いる。</dd>
<dt>エ</dt>
<dd>&#8220;パスワード認証&#8221; では，利用者のパスワードが平文でネットワーク上を流れるので，盗聴されるとパスワードを取得されてしまう。</dd>
</dl>
</div>
<div class="divider mag_tp60 mag_bt30"></div>
<details class="grey lighten-5 blue-grey-text c-round">
<summary class="chip"><span>問題のヒント</span></summary>
<p>SSH ( Secure Shell )がテーマの問題ですが、 SSH の仕組みを詳しく知っている必要はありません。 SSH が、暗号化と認証によって、リモートコンピュータと安全に通信するプロトコルであるということを知っていれば十分です。</p>
<p>ディジタル署名における公開鍵と秘密鍵の使い方、共通鍵暗号方式と公開鍵暗号方式の長所と短所など、<span class="u">午前試験でもよく取り上げられる知識があれば、設問に答えることができる</span>でしょう。</p>
<p>パスワード認証と公開鍵認証の違いを問う設問もありますが、常識的な判断をすれば正解を選べるはずです。<br />
</details>
<h2>みんなの解答欄</h2>
<p>こちらから解答できます！</p>
<div class="iframe-container center hide-on-small-only">
  <iframe src="https://docs.google.com/forms/d/e/1FAIpQLScfzCL3Ajs_yPz1epAzYrgu9CRHqnSPbw6eTI-dWP_4vs1jug/viewform?embedded=true" width="100%" height="1830" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div>
<div class="iframe-container center hide-on-med-and-up">
  <iframe src="https://docs.google.com/forms/d/e/1FAIpQLScfzCL3Ajs_yPz1epAzYrgu9CRHqnSPbw6eTI-dWP_4vs1jug/viewform?embedded=true" width="100%" height="2500" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div>
<p>今週の金曜に解答解説ページを、ご解答頂いた方の正解率とともに公開します !!</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/this_weeks_exercise/h29a_sec/">今週の午後問題〔問題〕情報セキュリティ SSH による通信 2017 年度 秋期</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
