Comments
Description
Transcript
情報活用演習06 第11回
JohoEnshuu06_11.ppt 情報活用演習06 第11回 ~~プログラミング入門(2)~~ 担当:水野 恒史 (代講:深沢秦司) 居室:理学部 物理科学科 高エネルギー宇宙研究室 (理学部 B210号室) 電子メール:[email protected] ホームページ:http://home.hiroshima-u.ac.jp/tsune/ 1 JohoEnshuu06_11.ppt 前回の復習:プログラミング言語とは •ユーザーの指示に応じてデータの処理を行うものをプログラム、プ ログラムを記述する人工言語を、プログラミング言語という。 •プログラミング言語には、大別して2種類ある。 •インタープリタ:記述された処理を1行1行実行するもの。Perlや awkなど •コンパイラ:記述されたプログラムを、一度計算機が直接実行可 能な形式に翻訳して実行するもの。FortranやC、C++など。 •本演習では、もっとも代表的なプログラミング言語であるC言語を題 材に、プログラムの記述、コンパイル、実行を体験するとともに、簡 単なプログラムの作成に取り組んでもらう。最終的にはgnuplotと組 み合わせ、物理の問題をグラフ化できるようになるのが目的。 •手始めに、文字の表示および、整数、実数の計算(簡易電卓)プロ グラムを作成した。 2 JohoEnshuu06_11.ppt 関数の計算:コードの記述 •単純な計算の仕上げに、数学や物理で用いる関数の使い方を学ぶ。C言語では、これ らは「数学ライブラリ」として準備されており、「include」命令で数学ライブラリを使う旨を 宣言しなければならない。三角関数、指数関数などのあらわし方はgnuplotとほぼ同じ である。下の例をまね、様々な関数を計算するプログラムを書いてみよう。 数学ライブラリを使うためのおまじない 関数は実数値をとるので、変数も実数を用 いる。ここではa-fまでの6つの変数を使う。 C言語では、円周率は「M_PI」なる文字で 表す。(他のシステムでは異なることがあり ます) 三角関数はsin(*),cos(*),tan(*)、平方根 はsqrt(*)、指数関数はexp(*)、べき乗は pow(*,*)、対数関数はlog(*)および log10(*)となる。なお、pow(a,b)とは「aの b乗」という意味。 3 JohoEnshuu06_11.ppt 関数の計算:プログラムの実行 中身を確認し、コンパイルおよび実 行を行うコマンド。「-lm」が、数学ライ ブラリを使う際は必要 sin( 0 ) sin( π / 4 ) sin( π / 2 ) 9 25 100 cos( 0 ) 52 cos( π / 4 ) cos( π / 2 ) 10 2 tan( 0 ) e3 tan( π / 4 ) log 10 1000 tan( π / 2 ) log 10 1000000 正しくプログラムがかけていれば、左のよう な出力がでるはずである。うまくいかなかっ た人は、エラーメッセージに注意してソース コードを見直してみてください。 練習:様々な関数を計算させてみよう。試し に、以下の関数を計算させ、結果が数学的 に正しいことを確かめよ。 e0 4 JohoEnshuu06_11.ppt 繰り返し処理:コードの記述 つづいて繰り返し処理の仕方を学ぶ。同じ作業を繰り返し行う、といったことは計算機が得 意中の得意とするところであり、さまざまな数値計算に広く応用できる。本演習では、その基 礎を身につけて欲しい。まずはやってみよう。以下のようにコードを記述してください。(すぐ 後で説明するので、中身はまだ理解できなくても構いません) 中身はあとで説明するので、今は間違い なく記述してください。終わったら、「保存」 ボタンで保存し、左上の「ファイル」メニュー から「終了」を選ぶ 5 JohoEnshuu06_11.ppt 繰り返し処理:プログラムの実行 中身を確認し、コン パイルおよび実行を 行う こちらが出力結果。つまり今のプログラムは、 1から10までの整数を順に表示するプログ ラムであった。では、ソースコードの中身は どうなっていただろうか? 6 JohoEnshuu06_11.ppt 繰り返し処理:解説 C言語では、繰り返し処理は「for文」と呼ばれるものを使う。書式は、「for(文A){文 B}」であり、「文A」で繰り返しの仕方を指定する。通常は、整数をひとつずつ大きく していって、ある値に達するまで繰り返す。ここで指定された数だけ、文Bが繰り返 される。具体的には、以下の例をもう一度みてみましょう。 •まず、繰り返し処理で使う整数変数「i」 を宣言する。 •「iを1から」「10まで」「ひとつずつ増や して」かっこの中身(「{」と「}」で囲まれた 部分)を繰り返す、という意味。 •おなじみの「printf」文で、iの値を順次 表示させている。 7 JohoEnshuu06_11.ppt 繰り返し処理:練習 •ここまでできた人は、繰り返しの仕方の指定をいろいろ変えて練 習してみて下さい。以下は、例題です。 •0から10までの整数を順に表示させる。 •-5から5までの整数を順に表示させる。 •0から20までの偶数を順に表示させる。 •1から19までの奇数を順に表示させる。 •逆順:10から0までの整数を、逆順に表示させるプログラムを書く。 (出力は順番に、10, 9, 8, …, 1,. 0となる) 8 JohoEnshuu06_11.ppt こんなこともできます •繰り返し処理ができると、有名な「1から**までの数の和」とかも簡単に出せま す。簡単な例を示します。 ポイントは、「sum」なる変数を 用意し、そこに1,2,3,…の数を 順次加えて行く事。 9 JohoEnshuu06_11.ppt 実行例 •練習として、「1から100までの和」「1から1000までの和」を計算さ せて、答えが正しいことを確かめましょう。(「1からnまでの和」は n(n+1)/2になる) 10 JohoEnshuu06_11.ppt C言語+gnuplot(1):コードの記述 •既に学んだように、gnuplotは関数を描くとともに、データ点をグラフにすることができる。 そこでプログラミングの実用編として、典型的な数学、物理関数をデータ点として計算し、そ れをグラフにしてみよう。こうすることで結果を加工することが可能となり、また表示の細か さなども自由に指定できる。また関数であらわせない(あらわしにくい)現象をグラフにする 場合は、そもそもプログラムと組み合わせるしかない。 •まずは、やってみよう。以下は、三角関数の例。 xは0から 2 π までを200点に分け、yにはsin(x)を 代入し、(x,y)の組を表示させる。 11 JohoEnshuu06_11.ppt C言語+gnuplot(2):実行と結果の保存 •以下が、プログラムの実行例。 ポイントは、「./program8 > program8.dat」の行。この「>」なる記号は 「リダイレクト」と呼ばれ、値を画面に出力さ せるかわりにファイルに保存することができ る。右が今作ったファイルの中身。(x, sin(x))の値の組が保存されているのがわか る。とても便利なので、是非覚えてください。 12 JohoEnshuu06_11.ppt C言語+gnuplot(3):グラフの作成 •あとはgnuplotでグラフを書けばよい。起動 は「gnuplot」と打つ。その中で「set grid」す ることでグリッドを表示させ、「plot」コマンド で実際にグラフ(今回の場合はデータ点の 組)がプロットされる。gnuplotの使い方を忘 れた人は、第7-9回の資料を参照してくださ い。 13 JohoEnshuu06_11.ppt 練習問題 •三角関数 y = sin x y = cos x y = tan x •円および楕円 (ヒント:媒介変数表示で x=cos(t), y=sin(t)とし、t を0から 2π まで変化させる と分かりやすい) x x 2 x 2 2 2 2 + + + y y y 2 その他、放物線、双曲線、指数関数ほか、好きな関数で練習してみてください。 では、よいお年を。 = 2 2 2 2 1 = 1 = 1 14