<?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/tag/%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Mon, 20 Apr 2026 07:08:52 +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>トレースのテクニックが身につく練習問題｜アルゴリズムとプログラミング問題を解くコツ</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/patterns_algorithms/technique_trace/</link>
		<pubDate>Wed, 08 Jul 2020 08:06:19 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[スタック]]></category>
		<category><![CDATA[テクニック 具体的な値を想定]]></category>
		<category><![CDATA[トレースのコツ]]></category>
		<category><![CDATA[科目 B]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=patterns_algorithms&#038;p=4292</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験で、多くの受験者が苦手意識を持っている科目 B 試験 アルゴリズムとプログラミング分野の「アルゴリズム穴埋め問題」に的を絞って、正解を見出すポイントを詳しく説明します。 苦手を克服するには [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/patterns_algorithms/technique_trace/">トレースのテクニックが身につく練習問題｜アルゴリズムとプログラミング問題を解くコツ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載では、基本情報技術者試験で、多くの受験者が苦手意識を持っている科目 B 試験 アルゴリズムとプログラミング分野の「アルゴリズム穴埋め問題」に的を絞って、正解を見出すポイントを詳しく説明します。</p>
<p>苦手を克服するには、短いプログラムを何度も練習して、穴埋めに慣れることが重要です。</p>
<p>そのために、実際の試験問題の一部をアレンジした練習問題を作りました。とても短い問題ですので、気軽に取り組んでください。</p>
<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}pre{background:#263238;color:#eceff1;font-size:1em;line-height:1.8;margin:1em -7.5%;padding:1em 7.5%}.card-panel>pre{margin:1em -24px;padding:1em 24px}</style>
<h2>練習問題</h2>
<div class="card-panel">
問 4　「スタックを使って整数値を 10 進数字列に変換するプログラム」（平成 19 年度 秋期 午後）を一部改変</p>
<p>　スタックを使って整数値を 10 進数字列（文字列）に変換する IntFormat 関数である。 IntFormat 関数は、引数 Int で指定された整数値を 10 進数字列に変換し、その先頭の数字（文字）から 1 文字ずつ順に引数 Out[] に格納し、格納した文字数を引数 Len に格納する。整数値を 10 進数字列に変換する手順は、次のとおりである。</p>
<ol class="mag_h30">
<li>Int の値がゼロの場合は、 Out[0] に &#8220;0&#8221; を、 Len に 1 を格納して、関数を終了する。</li>
<li>Int の値が負の場合は、負符号を表す &#8220;-&#8221; を Out[] に格納し、 Int の値を正数に変換する。</li>
<li>Int の 1 の位から上位に向かって、 1 けたずつ 10 進数字に変換し、 Push 関数でスタックに積む。</li>
<li>スタックに積み終わったら、スタックに積んだ文字を順番に Pop 関数で取り出して Out[] に格納することによって、変換後の 10 進数字を正しい順序に並び替える。</li>
<li>Len に Out[] に格納した文字数を設定して、関数を終了する。</li>
</ol>
<p>　引数の値をスタックに積む Push 関数と、スタックから取り出した値を戻り値として返す Pop 関数は、あらかじめ用意されているとする。配列の添字は 0 から始まり、 Out[] の要素数は十分に大きいものとする。プログラム中の各演算で、あふれは生じないものとする。 IntFormat 関数の変換例を下図に示す。</p>
<figure><figcaption class="mag_h10 small-text center grey-text">図　IntFormat 関数の変換例</figcaption><img class="materialboxed hoverable z-depth-5 responsive-width" data-caption="図　IntFormat 関数の変換例" src="../../wp-content/uploads/2020/07/q4_figure.jpg" loading:"lazy"><br />
</figure>
<p class="grey-text hide-on-med-and-up mag_h10 small-text"><i class="material-icons light-blue-text mag_rt05">swipe</i>アルゴリズムは横スクロールできます</p>
<p>［プログラム］</p>
<pre>
◯IntFormat(整数型: Int, 文字型の配列: Out, 整数型: Len)
  整数型: L, I, Idx
  文字型の配列: Chr ← {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
  文字型: T

  L ← 0

  /* 引数 Int がゼロの場合の処理 */
  if (Int が 0 )
    Out[L] ← Chr[Int]
    L ← L + 1
    Len ← L
    return
  endif

  /* 符号の処理 */
  if (Int が 0 より小さい)
    I ← -Int
    Out[L] ← "-"
    L ← 1 + 1
  else
    I ← Int
  endif

  /* 数値を 1 けたずつ数字に変換してスタックに格納する処理 */
  Push("#")     /* スタックに番兵として "#" を積む */

  while (I が 0 より大きい)
    Idx ← I - (I ÷ 10) × 10
    Push(Chr[Idx])
    I ← <span class="blank">a</span>
  endwhile

  /* スタックから取り出す処理 */
  T ← Pop()

  while (T が "#" でない)
    Out[L] ← T
    <span class="blank">b</span>
    T ← Pop()
  endwhile

  Len ← L
  return
</pre>
<p>設問　プログラム中の<span class="blank"></span>に入れる正しい答えを、解答群の中から選べ。</p>
<p>a に関する解答群<br />
ア　I &#8211; 10<br />
イ　I &#8211; I ÷ 10<br />
ウ　I &#8211; ( I ÷ 10 ) × 10<br />
エ　I ÷ 10</p>
<p>b に関する解答群<br />
ア　L ← L + 1<br />
イ　L ← L &#8211; 1<br />
ウ　I ← I + 1<br />
エ　I ← I &#8211; 1
</p></div>
<h2>ポイント1：数値と数字の違いを知る</h2>
<p>数値と数字は、異なるものです。たとえば、 123 は、 1 つの数値です。これを画面に表示するときは、 &#8220;1&#8221;, &#8220;2&#8221;, &#8220;3&#8221; という 3 つの文字を表示することになります。</p>
<p><span class="u">このように数値の 1 けたずつを 1 つの文字にしたものが数字です。</span></p>
<p>問題に示された IntFormat 関数の変換例を見てください。 IntFormat 関数は、引数 Int に指定された 123 という数値を、 &#8220;1&#8221;、&#8221;2&#8243;、&#8221;3&#8243; という数字に変換して引数 Out[] に格納し、その文字数の 3 を引数 Len に格納するのです。</p>
<p>&nbsp;</p>
<p>コンピュータの内部では、あらゆる情報を数値で表しています。したがって、 &#8220;1&#8221;, &#8220;2&#8221;, &#8220;3&#8221; という数字も、その<span class="u">実体は、それぞれの数字に割り当てられた文字コードの数値</span>です。</p>
<p>何という数値が割り当てられるかは、使用する文字コード体系によって異なりますが、たとえば JIS X 0201 という文字コード体系では、<br />
&#8220;1&#8221; は 49、<br />
&#8220;2&#8221; は 50、<br />
&#8220;3&#8221; は 51<br />
です。 49 、50 、51 を文字型として画面に出力すると、それぞれに対応した &#8220;1&#8221;, &#8220;2&#8221;, &#8220;3&#8221; という数字が表示されるのです。</p>
<p>&nbsp;</p>
<p>この問題では、文字コードは示されていません。その代わりに、</p>
<pre>文字型の配列: Chr ← {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}</pre>
<p>という文字の配列を用意しています。</p>
<p>配列の添字が 0 から始まるとしているので、 Chr[0] ～ Chr[9] は、 0 から 9 の数値に対応する &#8220;0&#8221; ～ &#8220;9&#8221; という数字になります。</p>
<p>たとえば、<span class="u">変数 Idx の値が 5 なら、 Char[Idx] は、数値 5 に対応する &#8220;5&#8221; という数字</span>になります。</p>
<h2>ポイント2： コメントをヒントにして、問題文の説明とプログラムを対応付ける</h2>
<p>この問題のように、<span class="bold">処理の手順が示されている場合は、手順とプログラムを対応付けることで、空欄で行う処理がわかる</span>場合がよくあります。</p>
<p>その際に、<span class="u">プログラムの中にあるコメントも大いに参考にしてください。</span>試験問題のプログラムのコメントは、<span class="bold">コメント（注釈）というよりは、ヒント</span>だからです。</p>
<p>&nbsp;</p>
<p>手順の説明の (1) は、プログラムで </p>
<pre>/* 引数 Int がゼロの場合の処理 */</pre>
<p>というコメントに対応した処理です。</p>
<p>ここには、空欄がないので (1) に示されている</p>
<blockquote>
<p class="grey-text"> Int の値がゼロの場合は、 Out[0] に &#8220;0&#8221; を、 Len に 1 を格納して、関数を終了する</p>
</blockquote>
<p>という処理をやっているのだ、と考えるだけで OK です。<span class="u">プログラムの内容を詳しく見る必要はありません。</span></p>
<p>&nbsp;</p>
<p>同様に、手順の説明の (2) は、プログラムの </p>
<pre>/* 符号の処理 */</pre>
<p>の部分に対応し、ここにも空欄がないので、プログラムの内容を詳しく見る必要はありません。</p>
<h2>ポイント3： 具体的な数値を想定して処理の流れをトレースする</h2>
<p>手順の説明の (3) は、プログラムの</p>
<pre>/* 数値を1けたずつ数字に変換してスタックに格納する処理 */</pre>
<p>に対応し、ここには空欄 a があるので、</p>
<blockquote>
<p class="grey-text">Int の 1 の位から上位に向かって、 1 けたずつ 10 進数字に変換し、 Push 関数でスタックに積む</p>
</blockquote>
<p>という説明と対応付けて、プログラムの内容を詳しく見てみましょう。</p>
<p>以下に、該当するプログラムの部分を示します。</p>
<pre>
  /* 数値を 1 けたずつ数字に変換してスタックに格納する処理 */
  Push("#")     /* スタックに番兵として "#" を積む */

  while (I が 0 より大きい)
    Idx ← I - (I ÷ 10) × 10
    Push(Chr[Idx])
    I ← <span class="blank">a</span>
  endwhile
</pre>
<p><span class="bold">プログラムを見る（読み取る）コツは、わかりやすい具体例を想定すること</span>です。</p>
<p>ここでは、変換する数値を格納している変数 I に 123 が格納されていることを想定してみましょう。</p>
<blockquote>
<p class="grey-text"> Int の 1 の位から上位に向かって、 1 けたずつ 10 進数字に変換し、 Push 関数でスタックに積む</p>
</blockquote>
<p>という説明なので、 123 という数値を、 3, 2, 1 の順に、 &#8220;3&#8221;, &#8220;2&#8221;, &#8220;1&#8221; という数字に変換して、 Push 関数でスタックに積みます。</p>
<p>スタックに積むのは、&#8221;3&#8243;, &#8220;2&#8221;, &#8220;1&#8221; の順に変換しただけでは順序が逆だからです。<br />
&#8220;1&#8221;<br />
&#8220;2&#8221;<br />
&#8220;3&#8221;<br />
の順に変換してスタックに積み、それをスタックから取り出すと<br />
&#8220;1&#8221;, &#8220;2&#8221;, &#8220;3&#8221;<br />
という正しい順序にできます。<span class="bold">スタックでは、積んだときと逆の順序で取り出すことになる</span>からです。</p>
<p>それでは、プログラムを見てみましょう。</p>
<p>まず、</p>
<pre>|・Idx ← I - (I ÷ 10) × 10</pre>
<p>という処理の I に 123 を想定すると、</p>
<pre>|・Idx ← 123 - (123 ÷ 10) × 10</pre>
<p>になります。</p>
<p>123 ÷ 10 は、整数同士の割り算なので、<span class="u">小数点以下がカットされて（これは、とっても重要なことなので必ず覚えておいてください）</span>、 12 になります。<br />
× 10 で、それを 10 倍するので、<br />
(123 ÷ 10) × 10 は、 120 になります。</p>
<p>したがって、</p>
<pre>123 - (123 ÷ 10) × 10</pre>
<p>は、 123 &#8211; 120 = 3 になって、変数 Idx には、 123 の最下位けたの 3 が得られます。</p>
<p>次に、</p>
<pre>Push(Chr[Idx])</pre>
<p>という処理の Idx に 3 を想定すると、</p>
<pre>Push(Chr[3])</pre>
<p>となります。 Chr[3] は &#8220;3&#8221; なので、これによって 3 という数値が &#8220;3&#8221; という数字に変換されて、スタックにプッシュされます。</p>
<p>次に、</p>
<pre>I ← <span class="blank">a</span></pre>
<p>という処理に空欄 a があります。これは、次に同じ処理（最下位けたの数値を取り出して、それを数字に変換してスタックに積む）に合わせて、変数 I の値を更新する処理です。</p>
<p>この処理の前で、変数 I の値は 120 になっています。これを 12 に変換すれば、最下位けたが 2 になります。さあ、空欄 a では、どのような処理を行えばよいのでしょう？</p>
<div class="grey lighten-5 c-round pad_20">
<i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w05">タグで関連記事をチェック</span><a href="../../tag/スタック" class="tag">スタック</a><a class="tag" href="../../tag/テクニック-具体的な値を想定/">テクニック 具体的な値を想定</a>
</div>
<h2>ポイント4： 選択肢の変数に具体的な値を設定する</h2>
<p>こういうことは、空欄を眺めて腕を組んで考えることではありません。基本情報技術者試験の問題は、すべて選択問題なのですから、必ず選択肢を見て考えてください。</p>
<p>以下に、空欄 a の選択肢を示します。</p>
<blockquote class="mag_h30">
<p class="grey-text">a に関する解答群<br />
ア　I &#8211; 10<br />
イ　I &#8211; I ÷ 10<br />
ウ　I &#8211; ( I ÷ 10 ) × 10<br />
エ　I ÷ 10</p>
</blockquote>
<p>現時点で、変数 I は 120 です。これを 12 にしたいのですから、選択肢の変数 I に 120 を代入して、 12 になるものが正解です。</p>
<p>以下のように、選択肢エが正解です。繰り返しますが、整数の割り算では、小数点以下がカットされることに注意してください。</p>
<div class="background c-round">
a に関する解答群<br />
ア　120 &#8211; 10 = 110<br />
イ　120 &#8211; 120 ÷ 10 = 120 &#8211; 12 = 108<br />
ウ　120 &#8211; (120 ÷ 10) × 10 = 120 &#8211; 120 = 0<br />
エ　120 ÷ 10 = 12
</div>
<h2>ポイント5： 同様の処理をしている部分と見比べる</h2>
<p>手順の説明の（4）は、プログラムの</p>
<pre>/* スタックから取り出す処理 */</pre>
<p>に対応し、ここには空欄 b があるので、</p>
<blockquote>
<p class="grey-text">スタックに積み終わったら、スタックに積んだ文字を順番に Pop 関数で取り出して Out[] に格納することによって、変換後の 10 進数字を正しい順序に並び替える</p>
</blockquote>
<p>という説明と対応付けて、プログラムの内容を詳しく見てみましょう。</p>
<p>以下に、該当するプログラムの部分を示します。</p>
<pre>
  /* スタックから取り出す処理 */
  T ← Pop()

  while (T が "#" でない)
    Out[L] ← T
    <span class="blank">b</span>
    T ← Pop()
  endwhile
</pre>
<p>まず、</p>
<pre>T ← Pop()</pre>
<p>の部分でスタックから取り出した数字を変数 T に格納しています。</p>
<p>次に、</p>
<pre>while (T が "#" でない)</pre>
<p>は、スタックの末尾を示す番兵（目印となるデータのことで、ここでは &#8220;#&#8221; という文字です）を取り出すまで繰り返す、つまりスタックに積まれたデータをすべて取り出すまで繰り返すということです。</p>
<p>次に、</p>
<pre>Out[L] ← T</pre>
<p>で、取り出した数字 T を Out[L] に格納しています。</p>
<p>次に、</p>
<pre><span class="blank">b</span></pre>
<p>という空欄 b があります。</p>
<p>空欄bの穴埋めは、以下の解答群から選びます。さあ、どれでしょう？</p>
<blockquote class="mag_h30">
<p class="grey-text">b に関する解答群<br />
ア　L ← L + 1<br />
イ　L ← L &#8211; 1<br />
ウ　I ← I + 1<br />
エ　I ← I &#8211; 1</p>
</blockquote>
<p>ここでは、プログラムの中で、同様の処理をしている部分と見比べる、ということをしてみましょう。</p>
<p>以下のオレンジ色文字の部分で、同様の処理をしています。</p>
<pre>
  /* 引数 Int がゼロの場合の処理 */
  if (Int が 0 )
    <span class="amber-text">Out[L] ← Chr[Int]</span>
    <span class="amber-text">L ← L + 1</span>
    Len ← L
    return
  endif
</pre>
<pre>
  /* 符号の処理 */
  if (Int が 0 より小さい)
    I ← -Int
    <span class="amber-text">Out[L] ← "-"</span>
    <span class="amber-text">L ← 1 + 1</span>
  else
    I ← Int
  endif
</pre>
<p>これらを見ると、 Out[L] にデータを格納したら、次の格納に備えて L の値を 1 増やす処理をしていることがわかります。空欄 b も同じはずです。</p>
<p>したがって、選択肢アの L ← L + 1 が正解です。</p>
<p>&nbsp;</p>
<p><span class="chip mag_rt10">解答</span>a － エ, b － ア</p>
<div class="divider mag_h50"></div>
<p><span class="bold">「習うより慣れろ」</span>ということわざがあります。アルゴリズム穴埋め問題の克服に関しては、正にその通りでしょう。</p>
<p>この連載では、これからも短い練習問題を掲載していきますので、穴埋めに慣れることを目指してください。</p>
<p>正解を見出すポイントとして、同じことが示されることもあると思いますが、それは、多くの問題に共通したポイントがあるからです。</p>
<p>それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/patterns_algorithms/technique_trace/">トレースのテクニックが身につく練習問題｜アルゴリズムとプログラミング問題を解くコツ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>「厳選5題」過去問と解説 &#124; 平成29年度 秋期 の過去問やるならこれをやれ</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h29_autumn/</link>
		<pubDate>Thu, 28 Mar 2019 06:41:19 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[MTBF MTTR]]></category>
		<category><![CDATA[スタック]]></category>
		<category><![CDATA[午前問題]]></category>
		<category><![CDATA[稼働率]]></category>
		<category><![CDATA[計算問題]]></category>
		<category><![CDATA[過去問の解き方]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=kakomon-gensen&#038;p=832</guid>
		<description><![CDATA[<p>ここでは、平成 29 年度 秋期 基本情報技術者試験の午前試験の中から「やるべき問題」を厳選し、ぶっちゃけた解説をさせていただきます。 やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習しないとできな [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h29_autumn/">「厳選5題」過去問と解説 | 平成29年度 秋期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>ここでは、<a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2017h29_2/2017h29a_fe_am_qs.pdf" rel="noopener" target="_blank">平成 29 年度 秋期 基本情報技術者試験の午前試験</a>の中から「やるべき問題」を厳選し、ぶっちゃけた解説をさせていただきます。</p>
<p>やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習しないとできない問題）です。</p>
<style>h2 .chip{vertical-align:middle;background:#3f51b5;color:white;margin-right:.75em;}.chip i{font-size:2em!important;}table{font-size:.85em;}table.s6{width:60%;margin:1.5em auto;}dl.inline dd{margin-left:2em}dl.background dt{font-weight:700}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;background:#eceff1;color:#263238;}pre{padding:1em 1.5em;margin:1.5em 0;}code{padding:.15em .5em;}@media only screen and (max-width:600px){dl dd,dl.background dd{margin-left:0}}</style>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_one</i></span>とってもよく出る MTBF と MTTR の意味をしっかり覚えよう</h2>
<div class="card-panel mag_h50">
問 15　(平成 29 年度　秋期)</p>
<p>MTBF が 45 時間で MTTR が 5 時間の装置がある。 この装置を二つ直列に接続したシステムの稼働率は幾らか。</p>
<p>ア　0.81　　イ　0.90　　<br class="hide-on-med-and-up">ウ　0.95　　エ　0.99
</div>
<div class="chip">解説</div>
<p>私は、英語が得意ではありません。 英検 3 級で、TOEIC が 400 点台という、何年も学校で習ったのに英語ができない典型的な日本人です。</p>
<p>そんな私が言うのも何ですが、</p>
<ul class="background c-round bold mag_h20">
<li>英語の IT 用語は、必ず日本語の意味を調べて覚えてください。 </li>
<li>略語の場合は、何の略なのかを調べて、それを日本語に訳して覚えてください。 </li>
</ul>
<p>そうする習慣を持ってください。 英語が苦手なら、なおさらそうしてください。</p>
<p>&nbsp;</p>
<p>この問題には、<span class="bold">MTBF</span> と <span class="bold">MTTR</span> という略語があります。</p>
<p>どちらも、とってもよく出題される用語ですが、「 MTBF は、平均故障間隔」「 MTTR は、平均修理時間」と丸暗記するのでは、いけません。 どっちがどっちなのか、わからなくなってしまう恐れがあるからです。</p>
<dl class="background c-round mag_h30">
<dt class="bold">MTBF</dt>
<dd>Mean Time Between Failure の略、故障と故障の間の平均時間という意味、つまり動いている時間のこと</dd>
<dt class="bold">MTTR</dt>
<dd>Mean Time To Repair の略、修理のための平均時間という意味、つまり止まっている時間のこと</dd>
</dl>
<p>と覚えてください。</p>
<p>そして、<br />
「稼働率は、MTBF /（ MTBF + MTTR ）という計算で求められる。</p>
<p>これは、<br />
<code><span class="bold">動いている時間 / （動いている時間+止まっている時間）</span></code><br />
つまり、<br />
<code><span class="bold">動いている時間 / すべての時間</span></code></p>
<p>だから当たり前だ」ということも、合わせて覚えてください。</p>
<p>&nbsp;</p>
<p>それでは、問題を解いてみましょう。</p>
<p>MTBF すなわち 動いている時間が 45 時間で、MTTR すなわち 止まっている時間が 5 時間ですから、この装置の稼働率は、</p>
<pre>動いている時間 / すべての時間 = 45 /（ 45 + 5 ）= 0.9</pre>
<p>です。</p>
<p>この装置を 2 つを直列にしたシステムなのですから、両方が動作していなければなりません。</p>
<p>システムの稼働率は、それぞれの装置の稼働率を掛け算して求められ、0.9 × 0.9 = 0.81 です。</p>
<p>正解は、アです。</p>
<p><span class="chip mag_h30">解答</span>　ア</p>
<p>いかがですか。 用語の意味も、計算方法も、丸暗記ではなく、このようにきちんと覚えてください、そうすれば、問題をスラスラ解けます。</p>
<p class="grey-text mag_tp30"><i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w05">タグで関連記事をチェック</span><a href="../../tag/稼働率/" class="tag">稼働率</a><a href="../../tag/mtbt-mttr/" class="tag">MTBF MTTR</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_two</i></span>この問題で、スタックの特徴だけでなく用途を知るべし</h2>
<div class="card-panel mag_h50">
問 5　(平成 29 年度　秋期)</p>
<p>A , B , C , D の順に到着するデータに対して、一つのスタックだけを用いて出力可能なデータ列はどれか。</p>
<p>ア　A , D , B , C　　<br class="hide-on-med-and-up">イ　B , D , A , C<br />
ゥ　C , B , D , A　　<br class="hide-on-med-and-up">エ　D , C , A , B
</div>
<div class="chip">解説</div>
<p>データ構造の一種であるスタック（ stack ）は、直訳すると「干し草を積んだ山」という意味です。</p>
<p>この言葉が示す通り、スタックには、積み上げるようにデータを格納します。 そのため、最後に格納したデータが、最初に取り出されます。 これを LIFO（ Last In First Out ）形式と呼びます。</p>
<p>と、ここまでは、皆さんよくご存じでしょう。</p>
<p>ただし、最も大事な知識が抜けています。 <span class="bold">それは、スタックの用途</span>です。</p>
<p>データを積み上げるように格納することは、スタックの特徴です。 それによって、<span class="bold">データの順序を入れ替えるのが、スタックの用途</span>です。 この用途を知らない人が、意外と多いのです。</p>
<p>&nbsp;</p>
<p>簡単な例を示すと、 A 、 B の順にスタックに格納されたデータは、 B 、 A の順に取り出されます。 A 、 B が、 B 、 A に入れ替わっています。</p>
<p>これが、順序を入れ替えるということです。</p>
<p>ただし、あらゆる順序で入れ替えられるわけではありません。</p>
<p>&nbsp;</p>
<p>この問題は、「 A 、 B 、 C 、 D の順にスタックに格納した場合、取り出せる順序は、選択肢の中の 1 つだけですよ。 それを選んでください」という問題です。</p>
<p>&nbsp;</p>
<p>選択肢を 1 つずつ吟味してみましょう。</p>
<p>ここでは、記事の向きの都合で、左から右にデータを積む絵を示します（下から上にデータを積む絵の方がわかりやすいのですが、何卒ご了承ください）。 スタックの底には、「底」という字を入れておきます。</p>
<p>まず、選択肢アの A 、 D 、 B 、 C です。 以下のように、 A 、 D まで取り出せますが、その時点でスタックの最上部にあるのは C なので、 B を取り出せません。</p>
<table class="s6 bordered centered">
<tbody>
<tr>
<td>底 A</td>
<td>A を格納する</td>
</tr>
<tr>
<td>底</td>
<td>A を取り出す</td>
</tr>
<tr>
<td>底 B</td>
<td>Bを格納する</td>
</tr>
<tr>
<td>底 BC</td>
<td>C を格納する</td>
</tr>
<tr>
<td>底 BCD</td>
<td>D を格納する</td>
</tr>
<tr>
<td>底 BC</td>
<td>D を取り出す</td>
</tr>
</tbody>
</table>
<p>次に、選択肢イの B 、 D 、 A 、 C です。 以下のように、 B 、 D まで取り出せますが、その時点でスタックの最上部にあるのは C なので、 A を取り出せません。</p>
<table class="s6 bordered centered">
<tbody>
<tr>
<td>底 A</td>
<td>A を格納する</td>
</tr>
<tr>
<td>底 AB</td>
<td>B を格納する</td>
</tr>
<tr>
<td>底 A</td>
<td>B を取り出す</td>
</tr>
<tr>
<td>底 AC</td>
<td>C を格納する</td>
</tr>
<tr>
<td>底 ACD</td>
<td>D を格納する</td>
</tr>
<tr>
<td>底 AC</td>
<td>D を取り出す</td>
</tr>
</tbody>
</table>
<p>次に、選択肢ウの C 、 B 、 D 、 A です。 以下のように、 C 、 B 、 D 、 A まですべて取り出せます。 したがって、正解は、ウです。</p>
<table class="s6 bordered centered">
<tbody>
<tr>
<td>底 A</td>
<td>A を格納する</td>
</tr>
<tr>
<td>底 AB</td>
<td>B を格納する</td>
</tr>
<tr>
<td>底 ABC</td>
<td>C を格納する</td>
</tr>
<tr>
<td>底 AB</td>
<td>C を取り出す</td>
</tr>
<tr>
<td>底 A</td>
<td>B を取り出す</td>
</tr>
<tr>
<td>底 AD</td>
<td>D を格納する</td>
</tr>
<tr>
<td>底 A</td>
<td>D を取り出す</td>
</tr>
<tr>
<td>底</td>
<td>A を取り出す</td>
</tr>
</tbody>
</table>
<p><span class="chip">解答</span>　ウ</p>
<p>&nbsp;</p>
<p>念のため、選択肢エの D、 C 、 A 、 B も確認しておきましょう。 以下のように、 D 、 C まで取り出せますが、その時点でスタックの最上部にあるのは B なので、 A を取り出せません。</p>
<table class="s6 bordered centered">
<tbody>
<tr>
<td>底 A</td>
<td>A を格納する</td>
</tr>
<tr>
<td>底 AB</td>
<td>B を格納する</td>
</tr>
<tr>
<td>底 ABC</td>
<td>C を格納する</td>
</tr>
<tr>
<td>底 ABCD</td>
<td>D を格納する</td>
</tr>
<tr>
<td>底 ABC</td>
<td>D を取り出す</td>
</tr>
<tr>
<td>底 AB</td>
<td>C を取り出す</td>
</tr>
</tbody>
</table>
<p class="grey-text mag_tp30"><i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w05">タグで関連記事をチェック</span><a href="../../tag/スタック/" class="tag">スタック</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_3</i></span>「待ち状態」と「実行待ち状態」の意味は、実にわかりにくい！</h2>
<div class="card-panel mag_h50">
問 18 (平成 29 年度　秋期)</p>
<p>優先度に基づくプリエンプティブなスケジューリングを行うリアルタイム OS で，二つのタスク A ，B をスケジューリングする。  A の方が B よりも優先度が高い場合にリアルタイム OS が行う動作のうち，適切なものはどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd>A の実行中に B に起動がかかると， A を実行可能状態にして B を実行する。 </dd>
<dt>イ</dt>
<dd>A の実行中に B に起動がかかると， A を待ち状態にして B を実行する。 </dd>
<dt>ウ</dt>
<dd>B の実行中に A に起動がかかると， B を実行可能状態にして A を実行する。 </dd>
<dt>エ</dt>
<dd>B の実行中に A に起動がかかると， B を待ち状態にして A を実行する。 </dd>
</dl>
</div>
<div class="chip">解説</div>
<p>問題文に示された「プリエンプティブ」とは、「先取権がある」という意味です。</p>
<p>ここでは、 A と B の 2 つのタスク（プログラム）があって、 A の方が B よりも優先度が高い、つまり A に先取権がある ということです。</p>
<p>したがって、 B が実行中でも、 A に起動がかかると、 B から A に実行が切り替わります。</p>
<p>&nbsp;</p>
<p>そのとき B は、どうなるのでしょう？</p>
<p>常識的に考えると「待ち状態」もしくは「実行待ち状態」になると言いたいところですが、そうではないのです！</p>
<p class="bold">はっきり言って、言葉がよろしくありません。 </p>
<p>タスクの状態には、「実行中状態」「待ち状態」「実行可能状態」があります。</p>
<p>誰が命名したのか知りませんが、これらの中で「待ち状態」「実行可能状態」という言葉が特によろしくないのです。</p>
<div class="background c-round">
「待ち状態」は、<span class="bold">実行を待っている状態ではなく、 I/O （入出力装置）の処理が終わるのを待っている状態</span>です。</p>
<p>それでは、<span class="bold">実行を待っている状態を何と呼ぶのかというと、「実行可能状態」</span>です。
</div>
<p>これは、実にわかりにくいですね。</p>
<p>&nbsp;</p>
<p>混乱してしまったかもしれませんので、整理しておきましょう。 「用語（意味）」で示します。</p>
<p>タスクの状態は、</p>
<dl class="background c-round">
<dt>実行中状態</dt>
<dd class="bold">（タスクが実行されている状態）</dd>
<dt>待ち状態</dt>
<dd class="bold">（タスクが I/O の処理が終わるのを待っている状態）</dd>
<dt>実行可能状態</dt>
<dd class="bold">（タスクが他のタスクの実行が終わるのを待っている状態）</dd>
</dl>
<p>です。</p>
<p>それでは、選択肢を見てみましょう。</p>
<p>A の方が B よりも優先度が高いのですから、選択肢ウの</p>
<blockquote>
<p class="grey-text">「 B の実行中に A に起動がかかると、 B を実行可能状態にして A を実行する」</p>
</blockquote>
<p>が適切です。</p>
<p>正解は、ウです。</p>
<p><span class="chip mag_h30">解答</span>　ウ</p>
<p>この問題から、「何てわかりにくい言葉だ！」と思いながら、「実行状態」「待ち状態」「実行可能状態」の意味を覚えてください。 そして、「他にも、こういうわかりにくい用語があるんだろうなあ」と用心してください。</p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_4</i></span>これは、用語や仕組みがわらないと計算できない問題です</h2>
<div class="card-panel mag_h50">
問 19　(平成 29 年度　秋期)</p>
<p>図のメモリマップで, セグメント 2 が解放されたとき, セグメントを移動 ( 動的再配置 ) し，分散する空き領域を集めて一つの連続領域にしたい。 1 回のメモリアクセスは 4 バイト単位で行い，読取り，書込みがそれぞれ 30 ナノ秒とすると，動的再配置をするために必要なメモリアクセス時間は合計何ミリ秒か。 ここで， 1k バイトは 1,000 バイトとし，動的再配置に要する時間以外のオーバヘッドは考慮しないものとする。</p>
<figure>
<img class="hoverable materialboxed z-depth-5" style="margin:auto" src="../../wp-content/uploads/2019/03/q19_h29a_figure.png"><br />
</figure>
<p>ア　1.5　　イ　6.0　　ウ　7.5　　エ　12.0
</p></div>
<div class="chip">解説</div>
<p>基本情報技術者試験には、様々な計算問題（ 何らかの計算を行わせる問題 ）が出題されます。 それらの問題の中には、実用的な計算もありますが、<span class="bold">ほとんど実用的でない問題もあります。</span></p>
<p>この問題は、後者です。</p>
<p><span class="bold">「用語や仕組みがわかっているなら、この計算できるよね」という趣旨の問題</span>なのです。 したがって、<span class="u">計算方法に公式などありません。 用語や仕組みから計算方法を見出す</span>のです。</p>
<p>&nbsp;</p>
<p>この問題を解くために必要とされる用語と仕組みを説明しましょう。</p>
<dl class="background c-round mag_h30">
<dt class="bold">「メモリマップ」</dt>
<dd>メモリがどのように使われているかを示す図です</dd>
<dt class="bold">「セグメント」</dt>
<dd>何らかの用途で使用している「領域」という意味です</dd>
<dt class="bold">セグメントの「解放」</dt>
<dd>そのセグメントを空き領域（未使用の領域）にすることです</dd>
<dt class="bold">「メモリアクセス」</dt>
<dd>メモリを読み書きすることです</dd>
</dl>
<p>これらの言葉の意味がわかると、問題の意味もわかるでしょう。</p>
<p>&nbsp;</p>
<p>セグメント 2 を開放すると、セグメント 1 とセグメント 3 の間に 100 k バイトの空き領域ができます。 これを、もともとある 800 k バイトの空き領域と連続した領域にせよという問題です。</p>
<p>「それなら、セグメント 3 の右端から 100 k バイトを、セグメント 2 の空き領域に移動すればいいんじゃないの？」と思うかもしれませんが、それではダメです。</p>
<p>セグメント 3 の内容の順序が変わってしまうからです。</p>
<p>データでもプログラムでも、順序が変わったら、おかしなものになってしまいます。 そういう仕組みなのです。 したがって、セグメント 3 の 800 k バイトをセグメント 1 の後ろに移動する処理が必要です。</p>
<p>「それなら、 800 k バイト × 30 ナノ秒 という計算をすればいいんじゃないの？」と思うかもしれませんが、それではダメです。</p>
<p>問題文に「 1 回のメモリアクセスが 4 バイト」と示されているので、メモリアクセスの回数は、<br />
<code>800 k バイト ÷ 4 バイト = 200 k 回</code><br />
です。</p>
<p>「それなら、200k 回 × 30 ナノ秒 という計算かな？」と思ったら、それも違います。</p>
<p>メモリのデータの移動は、「メモリのデータを CPU に読み出す」「 CPU のデータをメモリに書き込む」という処理で行われます。 そういう仕組みになっているのです。</p>
<p>読み出し回数が 200 k 回で、書き込み回数が 200 k 回なので、合計 400 k 回の読み書きになりますす。</p>
<p>&nbsp;</p>
<p>「だったら、</p>
<pre>400 k 回 × 30 ナノ秒
= 400 × 10<sup>3</sup> × 30 × 10<sup> - 9</sup>
= 12000 × 10<sup> - 6</sup>
= 12 × 10<sup> - 3</sup>
= 12 ミリ秒</pre>
<p>かな？」</p>
<p>はい、その通りです！</p>
<p>正解は、エです。</p>
<p><span class="chip mag_h30">解説</span>　エ</p>
<p class="grey-text mag_tp30"><i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w05">タグで関連記事をチェック</span><a href="../../tag/計算問題/" class="tag">計算問題</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_5</i></span>これも、用語や仕組みがわらないと計算できない問題です</h2>
<div class="card-panel mag_h50">
問 31　(平成 29 年度　秋期)</p>
<p>符号化速度が 192 k ビット/秒の音声データ 2.4 M バイトを，通信速度が 128 k ビット / 秒のネットワークを用いてダウンロードしながら途切れることなく再生するためには、再生開始前のデータのバッファリング時間として最低何秒間が必要か。</p>
<p>ア　50　　イ　100　　<br class="hide-on-med-and-up">ウ　150　　エ　250
</div>
<div class="chip">解説</div>
<p>用語や仕組みから計算方法を見出す問題は、本当によく出題されるので、もう 1 問だけ練習しておきましょう。</p>
<p>これは、ネットワークで音声をダウンロードしながら再生するためのバッファリング時間を求める問題です。 問題文の中にある「符号化速度」とは、音声をデジタルデータ化する速度です。</p>
<p>符号化速度が 192 k ビット /  秒とは、 1 秒間に 192 k ビットの音声データが生じるということです。</p>
<p>このデータが <code>2.4 M バイト = 2.4 M × 8 = 19.2 M ビット</code> あるので、再生時間は、</p>
<pre>19.2 M ÷ 192 k <br>= ( 19.2 × 10<sup>6</sup> ) ÷ ( 192 × 10<sup>3</sup> )<br>= 100 秒</pre>
<p>です。 ここまでは、OK ですか。</p>
<p>&nbsp;</p>
<p>それでは、説明を続けます。</p>
<p>符号化速度が 192 k ビット / 秒で、通信速度が 128 k ビット / 秒 ですから、通信速度の方が遅いので、このままでは再生が間に合わず、途切れてしまうことになります。 それを防ぐために、「バッファリング」つまり、あらかじめデータを読み貯めておくのです。</p>
<p>100 秒の再生時間にダウンロードできるデータ量は、</p>
<pre>通信速度 × 100 秒 <br>= 128 k ビット / 秒 × 100 秒 <br>= 12.8 M ビット</pre>
<p>です。</p>
<p>再生する音声データは、 19.2 M ビットあるので、</p>
<pre>19.2 M ビット - 12.8 M ビット = 6.4 M ビット</pre>
<p>をバッファリングしておく必要があります。 ここまでは、OK ですか。</p>
<p>&nbsp;</p>
<p>それでは、いよいよ最後の計算です。</p>
<p>通信速度が 128 k ビット / 秒 ですから、6.4 M ビットをバッファリングする時間は、</p>
<pre>6.4 M ビット ÷ 128 k ビット / 秒 <br>= 6400 ÷ 128 <br>= 50 秒</pre>
<p>です。</p>
<p>正解は、アです。 やったあ！ できたあ！</p>
<p><span class="chip mag_h30">解答</span>　ア</p>
<p class="grey-text mag_tp30"><i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w05">タグで関連記事をチェック</span><a href="../../tag/計算問題/" class="tag">計算問題</a></p>
<div class="divider mag_h50"></div>
<p>記事をお読みいただきありがとうございます。</p>
<p>もしも、一度解いただけでは、よくわからない問題があったなら、わかるまで何度でも練習してください。 <span class="bold">「やるべき問題」は、「わかるまでやるべき問題」</span>だからです。</p>
<p>この厳選問題大全集が、受験者の皆様のお役に立てば幸いです。</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h29_autumn/">「厳選5題」過去問と解説 | 平成29年度 秋期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
