<?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/%E6%93%AC%E4%BC%BC%E8%A8%80%E8%AA%9E/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Wed, 20 May 2026 00:42:42 +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>科目 B 試験 アルゴリズムとプログラミング 対策はプログラミングを経験すること｜科目 A 試験・科目 B 試験サンプル問題セットからわかる傾向と対策 (2)</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/guide/analytics_sample_exam/exam_b_programming/</link>
		<pubDate>Wed, 04 Jan 2023 23:25:12 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[出題傾向]]></category>
		<category><![CDATA[勉強方法]]></category>
		<category><![CDATA[擬似言語]]></category>
		<category><![CDATA[新試験情報]]></category>
		<category><![CDATA[科目 B]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=guide&#038;p=7556</guid>
		<description><![CDATA[<p>2022 年 12 月 26 日に情報処理推進機構から新制度の基本情報技術者試験のサンプル問題セット（科目 A 試験と科目 B 試験それぞれ 1 回分のサンプル問題）が公開されました。 受験を予定されている人は、大いに興 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/guide/analytics_sample_exam/exam_b_programming/">科目 B 試験 アルゴリズムとプログラミング 対策はプログラミングを経験すること｜科目 A 試験・科目 B 試験サンプル問題セットからわかる傾向と対策 (2)</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>2022 年 12 月 26 日に情報処理推進機構から新制度の基本情報技術者試験のサンプル問題セット（科目 A 試験と科目 B 試験それぞれ 1 回分のサンプル問題）が公開されました。 受験を予定されている人は、大いに興味があるでしょう。</p>
<p>そこで、</p>
<ol class="background c-round">
<li><a href="../">科目 A 試験</a></li>
<li>科目 B 試験 アルゴリズムとプログラミング</li>
<li><a href="./exam_b_sec">科目 B 試験 情報セキュリティ</a></li>
</ol>
<p>の 3 回に分けて、サンプル問題セットの内容から、新制度の試験の出題傾向と対策を解説します。 今回は、「科目 B 試験 アルゴリズムとプログラミング」を取り上げます。</p>
<style>h3 .chip{background:#2196f3;vertical-align:middle;margin-bottom:.5em;color:white;}table{font-size:.85em;}.card-panel{box-shadow:0 4px 16px rgba(0,0,0,0.02),0 20px 46px rgba(0,0,0,0.08);}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:#263238;color:#eceff1;font-size:1em;line-height:1.8;}code{padding:.125em .25em;}.card-panel>pre{margin:1em -24px;padding:1em 24px;border-radius:unset;}dd>pre{padding:.5em 1em;}dl:not(.inline)>dd{margin-left:1em;}</style>
<h2>科目 B 試験 アルゴリズムとプログラミング サンプル問題セットの分析</h2>
<h3><span class="chip">出題傾向 1</span>科目 B 試験 アルゴリズムとプログラミング 全 16 問の構成</h3>
<p>まず、出題傾向です。 以下は、サンプル問題セットの科目 B 試験アルゴリズムとプログラミング全 16 問の構成を示したものです。</p>
<dl class="background c-round small-text blue-grey-text responsive-width">
<dt>問</dt>
<dd>問題の番号です。</dd>
<dt>テーマ</dt>
<dd>筆者が独自に付けたものです。</dd>
<dt>カテゴリ</dt>
<dd>情報処理推進機構が公開している資料に示されたカテゴリです。</dd>
<dt>難易度</dt>
<dd>筆者の講師経験から、受験者の正解率が 25 % 程度を「難」、 50 % 程度を「中」、 90 % 程度を「易」で示しています。</dd>
</dl>
<table class="striped responsive-width">
<caption>サンプル問題セットの科目 B 試験 アルゴリズムとプログラミング 全 16 問の構成</caption>
<thead>
<tr>
<td>問</td>
<td>テーマ</td>
<td>カテゴリ</td>
<td>難易度</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>変数に代入を行うプログラム</td>
<td>プログラムの基本要素</td>
<td>易</td>
</tr>
<tr>
<td>2</td>
<td>fizzBuzz の答えを返す関数</td>
<td>プログラムの基本要素</td>
<td>中</td>
</tr>
<tr>
<td>3</td>
<td>配列を処理する関数</td>
<td>プログラムの基本要素</td>
<td>中</td>
</tr>
<tr>
<td>4</td>
<td>最大公約数を求める関数</td>
<td>プログラムの基本要素</td>
<td>中</td>
</tr>
<tr>
<td>5</td>
<td>x<sup>2</sup> + y<sup>2</sup> の平方根を返す関数</td>
<td>プログラムの基本要素</td>
<td>易</td>
</tr>
<tr>
<td>6</td>
<td>ビットの並びを逆にした値を返す関数</td>
<td>プログラムの基本要素</td>
<td>難</td>
</tr>
<tr>
<td>7</td>
<td>階乗を求める関数</td>
<td>データ構造及びアルゴリズム</td>
<td>易</td>
</tr>
<tr>
<td>8</td>
<td>優先度付きキューを操作する手続</td>
<td>データ構造及びアルゴリズム</td>
<td>中</td>
</tr>
<tr>
<td>9</td>
<td>二分木の全ての節番号を出力する</td>
<td>データ構造及びアルゴリズム</td>
<td>難</td>
</tr>
<tr>
<td>10</td>
<td>単方向リストから要素を削除する手続</td>
<td>データ構造及びアルゴリズム</td>
<td>中</td>
</tr>
<tr>
<td>11</td>
<td>配列を昇順にソートする関数</td>
<td>データ構造及びアルゴリズム</td>
<td>中</td>
</tr>
<tr>
<td>12</td>
<td>配列の並びの類似度を返す関数</td>
<td>プログラミングの諸分野への適用</td>
<td>中</td>
</tr>
<tr>
<td>13</td>
<td>不具合があり無限ループになる関数</td>
<td>プログラミングの諸分野への適用</td>
<td>中</td>
</tr>
<tr>
<td>14</td>
<td>配列を特徴づける五つの値を返す関数</td>
<td>プログラミングの諸分野への適用</td>
<td>中</td>
</tr>
<tr>
<td>15</td>
<td>三目並べの手を決定する評価値を得る手順</td>
<td>プログラミングの諸分野への適用</td>
<td>難</td>
</tr>
<tr>
<td>16</td>
<td>Unicode の符号位置を UTF-8 の符号に変換する関数</td>
<td>プログラミングの諸分野への適用</td>
<td>難</td>
</tr>
</tbody>
</table>
<h3><span class="chip">出題傾向 2</span>難易度（かなりの難関である）</h3>
<p>難易度を集計すると、</p>
<p>難 = 4 問<br />
中 = 9 問<br />
易 = 3 問</p>
<p>なので、</p>
<div class="background c-round">
科目 B 試験 アルゴリズムとプログラミングの正解率の期待値 =<br />
(4 × 0.25 + 9 × 0.50 + 3 × 0.9) ÷ 16<br />
= <span class="bold">51 %</span>
</div>
<p>です。 60 % の正解が合格の基準なので、<span class="bold u">かなりの難関</span>であるといえます。 <span class="u">旧制度のアルゴリズムの問題と比べて、見た目は短くて簡単そうですが、決して甘く考えてはいけません</span>。</p>
<h3><span class="chip">出題傾向 3</span>問題によって難易度に大きな差がある</h3>
<p>問題によって難易度に大きな差があります。 以下に、問題の例を示します。 難易度に「易」を付けた問 1 、および「難」を付けた問 6 です。</p>
<p>どちらもカテゴリは「プログラムの基本要素」ですが、問 1 が「変数」や「代入」という基礎的な知識だけで解けるのに対し、問 6 は「マスク演算」や「シフト演算」といった高度な知識が要求されます。 ここでは、問題を解く必要はありません。 問題の雰囲気だけをつかんでください。</p>
<figure>
<div class="card-panel">
<p class="grey-text small-text">アルゴリズムとプログラミングの問題の例 1 <span class="chip">難易度「易」</span></p>
<p class="bold">問 1</p>
<p>次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p class="mag_lt10">プログラムを実行すると， &#8220;<span class="blank"></span>&#8221; と出力される。</p>
<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>整数型: x ← 1
整数型: y ← 2
整数型: z ← 3
x ← y
y ← z
z ← x
y の値 と z の値 をこの順にコンマ区切りで出力する</pre>
<p>解答群<br />
ア　1, 2　　イ　1, 3<br />
ウ　2, 1　　エ　2, 3<br />
オ　3, 1　　カ　3, 2
</p></div><figcaption><span class="chip small-text mag_rt05">出典</span><a href="https://www.ipa.go.jp/news/2022/shiken/gmcbt80000007cfs-att/fe_kamoku_b_set_sample_qs.pdf" rel="noopener" target="_blank">基本情報技術者試験（科目 B 試験）サンプル問題セット</a></figcaption></figure>
<figure>
<div class="card-panel">
<p class="grey-text small-text">アルゴリズムとプログラミングの問題の例 2 <span class="chip">難易度「難」</span></p>
<p class="bold">問 6</p>
<p>次のプログラム中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p class="mag_lt10">　関数 rev は 8 ビット型の引数 byte を受け取り，ビットの並びを逆にした値を返す。<br />
例えば，関数 rev を rev(01001011) として呼び出すと，戻り値は 11010010 となる。</p>
<p class="mag_lt10">　なお，演算子 <code>∧</code> はビット単位の論理積，演算子 <code>∨</code> はビット単位の論理和，演算子 <code>>></code> は論理右シフト，演算子 <code>&lt;&lt;</code> は論理左シフトを表す。 例えば， <code>value >> n</code> は value の値を n ビットだけ右に論理シフトし， <code>value &lt;&lt; n</code> は value の値を n ビットだけ左に論理シフトする。</p>
<p>〔プログラム〕</p>
<pre>○8 ビット型: rev(8 ビット型: byte)
 8 ビット型: rbyte ← byte
 8 ビット型: r ← 00000000
 整数型: i
 for (i を 1 から 8 まで 1 ずつ増やす)
   <span class="blank"></span>
 endfor
 return r</pre>
<p>解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>
<pre>r ← (r &lt;&lt; 1) ∨ (rbyte ∧ 00000001)
rbyte ← rbyte >> 1</pre>
</dd>
<dt>イ</dt>
<dd>
<pre>r ← (r &lt;&lt; 7) ∨ (rbyte ∧ 00000001)
rbyte ← rbyte >> 7</pre>
</dd>
<dt>ウ</dt>
<dd>
<pre>r ← (rbyte &lt;&lt; 1) ∨ (rbyte >> 7)
rbyte ← r</pre>
</dd>
<dt>エ</dt>
<dd>
<pre>r ← (rbyte >> 1) ∨ (rbyte &lt;&lt; 7)
rbyte ← r</pre>
</dd>
</dl>
</div><figcaption><span class="chip small-text mag_rt05">出典</span><a href="https://www.ipa.go.jp/news/2022/shiken/gmcbt80000007cfs-att/fe_kamoku_b_set_sample_qs.pdf" rel="noopener" target="_blank">基本情報技術者試験（科目 B 試験）サンプル問題セット</a></figcaption></figure>
<p class="grey-text">（問 1 の正解は選択肢カ、問 6 の正解は選択肢アです）</p>
<h3><span class="chip">出題傾向 4</span>問題を解くために必要とされる知識</h3>
<p>科目 B 試験のアルゴリズムとプログラミングの問題は、旧制度の午後試験ほど長い問題ではないので、長文読解力は要求されません。 ただし、<span class="u"><span class="bold">ちゃんとプログラミングの知識があることが要求されます</span>。 この知識は、プログラミングを経験しないと得られない知識です</span>。</p>
<p>サンプル問題セットの 16 問を解くには、以下の知識が必要となります。</p>
<figure><figcaption>サンプル問題セットの 16 問を解くために必要とされる知識</figcaption><table class="responsive-width striped">
<thead>
<tr>
<th>問</th>
<th>テーマ</th>
<th>必要とされる知識</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>変数に代入を行うプログラム</td>
<td>変数、代入</td>
</tr>
<tr>
<td>2</td>
<td>fizzBuzz の答えを返す関数</td>
<td>関数の定義、引数、戻り値、if 文</td>
</tr>
<tr>
<td>3</td>
<td>配列を処理する関数</td>
<td>配列の定義、要素、 for 文、算術演算子</td>
</tr>
<tr>
<td>4</td>
<td>最大公約数を求める関数</td>
<td>if 文、ユークリッドの互除法</td>
</tr>
<tr>
<td>5</td>
<td>x<sup>2</sup> + y<sup>2</sup> の平方根を返す関数</td>
<td>既存の関数の利用</td>
</tr>
<tr>
<td>6</td>
<td>ビットの並びを逆にした値を返す関数</td>
<td>2 進数、マスク演算、シフト演算</td>
</tr>
<tr>
<td>7</td>
<td>階乗を求める関数</td>
<td>再帰呼び出し</td>
</tr>
<tr>
<td>8</td>
<td>優先度付きキューを操作する手続</td>
<td>キュー、既存のクラスの利用、コンストラクタ、メソッド、手続の定義</td>
</tr>
<tr>
<td>9</td>
<td>二分木の全ての節番号を出力する手続</td>
<td>二分木、根、節、 2 次元配列、再帰呼び出し</td>
</tr>
<tr>
<td>10</td>
<td>単方向リストから要素を削除する手続</td>
<td>単方向リスト、既存のクラスの利用、参照（ポインタ）</td>
</tr>
<tr>
<td>11</td>
<td>配列を昇順にソートする関数</td>
<td>ビンソート（バケツソート）、未定義の値</td>
</tr>
<tr>
<td>12</td>
<td>2 つの文字列の類似度を返す関数</td>
<td>文字列の処理</td>
</tr>
<tr>
<td>13</td>
<td>不具合があり無限ループになる関数</td>
<td>while 文、二分探索、無限ループ</td>
</tr>
<tr>
<td>14</td>
<td>配列を特徴づける五つの値を返す関数</td>
<td>プログラムの機能を読み取る</td>
</tr>
<tr>
<td>15</td>
<td>三目並べの手を決定する評価値を得る手順</td>
<td>問題に示された手順を読み取る</td>
</tr>
<tr>
<td>16</td>
<td>Unicode の符号位置を UTF-8 の符号に変換する関数</td>
<td>2 進数、 16 進数、手順とプログラムを対応付ける</td>
</tr>
</tbody>
</table>
<div class="flex grey lighten-5 pad_10 mag_20">
<p class="grey-text small-text mag_rt10"><i class="material-icons">info</i></p>
<p class="grey-text small-text">「必要とされる知識」には、主な知識だけを示してあり、変数や代入のように、多くのプログラムに共通する知識は示していません。<br />
問 15 では、擬似言語のプログラムは示されておらず、プログラムの手順だけが示されています。</p>
</div>
</figure>
<h2>科目 B 試験 アルゴリズムとプログラミング 対策（勉強方法）</h2>
<p>ここからは、アルゴリズムとプログラミングの出題傾向を踏まえて、試験対策の解説をさせていただきます。</p>
<h3><span class="chip">試験対策 1</span>試験要綱に示された科目 B 試験の出題範囲を知っておこう</h3>
<p>2023 年 4 月の試験から、試験要綱 Ver.5.0 が適用されます。</p>
<blockquote><p><a href="https://www.ipa.go.jp/shiken/syllabus/gmcbt80000007c4c-att/youkou_ver5_0.pdf" rel="noopener" target="_blank">情報処理技術者試験試験要綱 Ver.5.0</a></p></blockquote>
<p>この試験要綱の中に、基本情報技術者試験の科目 B 試験の出題範囲（上記 PDF 39 ページより）が示されているので、自分に欠けている知識がないかを確認しておきましょう。</p>
<p>以下は、科目 B 試験のアルゴリズムとプログラミングの出題範囲です。もしも、この中に知らない概念や用語があれば、書籍や Web で調べて知識を補充してください。 試験問題のほとんどは、擬似言語で記述されたプログラムで出題されるので、<span class="u">具体的なプログラムの例を作って学習</span>してください。</p>
<div class="card-panel responsive-width">
<ol class="blue-grey-text text-darken-1">
<li>プログラミング全般に関すること<br />
実装するプログラムの要求仕様（入出力，処理，データ構造，アルゴリズムほか）の把握，使用するプログラム言語の仕様に基づくプログラムの実装，既存のプログラムの解読及び変更，処理の流れや変数の変化の想定，プログラムのテスト，処理の誤りの特定（デバッグ）及び修正方法の検討 など</p>
<p class="small-text grey-text"><span class="chip">注記</span> プログラム言語について，基本情報技術者試験では擬似言語を扱う。</p>
</li>
<li>プログラムの処理の基本要素に関すること<br />
型，変数，配列，代入，算術演算，比較演算，論理演算，選択処理，繰返し処理，手続・関数の呼出し など
</li>
<li>データ構造及びアルゴリズムに関すること<br />
再帰，スタック，キュー，木構造，グラフ，連結リスト，整列，文字列処理 など
</li>
<li>プログラミングの諸分野への適用に関すること<br />
数理・データサイエンス・ AI などの分野を題材としたプログラム など
</li>
</ol>
<p class="grey-text small-text center"><span class="chip mag_rt05">出典</span><a href="https://www.ipa.go.jp/shiken/syllabus/gmcbt80000007c4c-att/youkou_ver5_0.pdf#page=39" rel="noopener" target="_blank">情報処理技術者試験試験要綱 Ver.5.0</a></p>
</div>
<div class="divider mag_tp40 mag_bt10"></div>
<p class="grey-text small-text"><i class="material-icons mag_rt05">info_outline</i>試験範囲のアルゴリズムとデータ構造を解説する連載</p>
<p><a href="../../../similar_programming/"></p>
<div class="row valign-wrapper pad_w20">
<div class="col s3 m2 flex pad_00"><img src="../../../wp-content/uploads/2023/01/cover_similar_programming-300x169.jpg" width="300" height="169" alt=" " loading="lazy"></div>
<div class="col s9 m10 pad_10 blue-grey-text bold">新しい擬似言語で学ぶ<br />科目 B アルゴリズムとプログラミング入門</div>
</div>
<p></a></p>
<div class="divider mag_tp10 mag_bt60"></div>
<h3><span class="chip">試験対策 2</span>プログラミングを経験する</h3>
<p>旧制度ほど長い問題ではないので、長文読解力は要求されません。ただし、<span class="u">何らかのプログラミング言語の経験があり、基本的なプログラミング技法、アルゴリズム、データ構造を知っていないと解けない内容の問題</span>になっています。</p>
<p>さらに、旧制度の擬似言語にはなかったクラスの利用に関する問題があることにも注意が必要です。　クラスを定義する問題は出ていませんが（擬似言語の記述形式にも、クラスの定義に関するものはありません）、<span class="u">クラスを利用する知識（メンバ変数、メソッド、コンストラクタ、など）は必要</span>です。</p>
<p>クラスやオブジェクトを利用できるプログラミング言語（ C++, Java, C#, Python, Visual Basic など）で、プログラミングを経験しておく必要があります。</p>
<div class="divider mag_tp40 mag_bt10"></div>
<p class="grey-text small-text"><i class="material-icons mag_rt05">info_outline</i>インストールなしでプログラミングを体験する記事</p>
<p><a href="../../../similar_programming/about_programming_algorithm/"></p>
<div class="row valign-wrapper pad_w20">
<div class="col s3 m2 flex pad_00"><img src="../../../wp-content/uploads/2023/01/about_programming_algorithm_cover-300x169.jpg" width="300" height="169" alt=" " loading="lazy"></div>
<div class="col s9 m10 pad_10 blue-grey-text bold">アルゴリズムとプログラミングとは？</div>
</div>
<p></a></p>
<div class="divider mag_tp10 mag_bt60"></div>
<h3><span class="chip">試験対策 2</span>テキパキと問題を解く習慣を付けておく</h3>
<p>新制度の科目 B 試験では、 20 問を 100 分で解くので、解答時間の目安は 1 問あたり 5 分です（難易度に差があるのであくまでも目安です）。 旧制度と比べると長い問題ではなくなりましたが、 1 問が 5 分ですから、かなり忙しくなるはずです。 学習の段階から、テキパキと問題を解く習慣を付けておくことをお勧めします。</p>
<p>アルゴリズムとプログラミングの分野が苦手な受験者は、<span class="u">比較的時間がかからないと思われる情報セキュリティの分野を先に解くとよい</span>でしょう。</p>
<div class="divider mag_tp30 mag_bt50"></div>
<p>今回は、サンプル問題セットの「科目 B 試験 アルゴリズムとプログラミング」の内容から、新制度の試験の出題傾向と対策を解説しました。 次回は、「<a href="../exam_b_sec">科目 B 試験 情報セキュリティ</a>」を取り上げます。 </p>
<p>それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/guide/analytics_sample_exam/exam_b_programming/">科目 B 試験 アルゴリズムとプログラミング 対策はプログラミングを経験すること｜科目 A 試験・科目 B 試験サンプル問題セットからわかる傾向と対策 (2)</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報 プログラミング 言語の選択と学習方法｜午後問題の歩き方</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/gogo_arukikata/choice_of_programming_languages/</link>
		<pubDate>Mon, 22 Mar 2021 04:27:00 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[CASL II]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[午後プログラミング言語問題]]></category>
		<category><![CDATA[擬似言語]]></category>
		<category><![CDATA[表計算]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=gogo_arukikata&#038;p=5234</guid>
		<description><![CDATA[<p>info アルゴリズムとプログラミング問題の対策には、新しい擬似言語にリライトした連載「アルゴリズムとプログラミング問題を解くコツ」がオススメです。 プログラミング言語の特徴と選び方 基本情報技術者試験の午後試験では、「 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/gogo_arukikata/choice_of_programming_languages/">基本情報 プログラミング 言語の選択と学習方法｜午後問題の歩き方</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 flex">
<p class="mag_rt10 mag_h00"><i class="material-icons blue-text" style="font-size:2.2em">info</i></p>
<p class="blue-grey-text mag_h00">アルゴリズムとプログラミング問題の対策には、新しい擬似言語にリライトした連載<a href="../../patterns_algorithms/" class="bold">「アルゴリズムとプログラミング問題を解くコツ」</a>がオススメです。</p>
</div>
<h2>プログラミング言語の特徴と選び方</h2>
<p>基本情報技術者試験の午後試験では、「 C 言語」「 Java 」「 Python 」「アセンブラ ( CASLⅡ ) 」「表計算」の中から、 1 つを選択しなければなりません。プログラミングの経験がない人は、「どれを選んで、どのように学習すればよいのだろう？」と悩んでしまうでしょう。</p>
<p>そこで、この記事では、それぞれのプログラミング言語の特徴を説明し、それぞれの学習方法をアドバイスします。</p>
<p>&nbsp;</p>
<p>はじめに、それぞれの言語の特徴を説明しましょう。</p>
<p>「何か 1 つプログラミング言語をマスターしたい」と思っている人は、それぞれの特徴から、自分の好みに合った言語を選んでください。<span class="u">「やってみたい！」と思った言語を選ぶことが重要</span>です。興味がない言語を嫌々学習したのでは、決してマスターできないからです。</p>
<style>table{font-size:.85em;}pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;background:#292a33;color:#eceff1;font-size:1em;margin:1em -7.5%;padding:1em 7.5%}th{text-align:center;}@media screen and (min-width:601px){.responsive-width{width:70%}}</style>
<h3>C言語 の特徴</h3>
<p>C 言語は、 IT 業界の第一プログラミング言語と呼べるものです。英語が世界の共通語であるように、 <span class="bold">C 言語は、 IT 業界の共通語である</span>と言えます。</p>
<p>図 1 は、プログラミング言語の人気ランキングを示した <a href="https://www.tiobe.com/tiobe-index/" rel="noopener" target="_blank">TIOBE Index</a> の 2021 年 3 月のランキングを Top 10 まで示したものです。 1 年前の 3 月に 1 位だった Java を抜いて、 C 言語が 1 位になっていることがわかります。</p>
<p class="background c-round blue-grey-text mag_h30 small-text blue-grey-text hide-on-med-and-up"><i class="material-icons light-blue-text mag_rt05">info</i>表は右にスクロールできます</p>
<div class="table-container">
<table class="striped centered responsive-width" style="font-family: Consolas, 'Courier New';">
<caption>図 1　2021 年 3 月のプログラミング言語の人気ランキング（ TIOBE Index より）</caption>
<thead>
<tr>
<th>Mar-21</th>
<th>Mar-20</th>
<th>Change</th>
<th>Programming<br />Language</th>
<th>Ratings</th>
<th>Change</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td><i class="material-icons blue-text">call_made</i></td>
<td>C</td>
<td>15.33%</td>
<td>-1.00%</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td><i class="material-icons red-text">call_received</i></td>
<td>Java</td>
<td>10.45%</td>
<td>-7.33%</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td></td>
<td>Python</td>
<td>10.31%</td>
<td>0.20%</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
<td></td>
<td>C++</td>
<td>6.52%</td>
<td>-0.27%</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
<td></td>
<td>C#</td>
<td>4.97%</td>
<td>-0.35%</td>
</tr>
<tr>
<td>6</td>
<td>6</td>
<td></td>
<td>Visual Basic</td>
<td>4.85%</td>
<td>-0.40%</td>
</tr>
<tr>
<td>7</td>
<td>7</td>
<td></td>
<td>JavaScript</td>
<td>2.11%</td>
<td>0.06%</td>
</tr>
<tr>
<td>8</td>
<td>8</td>
<td></td>
<td>PHP</td>
<td>2.07%</td>
<td>0.05%</td>
</tr>
<tr>
<td>9</td>
<td>12</td>
<td><i class="material-icons blue-text">call_made</i></td>
<td>Assembly language</td>
<td>1.97%</td>
<td>0.72%</td>
</tr>
<tr>
<td>10</td>
<td>9</td>
<td><i class="material-icons red-text">call_received</i></td>
<td>SQL</td>
<td>1.87%</td>
<td>0.03%</td>
</tr>
</tbody>
</table>
</div>
<h3>Java の特徴</h3>
<p>Java は、私が知る限り、現在、最もニーズが高い言語です。</p>
<p><span class="u">ほとんどの IT 企業が、新人研修で Java を取り上げています。それは、配属後の開発の現場で Java が使われることが多いから</span>です。先ほどの TIOBE Index でも、 Java が第 2 位になっています。</p>
<p>実は、ここ数年、ずっと Java が 1 位だったのですが、最近になって人気に陰りが見えてきました。そのため、第一プログラミング言語である C 言語に 1 位の座を受け渡してしまったのです。</p>
<h3>Python の特徴</h3>
<p><span class="u">Python は、現在、最も注目が高まっている言語</span>です。</p>
<p>図 2 は、プログラマ向けの雑誌「日経ソフトウエア」 2021 年 3 月号の表紙です。これを見ると、特集記事も、連載記事も、付録の冊子も、ほとんどが Python 関連になっていることがわかるでしょう。それだけ Python が注目されているからです。</p>
<p>先ほどの TIOBE Index でも、 Python が第 3 位になっています。第 2 位の Java との差は、ほんのわずかです。 Python の台頭によって、 Java の人気に陰りが生じたのです。</p>
<figure><figcaption>図 2　プログラマ向け雑誌「日経ソフトウエア」の表紙</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/03/cover_nikkei_software.png" width="451" height="641" loading="lazy"><br />
</figure>
<h3>アセンブラ ( CASLⅡ [CASL2] ) の特徴</h3>
<p>アセンブラは、コンピュータのハードウエアを直接操作する命令を記述する言語です。</p>
<p>基本情報技術者試験のアセンブラは、 COMETⅡ （コメット・ツー）という架空のコンピュータを対象とした CASLⅡ （キャッスル・ツー）という架空のアセンブラです。したがって、開発の現場で CASLⅡ を使うことはありませんが、<span class="u">ハードウエアの仕組みとプログラムを関連付ける、という学習効果は、大いにあります。</span></p>
<h3>表計算の特徴</h3>
<p>表計算は、プログラミング言語ではありませんが、プログラミング言語の選択肢の 1 つになっています。</p>
<p>基本情報技術者試験の表計算は、 Microsoft Excel ではなく、独自仕様のものです。ただし、セルに数式や関数を入れてワークシートを作成することは、 Microsoft Excel と同様です。 <span class="u">Microsoft Excel を使ったことがあるなら、短時間でマスターできるでしょう。</span></p>
<h3>選択のポイント</h3>
<p>それぞれのプログラミング言語の特徴から、言語を選ぶポイントをまとめると、以下のようになります。</p>
<ul class="background c-round">
<li>IT業界の第一プログラミング言語を学んでおきたいなら <span class="bold">C 言語</span> です！</li>
<li>すぐに開発の現場で使える言語をマスターしたいなら <span class="bold">Java</span> です！</li>
<li>近い将来、開発の現場でニーズが高まる言語をマスターしたいなら <span class="bold">Python</span> です！</li>
<li>ハードウエアの仕組みとプログラムを関連付けて学習したいなら <span class="bold">アセンブラ</span> です！</li>
<li>試験までの学習時間がないなら <span class="bold">表計算</span> です！</li>
</ul>
<h2>プログラミング言語の学習方法</h2>
<p>次に、それぞれの言語の学習方法をアドバイスしましょう。</p>
<p>ここでは、<span class="bold">試験問題のプログラムを読めるレベルになるには、どのように学習すればよいかを示します。</span> ただし、プログラムを読めるだけでは、試験問題を解くことはできません。試験問題のテーマは、言語で示されたアルゴリズムを読み取ることだからです。 <span class="u">言語とアルゴリズムの学習を、並行して行ってください。</span></p>
<h3>C 言語 / Java / Python の学習方法</h3>
<p>C 言語、Java、Python の学習方法は、どれも同じです。それぞれの言語構文を解説した書籍を購入して、そこに示されたサンプルプログラムを作ってください。</p>
<div class="background c-round">
プログラミング言語は、暗記して覚えるものではありません。自分の手でプログラムを作って、自分の目で動作を確認して、体得するものです。</p>
<p>プログラムを作るには、専用のツールが必要です。ほとんどのツールは、インターネットから無償で入手できます。ツールの入手方法とインストール方法が示された書籍を選ぶとよいでしょう。
</p></div>
<p><span class="bold">基本構文だけがわかれば OK</span> なので、「はじめての〇〇」や「〇〇入門」のようなタイトルの書籍がよいでしょう。</p>
<div class="grey lighten-5 mag_h30 pad_20 c-round">
<i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/java/" class="tag mag_rt05">Java</a><a href="../../tag/python/" class="tag">Python</a>
</div>
<h3>アセンブラ CASLⅡ [ CASL2 ] の学習方法</h3>
<p>アセンブラの学習も書籍で行いますが、実在するコンピュータのアセンブラではなく、<span class="u">基本情報技術者試験の架空のアセンブラである CASLⅡ の書籍を購入することに注意</span> してください。</p>
<p>CASLⅡのプログラムを作って動作を確認するときは、CASLⅡシミュレータを利用できます。インターネットから無償で入手できる CASLⅡ シミュレータがいくつかあります。図3は、<a href="https://www.chiba-fjb.ac.jp/fjb_labo/casl/index.html" rel="noopener" target="_blank">船橋情報ビジネス専門学校が公開している CASLⅡ シミュレータ</a>です。プログラムによって、 CPU とメモリの内部がどのように変化するかを、ビジュアルに確認できます。</p>
<figure><figcaption>図 3　CASLⅡ シミュレータの例</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/03/casl2_simulator.png" width="781" height="447" loading="lazy"><br />
</figure>
<div class="grey lighten-5 mag_h30 pad_20 c-round">
<i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/casl-ii/" class="tag">CASLⅡ</a>
</div>
<h3>表計算の学習方法</h3>
<p>表計算の学習も書籍で行いますが、 <span class="u">Microsoft Excel ではなく、基本情報技術者試験の表計算の書籍を購入することに注意</span>してください。私の知る限りでは、基本情報技術者試験の表計算のシミュレータはないので、ワークシートやマクロを動作させることはできません。</p>
<div class="grey lighten-5 mag_h30 pad_20 c-round">
<i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/表計算/" class="tag">表計算</a>
</div>
<p>&nbsp;</p>
<p>どの言語の学習も、書籍を購入して行うことになります。</p>
<p>実際に書店に行って、自分に合った書籍を探してください。書籍を最初から最後までを 1 回学習しただけでは、マスターできなくても当然です。少なくとも、同じ書籍で 3 回は学習してください。そうすれば、きっとマスターできます。</p>
<h2>擬似言語のことを考慮すると C 言語 か 表計算 がおススメかも</h2>
<p>基本情報技術者試験の午後試験には、 C 言語 、 Java 、 Python 、アセンブラ ( CASLⅡ )、表計算の他に、共通に使用される <span class="bold">擬似言語</span> というものがあります。</p>
<p>この擬似言語は、午後の選択必須問題である「データ構造およびアルゴリズム」で使われるので、読み方を覚えなければなりません。このことから、プログラミング言語では、表計算がおススメだといえます。なぜなら、表計算の問題の後半部は、擬似言語で記述されたマクロ（ワークシートを操作するプログラム）の内容を読み取るものだからです。</p>
<p>「擬似言語を覚えなければならないのだから、それを使える表計算を選ぶのが得策だ」というわけです。図 4 にマクロの例を示します。</p>
<figure><figcaption>図 4　表計算のマクロは擬似言語で記述されている（ 平成 23 年度 秋期 午後 問 13 から抜粋）</figcaption><pre>○マクロ: BonusCalc
○整数型: row, DeptPoint
■ <span class="blank">f</span>
| • DeptPoint ← 0
| ■
| | • DeptPoint ← DeptPoint + 1
| | • 相対(L1, row, 0) ← DeptPoint
| ■ <span class="blank">g</span>
| • <span class="blank">h</span>
■</pre>
</figure>
<p><span class="bold">擬似言語の構文は、 C 言語 に似ています。</span> このことから、プログラミング言語では、 C 言語もおススメだといえます。 C 言語をマスターすれば、擬似言語も容易に理解できるからです。</p>
<p>図 5 に擬似言語と C 言語の構文を対応付けた例を示します。</p>
<figure><figcaption>図 5　擬似言語と C 言語 の構文を対応付けた例</figcaption><div class="row">
<div class="col s6">
<figure><figcaption>擬似言語の構文</figcaption><pre>
<code class="language-none">
▲ 条件式
| 　処理 1
+---
| 　処理 2
▼
</code>
</pre>
</figure>
</div>
<div class="col s6">
<figure><figcaption>C 言語の構文</figcaption><pre>
<code class="language-clike">
if 条件式 {
    処理 1;
} else {
    処理 2;
}
</code>
</pre>
</figcaption></div>
</div>
<div class="row">
<div class="col s6">
<pre>
<code class="language-none">
■ 条件式
| 　処理
■
</code>
</pre>
</div>
<div class="col s6">
<pre>
<code class="language-clike">
while (条件式) {
    処理;
}
</code>
</pre>
</div>
</div>
</figure>
<p>「擬似言語の構文で、黒い三角は C 言語の if 文であり、黒い四角は C 言語の while 文だ」とわかれば、すぐに理解できるでしょう。</p>
<p>Java と Python には、オブジェクトを定義するクラスという構文があります。擬似言語では、クラスが使われません。 C 言語でも、クラスが使われません。この点でも、擬似言語と C 言語は、よく似ています。</p>
<div class="grey lighten-5 mag_h30 pad_20 c-round">
<i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/擬似言語/" class="tag">擬似言語</a>
</div>
<div class="divider mag_h40"></div>
<p>以上で、私のお話は、おしまいです。基本情報技術者試験のプログラミング言語の選択に悩んでいる方々に、少しでもお役に立ったなら幸いです。</p>
<p>それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/gogo_arukikata/choice_of_programming_languages/">基本情報 プログラミング 言語の選択と学習方法｜午後問題の歩き方</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>午後問題の歩き方 ｜ 地道にアルゴリズム問題に取り組む（1）</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/gogo_arukikata/guide_algorithm_of_questions_at_pm/</link>
		<pubDate>Tue, 31 Jul 2018 09:30:01 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[午後問題の解説]]></category>
		<category><![CDATA[擬似言語]]></category>

		<guid isPermaLink="false">http://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=gogo_arukikata&#038;p=359</guid>
		<description><![CDATA[<p>info 科目 B アルゴリズムとプログラミング問題の対策には、 初心者向けの新連載 「新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング」 新しい擬似言語にリライトした連載 「アルゴリズムとプログラミング問題 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/gogo_arukikata/guide_algorithm_of_questions_at_pm/">午後問題の歩き方 ｜ 地道にアルゴリズム問題に取り組む（1）</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 flex">
<p class="mag_rt10 mag_h00"><i class="material-icons blue-text" style="font-size:2.2em">info</i></p>
<ul class="blue-grey-text mag_h00">
    科目 B アルゴリズムとプログラミング問題の対策には、</p>
<li>初心者向けの新連載 <a href="../../similar_programming/" class="bold">「新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング」</a></li>
<li>新しい擬似言語にリライトした連載 <a href="../../patterns_algorithms/" class="bold">「アルゴリズムとプログラミング問題を解くコツ」</a></li>
<p>    がオススメです。
  </ul>
</div>
<p>基本情報技術者の午後試験の問 6 は、言わずと知れたアルゴリズム問題です。</p>
<p><span class="bold">令和 2 年度の春期から試験配点が 25 点と、さらに高くなり、この問題で得点を稼げるかどうかが、合格のカギを握っているといえるでしょう。</span></p>
<p>どのように対策したらよいのでしょうか？</p>
<p>私の講師経験からアドバイスさせていただきます。</p>
<div class="card-panel blue-grey-text z-depth-0 grey lighten-5 mag_h40">
<i class="material-icons light-blue-text">info</i> <span style="font-size: small">本記事ではわかりやすいよう、問題に背景色を入れています</span>
</div>
<style>.r-width{width:50%;margin:auto}.card.process h3{font-size:1.1em;font-weight:700;margin:1em 0}@media only screen and (max-width:600px){.r-width{width:100%}}</style>
<h2>アルゴリズム問題の克服に近道なし</h2>
<p>多くの受験者が、アルゴリズム問題を「苦手だ」といいます。多くの講師も、「苦手だ」といいます。実は、私も「苦手だ」です。</p>
<p>アルゴリズム問題が「得意だ」という人はいないのだろうか、と思っていたところ、「得意だ」「あんな簡単な問題はない」「 5 分でできる」と豪語する講師が 1 人いました。どうやら秘策があるようです。</p>
<p>&nbsp;</p>
<p>私が「どうやって問題を解くのか教えてほしい」と頼むと、彼は「お前は、おしゃべりだから教えられない」といいました。</p>
<p>彼は、私が雑誌や Web 記事などに秘策を書くと、それが試験の出題者の目に入り、その秘策が使えなくなってしまうことを心配しているのです。</p>
<p>私が「絶対に誰にも言わないから教えてくれ」と懇願すると、彼は「本当だな」と念を押してから、しぶしぶ教えてくれました。</p>
<p>ここで皆さんに、こっそりお教えしますので、誰にも言わないでください。</p>
<p>&nbsp;</p>
<p>彼の秘策は、「問題を一切見ずに、選択肢だけを見て正解を選ぶ」というものです。例として、以下をご覧ください。これは、プログラムの穴埋め問題の選択肢です。</p>
<div class="card-panel mag_h30">
ア　n　　イ　n<sup>2</sup>　　ウ　n<sup>2</sup> ＋ 1　　エ　n<sup>2</sup> － 1
</div>
<p>問題を示していませんが、どれが正解だと思いますか。</p>
<p>ただの n より、n の 2 乗の方が立派な感じがします。さらに、n の 2 乗に 1 と足したものと、n の 2 乗から 1 を引いたものが並んでいるのですから、きっとどちらかが正解でしょう。</p>
<p>このように判断してウかエを選ぶというのが、彼の秘策です。</p>
<p>&nbsp;</p>
<p>私が「選択肢を 1 つに絞れないじゃないか！」というと、彼は「 2 つに絞れれば、正答率が 50% になる。苦手なアルゴリズム問題が 50% できれば十分だろう！」と得意顔で答えました。</p>
<p>私は、彼の秘策を「聞かなければよかった」と後悔しました。こんな方法で試験に合格しても、意味がありません。合格しても、嬉しくないでしょう。</p>
<p>ITエンジニアは、きちんと知識を身に着けて、正々堂々と試験を受けてほしいと思います。アルゴリズム問題の克服に近道なしです。</p>
<h2>アルゴリズム問題の克服への地道なステップ（その 1 ）</h2>
<p>ここからは、私からのアドバイスです。</p>
<p>最終的な目標は、過去問題を練習できるレベルまで知識を身に着けることです。</p>
<p>そこにたどり着くまでに、いくつかのステップがあります。これらのステップをクリアしていない状態で過去問題にチャレンジすると、「わからない」「できない」と悩むことになります。</p>
<p>かなり時間がかかることを覚悟して、地道に取り組んでください。もう一度言いますが、<span class="bold">「アルゴリズム問題の克服に近道なし」</span>です。</p>
<p>&nbsp;</p>
<p>最初のステップとして、試験のシラバスに示されている<span class="bold">基本的なアルゴリズムとデータ構造を覚えてください。</span></p>
<div class="card mag_h30 process c-round">
<blockquote><p>
アルゴリズム問題 苦手克服への地道なステップ その 1</p>
<h3>基本的なアルゴリズムとデータ構造を覚える</h3>
</blockquote>
</div>
<p><span class="bold">覚えるとは、手作業でできるようにすることです。</span></p>
<p>たとえば、トランプのカードを配列の要素に見立てて、以下に示したソートやサーチのアルゴリズムをやってみるのです。<br />
トランプのカードを並べて、以下に示したデータ構造を作ってみるのです。</p>
<p>午後試験のアルゴリズム問題は、「これらの基本的なアルゴリズムとデータ構造を知っていますよね」という想定で出題されます。したがって、<span class="bold">知らなければ、問題を解けません。</span></p>
<ul class="background c-round mag_h30">
【アルゴリズム】</p>
<li>バブルソート（交換法）</li>
<li>選択法</li>
<li>挿入法</li>
<li>マージソート</li>
<li>クイックソート</li>
<li>線形探索法</li>
<li>二分探索法</li>
<li>ハッシュ表探索法</li>
</ul>
<ul class="background c-round mag_h30">
【データ構造】</p>
<li>配列</li>
<li>構造体の配列</li>
<li>連結リスト</li>
<li>二分探索木</li>
<li>ヒープ</li>
<li>キュー</li>
<li>スタック</li>
</ul>
<p><i class="material-icons indigo-text">label</i> 関連記事</p>
<p><a href="../trend_to_questions_at_pm/#8"></p>
<div class="card hoverable mag_h50 c-round">
<div class="row valign-wrapper direction-column-on-small">
<div class="col s12 m4 pad_00 flex">
        <img src="../../wp-content/uploads/2018/05/trend_to_questions_of_pm.jpg">
      </div>
<div class="col s12 m8 pad_20 black-text">午後問題の歩き方 | 過去問 10 回分から分析した午後問題の出題傾向 ( 2019 春期試験 更新)<br /><span class="bold">アルゴリズム及びデータ構造の出題傾向（午後問 8 ）</span></div>
</p></div>
</p></div>
<p></a></p>
<h2>アルゴリズム問題の克服への地道なステップ（その 2 ）</h2>
<p>次のステップです。</p>
<p>午後試験のアルゴリズム問題では、プログラムが擬似言語で表記されます。この擬似言語は、基本情報技術者試験独自のものなので、試験問題に仕様書が添付されています。</p>
<p>ただし、ただでさえ時間が足りない午後試験の最中に、この仕様書を見ているようでは、まったく時間が足りなくなってしまいます。</p>
<p><span class="bold">擬似言語の読み方は、事前に確実にマスターしておく必要があります。</span></p>
<div class="card mag_h30 process c-round">
<blockquote><p>
アルゴリズム問題 苦手克服への地道なステップ その 2</p>
<h3>擬似言語の読み方は、事前に確実にマスターする</h3>
</blockquote>
</div>
<p>以下に擬似言語の仕様書を示します。たかだか 1 ページ半のものなので、当然、この仕様書だけでは不十分です。試験問題のプログラムには、<span class="bold">仕様書に示されていない表現が使われる場合もあります</span>。</p>
<p>そのときには、問題文に説明があるのですが、「説明しなくてもわかるよね」というノリで使われる表現もあります。</p>
<p>たとえば、「整数型」「論理型」「 break 」「 return 」などです。このような表現は、過去問題を練習して覚えるしかありません。</p>
<div class="card-panel mag_h30">
<div class="center">共通に使用される擬似言語の記述形式</div>
<p>擬似言語を使用した問題では，各問題文中に注記がない限り，次の記述形式が適用されているものとする。</p>
<p>〔宣言，注釈〕</p>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">○</code></pre>
</div>
<div class="col s12 m6">手続，変数などの名前，型などを宣言する。</div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">/* 文 */</code></pre>
</div>
<div class="col s12 m6">文に注釈を記述する。</div>
</div>
<p>〔処理〕</p>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">・変数 <- 式</code></pre>
</div>
<div class="col s12 m6">変数に式の値を代入する。</div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">・手続(引数， ･･･)</code></pre>
</div>
<div class="col s12 m6">手続を呼び出し，引数を受け渡す。</div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">▲ 条件式
| 　処理
▼</code></pre>
</div>
<div class="col s12 m6">
<p>単岐選択処理を示す。</p>
<p>条件式が真のときは処理を実行する。</p></div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">▲ 条件式
| 　処理 1
+---
| 　処理 2
▼</code></pre>
</div>
<div class="col s12 m6">
<p>双岐選択処理を示す。</p>
<p>条件式が真のときは処理 1 を実行し，偽のときは処理 2 を実行する。</p></div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">■ 条件式
| 　処理
■</code></pre>
</div>
<div class="col s12 m6">
<p>前判定繰返し処理を示す。</p>
<p>条件式が真の間，処理を繰り返し実行する。</p></div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">■
| 　処理
■ 条件式</code></pre>
</div>
<div class="col s12 m6">
<p>後判定繰返し処理を示す。</p>
<p>処理を実行し，条件式が真の間，処理を繰り返し実行する。</p></div>
</div>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px">
<code class="language-none">■ 変数：初期値, 条件式, 増分
| 　処理
■ 条件式</code></pre>
</div>
<div class="col s12 m6">
<p>繰返し処理を示す。</p>
<p>開始時点で変数に初期値(式で与えられる) が格納され，条件式が真の間，処理を繰り返す。また，繰り返すごとに，変数に増分(式で与えられる)を加える。</p></div>
</div>
<p>〔演算子と優先順位〕</p>
<table class="bordered">
<thead>
<tr>
<th>演算の種類</th>
<th>演算子</th>
<th>優先順位</th>
</tr>
</thead>
<tbody>
<tr>
<td>单項演算</td>
<td><code class="language-none">　+，－， not　</code></td>
<td rowspan="6" class="center">
高<br />
▲<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
▼<br />
低
</td>
</tr>
<tr>
<td>乗除演算</td>
<td><code class="language-none">　×，+，%　</code></td>
</tr>
<tr>
<td>加減演算</td>
<td><code class="language-none">　+，－　</code></td>
</tr>
<tr>
<td>関係演算</td>
<td><code class="language-none">　>， <，≧，≦，=，≠　</code></td>
</tr>
<tr>
<td>論理積</td>
<td><code class="language-none">　and　</code></td>
</tr>
<tr>
<td>論理和</td>
<td><code class="language-none">　or　</code></td>
</tr>
</tbody>
</table>
<p>注記 整数同士の除算では、整数の商を結果として返す。<code class="language-none">　%　</code> 演算子は、剰余算を表す。</p>
<p>〔論理型の定数]</p>
<p><code class="language-none">　true， false　</code>
</div>
<p>プログラミングに慣れていない人には、擬似言語の仕様書を見ただけでは、意味がわからない部分があると思います。</p>
<p>ポイントとなる部分を説明しましょう。</p>
<p>&nbsp;</p>
<p>最初の方にある「手続」とは、一般的に「関数」と呼ばれるものです。</p>
<p>プログラミング言語の種類によっては、関数に相当するものをプロシージャ（ procedure ）と呼ぶ場合があるので、それを直訳して「手続」と呼んでいるのです。</p>
<p>ただし、試験問題では、「関数」や「副プログラム」と呼ぶ場合もあります。</p>
<p><span class="bold">擬似言語は、C 言語によく似ています。</span></p>
<p>分岐（選択）と繰り返しの表現は、C 言語の構文と対応させて覚えると理解しやすいでしょう。以下に示します。左側が擬似言語で、右側が C 言語です。</p>
<div class="mag_h30">
【単岐選択処理】</p>
<div class="row">
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-none">
▲ 条件式
| 　処理
▼
</code>
</pre>
</div>
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-clike">
if 条件式 {
    処理;
}
</code>
</pre>
</div>
</div>
<p>【双岐選択処理】</p>
<div class="row">
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-none">
▲ 条件式
| 　処理 1
+---
| 　処理 2
▼
</code>
</pre>
</div>
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-clike">
if 条件式 {
    処理 1;
} else {
    処理 2;
}
</code>
</pre>
</div>
</div>
<p>【前判定繰り返し処理】</p>
<div class="row">
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-none">
■ 条件式
| 　処理
■
</code>
</pre>
</div>
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-clike">
while (条件式) {
    処理;
}
</code>
</pre>
</div>
</div>
<p>【後判定繰り返し処理】</p>
<div class="row">
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-none">
■
| 　処理
■ 条件式
</code>
</pre>
</div>
<div class="col s6">
<pre style="border-radius: 5px;">
<code class="language-clike">
do {
    処理;
} while (条件式);
</code>
</pre>
</div>
</div>
<p>【ループカウンタを使った繰り返し処理】</p>
<div class="row">
<div class="col s12 m6">
<pre style="border-radius: 5px;">
<code class="language-none">
■ 変数：初期値, 条件式, 増分
| 　処理
■ 条件式
</code>
</pre>
</div>
<div class="col s12 m6">
<pre style="border-radius: 5px;">
<code class="language-clike">
for ( 変数 = 初期値; 条件式; 増分 ) {
    処理;
}
</code>
</pre>
</div>
</div>
</div>
<p>C 言語では、繰り返しを意味する構文が while（～である限り）であることに注目してください。</p>
<p>試験の問題文では、繰り返しの条件を「～である限り繰り返す」と示す場合と、「～になるまで繰り返す」と示す場合があります。</p>
<p>C 言語は while なので、問題文が「～になるまで繰り返す」であっても、プログラムは「～である限り繰り返す」に置き換えられます。これは、擬似言語でも同じです。</p>
<p>たとえば、問題文に「 A と B が等しくなるまで繰り返す」と示されていても、プログラムでは「 ■ A ≠ B 」つまり「A と B が等しくない限り繰り返す」という条件になります。</p>
<p>&nbsp;</p>
<p>ループカウンタを使った繰り返し処理は、C 言語では、for という表現になります。ここでも、条件式は、「～である限り繰り返す」です。</p>
<p>&nbsp;</p>
<p>演算子の中では、% が 剰余算（整数の割り算で余りを求める）を意味していることに注意してください。試験の他の問題では、<code class="language-none"> Mod </code> という言葉で 剰余算 を表すことが多いのですが、擬似言語では % です。</p>
<p>これは、C 言語でも、% が 剰余算 だからでしょう。</p>
<p>&nbsp;</p>
<p>演算子の優先順位を丸暗記する必要はありません。優先順位がわかりにくい演算式は、優先する部分をカッコで囲んで示すからです。</p>
<p>ただし、 <span class="bold">IT エンジニアの常識として、and の方が or より優先順位が高いことを、覚えておいてください</span>。</p>
<p>and を論理積（論理的な掛け算）と呼び、or を論理和（論理的な足し算）と呼ぶので、「論理演算でも掛け算の方が足し算より優先順位が高い」と覚えるとよいでしょう。</p>
<p>&nbsp;</p>
<p>演算子の「注記」の部分にある「整数同士の除算では、整数の商を結果として返す」とは、「整数同士で割り算をすると、結果の小数点以下が切り捨てられる」という意味です。</p>
<h2>アルゴリズム問題の克服への地道なステップ（その 3 ）</h2>
<p>いよいよ最後のステップです。この後は、ひたすら過去問題を解いてください。</p>
<p>その際に<span class="bold">重要なのは、制限時間を設けること</span>です。</p>
<p>令和元年以前のアルゴリズム問題の配点は 20 点 <sup>注</sup> であり、試験時間が 2 時間 30 分（ 150 分）なので、令和元年以前の過去問を練習するときは 150 分 ×（ 20 点 / 100 点）＝<span class="bold"> 30 分 が制限時間の目安</span>です。</p>
<p class="mag_h05 blue-grey-text"><sup class="mag_rt05">注</sup>令和 2 年以降は配点が変更され 150 分 × ( 25 点 / 100 点) = 37.5 分 になります</p>
<p>&nbsp;</p>
<p>ダラダラと時間をかけて解く癖を付けてしまうと、実際の試験のときに時間が足りなくなってしまいます。</p>
<p>たとえ、できないところがあっても、多少あてずっぽうがあっても、初めて見る問題を練習するときは、35 分で解いてください。最初は、0 点かもしれません。それでも、35 分で解いてください。</p>
<p>&nbsp;</p>
<p>そして、問題を解き終わって、答え合わせをして、間違った部分を検証する作業は、どんなに時間をかけても構いません。<span class="bold">自分で「あっそうか！」と気付くまで、しつこく検証</span>してください。</p>
<p>このとき、あまり完璧を求めないでください。</p>
<p>60 % 以上できれば合格なのですから、少しぐらいわからない部分があっても気にしないでください。</p>
<p>出題者だって、満点が続出したら困るので、少しぐらい難しい設問を入れています。それができなくても、気にしないでください。</p>
<p>&nbsp;</p>
<p>わからないからといって、市販の問題集の解説を見る人もいますが、その際にも注意が必要です。</p>
<p>解説が自分に合ってないと、ますますわからなくなるからです。<span class="bold">難しい設問も、スラスラ解説しているので、それがわからない自分に焦ることもあります。</span></p>
<p>市販の問題集の解説は、あくまでも参考だと割り切ってください。</p>
<p>午後試験のアルゴリズム問題を克服するには、自分流の解法を見出すしかありません。</p>
<div class="card mag_h30 process c-round">
<blockquote><p>
アルゴリズム問題 苦手克服への地道なステップ その 3</p>
<h3>過去問を解いて、自分流の解法を見出す</h3>
</blockquote>
</div>
<p>自分専用に解法ノートを作って、解説者になったつもりで、自分で自分に解説してみるとよいでしょう。</p>
<p>自分流の解法の例は、次回の記事で紹介します。私の解法ですので、あくまでも参考にしてください。</p>
<p><a href="../guide_algorithm2_of_questions_at_pm/"></p>
<div class="card mag_h50 hoverable" style="border-radius: 10px;">
<div class="row valign-wrapper direction-column-on-small">
<div class="col s12 m4 pad_00 flex"><img src="../../wp-content/uploads/2018/07/cover_algorithm_2.jpg" /></div>
<div class="col s12 m8 pad_20 black-text bold">矢沢久雄流 アルゴリズム問題の解き方（2）</div>
</div>
</div>
<p></a></p>
<div class="divider mag_h30"></div>
<p>私という同じ講師が対策講座を行っても、試験の合格率は、企業によって様々です。</p>
<p>全国平均以下の場合もあれば、全国平均を大きく上回る場合もあります。<br />
&nbsp;</p>
<p>そんな中、ほぼ 100% の合格率となった企業が 2 社ありました。</p>
<p>別の 1 社は、社長の試みで一度だけ「合格者にボーナス 20 万円」のご褒美を出しました。</p>
<p>そして、もう 1 社は、「本試験の前に 10 回の模擬試験」を行いました。2 社とも、ほぼ 100% の受験者が合格しました。</p>
<p>&nbsp;</p>
<p>つまり、その気になって、問題の数をこなせば、必ず合格できるということです。アルゴリズム問題も、がんばれば、きっと克服できるはずです。</p>
<p>それでは、またお会いしましょう！</p>
<p>&nbsp;</p>
<div class="card process">
<i class="material-icons mag_rt05">info</i>編集部よりお知らせ<br />
アルゴリズム問題のトレースのコツなど紹介する連載が始まりました！</p>
<div style="align-items: center; display: flex;">
  <img class="circle" src="../../wp-content/uploads/2020/05/trace_algorithms-1-150x150.jpg" style="width: 2.5em; height: 2.5em;" loading="lazy"></p>
<p class="mag_lt05"><a class="bold" href="../../patterns_algorithms/">アルゴリズム問題を解くコツ</a></p>
</div>
</div>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/gogo_arukikata/guide_algorithm_of_questions_at_pm/">午後問題の歩き方 ｜ 地道にアルゴリズム問題に取り組む（1）</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
