わさっきhb

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

プログラムを説明する (1)説明の例

f:id:takehikom:20220220081756j:plain
「本日,授業は第8回,最終回です.動画で視聴してもらう資料は,2つです.その1は『プログラムを説明する』と題して,知っておいてほしいことをお話しします.ナレーションはtakehikomです」
f:id:takehikom:20220220081804j:plain
「『どのようにプログラムを説明すればよいか』の事例として,先々週の授業中,実際にあった問い合わせを,少しアレンジする形で,お見せしたいと思います.
 第6回は,SVG画像生成プログラムの作成でした.その課題の一つ,lineタグを用いて線を引く課題に関して,Teamsのチャットで,質問が来ました.
 『第6回課題の一つ,《縦横に線を引く》で、コンパイルエラーが出ました。29行目でエラーと表示されています。』というのです.
 そうすると教員としては,29行目が具体的にどのようになっているかを,知りたいわけです.実際のやり取りでは,ソースファイルを添付してもらいましたが,ここでは分かりやすさのため,該当箇所のpaiza.IOのスクリーンショットに替えたいと思います.
 こういう画像が,添付されたとします」
f:id:takehikom:20220220081815j:plain
「なるほど,行番号の29行目の左に,エラーを示す赤のバツ印が付いています.画面上部には『Compile Error』,そして下にも『Main.c:29:9: error』として,このプログラムの先頭から29行目,空白文字も数えて先頭から9文字目のところで,エラーですよと,表示されています.
 それはさておき,ソースプログラムの,29行目とその前後から,どうしてここでエラーが発生したかは,一目瞭然です.22行目の『int col = 7;』だとか,28行目の『for (i = 1; i < row; i++) {』だとかは,C言語の文法にあった書き方です.
 なのですが29行目は『<』で始まっています.Cの文法としては,これは比較演算子であり,左と右に,数値になるものを書かないといけません.左に,数値になるものがない,ということでエラーです.
 そこで次のように返答しました」
f:id:takehikom:20220220081822j:plain
「まず,コンパイルエラー解消のためには、29行目,これは出力処理となるよう,『printf』で始めましょう.
 ただしそれだけではうまく動きません.この行の途中に書かれている『stroke-width="stroke"』も,見直しが必要です.
 これでは(二重引用符は適切にエスケープを行い,エラーにならずに出力できたとしても),lineタグの中が『stroke-width="stroke"』となってしまいます.線の太さの指定が,できていません.
 そこで『stroke』のところを%dに置き換えて,printfの後ろの引数に変数strokeを指定する,といった書き換えも,行う必要があります.
 ここまで,学生の自作プログラムの不具合報告とその対応,というやり取りになってしまいましたが,このスライドの流れは,授業で自分のプログラムが期待どおりに動作しないときの,説明の仕方としては,上出来だと思います.実際,この学生はきちんと修正をして提出していました.その一方で,回収して採点した答案の中には,これと同じ書き間違いをして,こちらに,または周囲に尋ねることなく提出していたものを見かけました.
 これから何枚かのスライドで,説明するにあたり,どのような点に注意すればいいかを,解説していきたいと思います」