1 / 27

定数と文字列の出力

定数と文字列の出力. 画面上に 「 Hello 」と表示させる. ␣␣␣␣␣␣ print ␣ *,’Hello’ ␣␣␣␣␣␣ end. 注) ␣ はスペースを表す. コンピュータへの命令. print ␣ *, ・・・. ‘ 文字列 ’ とすれば画面上に 文字列 があらわれる。. ・・・(の内容)を表示. end. プログラム の 終わり. 定数と文字列の出力. ␣␣␣␣␣␣ print ␣ *,1+1 ␣␣␣␣␣␣ end. としてプログラムをコンパイル・実行. 画面上には、「 1+1 」ではなく 「 2 」(計算結果)が表示される.

snowy
Download Presentation

定数と文字列の出力

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 定数と文字列の出力 • 画面上に「Hello」と表示させる ␣␣␣␣␣␣print␣*,’Hello’ ␣␣␣␣␣␣end 注)␣はスペースを表す コンピュータへの命令 print␣*,・・・ ‘文字列’とすれば画面上に 文字列 があらわれる。 ・・・(の内容)を表示 end プログラムの終わり

  2. 定数と文字列の出力 ␣␣␣␣␣␣print␣*,1+1 ␣␣␣␣␣␣end としてプログラムをコンパイル・実行 画面上には、「1+1」ではなく「2」(計算結果)が表示される print␣*,・・・ ・・・(の内容)を表示 数式を入れれば画面上に 計算結果 があらわれる。

  3. 定数と文字列の出力 ␣␣␣␣␣␣print␣*,1/3*3 ␣␣␣␣␣␣end としてプログラムをコンパイル・実行 1/3*3 → 1÷3×3の意味 画面上には、「1」ではなく「0」が表示される Fortranでは、「整数」と「実数」を厳密に区別する 1 は整数 1. は実数 整数同士の計算結果は整数となる → 1÷3(=0.333・・・)は「0」 整数と実数の計算結果は実数となる 「1/3*3」の部分を に変えてそれぞれコンパイル・実行 結果は? 1/3*3. 1/3.*3 1./3*3

  4. 実数の表し方 「1.」と書くよりは「1.d0」と書く方が良い 「10.」は「10.d0」または「1.d1」 「0.1」は「0.1d0」または「1.d-1」 1.23d2 → 1.23×102の意味 倍精度の実数である (有効桁数が単精度に比べて倍) 「1.23e2」は単精度の実数 倍精度を使った方が打ち切りによる誤差が小さくなる

  5. 変数の利用 • 変数:数値を記憶しておく箱 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣i=1 ␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣end おまじない。文頭に必ず置く。 変数「i」に「1」を代入(記憶) 変数「i」の中身を表示 integer::i,j,k 変数「i」「j」「k」(::の後ろの文字)を「整数型」として定義 「i」「j」「k」の中には整数(部)しか入らない

  6. 変数の利用 • 変数:数値を記憶しておく箱 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣i=1.6d0 ␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣end おまじない。文頭に必ず置く。 変数「i」に「1.6」を代入(記憶) 変数「i」の中身を表示 結果は? 「i」の中には整数部しか入らない(0.6は切り捨てられる)

  7. 変数の利用 • 変数:数値を記憶しておく箱 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣precision::a ␣␣␣␣␣␣a=1.6d0 ␣␣␣␣␣␣print␣*,a ␣␣␣␣␣␣end おまじない。文頭に必ず置く。 変数「a」に「1.6」を代入(記憶) 変数「a」の中身を表示 double␣precision::a,b,c 変数「a」「b」「c」(::の後ろの文字)を「倍精度実数型」として定義 「a」「b」「c」の中には実数が入る

  8. 変数の利用(データの読み込み) • 変数を利用するとデータを外から入れることができる ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣read␣*,i ␣␣␣␣␣␣i=i+1 ␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣end 上で読み込んだ「i」の数値に「1」を加えたものを再び「i」に代入 read␣*,i 上で定義した変数「i」の中にキーボードから入力した数値を記憶 「i」が整数型なら整数部のみ、実数型なら実数すべてが記憶される

  9. 条件による分岐 • たとえば、変数「i」の値が0より大きければその値を表示、0か0より小さければ警告を表示するようなプログラムを考える。 if␣(条件)␣then (条件が満たされたときの操作1) (条件が満たされたときの操作2)  ・・・ end␣if

  10. 条件による分岐 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣read␣*,i C ␣␣␣␣␣␣if␣(i>0)␣then ␣␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣if␣(i<0.or.i==0)␣then ␣␣␣␣␣␣␣print␣*,’input value is not positive.’ ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣end 「i」が0以下のときは ”end␣if”の下までスキップ 変数「i」の値が0より大きい場合

  11. 条件による分岐 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣read␣*,i C ␣␣␣␣␣␣if␣(i>0)␣then ␣␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣if␣(i<0.or.i==0)␣then ␣␣␣␣␣␣␣print␣*,’input value is not positive.’ ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣end 「i」が0より大きいのときは ”end␣if”の下までスキップ 変数「i」の値が0より小さい または(.or.) 変数「i」の値が0に等しい場合 または(.or.)のほかに、さらに(.and.)をつかって条件を組み合わせることができる 「or」や「and」の前後を「.」(ピリオド)で挟むことを忘れない!!

  12. 条件による分岐 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣read␣*,i C ␣␣␣␣␣␣if␣(i>0)␣then ␣␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣else ␣␣␣␣␣␣␣print␣*,’input value is not positive.’ ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣end 変数「i」の値が0より大きい場合の処理 そうでない場合の処理

  13. 条件による分岐 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣read␣*,i C ␣␣␣␣␣␣if␣(i>0)␣then ␣␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣else ␣␣␣␣␣␣␣print␣*,’input value is not positive.’ ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣end if␣(条件)␣then (条件が満たされたときの操作) else (条件が満たされなかったときの操作) end␣if

  14. 関数の呼出しⅠ(組み込み関数) • 数学でよく使われる関数 • sin, cos, log, ルート(平方根), 絶対値, ・・・ FORTRANでは、あらかじめ組み込み関数として用意されている 関数名(引数) a = sqrt(2.0d0) → 変数「a」の中に2の平方根(=1.4142…)が代入される sin(x) sin x の値(xの単位はラジアン) cos(x) cos x の値(xの単位はラジアン) tan(x) tan x の値(xの単位はラジアン) abs(x) x の絶対値 int(x) x の小数点以下を切り捨てて整数部を整数型として返す dble(i) 整数型の変数「i」を実数型に変換

  15. 関数の呼出しⅠ(組み込み関数) sin 45°を表示するプログラムの例 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣precision::a ␣␣␣␣␣␣a=45.0d0*3.14d0/180.0d0 ␣␣␣␣␣␣print␣*,’Sin(45deg.) =‘,sin(a) ␣␣␣␣␣␣end 45°をラジアンに 変換した値をaに代入 または ␣␣␣␣␣␣print␣*,’Sin(45deg.) =‘,sin(45.0d0*3.14d0/180.0d0) ␣␣␣␣␣␣end

  16. 基本問題6:判別式の注意点 • 計算機は「無理数」を扱えない(有効数字16ケタ) ␣␣␣␣␣␣print␣*,sqrt(3.5d0)/sqrt(2.d0)-sqrt(7.d0)/2.d0 ␣␣␣␣␣␣end を計算すると? → 0 にならない 有効桁数の制限による誤差 判定式が0かどうかを判断するときに注意が必要!

  17. 基本問題6:判別式の注意点 判定式をDとしたとき ␣␣␣␣␣␣if␣(D==0.d0)␣then ␣␣␣␣␣␣(重根の解を表示) ␣␣␣␣␣␣end␣if とすると、計算誤差の影響で重根を見落とす可能性あり! その回避策として ␣␣␣␣␣␣if␣(abs(D)<1.d-10)␣then ␣␣␣␣␣␣(重根の解を表示) ␣␣␣␣␣␣end␣if Dの絶対値が10-10より小さければDは0とみなす どの程度の値が適当なのかはケースbyケース

  18. 繰り返し • 同じような処理を繰り返し実行する場合 • たとえば、0°~90°までの三角関数を5°毎に表示 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣precision::theta C ␣␣␣␣␣␣theta=(3.14159d0/180.d0)*0 ␣␣␣␣␣␣print␣*,0,sin(theta),cos(theta),tan(theta) ␣␣␣␣␣␣theta=(3.14159d0/180.d0)*5 ␣␣␣␣␣␣print␣*,5,sin(theta),cos(theta),tan(theta) ・・・ ␣␣␣␣␣␣theta=(3.14159d0/180.d0)*90 ␣␣␣␣␣␣print␣*,90,sin(theta),cos(theta),tan(theta) C ␣␣␣␣␣␣end 0°をラジアンに 変換した値をthetaに代入 角度の値以外は 同じ処理の繰り返し

  19. 繰り返し • 同じ処理を繰り返すように指示する命令 → DOループ do␣整数変数名␣初期値,終了値 (繰り返す操作) end␣do 実行結果 1 2 3 4 5 6 7 8 9 10 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i C ␣␣␣␣␣␣do␣i=1,10 ␣␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣end␣do C ␣␣␣␣␣␣end iに1を加えて上に戻る (iが10のときは次の行に進む)

  20. 繰り返し • 同じような処理を繰り返し実行する場合 • たとえば、0°~90°までの三角関数を5°毎に表示 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣double␣precision::theta C ␣␣␣␣␣␣do␣i=0,18 ␣␣␣␣␣␣␣theta=(3.14159d0/180.d0)*(i*5) ␣␣␣␣␣␣␣print␣*,i*5,sin(theta),cos(theta),tan(theta) C ␣␣␣␣␣␣end iは0~18 角度は0°,5°,10°,・・・,90°

  21. 配列の利用 • 例えば、3つの箱を用意して、ユーザーが入力した番号の箱の中身を表示する ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣double␣precision::a1,a2,a3 C ␣␣␣␣␣␣a1=0.d0 ␣␣␣␣␣␣a2=2.d0 ␣␣␣␣␣␣a3=5.d0 C ␣␣␣␣␣␣read␣*,i C ␣␣␣␣␣␣if␣(i==1)␣then ␣␣␣␣␣␣␣print␣*,a1 ␣␣␣␣␣␣end␣if C (続き) ␣␣␣␣␣␣if␣(i==2)␣then ␣␣␣␣␣␣␣print␣*,a2 ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣if␣(i==3)␣then ␣␣␣␣␣␣␣print␣*,a3 ␣␣␣␣␣␣end␣if C ␣␣␣␣␣␣end 箱が増えると、 同じ処理を何度も書く必要がある

  22. 配列の利用 • 箱を何個も用意するのではなく、棚を利用する 棚の引き出しの数=箱の個数 ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i ␣␣␣␣␣␣double␣precision::a(3) C ␣␣␣␣␣␣a(1)=0.d0 ␣␣␣␣␣␣a(2)=2.d0 ␣␣␣␣␣␣a(3)=5.d0 C ␣␣␣␣␣␣read␣*,i C ␣␣␣␣␣␣print␣*,a(i) C ␣␣␣␣␣␣end 3つの引き出しの棚(配列) それぞれの棚に値を代入 i番目の棚の値を表示

  23. 配列の利用 • 配列の定義: a(10)→ 一次元配列 b(10,5) → 二次元配列 10×5の行列 (50個の棚) 一次元配列:a(10) 二次元配列:b(10,5)

  24. 関数の呼出しⅡ(外部関数) • FORTRANでは自分で関数を定義できる • sin(x)やcos(x)と同じように、自分で作成した関数をプログラムから呼び出すことができる C ␣␣␣␣␣␣function␣squard(x) ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣presicion::x,squard ␣␣␣␣␣␣squard=x**2 ␣␣␣␣␣␣end C ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣precision::a,squard C ␣␣␣␣␣␣read␣*,a ␣␣␣␣␣␣print␣*,squard(a) C ␣␣␣␣␣␣end 関数squardを定義(引数 x) 関数squardと引数 xの型を定義 主プログラム内で 関数squardの型を定義 関数squardの呼び出し

  25. 関数の呼出しⅡ(外部関数) • 外部関数では処理を途中でやめて値を返すことができる C ␣␣␣␣␣␣function␣squard(x) ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣presicion::x,squard ␣␣␣␣␣␣if␣(x<1.d-10)␣then ␣␣␣␣␣␣␣squard=0.d0 ␣␣␣␣␣␣␣return ␣␣␣␣␣␣endif ␣␣␣␣␣␣squard=x**2 ␣␣␣␣␣␣end C ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣precision::a,squard C ␣␣␣␣␣␣read␣*,a ␣␣␣␣␣␣print␣*,squard(a) C ␣␣␣␣␣␣end x が10-10より小さいときは”0”を返す (returnより下の処理は実行されない)

  26. 関数の呼出しⅡ(外部関数) • 引数は複数であっても構わない C ␣␣␣␣␣␣function␣multiply(x,y) ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣presicion::x,y,multiply ␣␣␣␣␣␣multiply=x*y ␣␣␣␣␣␣end C ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣double␣precision::a,b,multiply C ␣␣␣␣␣␣read␣*,a,b ␣␣␣␣␣␣print␣*,multiply(a,b) C ␣␣␣␣␣␣end

  27. 関数の呼出しⅡ(外部関数) • 外部関数で引数の値を変える →主プログラム内での引数の値も変わる 重要 C ␣␣␣␣␣␣function␣inc(x) ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::x,inc ␣␣␣␣␣␣inc=0 ␣␣␣␣␣␣x=x+1 ␣␣␣␣␣␣end C ␣␣␣␣␣␣implicit␣none ␣␣␣␣␣␣integer::i,inc ␣␣␣␣␣␣i=4 ␣␣␣␣␣␣print␣*,i ␣␣␣␣␣␣print␣*,inc(i) ␣␣␣␣␣␣print␣*,i C ␣␣␣␣␣␣end 引数 xに1を加える 関数incは0を返す 実行結果 4 0 5 もとの i の値 関数 inc の値 関数 inc呼出し後のi の値

More Related