[先週の内容] 1. プログラムは、作業の手順を記述したもの 2. コンパイルの仕方を学んだ コンパイル:人間に分り易い形に記述したものを計算機に分り易い形に変換する事 3. C 言語 人間がプログラムを記述するための専用の言語がある => いろいろある この講義では、そのうちの一つである「C 言語」を学ぶ => 英語や、中国語などと同じ、新しい言語を学ぶ <= プログラミング言語は、人工言語(<=> 自然言語:日本語,英語,etc..)なので、 学び易い(覚える事が少ない) 実行する事ができるので、「分からなくても使える」 [C 言語] a. 「Hello, World」プログラム => 新しいプログラムを作成するスタート地点として利用できる ! printf が、画面にメッセージ出力する命令 b. 順接 : 命令を並べると、その順番に命令が実行される 命令の実行順序を、プログラム内で指定できる c. 関数 : 命令例に名前を付ける事ができて、 その名前を指定するだけで、その命令が実行できる [1 について] プログラムを作る目的は、 コンピュータに、作業をさせたい コンピュータにさせたい作業の手順を記述して、コンピュータに渡して実行させる 作業の手順を「プログラム」と呼ぶ ただし、コンピュータが直接理解できる「プログラム」は、人間には難しい 「難しい」=> 目的を実現する事が困難 困難の理由 コンピュータの場合の困難な理由 量 : コンピュータが直接理解できる命令は、単純な事しかできない。 => やりたいことを実現するためには、たくさんの指示が必要 質 : ミスができない => コンピュータは厳密に命令を解釈するので、ちょっとしたミスで、とんでもないことになる 形式的に、誤りをチェックする仕組みを用意している => 誤りにくい手段の組み合わせで、目的を実現するようにもなっている # 効率とトレードオフしている これらの「困難」の一部を、 コンパイラが担っている(効率を犠牲にして..) [今週の内容] 作業 s_curl の環境を作る 関数(再) sample-001.c => sample-002.c 関数 fourtimes の定義と、その利用 関数を定義する(命令列に名前をつける) 関数の呼び出し(名前を利用して、命令を利用する) 定義された関数は、他の関数(main以外)からでも利用可能 => 基本命令(printf) を組み合わせて、小さな関数を作り、 さらに、その小さな関数を組み合わせて、大きな関数を作ることができる # 関数を作ることによって、「小さな」機能を実現できる # 「大きな」機能は、人間には難しいから <<リダイレクション:方向替え>> プログラム(コマンド)を実行するときに、 後ろに 「>」と、「ファイル名」を続けて指定すると、 プログラムの画面への出力が、その「ファイル」に記録される # 画面への出力を、ファイルへの出力に切り替える(リダイレクション)できる !! 後で学ぶが、入力のリダイレクションも可能 引数付き関数 1. 二つの(引数のない)関数が、ほぼ同じ形をしている時 => 一つの引数付き関数にまとめる事が可能(かもしれない) 2. 違う部分を、変数(x,y,z..) に置き換える => 置き換えた結果、同じ形をしていれば、それは一つの関数にまとめられる 3. 関数定義の関数名の後ろにある「()」の中に変数名を書き、その変数の前「char *」を追加 => 引数付き関数が定義される 4. 引数付き関数を呼び出すには、関数名の後ろの()の中に、変数に入ってほしい物を入れる [step 1] fourTimes() と fourTimes2() が似ている void fourTimes() { printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); } void fourTimes2() { printf ( "Hello, World 2\n" ); printf ( "Hello, World 2\n" ); printf ( "Hello, World 2\n" ); printf ( "Hello, World 2\n" ); } [step 2] 引数付きの関数 fourTimesX() void fourTimesX() { printf ( X ); printf ( X ); printf ( X ); printf ( X ); } [step 3] 引数付きの関数の引数部分を整備 (「char *」の意味はあえて説明しない ) void fourTimesX(char *X) { printf ( X ); printf ( X ); printf ( X ); printf ( X ); } [step 4] 元の関数 (fourTimes, fourTimes2) を、引数付き関数で表現する 引数付き関数の呼び出し時に、変数にいれたい内容を指定する void fourTimes() { printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); } void fourTimes() { foruTimesX( "Hello, World\n" ); } 引数付き関数の良い所 1. 複数の関数を一つまとめる事ができる (無駄が減って、作成作業が楽) 2. 引数は、後から決められる 引数付き関数例 f(x) = x*x f(2) = 2*2 = 4, f(3) = 3*3 = 9 g(x,y) = x + y g(1,2) = 1+2, g(2,3) = 2+3 => 関数の引数は複数でもよい (変数の値は、独立に指定できる) 引数付き関数の考え方 異なる複数のものを、その違いを「変数化」する事によって、一つのもので表現ようにする => 抽象化(パラメーター化) 問題 A => 解決 A 問題 A = 問題 F(a) => 解決 A = 解決 G(a) 問題 B => 解決 B 問題 B = 問題 F(b) ====> 解決 B = 解決 G(b) で得られる 課題 童謡の歌詞を出力するプログラムを作成しなさい => 童謡はなんでもよい(サンプルは、「一番星みつけた」だがなんでもよい ) ただし、できるだけ、引数付き関数を使って欲しい