巣ごもりを余儀なくされる今年のゴールデンウイークは、AI時代に必須のスキル、プログラミングの知識を身に付けるチャンス。特集『今こそ!プログラミングのすすめ』(全13回)の#9では、問題形式であなたの「プログラミング思考度」をチェックする。「問題」を順に解いて、解説文を読み進んでいけば、見る間にプログラミング的思考が身に付くはずである。
【問1の答え】
3と4
【解説】
奇妙に思えるかもしれないが、コンピューターが処理できるという意味での論理性と、処理する内容の合理性は別次元の話だ。
選択肢を「プログラミングが可能かどうか」と「その内容が合理的かどうか」の二つの面から考えてみよう。なお、面白いときに笑うのは合理的という前提に立つ。
「プログラミングが可能」とは、「AならBを実行する」という命題があるとき、条件Aと処理Bの両方が客観的に明確なことだ。選択肢1と2は、条件Aに当たる「面白い」についての定義がなく、処理B(笑う、服を着る)をいつ実行するのかを判断できない。
これに対し、選択肢3と4は、「面白い」を「登場人物が笑った」というふうに、客観的に判断できるよう定義している。処理B(笑う、服を着る)を実行するための判断ができるので、プログラミングが可能だとなる。
選択肢4を見ると、「登場人物が笑う」と「服を着る」には脈絡がなく、処理内容は明らかに不合理だが、実行は可能だ。コンピューターの処理を信じ込むことは、時として危ういことが分かるだろう。
【問2の答え】
(a)2月は30日でも31日でもない。2月にこの処理を行うと、どちらにも条件分岐できずフリーズする。
(b)口座から繰り返し1万円を引き出す処理だが、最後に引き出すときに残額がきっちり1万円になっていないと、引き出しが実行できずフリーズする。
【解説】
いずれも条件の考慮不足から、コンピューターが固まってしまう。
(a)2月は28日か29日の2通りで、30日、31日に当てはまらず、条件分岐できなくなる。
修正方法としては、「分岐条件に28日、29日を追加する」「≦30(30日以下)」を追加するなどが考えられる。
(b)この処理は、残高が1万円の整数倍のときだけ正常に行われる。それ以外のときは、残高が1万円を切った(当初を含む)時点で引き出しが実行できなくなる。コンピューターは「引き出す」という指示があればその通り実行しようとするが、そのときに引き出しが可能かどうかを考慮しない。
修正方法としては、「毎回の引き出し実行前に残高が1万円以上あるかを確認する」「“引き出せた”“引き出せなかった”と応答を受ける処理を追加し、引き出せなかった場合に終了する」「当初残高が幾らかを確認し、繰り返しが可能な回数を前もって決める(例えば当初3万5000円なら、繰り返しの回数は3と最初に決める)」などがある。