*提出方法 [#jcf05e4e]
課題はCプログラムのファイルとして、ToraNetのライブラリーで提出してください。
**ファイル名 [#m60ac129]
提出するファイル名は、課題であることを表すアルファベット小文字の k で始まる ''kXXYZZZZ.c'' とし、X、Y、Z は以下のようにします。
-X: ''授業回数''(0埋め2桁、第1週の場合は01)
-Y: ''課題番号''(1桁)
-Z: ''学籍番号''(下4桁、学籍番号がEP15001の場合は5001)
たとえば、学籍番号EP15001の学生が、第1週の課題1を提出するとき、ファイル名は k0115001.c となります。
すべての学生のプログラムを一括して自動的にコンパイルしますので、この命名規則に従っていないものは評価対象から外れる可能性があります。
**条件 [#m0350d0a]
提出するプログラムは、以下の条件を満たしていなければなりません。
-''コンパイルできる''こと
-''実行が停止する''こと
-''改行コードはLFのみ''であること
-文字列やコメントに日本語が含まれる場合は、''文字コードがEUCで保存されている''こと
-文字列やコメントに日本語が含まれる場合は、''文字コードがUTF-8で保存されている''こと
-''キーボードからの入力(scanf関数)を含まない''(課題文に指示がある場合を除く)
コンパイルができないものは実行できません。
実行が停止しないものが含まれているとすべての学生のプログラムを一括して実行できないため、実行が停止しないものは採点対象から除外します。
改行コードと文字コードが正しくないと読めません。
キーボードからの入力が含まれるプログラムはキーボードから入力しないと実行が先にすすまず、すべての学生のプログラムを一括して実行できないため、キーボードからの入力が含まれるものは採点対象から除外します。
したがって、これらの条件を満たさないものが提出されても、未提出とみなされる場合があります。
--------
*課題の位置付け [#x5a9c087]
この授業の課題は、中部大学履修要項第5項「試験」に規定されている平常授業時に課せられるレポートとして扱います。
この授業の課題は、中部大学履修要項第5項「試験」に規定されている「平常授業時に課せられるレポート」として扱います。
*不正行為 [#fe41ae1d]
この授業においては、以下のような行為を不正行為とします。
-他人が作成したプログラムの全部または一部を電子的に複製し、それをそのままあるいは一部変更して自分のプログラムとして提出する行為
-他人が作成したプログラムの全部または一部を見てほぼ同じプログラムを作成し、自分のプログラムとして提出する行為
-他人の指示に従って他人が作成したプログラムの全部または一部とほぼ同じプログラムを作成し、自分のプログラムとして提出する行為
-自分のプログラムの全部または一部を他人に作成させる、作成を依頼する行為
-課題の評価が確定していない人に自分のプログラムの全部または一部を見せる、渡す、教える行為
-提出期限を守ることを目的として未完成のプログラムを提出する行為
-上記の行為を助ける行為
-上記の行為だと疑われる行為
-大学の授業で不正行為とされている行為
ただし、以下のプログラムは「他人が作成したプログラム」から除外します。
-教員またはTAが作成して授業中に示したプログラム
-この授業で指定されている教科書に掲載されているプログラム
また、以下の行為は不正行為ではありません。
-考え方を教える行為、教えてもらう行為、一緒に考える行為
-プログラムそのものではなく考え方を教える行為、教えてもらう行為、一緒に考える行為
-アルゴリズムやフローチャートを教える行為、教えてもらう行為、一緒に考える行為
-すでに自分のプログラムを提出した人が、他人が作ったプログラムを見て間違いを指摘する行為
他人のプログラムを写す行為だけでなく、自分のプログラムを写させる行為、見せる行為、渡す行為も不正行為ですから注意してください。
*不正行為の懲戒 [#fc20aca0]
*不正行為に対する処分 [#fc20aca0]
不正行為を行ったものには、以下のいずれかの懲戒を行います。
不正行為を行ったものには、以下のいずれかの処分を行います。
-当該課題を0点とする
-当該課題を0点とし、期末試験から減点する
-この授業の単位を認定しない
-学科に報告し、この授業の単位を認定しない
-大学に報告し、この授業と同じ学期の単位をすべて認定しない
-大学に報告し、無期停学または退学
-期末試験から減点する
-期末試験の受験を認めない(この授業の単位を認定しない)
大学に報告すると、中部大学の学則第44条および試験中不正行為に関する細則に基づいて懲戒されます。
学科に報告すると、学科で懲戒処分を決めます。
*不正行為の判定 [#i83252ad]
ほぼ同じプログラムが複数の学生から提出された場合には、教員がプログラムを確認し、不正行為の疑いがあると判定します。
ほぼ同じかどうかは、以下のようにして判定します。
**コピー隠蔽テクニック [#h61c056e]
以下のテクニックは、コピーしたことがばれないように隠蔽するためのものとしてよく用いられます。
-変数名、関数名、マクロ名、定数の値、出力される文字列、配列の要素数などを変える
-空白、タブ、改行を挿入する、削除する
-変数宣言、関数定義、マクロ定義などの場所を変える
-省略可能なものを省略する、追加する
これらの違いしかないものは、同じものとみなします。
誰が作っても同じになるような簡単な課題では、同じになっていてもかまいません。
ただし、誰が作っても同じになるような簡単な課題では、同じになっていてもかまいません。
**コピー検出ソフトウェア [#z0e125d6]
これらのコピー隠蔽テクニックに対して、コピーされたプログラムを検出するソフトウェアが開発され、公開されています。
この授業では、次のプログラムを使って判定します。
-[[JPlag:https://jplag.ipd.kit.edu]]
**コピー判定 [#m0c54239]
次の手順に従って抽出されたものは、ほぼ同じであると判定します。
+提出されたプログラムから全角文字を除去する(JPlagが全角文字に対応していないため)
+JPlagでプログラムを比較する
+一致率が0%のプログラムを除いて一致率を集計する
+一致率が統計的有意に高いものを抽出する
たとえば、一致率が平均50%、標準偏差20%の課題において、一致率が83%を越えるプログラムは、5%有意水準の片側検定で統計的有意に一致度が高い(コピーである確率が95%より高い)ので、ほぼ同じであるとし、コピーの疑いがあると判定します。
ある課題について、学生から提出されたプログラムをこのJPlagに入力したところ、全体の約7割の組み合わせでは一致度が0%と判定されました。
一致度が0%でないプログラム、つまり、似ていると判定された組み合わせでも、ほとんどは30-60%の一致率でした。
最も高い一致率は95.8%で、これをほぼ同じとして教員が確認し、コピーの疑いがあると判定しました。
誰が作っても同じになるような簡単な課題には適用しません。
ただし、誰が作っても同じになるような簡単な課題には適用しません。
*コピー検出に関する研究 [#d01b1028]
コピーを検出する技術については、かなり前から研究されています。
たとえば、日本語で読めるものとしては、次のようなものがあります。
-[[コードクローン検出技術の展開>https://www.jstage.jst.go.jp/article/jssst/28/3/28_3_3_29/_article/-char/ja/]]. 神谷年洋, 肥後芳樹, 吉田則裕. コンピュータソフトウェア, Vol. 28, No. 3, pp. 29-42 (2011)
-[[コーディングスタイルの特徴量とソースコード盗用との関係の分析>http://se-naist.jp/pman3/pman3.cgi?DOWNLOAD=413]]. 武田隆之, 牛窓朋義, 山内寛己, 門田暁人, 松本健一. 情報処理学会研究報告, Vol. 2010, No. 8, pp. 1-8 (2010)
-[[ソースコード流用のコードクローンメトリクスに基づく検出手法>http://sel.ist.osaka-u.ac.jp/lab-db/betuzuri/archive/783/783.pdf]]. 岡原聖, 真鍋雄貴, 山内寛己, 門田暁人, 松本健一. 電子情報通信学会技術研究報告, Vol. 109, No. 307, pp. 73-78 (2009)
-[[コードクローン検出法>https://www.jstage.jst.go.jp/article/jssst/18/5/18_5_529/_article/-char/ja/]]. 井上克郎, 神谷年洋, 楠本真二. コンピュータソフトウェア, Vol. 18, No. 5, pp. 529-536 (2001)
プロのプログラマーがコピーして隠蔽したとしても検出できるように研究、開発されていますので、自分でプログラムを作れないような人が隠蔽してもすぐに見つかってしまいます。
*コピー検出の確率 [#rf3e8df9]
ある課題でコピーが検出される確率が [math]p[/math] のとき、[math]k[/math] 回のうち少なくとも一回検出される確率は [math]1 - (1 - p)^k[/math] です。
[math]p = 0.5[/math](バレるかバレないか半々)だとしても、少なくとも一回検出される確率は以下のようになります。
-1回目 50%
-2回目 75%( [math]1 - 0.5^2 = 0.75[/math])
-3回目 87.5%( [math]1 - 0.5^3 = 0.875[/math])
-4回目 93.8%( [math]1 - 0.5^4 = 0.9375[/math])
*コピーと判定されない、疑われないために [#f3af2628]
**自分が作ったプログラムを他の人に渡さない、見せない [#qa4fed78]
あなたがコピーしなくても、プログラムを渡した相手、見せた相手がコピーして提出したら、あなたも不正行為をしたとみなされます。
それだけでなく、他の人に答を教えることは、その人が自分で考える機会を奪ってしまいます。
その結果として、その人はコピーで済ませた部分をきちんと理解しないまま授業が進んでしまうかもしれません。
そして、単位が取れない、他の授業(C言語応用、プログラム演習など)にもついていけない、留年する、卒業できない、就職できない、就職してから困る可能性があります。
つまり、自分が作ったプログラムを見せてあげることは、友達を助ける行為に見えますが、友達の人生を狂わせる可能性がある行為です。
**自分で作ったプログラムを提出するまでは、他の人が作ったプログラムを見ない [#ia52d929]
最初のうちは、答とされるプログラムを見てしまうと、そのプログラムと違う別のプログラムを考えることはとても難しいです。
つまり、一度解答例のプログラムを見てしまうと、それに良く似たプログラムしか作れなくなってしまいます。
また、友達はできたと言っていても、そのプログラムが間違っていることがあります。
間違っているところまでそのまま真似すると、コピーしたことがすぐにわかってしまいます。
**考え方、アルゴリズム、フローチャートを教えてもらう(教える) [#w73f4bfd]
課題プログラムの作り方を全部を教えてもらう(教える)と、結果としてほぼ同一のプログラムになってしまいます。
したがって、教えてもらう(教える)のは、考え方、アルゴリズム、フローチャートにしましょう。
**まだプログラムを作っていない人と一緒にプログラムを作らない [#a89ab4dc]
二人で協力しながら一つのプログラムを作っても、どちらかしか一人しか提出できません。
ですから、二種類のプログラムが作れないなら協力してプログラムを作るべきではありません。
二人で協力しながら考えたり、アルゴリズムを書いたり、フローチャートを描くのは問題ありません。
**プログラムがコンパイルできない、うまく動かないときは、課題ができた人に見てもらう [#bf97576e]
自分が作ったプログラムがコンパイルできないとき、うまく動かないときに、どこが間違っているのかを友達に見てもらうことは問題ありません。
ただし、まだ自分のプログラムを作っていない人に見てもらうと、相談しながらプログラムを作ることになったり、相手が作ったプログラムがあなたのプログラムによく似たプログラムになってしまう可能性がありますので、まだ課題ができていない人にプログラムを見てもらう(見せる)のは止めましょう。