わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

最大値問題

昨日の16:30からは,Cプログラミング補習の3回目でした.
問題は3つ用意しました.一つは,正五角形の座標を求める問題で,問題文の読み解き方,そしてコーディング,動作確認まで,私が実演し,学生には見てもらいました.それから,2番目の問題をやってもらいました.(3つ目は時間不足で手つかず.)
2番目の問題は以下の通り.学生はなかなか梃子摺っていました.

課題2: キーボードから任意個の整数を読み込み,その最大値と,それを何番目に読み込んだかを表示するプログラムを書きなさい.但し,配列は使わないものとする.

先週の日記と同様に,この読み解きをできるといいのですが,この1週間,暇ができるか分からないので,要点を書いておきます.ここでは,scanfで読み取り,表示はprintfとします.変数は,「何番目を読んでいるか(forループで使用)」,「scanfで読み出した値」,「最大値」,「最大値は,何番目に読み出したものか」の4つがあれば十分です.ループの終了は,scanfの戻り値で判断します(1なら,1個読み出せたという意味ですね).
この問題の興味深いのはここからで,上の問題の代わりに,以下の通りであれば,プログラミングの方針が変わっていたかどうかです.

課題2a: キーボードから10個の整数を読み込み,その最大値と,それを何番目に読み込んだかを表示するプログラムを書きなさい.但し,配列は使わないものとする.

課題2b: キーボードから10個の整数を読み込み,その最大値と,それを何番目に読み込んだかを表示するプログラムを書きなさい.

課題2aも,課題2bも,上の解説と同じ考え方でプログラムが作れますし,そうすべきなのです.課題2bだけを読んで「10個の整数値を入れる配列…int a[10];」としてはいけないのです.これをどう教えていくか*1…先は長いです.

*1:今回取り上げた課題であれば,「プログラムの中で,どんな情報を保持していればいいか」を考える習慣を身につけさせるわけです.