[OpenGL のセットアップ] 本日(2019/05/17)のページの download の所から、20190517.zip をダウロード ダウロード先は c:\usr\c 展開する 展開先を c:\ur\c にする XLaunch を起動 (先週インストールしたもの) 設定は、[次へ」で OK Ubuntu を起動 OpenGL のライブラリのインストール sudo apt-get install freeglut3 freeglut3-dev => ここでちょっと時間がかかるので、あらかじめやっておくr OpenGL のテスト cd c/20190517/ogltest make make test => 新しいウィンドウができて、中で四角が回転すれば OK [前回まで] 「if 構文」を学んだ What : 条件成立、不成立によって、異なる二つの命令のどちらか一方を実行する指示 if ( 条件 ) { 条件が成立したときの命令 } else { 条件が不成立の時の命令 } Why : 状況(条件確認する)によって、適切な命令を選択して実行できるようにする cf. if 構文導入前 : 基本、行う命令は同じ(変数の値は、引数によって変更が可能なので、 同じ命令でも、異なる振る舞いはできるが、振る舞いの違いは、変数に指定する 値の違いなので、「値に対して連続的な振る舞い」しかできなかった.. => if 構文の導入によって、 引数の値によって、まったく異なる二つの命令のどちらかが実行可能になる # 「値に対して、不連続な振る舞い」が記述できるようになった。 !! if 構文の導入によって、「できる事が増えた(順接だけではできな事ができる)」 !! 順接と、if 構文を導入しても、プログラムの記述量より、多くの命令は実行できない !! 順接(命令を並べると、その命令を並べた順に実行) => 並べた命令数と実行する命令数同じ (関数を使うと、行数よ、実行命令を増やす事ができるが、それでも有限の個数の命令しか実行できない) !! if 構文は、記述した二つの命令のうちどちらか一方を実行だから、記述量より、実行量のが少なくなる !! => 順接と if 構文(を単純に利用した場合)だけだと、実行される命令の個数は、(原理的に)有限になる !! => 最初に、最大値があって、それより多くの状況に対処できない !! # 結果として、特定な状況に対する適切な、有限の処理ができれば良いが.. !! cf. 長さが有限な文字列全体の集合は、無限 再帰呼び出し what : 関数を定義するときにその定義の内容の中で自分自身を呼び出す事 cf. 数学のいくつかの関数は再帰的に定義さている 自然数 n の階乗 n! は、次のように再帰的(帰納的)に定義されている 1 (n が 1 の時) n! = { n * ((n-1)!) (その他) 3! = 3 * ( (3-1)! ) = 3 * 2! = 3 * 2 * ((2-1)!) = 3 * 2 * 1! = 3 * 2 * 1 = 6 !! 有限の記述で、無限の場合に対応する表現が可能 why : 無限の状態に対して(有限の記述で)対応できるプログラムを記述できるように するため <= 同じ命令を、何度でも実行 ( 繰り返し ) how 関数定義の中で、自分を呼ぶ 1. 必ず、if 構文を使って、再帰をしない場合を作る 2. if 構文の条件で利用する変数を「減らして」行く # 最小値になった、終わり == プログラム 命令を並べたもの => 望んでいる仕事を、コンピュータにやらせる事ができる できることはなにか ? できない事 : 任意のプログラムが停止するかどうかを判定するプログラムは作れない 「できる事全体」は、いろいろ人が考えた結果.. どうも同じなっている => 「できる事ができる能力」の事を「万能性」と呼ぶ プログラムを命令の組み合わせで作るときには、 順接と、条件分岐(単純な if 構文)、繰り返し(再帰関数の定義) の三つの機能さえ提供すれば、「万能」になる事が証明されている。 => 命令の組み合わせの種類はこの三種類である トラブルシューティング 1. make とすると、「ない」といわれる sudo apt install make 2. 「failed to open display '' 」といわれた場合 (先週資料に書いてあるが..) export DISPALY=:0.0 とする