皆さんこんにちは!Venus店長(@Venusblaze2)です!
基本情報技術者試験で必須解答の問題には「情報セキュリティ」と「アルゴリズム」があります。
アルゴリズムって何だか「難しい」イメージがあるよね。
「情報セキュリティ」はともかく「アルゴリズム」はどうやって勉強すればいいんだろう…?
そこで今回は、意外と知らない「アルゴリズム」の基礎を解説していこうと思います。
この記事を読めば、すぐにでも過去問題に取り組めるという構成にしたので、是非気軽にご覧下さい!
目次
基本情報技術者試験 アルゴリズム
基本情報技術者試験のアルゴリズムって難しいの?
基本情報技術者試験の問題の中でも、「アルゴリズム」は一般的には難しいとされています。
しかし難しい問題にも関わらず「必須解答」なので、「アルゴリズム」を理解しないまま試験に挑んでしまうと致命的な問題となりかねません。
なので基本情報技術者試験を合格する為には、アルゴリズムの理解は必要不可欠ですが、ここで筆者が言いたいことは…
アルゴリズムの理解は「ある程度で良い」
ということです。
無理にアルゴリズムを完璧にしようとすると、かなりの時間と手間が必要です。その手間をアルゴリズムに費やすのであれば、他のより難易度の低いテーマを完璧にした方が効率的だと考えています。
なので私はコンスタントに得点率5割取ることを目標にしていました!
- アルゴリズムの理解はある程度で良い
- 得点率は半分を目標に学習を行う
- 他のより難易度の低いテーマの問題で得点をカバーする
初めからこういったマインドで学習に取り掛かった方が、気持ち的にも労力的にも楽だと思います!
それじゃあ、得点率5割を目指すためにはどんなことを勉強すればいいの??
得点率5割を目指すためには、まず「アルゴリズムの基礎」をしっかりと押さえておく必要があるよ!
なので今から「アルゴリズムの基礎」について解説していくね!
基本情報技術者試験 アルゴリズムの勉強方法
まず基本情報技術者試験におけるアルゴリズム問題とは、どんなものかを理解しておきましょう。
- 疑似言語という試験オリジナルの言語によるプログラムが出題される
- 疑似言語の基本的な処理内容は他の言語と同じ
- 基本的な処理は「代入」・「条件分岐」・「繰り返し」・「関数」だけ
- 変数の中身の値を追う問題が多い
何となく、疑似言語という言語で書かれた「プログラム」が出題されるんだな…。ということは分かって頂けたかもしれませんが、「代入」やら「条件分岐」、「繰り返し」うんぬんといった、よく分からない言葉がたくさん出てきました。
プログラミングをかじったことのある方であれば
「あ~あれね!」
とピンとくるかもしれませんが、初めての方にはサッパリですよね。
ということで、ここからはアルゴリズムの基礎を見ていこうと思います!
基本情報技術者試験 アルゴリズムの基礎
ここで紹介するアルゴリズムの基礎は、先ほども挙げた「疑似言語」で登場する4つの処理について解説していきます。
改めて、疑似言語では次の4つの処理が登場します。
ちなみに疑似言語では、「処理」を表す行の先頭には「・」が付いています。
- 代入(←)
- 条件分岐(if, else)
- 繰り返し(for, while)
- 関数
上記で挙げたような命令は見たことある方も多いかと思いますが、疑似言語には「処理」や「処理の範囲」を示す、特有の記号が存在しています。
、とその前にプログラムを理解する上でとっても重要な変数や配列などのデータ構造について解説をしていこうと思います。
変数
変数とは、値を一時的に格納しておくための「箱」のような役割を果たします。
変数には、整数を保存する「整数型変数」や文字列を保存する「文字型変数」などがあり、この2つがよく試験にも出てきます。
変数は宣言して初めて利用することが出来ます。(疑似言語では「〇」が宣言を表します。)
例えば、整数型変数「num」を宣言し値を代入する方法は次の通りです。
〇整数型:num(整数型変数numを宣言)
・num ← 5(変数numに5を代入)
変数はこれから解説していく様々な処理の説明から自然と理解できるでしょう。
配列
変数では通常1つの値しか保持することが出来ませんが、複数の値を保持したい時に登場するのが「配列」です。
配列も整数型や文字型などがあり、利用するためには宣言を行う必要があります。
配列は、「〇~型: 任意の配列名[要素数]」という形で宣言を行います。
例えば4つの数値を保持する配列の宣言は次のように行います。
〇整数型: numbers[4]
*要素数とは保持できる値の数のことです。
配列に値を格納する時には、「添え字」というものを使います。
例えば、numbers[1] ← 3 であればnumbersの1要素目に「3」が格納されます。この時配列の格納位置を指定している[1]を添え字と呼びます。
イメージはこんな感じ!
なるほど~、じゃあ numbers[2] ← 10 とすると…
添え字が「2」の場所に「10」が格納されるんだね!
その通り!!
ただ添え字番号は「1」から始まる場合と、「0」から始まる場合があって、それは問題によって異なるのでしっかりと問題を読むようにしよう!
代入
プログラムの最も基本的な処理である代入は「←」で表されます。
プログラムの世界では「右辺の変数の値を左辺の変数に代入」という意味を持ちます。
代入処理の例を示しておきます。
代入
〇整数型: a,b //整数型の変数a,bを宣言 //行頭の「〇」は変数の宣言を表している
・b ← 10 //10をbに代入 //処理行の先頭には「・」が付いている
・a ← b //bをaに代入
(結果:a = 10, b = 10となる。)
値は基本的に変数に格納して、代入処理などを行います。
条件分岐
条件分岐は、条件式の真偽によって処理を分けたい場合に登場します。
例えば、年齢を格納した変数「age」の値が20以上であれば、文字型変数「mozi」に「成人です。」と入力し、19以下であれば「mozi」に「未成年です。」と入力したい場合、ageの値によって処理を変える必要があります。
こういう場面で条件分岐が登場します。
条件分岐処理の書き方は次の通りです。
条件分岐処理の範囲は上記の通り、矢印のような記号で表されます。
記号の最初の行で条件式が記述され、その条件に当てはまれば(真であれば)真ん中の横棒より上の処理を行い、条件分岐処理を抜けます。
条件に当てはまらければ(偽であれば)真ん中の横棒より下の処理を行った後、条件分岐処理を抜けます。
今挙げた条件分岐処理は、矢印記号に「横棒」が入っており「偽の場合」でも何らかの処理を行う「双岐選択処理」というものですが、「横棒」が無い「単岐選択処理」というものもあり「偽の場合」は何の処理も行いません。
繰り返し1
同じ処理を何度も繰り返したい場面が出てくるのですが、そういう時に登場するのが繰り返し処理です。
例えば、1~10までの合計値を求めたい場合などです。
繰り返し処理の書き方は次の通りです。
四角い記号で囲まれている範囲が繰り返し処理の範囲です。
繰り返し処理の最初の行で条件式により判定を行い、条件に当てはまれば(真であれば)繰り返し処理を行います。
そして条件が当てはまらなくなるまで、処理を繰り返します。(上の例だとiの値が11になれば、繰り返しを抜けて下の「・表示(total)」処理を行います。)
上の例は繰り返し処理の一番最初に条件式により判定を行っていますが、「繰り返し処理の最後に判定を行う」タイプのものもあります。
その場合は一度無条件で繰り返し処理内の処理を行った後、最後に判定を行う点に注意です。
プログラムを学んだことがある方なら分かるかと思いますが、今上で挙げた繰り返し処理は「while」・「do~while」と呼ばれるものです。
しかし繰り返し処理には「for」というものもあります。なので続いてはforについて解説していきたいと思います。
繰り返し2
繰り返し処理には、先ほど挙げたようなタイプの他にももう一つのタイプがあります。これは他の言語では「for命令」と呼ばれたりします。
違うタイプとは言っても、「条件式」の書き方が少し異なるだけなので身構えずにご覧ください。
先ほどの1~10までの合計値を求める繰り返し処理をforで表すとこんなプログラムになります。
繰り返し処理の最初の行にカンマで区切られた、3つの式や数字があります。
画像にもある通り、一番左は「iの初期値」を決定しています。
真ん中は「条件式」になっており、右は1回繰り返し処理を行う毎に「iの値を1増やす」ことを表しています。(繰り返し1でいう i ← i + 1 の部分に相当)
関数
関数とは、ある目的を実現するための処理の集合のことです。
わかりやすくいうと、例えば「三角形の面積を求めたい(目的)」場合、変の長さを決めたり、公式で面積に導き出したりといった複数の処理が必要です。そういった処理を一塊にしたものが「関数」です。
関数を利用するステップは2つ!
(関数を定義しただけでは、用いることは出来ません。)
定義や呼び出しと言われてもよく分からないと思うので、実際のプログラムを見てみましょう!
画像の上部が「関数の定義」、下部が「関数の呼び出し」を表しています。
関数の知識がある方からすれば、見たことのある構成ですよね。
「〇 ~型関数: 任意の関数名( 引数 )」
引数はカンマで区切ることによ増やすことが出来る。
一番左から第1引数、第2引数…と呼ぶ。
・戻り値(返却値)がある場合
「戻り値格納用の変数 (例ではresult)← 関数名(引数)」
戻り値と同じ型の変数を宣言(例では「result」)
宣言した型に戻り値を格納する。
・戻り値が無い場合
「関数名(引数)」
呼び出し元の引数の数は必ず呼び出し先関数の引数の数に合わせましょう。
矢印で表しているように、関数の呼び出し元の引数と関数の定義における引数は対応しているので、今回の場合は「tateが10」,「yokoが15」となります。
関数には呼び出し元に値を返す「戻り値(返却値)」というものがあり、return命令を用いります。今回であれば、変数「menseki」が呼び出し元へと返されています。
呼び出し元では、返ってくる値を格納するための変数「result」を用意しています。なので結果として、これは最終的にresultに三角形の面積が格納されるようなプログラムとなっています。
関数の定義だけではなく、「呼び出し」を行って初めて利用出来るんだね!
その通り!引数により、呼び出し元から関数へ値を渡して処理を行う流れなんだ!
ちょっと分かりにくいなという方に向けて関数のイメージ画像を作りました。
関数はなんとなくこんなイメージだよということを分かって頂けたら幸いです。
さていかがでしたでしょうか。
プログラム初心者の方には少し難しめの概念もあったかと思いますが、理解していただけましたか?
疑似言語はこれらの基礎さえ抑えておけば、過去問題は解けるようになるので是非たくさんの過去問題に挑戦してみてください!
基本情報技術者試験 アルゴリズムのおすすめ参考書
どうしても基礎が理解できないという方には「出るとこだけ!」という参考書をおすすめします。(私もこの参考書で合格を勝ち取りました!)
初心者におすすめの参考書はこちら!
おすすめの過去問題集はこちら!
関連記事
↓ワンクリックでサイトを応援する
にほんブログ村