こんにちは、開業準備&イベント準備に追われております、nicoです。
今回は、基本情報技術者試験のB科目を見て抵抗を感じる人に向けて、AIの活用方法を解説したいと思います。
使用するAI:ChatGPT
先ず、素直にAIへ悩みを打ち明けます。
「基本情報技術者試験のB科目はどのように勉強すればいいですか?」と聞きました。すると、メモリに登録されます。ここでのメモリとは、問い合わせた人物がどのような課題を抱えているか登録されるシステムのことです。
学習ステップが記述されるのですが、大体の把握を終えたら、その次に「疑似言語の問題を出してください」とお願いします。
AIが下記のような問題を作ってくれます。
今回は配列の最大値を求めるプログラムの問題です。
#擬似コード
入力: 整数の配列 A (要素数 N)
変数:
maxValue ← A[0]
i ← 1
処理:
WHILE i < N DO
IF A[i] > maxValue THEN
maxValue ← A[i]
END IF
i ← i + 1
END WHILE
出力: maxValue
<問い>
以下の配列Aについて、上記のアルゴリズムを使用して最大値を求めてください。
A = [7, 2, 9, 4, 3, 8]
ここで、「全く分かりません」と述べると、細かい手順の解説を行ってくれます。
#擬似コード
入力: 整数の配列 A (要素数 N)
変数:
maxValue ← A[0] ← 配列Aの最初の要素を一時的な最大値に設定する
i ← 1 ← 2番目の要素から始めるために、iを1に設定する
処理:
WHILE i < N DO ← 配列の最後まで繰り返す (Nは配列の要素数)
IF A[i] > maxValue THEN ← 現在の要素がmaxValueより大きければ
maxValue ← A[i] ← maxValueを更新する
END IF
i ← i + 1 ← 次の要素に進む
END WHILE
出力: maxValue ← 最後に最大値を出力する
ここからは解説をまとめてみます。
maxValue ← A[0]
なので、配列Aの最初の値(7)を「とりあえず一番大きい」と仮定します。
※本番では要素番号を0からではなく1からとすることが多いのでその点は気をつけてください。この記事では0からとします。
i ← 1
は、2番目の要素から最後の要素まで確認していくという意味です。
IF A[i] > maxValue THEN
maxValue ← A[i]
END IF
ですので、現在の値A[i]がmaxValueより大きい場合は、それを新しい最大値として更新します。
i ← i + 1
は、次の要素へ進むという意味です。
一つ一つの要素を確認していくため、iを1ずつ増やして次の要素に進みます。
WHILE i < N DO
この処理を配列の全ての要素について行い、最後まで繰り返します。
配列 A = [7, 2, 9, 4, 3, 8] を例に、このアルゴリズムを一緒に追ってみましょう。
maxValue ← A[0] = 7
→ まず最初に、最大値を配列の最初の値「7」とします。
i ← 1 で2番目の要素 A[1] = 2を確認
→ 2は7より小さいので、maxValueはそのまま。
i ← 2 で3番目の要素 A[2] = 9を確認
→ 9は7より大きいので、maxValueを9に更新。
i ← 3 で4番目の要素 A[3] = 4を確認
→ 4は9より小さいので、maxValueはそのまま。
i ← 4 で5番目の要素 A[4] = 3を確認
→ 3は9より小さいので、maxValueはそのまま。
i ← 5 で6番目の要素 A[5] = 8を確認
→ 8は9より小さいので、maxValueはそのまま。
全ての要素を確認し終えた後、maxValueは9になっています。したがって、配列の中の最大値は9です。
「理解できました!他の問題をお願いします!」と言うと、新たに作ってくれます。この時、自分がどのような状況か伝えておくことで最初に登録したメモリが更新されます。
配列の最大値を求めるプログラムの問題を理解できた人物であると更新されましたので、次は、合計値を求めるプログラムの問題が出てきました。やってみましょう。
#擬似コード
入力: 整数の配列 A (要素数 N)
変数:
sum ← 0
i ← 0
処理:
WHILE i < N DO
sum ← sum + A[i]
i ← i + 1
END WHILE
出力: sum
<問い>
次の配列Aについて、上記のアルゴリズムを用いて合計値を求めてください。
A = [3, 5, 7, 2, 8]
<解説>
以下のような処理となります。
最初、sum = 0
配列の最初の値 A[0] = 3 を足す → sum = 0 + 3 = 3
次に、A[1] = 5 を足す → sum = 3 + 5 = 8
次に、A[2] = 7 を足す → sum = 8 + 7 = 15
次に、A[3] = 2 を足す → sum = 15 + 2 = 17
最後に、A[4] = 8 を足す → sum = 17 + 8 = 25
答えは25です。
注意したいのは、AIは100%の正確性ではありません。私の回答が間違っていても、「素晴らしい!正解です!」と言い切ることがありました。解説をしっかりと見て答えと合っているかチェックして下さい。あくまでもAIをこのように活用してみてはどうかという案ですので、解説すら疑わしい場合は他の演習問題と照らし合わせてみましょう。それも訓練の一つです。
理解ができたら「もっとお願いします!」と聞いてみます。
次は、平均値を求めるプログラム問題です。
#擬似コード
入力: 整数の配列 A (要素数 N)
変数:
sum ← 0
i ← 0
処理:
WHILE i < N DO
sum ← sum + A[i]
i ← i + 1
END WHILE
平均値 ← sum / N
出力: 平均値
<問い>
次の配列Aについて、上記のアルゴリズムを使って平均値を求めてください。
A = [4, 8, 6, 2, 10]
できれば解説を見ないまま自力で解いてみてください。
<解説>
まず、配列 A = [4, 8, 6, 2, 10] の合計を求めます。
最初に sum = 0 です。
A[0] = 4 → sum = 0 + 4 = 4
A[1] = 8 → sum = 4 + 8 = 12
A[2] = 6 → sum = 12 + 6 = 18
A[3] = 2 → sum = 18 + 2 = 20
A[4] = 10 → sum = 20 + 10 = 30
最終的な合計は 30 です。
次に、合計値を要素数 N = 5 で割ります。
平均値 = 30 / 5 = 6
配列Aの平均値は6になります。
よって答えは6です。
理解ができると簡単に感じますよね。
間違えても大丈夫です。
躓いた場合は、「似た問題をもう1問お願いします」と聞きます。
次は、偶数の合計と平均値を求めるプログラムの問題です。
#擬似コード
入力: 整数の配列 A (要素数 N)
変数:
sum ← 0
count ← 0
i ← 0
処理:
WHILE i < N DO
IF A[i] が偶数 THEN
sum ← sum + A[i]
count ← count + 1
END IF
i ← i + 1
END WHILE
平均値 ← sum / count
出力: 偶数の合計, 偶数の平均値
<問い>
次の配列Aについて、偶数の合計と平均値を求めてください。
A = [3, 12, 7, 8, 6, 5]
<解説>
配列 A = [3, 12, 7, 8, 6, 5] の偶数の合計と平均値を求めます。
ステップ1: 偶数を見つけて合計を求める
まず、配列の中の偶数を探します。
A[0] = 3 は奇数 → 無視
A[1] = 12 は偶数 → 合計に加える → sum = 12
A[2] = 7 は奇数 → 無視
A[3] = 8 は偶数 → 合計に加える → sum = 12 + 8 = 20
A[4] = 6 は偶数 → 合計に加える → sum = 20 + 6 = 26
A[5] = 5 は奇数 → 無視
ステップ2:偶数の個数を数える
偶数は 12, 8, 6 の3つなので、count = 3 です。
ステップ3:偶数の平均値を求める
偶数の合計26を、偶数の個数3で割ります。
平均値 = 26 / 3 ≈ 8.67
<答え>
偶数の合計は 26
偶数の平均値は 約 8.67
以上です。
もちろん本番はこのようなレベルではありません。
2進数や10進数の理解も必要ですし、もっと長くてハイレベルです。
ただ、基礎中の基礎を固める手段としてはそこそこ良いかと思います。
心が折れてしまう前に試してみてください。
一緒に頑張りましょう!