【基本情報】令和5年度(科目B:問2 手続の呼び出し)自分の好きな言語で再現してみよう!
基本情報技術者試験
前回に引き続き、今回も公開問題を使って遊んでみます!
基本情報を受験される方や、プログラミングを勉強している方はぜひ参考にどうぞ^^
今回のサンプルについて
ちょうど良い短さ
令和5年度の公開問題のプログラミングでは、最も短いです。
おそらく、年度ごとに必ず1問はこういう問題が含まれているのだと思われます。
※出典:基本情報技術者試験(FE)公開問題(令和5年度 科目B)
難易度
個人的な感覚ではありますが、簡単な方だと思っています。
理由は消去法である程度絞れる点と、そこから少しコードを辿るとすぐに正解を特定できるからです。
解いてみよう
設問の指示通りにproc2を呼び出すと、すぐにproc3が呼び出されます。
と、いうことは・・・最初に出力されるのは『C』です。
その後は、proc2の続きで『B』が出力されます。
ここまでは、残りの選択は全て合っています。
次はproc1が呼び出され、そのproc1では『A』が出力されます。
選択肢『カ』は『B』の出力で終わっているので、脱落です。
まだ続きます。もう正解は分かりましたでしょうか?
選択肢『キ』は『A』の出力で終わっているので、脱落です。
正解は『ク』でした!
好きな言語で書いてみよう
自分で書くと学びになる
解説が少し長かったとは思いますが、ここからは『試験用の疑似言語』を『実際に動かしたい言語』で再現してみましょう。
ご自身が使っている言語、もしくは勉強中の言語で書くことで、試験対策とコーディングの相乗効果が期待できます!
ブラウザだけでも動かせる
前回に引き続き、webブラウザで様々な言語を簡単に確認できる『paiza.io』を使ってご紹介します!
(ログインをしなくても使えますので、ぜひお試しください^^)
こんな感じ
試しにいくつか紹介しますので、コピペしてpaiza.ioで確認してみてください!
Python3の場合
def proc1():
print("A")
proc3()
def proc2():
proc3()
print("B")
proc1()
def proc3():
print("C")
# 設問と同じproc2を呼び出す例:
proc2()
正解と同じ順番で出力されることが確認できます!
Rubyの場合
def proc1
puts "A"
proc3
end
def proc2
proc3
puts "B"
proc1
end
def proc3
puts "C"
end
# 設問と同じproc2を呼び出す例:
proc2
プログラム言語でなくても可能
他の言語でも、もちろん同じように実現可能です。
しかし!
前回同様、私はあえてプログラム言語以外で書いてみます。
PostgreSQL
データベース言語『SQL』です。
今回もストアドではなく、あえて普通のDMLで書いてみます。
こちらは『DB Fiddle』にてwebブラウザのみで動かせます!
(ログインをしなくても使えますので、ぜひお試しください^^)
-- proc1でproc3を呼ぶので、proc3を最初に宣言している
WITH proc3 AS (
SELECT 'C' AS word
)
-- 呼び出したデータを集合演算する
, proc1 AS (
SELECT 'A' AS word
UNION ALL
SELECT word FROM proc3
)
, proc2 AS (
SELECT word FROM proc3
UNION ALL
SELECT 'B' AS word
UNION ALL
SELECT word FROM proc1
)
-- 設問と同じproc2を呼び出す例:
SELECT * FROM proc2;
-- ※ソートキーを設定していないので、順番がずれる可能性あり。
-- (100回繰り返し試した結果では、全て同じ)
同じ結果を再現できました!
ただ、即興で書いたので少し無理矢理な感じもします(ソート順も保証していないので)
今回は簡易的な実現ということでご容赦ください。
最後に
いかがでしたでしょうか?
今回のように、トレースをしながら正解を見つけるプロセスと、それを実際に言語で実現してみるというプロセスを両方実施すると、手続きの呼び出しが面白く感じられるのではないかと思います。
試験対策については、私が過去に作成したこの動画より引用しました。
今後、令和7年度版以降にも短めの問題を見つけたら、またご紹介しようと思います。ここまでお付き合い頂き、ありがとうございましたm(_ _)m
Discussion