プログラミングの原理 データ構造とプログラミング (第4回)
情報教育のブーターとしてのプログラミング 情報教育において「プログラミング」の学習は、「ブーターの読み込み」の過程に相当する 「ブーター」とは、コンピュータが起動(ブート)する際に一番最初に読み込まれる最小限の命令群 ブーターは、その後に読み込まれる、より複雑なプログラム(ひいてはシステム全体)の基礎となる ここでは、「応用的な知識を生み出すために必要な最小限の基盤」を表す比喩
コンピュータの本質 コンピュータの本質はプログラム コンピュータのあらゆる動作はプログラムによって規定される 「コンピュータの何たるか」を理解するためには、「プログラムの何たるか」を学ばなければならない
プログラムとは プログラムは「仕事の手順」を書いたもの プログラムが書けないことを、コンピュータは実行できない 人間は手順が書けなくてもいろいろなことを実行できる 人の顔を見分ける、声を聞き分ける、字を読む
プログラムの基本構造(1) プログラムの基本は命令文の連続 命令は上から順に実行される→逐次構造 1: fd(100); 2: rt(90); 3: fd(100); .……… ………. 命令は上から順に実行される→逐次構造
プログラムの基本構造(2) 同じ命令の繰り返しをひとまとめにして記述できる →繰り返し for( i=0; i<4; i++){ 同じ命令の繰り返しをひとまとめにして記述できる →繰り返し for( i=0; i<4; i++){ fd(100); rt(90); }
プログラムの基本構造(3) あらかじめ設定した条件に応じて複数の命令を選択的に実行できる →条件分岐 if( i==2 ){ あらかじめ設定した条件に応じて複数の命令を選択的に実行できる →条件分岐 if( i==2 ){ fd(100); } else{ fd(50);
プログラムの基本構造(4) 逐次、繰り返し、条件分岐は、仕事の手順を記述する際のもっとも基本となる構造 これら三つをまとめて「(狭い意味の)制御構造」と呼ぶ
プログラムの基本構造(5) 逐次、繰り返し、条件分岐は「入り口1つ、出口1つ」の構造を持つ点で共通している 一つの構造の中に別の構造を埋め込んで(=入れ子構造)、複雑な手順を実現できる
プログラムのコメント(1) 実際にプログラムを書く場合、命令文(=コンピュータに対する指示)だけを書けば済むわけではない 命令文に加えて、コメント(=人間に対する注釈)を書くようにする コメントはコンピュータの動作にとっては不要だが、人間にとっては重要な意味を持つ
プログラムのコメント(2) コメントには目的を書く × ○ double x; // xは正の数とする double y; // xの小数部は0.5以上か? if((x - Math.floor(x)) < 0.5){ y = Math.floor(x); // xの整数部を // yとする }else if((x - Math.floor(x)) >= 0.5){ y = Math.floor(x) + 1; // xの整数部+1を // yとする } double x; // xは正の数とする double y; // xを四捨五入する(xの小数部は?) if((x - Math.floor(x)) < 0.5){ y = Math.floor(x); // (0.5未満)xの // 整数部をyとする }else if((x - Math.floor(x)) >= 0.5){ y = Math.floor(x) + 1; // (0.5以上)xの // 整数部+1をyとする }
プログラムのコメント(3) 見出しコメント ブロックコメント 行コメント /** * 家を描くプログラム * 家を描くプログラム * 作成日:00.5.3 (1bcBコース教材より) */ import Turtle; class House01 extends Turtle{ /** * 家を描く void start(){ // 屋根を描く rt(30); // 前処理(タートルの角度を調整する) int i; for(i=1; i<=3; i++){ fd(100); rt(120); // 三角形の一辺を描く } rt(60); // 後処理(タートルの角度を調整する) // 本体を描く for(i=1; i<=4; i++){ fd(100); rt(90); // 四角形の一辺を描く 見出しコメント ブロックコメント 行コメント
書法を徹底したプログラム
日本語プログラミング 日本語をベースとしたプログラミング言語が実現されることによって、従来コメントとして記述していた内容がそのままプログラムの命令文となる
「言霊」によるプログラム メインとは{ 大きさが100の家を描く。 } 大きさが「A(整数型)」の家を描くとは{ 長さがAの三角形を描く。 長さがAの四角形を描く。 長さが「A(整数型)」の三角形を描くとは{ 30度右に曲がる。 {A歩進む。120度右に曲がる。}を3回繰り返す。 30度左に曲がる。 長さが「A(整数型)」の四角形を描くとは{ {90度右に曲がる。A歩進む。}を4回繰り返す。
コメントがプログラムになる 言霊はその表現力により、 Javaなどで記述していたコメントの 大部分が必要なくなる。
文法表現が理解しやすい Javaによる以下の表現がどういう意味か、わかるでしょうか? 既存のプログラム言語は、文法が難しいという問題がある if ( a%3 == 5 && b != 10 ){ ・・・ }
文法表現が理解しやすい 日本語プログラム言語「言霊」では、以下のような記述になる if ( a%3 == 5 && b != 10 ){ ・・・ } もし aを3で割った余りが5と等しい かつ bが10と等しくない ならば{ ・・・ } ※空白を入れなくても解釈できます。
文法表現が理解しやすい 既存のプログラム言語は文法が難しいと言う問題がある その為、やるべき事が分かっているのに、その処理の記述ができないという人が非常に多い。
文法表現が理解しやすい 例えば、以下の問題。 タートルグラフィックを使って以下の画像を描いて下さい。 ただし、for文とif文を使って下さい。 ヒント:繰り返し回数が奇数と偶数で場合分けをする
文法表現が理解しやすい 議論すると、この?部分が分からず困る人がたくさんいる。 public static void main( String args[] ){ for( int i=0 ; i<4 ; i++ ){ if( ){ drawSikaku( 50 ); }else{ drawSankaku( 50 ); } move( 60 ); ??????
文法表現が理解しやすい メインとは{ 繰り返し回数(整数型)を生成する。 繰り返し回数に0を代入する。 { 繰り返し回数を2で割った余りが0と等しいならば{ 長さが50の4角形を描く。 }そうでなければ{ 長さが50の3角形を描く。 } 右に60移動する。 繰り返し回数を1増やす。 }を4回繰り返す。
日本語プログラミング言語「言霊」 これにより、 Java言語の文法に悩むのではなく、 アルゴリズムを考え、作り出し、記述する事に集中できる
プログラムを学ぶもう一つの意味
何故、プログラムを学ぶか? コンピュータの本質を理解するため 論理的思考・表現能力を得るため
論理的思考能力とは? これを養う為の訓練なのです。 このような能力は、社会のあらゆる所で 必要になってきます ・ 漠然としたアイデアを具体的な「目的」に 置き換える能力 ・ 「目的」を実現する為に必要なプロセスを、 正確に順序だてて組み立てる能力 ・ 組み立てたプロセスを正確かつ 簡潔に記述する能力
なぜプログラムを学ぶのか タートルで以下の絵が書けると言う事は 絵を書くための論理的なプロセスを 分析・創造・表現 する事ができると言う事なのです
リテラシーとは何か ことばの使用 文字の使用 プログラム(=ことばによる仕組)の使用 人間が解釈する 学校教育が始まる コンピュータが解釈する 学校教育が変わる