数値解析法 (Fortran 編), 2007-06-22 質問とコメント, M は宮本によるコメント。 h00s2073: リスト9についてあらかじめ組み込まれている算術関数はどうしたらわかり ますか?また、例えば作成した複雑でめんどくさい副関数プログラムがあったとしてコピペ 以外で他のプログラムに使うことはできますか? M: 組込み関数は, 文法で定義されていますから, 文法書を見てください. 二番目については, 当該の副プログラムだけを別ファイルとし, 別途コンパイルしておいてリンクするときに あわせてひとつの実行ファイルとする方法, 自分でライブラリを構築してリンク時に 合わせる方法, コンパイル時にインクルードする方法 (ただし後二者は, 規格で決められて いないことなので, 実際の処理系依存になります). h01s2077: 課題や問題のプログラムは、Fortranで組むのが一番やりやすいのでしょうか? 他の言語では、一体どんな感じになるのでしょうか? M: Pascal や C など手続き型の言語であれば, どれでも似たようなものになると思われ ますし, またオブジェクト指向言語でも, メソッドに記述することは大差ないでしょう. でも, Lisp や Prolog ではどうなるか見当もつきません. h04s2019: 配列を定義するには、どのようなコマンドを具体的に入力すればいいんですか? M: 資料のリスト3 の 5--6 行目で宣言の実例を示しています. これ以上の詳細は, 文法書を参照してください. h05s2001: ploblem2-2の説明・概要をプレビューで見て、改行のしかたがおかしかった のであれば教えてください。 M: 「プレビューで見」るとはどういうことでしょうか ? 御存じだとは思いますが, `preview' は `pre-view' ですから, `あらかじめ見る' といった意味なのですが... h05s2002: 最近うちのパソコンの電源が勝手に落ちるんですけど、何が原因なんですかね? 後、windows ヴィスタはあんまり良くないと聞きますが、どうしてですか? M: 電源がヘタっているのか, 基板などが埃に埋もれているのか, 排熱がうまくいかずに 誤動作しているのか, 想像だけでは確かなことはいえませんね. あと, Windows Vista は, 規模が大きいことが欠点で, それからバグがまだ充分に取り きれていない (ユーザーにバグ取りをさせている !?) とか, そもそも Microsoft の 製品だというあたりが, 欠点といえば欠点かもしれません :-p h05s2003: integerをaaやbb、xxなどの二文字にしているのなぜですか? M: 特に意味はありません, 一文字じゃあ物足りなさそうだったからカモ. h05s2004: Fortranの課題についてですが、プログラム実行時に簡単な英文などで 説明・指示が加わるよう「装飾」するとき、調子に乗って顔文字[(・∀・)ニヤニヤ (´;ω;`)グスン...等]も使用したら減点されますか(・_・?) M: まずプログラムのロジックが要求通りにできているのであれば, それ以上の装飾の 部分は, 公序良俗に反しない限り, お好きなようにどうぞ. h05s2007: 先生はプログラムを作る上で分からないことがあったとき、誰かそれに詳しい ひと聞いたりしましたか?それとも、全て独学で習得したのですか? M: もちろんプログラムを作る上で, 他人の助力を得たこともあります. でもそれって, (教わって) *習得する* ような事項じゃないと思うのですけど. h05s2009: 分数の約分の仕方ですが・・・約分できる場合、最初2で割れるかどうか 判断させ、その後さらに約分できるかどうか判断させ・・・みたいなことを、続け させるのですか? M: そういうやり方でも出来そうですね. 唯一絶対な方法は無いと思いますけど. h05s2011: 問題2-1において分数の答えをrealで表示にしたところ、3.という答えになり ました。これはrealでは小数点以下は表示されないということでしょうか? M: 処理系や, 出力の指示の仕方によっては, 末尾のゼロ (ここでは例えば 3.0 の小数点 第一位) を表示しない場合もあるようです. h05s2012: Lisiting4 の18行目の"."というのは何を表しているのですか? M: 表示させてみて, わかりませんか ? 英文なので文末にピリオドを打ったのですが. h05s2013: プログラムを作成していく上で、まだまだわからないことがあります。 明日以降もメールでの質問を受け付けてもらえますか? 先週に、x = sqrt(~~~~)みたいなのをプログラムに組み込んでコンパイルすると次の ようなエラーメッセージが出ました。 reference to intrinsic SQRT at (^) invalid one or more arguments have incorrect type これはプログラムに√が使えないということでしょうか? M: まずはエラーメッセージを読みましょう. ``組込み関数 SQRT の (^) の場所で引数の 型が不正だ'' と言っています. これ以上のことは, 実際のソースを見ていないので 何とも言えません. h05s2015: この授業でやっている内容は、プログラムを勉強する上で、最初に勉強する 内容ですか。もし違ってたら最初にどのような内容のことをするのですか。 M: 大体そうだと思います, そのつもりです. h05s2016: コンピュータの気持ちになって考えるということがなんとなくわかってきた ような気がします。コンピュータの気持ちになるのと人の気持ちになって考えるのでは どちらが重要なのでしょうか? M: どちらにしても, 普段の自分の考え方とは異なる考え方があるということを, 自覚し 想像するという意味では, 共通するところがあると思います. h05s2018: まだ二次方程式の解を求めるプログラムをつくっていますが、プログラムを 作っていくうちにだんだんと内容がわかってきました。ただ、間違いがある場合、 その箇所を探すことが非常に難しいです。なにか間違え探しに使えそうなコマンドは ありますか? M: コンパイル時に詳しいエラーメッセージを出すようにするオプションはあります. ただしこれは, 文法エラーしか検出できません. 論理エラーは, あなたにしか判断でき ません (プログラム作者の意図は本人にしかわからないから). h05s2019: 練習問題1の分数の『/』を結果に表示するにはどうしたらいいんですか? M: ある文字を表示したければ, そういう風にプログラムすれば良いのではないで しょうか. 文字/語句を表示しているプログラムの例は, 資料にたくさんあります. h05s2024: FortranとC言語で作るプログラムはなにが違うんでしょうか。 M: 言葉が異なるので, 表現が異なります. 例えば英語とドイツ語みたいに. h05s2025: プログラムをやっていると、自分がどう考えているか(例えば計算過程)が わかるので面白いです。先生はプログラムをやっていてどういうところにおもしろみを かんじますか? M: 普段無意識のうちに志向し判断し行動しているようなことでも, その過程を自覚し 吟味し明確にするという, `考えること' とは何だろうかと考える面白さがあります. またどんな手順で目的のことをするかを考えるのは, ある種のパズルを解くみたいです. それ以外にも, 企画した通りに動作するモノを作ったという達成感も良いですね. h05s2026: if文を使ってプログラムを行うとき、関係演算子(LTやEQなど)以外の条件を つけられますか、また、つけられるならどのようにすればよいのですか? M: 文法的定義では, if 文で分枝の条件は論理値 (.T. or .F.) をとるものですね. 論理値をとる式には, 関係式の他に論理式もあります. 詳しくは文法書を参照. h05s2028: Listing10の15行目のC------はどういった意味(機能)を持っているのですか。 M: 一桁目が C ですからコメント行です. プログラムの実行には何の意味もありません. しかしソースプログラムを人間が見るときに, そこに区切り線があるように見えるという 機能があります. h05s2029: 今自分達が作っている簡単な演算でも30行くらいになるので、何か新しい ソフトなどを製作するときはもっと膨大な量のデータを打ち込まなければならないと 思うので、新しいソフトを作ったりするのは一般人にはきついと思うのですが、 できるのでしょうか? M: 一般人という人種が存在するわけでは無いと思います. それはさておき, プログラムを 作成しようとする人は, 一般人じゃないかもしれません :-p h05s2030: ブラックジャックのプログラムを作成しました。しかしこのプログラムは こちらでカードを引いてその値を入力しなければなりません。不正が発生すると思い ます。少し改良したいのですがフォートランでは1〜10までの数をランダムで選んで プログラム内で使うようなことはできるのでしょうか。 M: 資料の 3.5.1 節を参照. h05s2034: さっそく課題のプログラムを作ってみました。しかし、約分がうまく できません。文法書のどのへんを読めば参考になるでしょうか? M: 問題の設定が間違っていると思います. `約分' は, Fortran 言語の文法事項なので しょうか ? ちがいますよね. 言語に依存しない数学的操作なのではないでしょうか. したがって必要なのは文法書ではなく, コンピュータの気持ちになることです. 2007-06-15 の h01s2077 参照. h05s2036: 二次方程式を解くプログラムを作る際に二乗根を表すsqrtを使ってみたの ですが、使えませんでした。fortranでsqrtは使えないのでしょうか?それとも単に、 使いかたの間違いなのでしょうか? 資料の中にFortran90では文番号をほとんど使う必要がなくなっていると書かれて いますが、文番号を使う場合はどのような場合があるのですか? M: `使えない' と判断した根拠は何でしょうか ? これではさっぱりわかりませんね. もしも組込み関数の SQRT の使いかたが知りたいなら, 文法書を参照すればいいのでは ? h05s2039: FORTRAN77の使いかたと言うか、なんというか、まぁだいたいこの授業で 演習しなければならない最低限のことは理解できました。なんか、他の人とも質問として 少しかぶっているかもしれませんが、FORTRANに関して今のところ質問したいことがない ので、簡単な質問をしようと思います。FORTRAN言語は他の言語と比べて比較的扱い やすい方なのでしょうか? M: だれがどう扱うことを想定した質問なのか, よくわかりませんが. あなたがこれだけの 時間を費して大体理解できる程度のものですから, コンパイラがソースファイルを扱う (コンパイルする) のは, 易しいと予想できますよね. h05s2045: どうすれば完璧なプログラムが作れますか? M: 任意のプログラムが正しいかどうかを判定する汎用の方法は無いことが証明されて いるそうです. ですから, ましてや完璧であるかどうかを判定することは出来ないと 思われます. すなわち, 仮りに完璧と称するプログラムが出来たとしても, それが本当に 完璧かどうかを検証することができないなら, その主張には意味が無い. h05s2049: ルートが解に出るときに、sqrt(数値)となるように入力しましたが、見づらい 気がします。先生なら、どのように表されるようにしますか? M: ある数の平方根を, sqrt(数) とか √数 とかで表記することに, どういう意味が あるのでしょうか ? sqrt(2.71828) と 1.64872 のどちらが見やすいでしょうか ? また数値計算で値 (物理量) を求めたとして, 例えば得られた結果が ``√3 メートル'' と ``1.732 メートル'' とで, どちらがわかりやすいでしょうね, 別の条件での計算結果 ``√2 メートル'' または ``1.414 メートル'' と比較しやすいでしょうか ? まあ, そういう観点もあるということで. h05s2050: 2・8・1関数副プログラムの説明文の5行目の、「関数の返り値の型」と 「引数」とは何ですか? M: 通常の数学でも, 関数を ``f(x)=3x+1 '' のように書くわけですが, この f(x) を 別の関数 g(y) (g(y)=y*y) と足したりできるわけです. 実際には Fortran では, 例えば x=2 の時の f(x) の値 (7) と y=-2 の時の g(y) の値 (4) を足して 11 という 答えを得るわけですが. この時の 7 とか 4 が, それぞれ関数 f と g の値であり, Fortran プログラムでは副プログラムから return 文でプログラムの本流に戻ってきた ときの値といった意味で, ``返り値'' と呼ぶのでしょう. またこの時の関数の変数 (x や y) が, ``引数'' と対応しています. h05s2051: 自分はレポートを作成するときにwinshellを使っています。先日tex何かを 作成する場合、winshellより、もともとunix上で使われることを考えてつくられたもの なので、emacsなどで作成したほうがよい。といったようなことを見ました。今後の ことを考えた場合に、texの文章などを作成する場合emacsの方がよいのでしょうか? M: わたしには winshell が何者なのかわかりませんので, emacs との比較について何も 論ずることは出来ません. ``〜を見た'' のだそうですが, そのような主張の根拠は 何なのでしょうね ? それに納得すれば, 従えば良いのではないでしょうか ? あるいは 別の強い理由があるので従わないとか. h05s2052: わたしが今持っているPCのスペックは、CPU2000MHz、メモリ 512MB×2 HDD約58GB、グラフィックスボード256MBです。 先生は自分のPCを持っていますか?持っているんでしたら、スペック教えてください。 あと、十数年前まではHDDが200MBしか無かった時代があったそうですが。 その真偽も教えてください。 M: 東芝の Libretto70 は, 購入時から HDD を入れ替えましたが, CPU PentiumMMX 120 MHz, メモリ 32 MB, HDD 7.8 GB ですが, それが何か ? (もちろん FreeBSD !) まあ Windows95 な時代のモノですが. もっと前 (MS-DOS 時代) には, HDD は 40 MB でも高嶺の花でしたよ. h05s2053: プログラムでifを使うとき、その下にwriteを書く場合などスペースを9つ あけてありますが、これには何か意味があるのでしょうか。 M: 人が見て処理のまとまりが分かり易いという意味があります. h05s2055: Do loop のおまけの注意点のところで、カウンタ変数は整数に限らず実数 でもよかったとあります。ではなぜFortran95では整数以外がカウンタ実数に使うことは 完全に禁止されてしまったのですか?  M: リスト2 のような状況が発生してしまうと, ループの中で実数のカウンタ変数が 意図した通りの値であるかの保証が無いことになってしまいます. これを避けるために 禁止されたのだと思われます. まあ名目上は, カウンタは配列のインデックスに用い られたりする程度のモノだから整数 ! という理由付けがあったかもしれません. h05s2058: Fortranではいろいろな計算プログラムを作って、いろいろな計算ができると おもうのですが、できない計算もあるのですか? M: アルゴリズムを定義できないモノ. そういうものは計算とは言わないかもしれないが. h05s2062: おもしろいサイトおしえてください。 M: どの分野で ? とか, 面白いってどういう意味 ? とか聞き返すのは野暮なのでしょう. しかし面白いと感じることには個人差がありますので, 紹介するのは遠慮しておきます. h05s2063: Exercise2.5のプログラムを打ち込むときに、9行目(10 continue)の 「10」を打ち込む場所によってコンパイルしてくれないときがありました。 ー10ーーーーcontinueの時はできましたが、ーーーー10ーcontinueの時は コンパイルしてくれませんでした。(ーは空白です)なぜですか? M: Fortran では桁には意味があります. 資料の p.8 でも説明しています. 詳細は文法書を参照. h05s2064: データをある媒体にコピーするとき、イメージファイルでコピーするとは どういうことなんですか?ファイル単位でコピーするのと何が違うのかよくわかりません。 M: イメージファイルは, bit 並びそのままですし (インターリーブがあればクラスタの 順序はバラバラになる), 意味のあるデータが記録されていない利用されていない領域も そのままコピーされるし, ファイルシステム (Windows なら FAT とか NTFS とか) が あれば, それもそのまんまコピーします. 最後の意味で, イメージファイルは仮想デバイス として利用することまで出来ちゃいます. しかしファイル単位では, ファイルの頭から末尾へ向かう順で, 元のファイルシステムに 依存せずに, ファイルに記されたデータをコピーします. コピー先が元と違うシステムで あれば, コピー先のシステムにしたがってデータが保存されます. うむぅ, こうやって言葉で説明しても, わかってない人にはわかりにくいね. h05s2069: 練習問題で作成したプログラムは長くても30行に満たないものですが、 それ以上の行数のプログラムもやはりあると思います。先生が今まで作成した プログラムで一番長くなったプログラムはどのようなものですか? M: 一番長いかどうかわかりませんが, とあるプログラムを数えたら, 1600 行以上あり ました. びっくりですね. コメント行を除いても 1100 行弱くらい. h05s2073: ひとが何気なく計算していることがコンピュータにとってはたいへんなことで、 コンピュータの気持ちになって考えるということがなんとなくわかってきました。 授業では、ほぼ英語ですが、日本人いとっては日本語の入力が楽だとおもいます。 日本語のグローン端末はないのですか? M: ``グローン端末'' が何なのか, いまいちわかりませんが. それはさておき, いまどきの Linux のデスクトップ環境でしたら, 設定次第で日本語文字を表示できると思いますが. h05s2075: 入出力する際に、入出力書式の編集子を使うことがありいくつかはわかったの ですが、どれくらいの編集子があるのですか? また、便利なものがあったら教えてください。 M: 覚えきれません (だから資料には注でコメントした). ということで, 文法書を見てね. h05s2077: Emacsを使ってプログラムを作成することの利点は何かありますか? (もしあればどのようなことですか?) M: 慣れれば使い易い, という利点があります. ていうか, emacs の場合, 自分で必要な 機能をプログラムして自由に付け加えることが出来るという, 究極の機能があります. h05s2079: プログラムを作るうえで簡潔に短く終えるのと、丁寧に作って長くなるのでは どちらのほうがいいと思いますか? M: この問題は難しいですね. 一長一短がありますし, 対象者/物によってもその基準は 異なりますから. でもまあ, 人による可読性を重視した方が吉だと思われます.