[先週の復習] Turtle Graphics の導入 => この追加説明と課題 再帰呼び出し(関数の再帰定義) 関数の定義の時に、自分自身を呼び出す 1. 「繰り返し」が可能になる 例 : ピラミッド => だんだん、文字列を短くしながら、出力する 「短くする、短くしたものを出力する」が繰り返されている [ポイント] 「記述」としては、「有限」だが 「実行結果」は「(原理的に..)無限」になる 2. 命令の組み合わせ a. 順接/ b. 条件分岐 / c.繰り返し(再帰的定義) => 原理的に可能な事は、すべてのこの三つの組み合わせだけでできる <= 「プログラムの作成方法」としては、「すべて」学んだ事 「原理的に可能」と「実際にできる」は違うので 「実際の問題」にたいして、「どうように適用するか」を話したい => 「アルゴリズム」の内容、分野毎にテクニックがある [今週の話] 再帰を用いた「繰り返し」 同じ命令 ( 命令は同じでも、変数が含まていれば、変数の変化によって、 異なる振る舞いをする可能性がある ) 1. 「繰り返し」を記述するための、「再帰」のパターンがある その「パターン」を利用すれば、簡単に(再帰を使って)繰り返しが表現できる 2. 引数を利用する事により、「繰り返し」の結果を変える事ができる # 変化しなものを利用する事が多い 3. 繰り返しに利用する「文字列:機械的[だんだん短くなる]に変化する」を利用する、 さらに、いろいろな事が可能なる (4. 追加する引数も変化させる事も考えられる) [前半] 再帰 => 繰り返し => いろいろなパターンを話した => ちょっとした変更によって、いろいろな事可能になる [前回の課題] Turtle Graphics を利用して、「回」のように見える図をかけ *********** * * * ***** * * * * * * * * * * ***** * * * *********** 例題として、四角を書くプログラムがあるので、それを利用する.. Turtle Graphics を利用する [準備] #include "s_turtle.h" <= 亀の命令に必要 亀のできること s_turtle_move : いま居る所に足跡を残し、次に進む s_turtle_jump : いま居る所に足跡を残さず、次に進む s_turtle_turn : 向きを 45 度だけ時計まわりに向きを変える s_turtle_stop : 亀プログラムの終了 : return 0 の前に呼び出す !! これまでは、「できること」は、「printf を利用してメッセージを出す」事だけ !! => 「できる事」が増えた !! 「単語」が増えた !! 「単語」=> あらかじめ用意されていて、それを呼ぶだけで、ある程度の事をやってくれる(関数) !! => 「単語」を増やすと、できる事が増える !! 「単語」使い方や意味の説明(規則:「仕様」)の事を API と呼ぶ !! API : Application Program Interface !! 応用プログラムを作成するための了解(プログラムを作成する人と、その単語[機能]を提供側)ルール !! => API に従って呼び出せば、適切なサービス受けられる !! 「ルールを守る」という『対価』に対して「サービス」が受けられる - turtle graphics を利用するプログラムは、turtle フォルダの下に置く - コンパイル/リンク/実行する場合 「make BASE=ソースファイル名の拡張子を取り除いたもの test」 cf. make BASE=20190517-01-9999 test [ ubunt アプリケーションで、グラフィックスのプログラムを実行する場合] => XLaunch を動かす必要がある。 [文字列と『文字』の話] printf ( 文字列 ) => 画面に文字が表示される 「文字列」=> 「"」〜「"」: 「"」で挟まれたもの cf. "abc" : 長さ 3 の文字列で、その文字列は「a」,「b」,「c」からなる <新規> putchar ( 文字 ) => 画面に「文字」が表示される 「文字」=> 「'」+ 半角一文字 + 「'」: 「'」で挟まれた一つの文字 cf. 'a' => 「a」という一つの文字 !! 「文字」と「文字列」は違うもの(異なるデータ型のデータ) !! "a" : 長さが 1 で、「a」一文字からなる「文字列」 !! 'a' : 「a」一文字