見出し画像

繰り返し,やっぱり数えられない

 大学入試センター試験「情報関係基礎」の過去問を題材にプログラミングをさせている。2007年のブロック落としのコーディングで,繰り返しの回数を数えられないという話を「プログラミング,ちゃんと数えられますか。」に書いた。

 「2から7まで,1つずつ増やしながら繰り返す」を,「2から始めて,1ずつ増やしながら○回繰り返す」にしたとき,正しく答えられるか,という問題である。
指折り数えてもよい。(2,3,4,5,6,7)
 正しく答えられた者は 15.6% だった。高校生ですよ。

 提出されたプログラムはひとりずつプリントアウトしてチェックし(赤でチェックマークが入っている)正解をプリントして渡した。そのとき,「2から7までなら6回ですよ」と,確かめたかどうか,記憶にない。小学生じゃあるまいし,赤でチェックマークが入り,正解が渡っているなら,言われなくても勘違いに気がつくだろう・・・・・多分言っていないと思う。

 どうも,間違いの箇所を正解と見比べて考えを修正する,ということをしていないようだ。マルかバツかだけ,結果を見て終わりなのだろう。「情報」に限らず,他教科でも。だから,数学でも,何度同じような問題をやらせても同じ間違いをする。学ぶ姿勢が根本的に間違っている。

 2018年の問題。迷路を解く問題だ。横11,縦9のマスに迷路を作る。このマスを配列で次のように表す。これは一例で,横と縦の数は変数 yoko , tate に入っているものとする。

画像1

 1は黒く塗られている。0は白で,これが通路。上の9から出発して,行き止まりになったらそのマスを1に変えていくと,最後にはゴールに至る経路だけ残る,という考えだ。まわり1周はすべて1なので,ここには行けない。
 その処理がこのようになっている。

画像2

「2からサまで」・・・ どこまでいくか。端には行けないので8だ。(yは縦)すなわち,tate - 1 が サ に入る。(選択肢から選ぶ) シ は yoko-1 だ。
まず,この正答率はどうなっているか。両方できた者が 63.8 % である。
これが多いか少ないか。
具体的な数でなく,tate,yoko だからわからないということはありうる。選択肢にあっても。具体的な数なら数えられるが,文字になったらわからない,というのはよくあることだ。(いちおう,進学校なのだが)
なお,片方だけできた者が 5% いる。

もとの問題の正解を渡し,Cindyscriptでプログラムを書かせる。Cindyscriptの繰り返しは回数で指定する。テキストには次のように書かれている。

関数 solution1() を完成する。問題文と同じところが空欄になっているので正しく埋める。問題文との配列の書き方 Masu[x-y,y] を,リストの書き方に正しく直すこと。

solution1():=(
  nutta=1;
  while(nutta>0,
    nutta= ; // コ
    repeat( ,y,start->2, // サ
      repeat( ,x,start->2, // シ
        s=Masu_(x-1)_y+Masu_(x+1)_y+Masu_x_(y-1)+Masu_x_(y+1);
        if( & , // ス,セ
          Masu_x_y= ; // ソ
          nutta=1;
        );
      );
    );
  );
);

サ には何を入れる? 回数だよ。

元の問題の答えが「2から tate-1 まで1ずつ増やしながら」なので,回数にすると「2から ○まで」だ。○にはいるのは?

正答率は 9.2% 。 プログラミングは相談可。実際,けっこう活発に相談しながらやっている。

当然エラーメッセージが出ている。しかし,間違っていることがわからないようだ。Cindyscriptでは,配列の添字を超える数を指定した場合,警告は出るが実行は止まらない。この場合,結果は出る。そのため,コンソールにずらっと「WARNING: Index out of range!」が出ているのに直そうとしないのである。

2から tate-1 まで なら tate-2 回だ。
それがわからないのか,いや考えようともしないのか,答えの tete-1 をそのまま書いている。

これでプログラミングができるようになるのだろうか。

もうひとつ。
元の問題には,改善したアルゴリズムが載っている。
これを solutin2() として書かせた。solution1() と違って,テキストには何も書いていない。センター試験の問題とその解答を見ながら,solution1() に倣って書いていきなさい,ということだ。

書けた者(tate-1になっている者も含む)23.7 %
まったく手をつけていない者      30.5%  であった。