プログラミングのすすめ#Photo:PIXTA

巣ごもりを余儀なくされる今年のゴールデンウイークは、AI時代に必須のスキル、プログラミングの知識を身に付けるチャンス。特集『今こそ!プログラミングのすすめ』(全13回)の#9では、問題形式であなたの「プログラミング思考度」をチェックする。「問題」を順に解いて、解説文を読み進んでいけば、見る間にプログラミング的思考が身に付くはずである。

「週刊ダイヤモンド」2018年5月12日号の第1特集を基に再編集。肩書や数値など情報は雑誌掲載時のもの。

【問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と最初に決める)」などがある。