# **卒業研究(中間発表)** ### 最終目標 プログラミング能力と論理的思考力の具体的な関係について調べる ### 1.論理的な思考力への理解を深める 論理的な思考に必要と考えられる活動として、以下の6つがある ① 規則、定義、条件等を理解し適用する ② 必要な情報を抽出し、分析する ③ 趣旨や主張を把握し、評価する ④ 事象の関係性について洞察する ⑤ 仮説を立て、検証する ⑥ 議論や論証の構造を判断する そして、論理的な思考力は、複数の能力から成り立っていて、得意不得意がはっきりしていて、その中で事実を認識する能力は高いことが多いが、分析する能力は低い傾向があった このことから、論理的思考力とプログラミング能力のそれぞれに関するテストを受けてもらい、成績を比べることで、具体的に論理的思考力のどの要素がプログラミング能力と関係しているのかを調べる ### 2.論理的思考力について調べる方法を探す 論理的思考力は、以下のような論文の問題を使用し測定する 問題によって①~⑥のどの要素に関係しているかが違うので、要素ごとに問題数をそろえて公平に測れるように調整した ①に関する問題(一般) ![](https://hackmd.io/_uploads/ryKZc-nI2.png) ![](https://hackmd.io/_uploads/B1tZqZ2I2.png) ②に関する問題(一般) ![](https://hackmd.io/_uploads/HkPBjZ3L3.png) ![](https://hackmd.io/_uploads/SkvHs-hU3.png) ![](https://hackmd.io/_uploads/SyDHoWnU3.png) ### 3.プログラミング能力ついて調べる方法を探す 一つ目は、大学のプログラミング教科の成績を用いるという方法である この方法はテストに時間がかからないというメリットがあるが、プログラミング教科の成績=プログラミング能力ではないという問題点がある ![](https://hackmd.io/_uploads/SyutvNDOh.png) 2つ目に、上のようなプログラムの選択問題で測定する方法がある。これは選択式のため、比較的に時間も短く済むが、プログラミング能力というよりもc言語の能力を測るという要素が大きい。 3つ目に、去年の大口さんが行ったような、特定の命令で指定された場所へロボットを動かす方法が考えられる。これは、言語に左右されないが、問題によっては時間がかかるので、難易度の調整が必要である。 4つ目に、短冊型のプログラミング試験問題を解いてもらう方法がある。短冊型とは、以下のように、プログラムの1行ずつを選択肢として用意し、回答者が必要な行を自由に選択して並べることでコードを完成させる問題である。 ![](https://hackmd.io/_uploads/Syykkrwu2.png) 短冊型のメリットとして、使える構文を既定できる、語句レベルのエラーは起きない、自由度が大きいため、穴埋めと違って、考えないと解けないといった点がある。 はじめは、プログラム問題も論理的思考力の問題のように要素ごとに分けようとしたが、難しいことが分かったので、純粋なプログラミング能力を言語に関係なく調べられることから、3つ目のロボット問題を使うことにした ### 4.具体的なプログラミング能力の測定問題 言語に左右されない測定方法として、去年の大口さんの卒論のように、ロボットを動かすプログラムゲームのような問題を用いる。 問題の内容として、大口さんの卒論の問題は去年受けてしまっているため、別の問題を考え、問題数は10問を予定している。 また、測定したい内容はコードの長さのみなので、インセンティブなしで命令数のみを用いる。 ![](https://hackmd.io/_uploads/BkLc3_rs3.png) 上記のような5×5マス上において、ロボットを壁を避けながらすべての緑マスへ一度移動させる。ロボットの移動は、命令コードが決まっているためその組み合わせによって決定する。回答では、問題ごとの命令コード、回答時間を求める。 命令コードは以下の7種類である。 命令番号-----移動内容 [1]-----1マス移動 [2]-----2マス移動 [S]-----壁に衝突するまで移動 [R]-----右に90度回転 [L]-----左に90度回転 [T]-----180度回転 [()×N]-----カッコ内の命令をN回繰り返す その他の条件として • 緑マスへの移動判定は、ロボットが緑マスを通過したかではなく一時停止したかで判断する • 緑マスへの移動は、同一マスに何度一時停止しても良い • ロボットの最終停止位置の指定は無い • ロボットの初期方向は、三角形の頂点の方向を向いている • 黒の太線は壁であり、その先に進むことはできない • 移動命令(1・2・S)にて壁にぶつかって進めない場合、不正解でなく次の命令コードが実行される • ()×Nの命令は、(()×N)×Nのように入れ子構造にして良い • 命令数の数え方は、1コード1命令と数える 問題例1 ![](https://hackmd.io/_uploads/SkS3n_Bih.png) 問題例2 ![](https://hackmd.io/_uploads/Hyr22_ro3.png) 問題例3 ![](https://hackmd.io/_uploads/rkH2hOBj3.png) ### 次回以降の目標 個々の問題は完成したので、実際に出題できるような形式に調整し、結果をまとめる ### これまでのまとめ [第3回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/BkfrXWxrn) [第4回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/ryqYjvz8h) [第5回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/SJNnyWh8h) [第6回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/Bk50XlrD2) [第8回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/HyL_JEP_h) [第10回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/BJ0JCYgth) [第11回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/HJGz8dXqn) [第12回資料](https://hackmd.io/@pqTDMBWNR8O22goa19KCpg/H1h-Idm53)