数値解析法, 2006 年, Fortran 入門編, 課題 (レポート) 提出状況

課題:

  • 章末に練習問題があります。これにしたがってプログラムを作成してください。
  • もしも必要ならば, これ を使ってもいいですよ。
  • 作成した, ソースファイル と 実行結果 と *説明の文章* とをメールで提出してください。三つ目が肝心ですよ。
  • 最終締切前であれば, いったん提出したものであっても修正版 (アップグレード版) を提出することができます。
  • 最終締切は, 7 月 7 日, 12:00 とします。(メールの発信時刻で判断します)
  • 課題提出に関する異議は 7 月 21 日 まで受け付けます。

    質問がありました

    こちら
    他にも質問などがあれば, いつでもどうぞ。

    ヒントかも ...... 多くの人がツマヅイテルよ, ヤレヤレ

    「説明」とは何か。
    書いてある事柄の形式をそのまま述べるような文章は, 説明としての意味が ない。だって見ればわかる事だから, それは何も新たな情報を付け加えない。 Fortran 語を日本語に直訳しただけだ。そうでなくて, 説明して欲しいことは 文字として書いていない「意味」だ。 例えば「i = i + 1」という文の説明として, 「i に 1 を加えたものを i に代入する」 って書いても意味がない。少なくとも「カウンタ変数としての i の値をひとつ増やす」 というような記述が必要だ。
    「説明」のときに注意すべき事。
    論理的な説明であっても情緒的な説明であっても, 言葉を誤用していたら, 伝わるものも伝わらないよ。特に科学的・論理的な説明の場合には, (専門)用語には きちんと定義された意味がある。小学校で習うレベルの用語を取り違えていた日にゃ, 「あんた, 大学生でしょっ !!」って言うか, 呆れてものを言う気力も無くなるか, まあそんなとこだ。注意深さと, 読み直しが必要だね。ちょっと学問っぽく言うと, 批判的・客観的に読む訓練をしてくださいな, ということだ。

    提出状況とコメント

    学籍番号ごとに, 提出されたプログラムの名称と提出日のあとに, 辛口かもしれないちょっとしたコメント (たぶん激辛) が書いてあります。 プログラム自体はここに載せません。 他人に付いたコメントが参考になるかもしれません。 いずれにしても, コメントを参考にするかどうかは, 自分で考えて決めてください。
    日付の末尾にアルファベットがついている場合, その日の到着順を示しています。 (26 人以上が同日に提出してきたらどうしよう ... ? (笑))

    h03s2006
    problem2_1, problem2_1.f, problem2_2, problem2_2.f, problem2_2~表グラフ.xls, problem2_3, problem2_3.f (20060630a): コンパイルしてできたとおぼしきバイナリも添付されちゃっています。そんな必要は ないのにね。それから実行結果で表とグラフをエクセルで作成したものも添付して くれているのは, スバラシイ ! ただし問題 2 の実行結果であるかのようなファイル名 になっているのは, ご愛嬌でしょうか ? (笑) プログラム自体は, 見やすく分かり やすく, たいへんよろしいですね。
    さて problem2_1.f ですが, まず入力が整数に限られていることについての説明や またはプログラム実行時のメッセージが無い。互除法を用いているようなのだが その説明が無い。また iabs() の説明もない, iabs って本当に必要なの ? iabs が あるからと, 分子分母のいずれかに負の数を入れると, まあ答は正しいんだろうけど, 見かけはちょっとネ。
    次に problem2_2.f について, あぁなるほどね, マアマア良くできてるじゃん。でも データの数とかデータそのものがプログラムに埋め込みなので, 汎用性にはちと欠ける のが残念だね。あと, ループ文の数ももっと減らせるよ。まあ今のままでも, 見やすい というメリットはあるわけだけどね。
    最後に problem2_3.f ですが, 結果の表とグラフまでつけてくれて, 結構なことです。 しかし, 文関数の構成が微妙だし (資料では使うなと言ってたんだけどね), またループ変数の作り方も, 誤差が蓄積しやすいところなんだけど, 表示桁数の関係で 誤魔化されてる。用いている変数の精度一杯を表示させるように直すと, 末尾の桁に 計算誤差が貯まっていく様子がわかることでしょう。あぶないあぶない。
    h03s2011
    problem2-1 (20060707r): メールの文面にソースファイルをひとつ貼り付けた だけで, 説明も何も無しですか, そうですか。ちなみにこれを切り出してつくった ファイルは, Fortran のソースファイルとしてはコンパイルエラーになるよ。 ダメじゃん。ちなみに「litegeers」とかいうメッセージも意味不明だし。
    h03s2069
    (20060706f): えっと, ソースファイルもメールのテキスト文中に埋め込んでくれちゃってるよ。まぁ plane text なのが救いだけど。 それから三つのプログラムの全てで, 暗黙の変数宣言を無効にしていないので, いずれ困ったことになる可能性をはらんでいる。
    まず problem2.1 について, 非常にシンプルな作り。約分はしない。分母がゼロに なると困るわけだが, 特に考慮された気配すらない。
    次に problem2.2 について, 初めにデータ数を入力するようになってる。なるほどね。 そして平均と標準偏差は計算するんだけど, 最大値と最小値は求めていない。 プログラム中で用いられている変数名は, 単純にアルファベット順に一文字と なっている。意味のある名前をつけた方が, 読みやすいんだけどね。
    最後に problem2.3 について, とりあえず数値の表は出力されるけど, どんな物理的・ 化学的意味の数式を教科書から拾ってきたんだろうね ?
    h04s2005
    problem1.f, problem2-1.f, problem3.f (20060707p):
    まず problem1.f ですが, とてもシンプルなプログラムで, 途中の五行もの空白行は いったい何なんだろうかと思ってしまう。間を生かしたワビサビの世界ですか ? ちなみに計算結果表示の所の「sum of aa/bb...cc/dd」というのが, 普段はあまり 見ない書き方だね。
    次に problem2-1.f ですが, あらら〜, アレ と似ているんだね。
    最後に problem3.f ですが, ふうん。プログラムは, インデントが滅茶苦茶で 見にくい点を (結構重要だけど) 除けば, まあいいでしょう。さてとりあえず数値の 表は出力されるけど, どんな物理的・化学的意味の数式を教科書から拾ってきたん だろうね ? そして説明文では「0.1から0.2きざみ3.5まで」と言ってみたり「1から 35まで0.2きざみ」と言ってみたり, 自己矛盾している。 ちなみに変数域がこの範囲であることの意味は何なんだろうかとも思ったりもした。
    h04s2012
    syukudai1.f, syukudai2.f (20060707h): 課題3はできなかったんですか, そうですか。
    ではまず syukudai1.f について。ふうん, そうですか。アレととってもよく 似てるんですけどねぇ。
    つぎに syukudai2.f ですが。あらー。今度はソレとよく似てるのね。 ということで, 説明の文章も, ワードファイル中にソースリストを入れてページ稼ぎ しつつ, ほとんど内容のないひとことでオシマイなのね。アルゴリズムの説明とか 工夫したところとか, そういう説明は無いんですね。そうですか, わかりました。
    h04s2016
    kadai1.f, kadai2.f, kadai3.f (20060706l): そうですか, だんだん理解して きましたか。それはよかった。でもまだ理解していない部分が多いんですか, そんな 調子で提出されるレポートって, いったい何なんでしょうね。不完全だとわかっている けど通ればラッキー, なのでしょうか。そんな態度は許せませんね。
    さて kadai1.f ですが, あ, お約束の冒頭の二文がぬけてら。それ以外は, まあ 文法エラーは無いね。一応の計算もするみたいだし。ただし, 説明文の日本語の質は, お粗末ですね。
    次に kadai2.f ですが, あ, これもだ。だからちょっとプログラムが混線してきて いるんだね。また, あまりおすすめしないと資料に書いた方法を, わざわざ用いている のは, どうしてなのだろう ? あ, 良く見たら, 無駄な計算してるじゃん。 あと序数は, ``1st, 2nd, 3rd, 4th, ...'' だっていうのは知っててあのように 表示してるんだよね ? 微妙に恥ずかしいカモよ。
    最後に kadai3.f ですが, あぁ, やっぱり。で, そうですかぁ。プログラムの理解の 助けを邪魔するような書き方やら, ツジツマの合わない説明やらが, ポロポロと出て きちゃいましたね。やっぱり理解不足なのかなぁ, しかしこれって, 半分は日本語とか 論理とかの問題であって, Fortran の問題じゃないぞ。 で, とりあえず数値の表は出力されるけど, どんな物理的・化学的意味の数式を 教科書から拾ってきたんだろうね ?
    h04s2017
    p2,1.f.txt, p2,2.f.txt, p2,3.f.txt (20060707a): ひとつのメールにひとつの ファイルを添付させて, つごう六つのメールに分けて送られてきました。ひとつの メールに複数のファイルを添付すればいいのにネ。あとプログラムファイルの サフィックスが .txt なのが少し不思議です。
    さてまず p2,1.f.txt ですが ......。ふうん, コンパイルエラーで実行できないよ。 ということで, 説明文書中の実行結果を再現できません。だめじゃん。 で, 文法エラー以外にも, お約束として書いてくださいと資料に記載した お約束が守られていない。この辺の理解不足も今回のエラーを誘発している。 ついでに言うと, 説明文書中でおかしな事を言ってるとこがある。
    次に p2,2.f.txt ですが, ......。ふうん, これじゃあ題意通りの計算ができないよ。 自分で実際に計算を行って結果を得たとは思えないプログラムだ。 一応, プログラムとその説明文とはツジツマはあっているようだが (それでも (3) の 「得点が読み込まれるにつれて」っていう部分がおかしいけどね), 実行結果が示されて いないのも, ある意味でわかるね (笑)。結論, だめじゃん。
    最後に p2,3.f.txt について, まあ表らしきものは出力されるね。でも, どんな物理的 ・化学的意味の数式を教科書から拾ってきたんだろうね ? こんな調子だから, 整数型の変数にわざわざ実数を代入している意味は何だろうかと 問うても意味があるか, 疑問ではあるけど指摘してみる。
    h04s2021
    problem1, problem2 (20060706g): 二つのファイルを添付しているようだけど, ソースファイルではないし, 実行例や説明文もない。すなわち提出物が要件を満足して いません。
    h04s2022
    pr1.f, pr2.f, pr3.f (20060706i): メールの文面に説明文と, ソースファイルを 三つ添付ね。説明文の日本語が微妙におかしいなぁ。
    まず pr1.f ですが, プログラムはまあいいでしょうね。約分は, していないんですね。 でも説明文がイタイ。「例えば」が前述の事項の例示になってないし, 「(x と y を) 入力する」って言ってるけど事実と違うし。ふう。
    次に pr2.f ですが, これもプログラムは良いんじゃないかな。最初にデータの個数を 入力させるのね。でも, あえて言えば, 変数名はもうちょっと意味のある名前を つけた方が, 分かりやすいでしょう。
    最後に pr3.f ですが, あぁ, これはいけませんねぇ。「必要なパラメータを入力し、 実行する」との説明にも関わらず, パラメータ入力しないうちに計算してしまう。 それから, 特別のエラー無くコンパイルできて, もっともらしく結果を出力してくれる けど, 実は間違ってる。計算結果が, 期待した通りなのかどおか, 確かめましたか ? 文法的に微妙なところの地雷を踏んでる感じなので, ヒントを一つ。一行の桁数の 制限は何桁でしょうか ? それ以降は無視されますヨ。
    h04s2024
    function, problem2.2.f (20060707j): 二つだけ提出ですか, そうですか。
    まず function ですが, これがソースファイルらしい。まあ名前は何でもいいん だけど, あなたが作ってコンパイルして実行させたものとは, たぶん違うよね。 中身はいたってシンプルな作りにもかかわらず無駄がある。何のつもりなのだろうか, 不思議だ。説明の文章を見てもちっとも分からない。逐次行和訳のつもりなのかも しれないけど, 和訳にすらなっていない。何だコリャ。
    次に problem2.2.f ですが, ......。あらら, コンパイルエラーの大量発生ですね。 仮にコンパイルエラーを修正しても, やってることがわざと分かりにくくしているの かと思うくらいだし, 文法エラーでないバグがあって期待通りに計算しないと 思われる。それにしては説明の文章がさも得意気だけど, でも日本語に不自由して いるのかしらと疑うほどの意味のわからなさです。ひぇ〜。
    h04s2027
    problem2-3.f (20060707q): 課題の訂正らしい。平均と標準偏差の訂正らしい。 プログラム problem2-3.f は ...。ふうん, 何となく見覚えのあるパターンだね。
    problem1.f, problem2-1.f, problem2-2.f, problem3-1.f~ (20060707l): あれ, プログラムファイルが四つだ。おまけに .f~ っていう, いかにもバックアップファイル みたいなサフィックスがついているのもあるけど, いいのかな。
    ではまず problem1.f について, とってもシンプルなプログラムにまとまっているん だけど, 説明文では何だか滅茶苦茶なことを言っているようで, 実際のプログラムと 一致していない。いったい何を説明しているのか, 謎だ。
    次に problem2-1.f ですが, ふうん, 最大値最小値しか求めないと説明文に書いて あるけど, これまた実際のプログラムでやってることは違うよ。おまけに, わけわかん ない数値を出力するし。他にも説明文は滅茶苦茶なことを言っている。何じゃコリャ ? というのが正直な感想です。
    そして problem2-2.f については, 説明文書で項目はあるのに内容が白紙なので, 何だか分かりませんね。
    最後に problem3-1.f~ ですが, ......, エラーでコンパイルできませんので, 説明文で あれこれ言っても意味ないです。もしも, この当面のエラーを修正したとしても, 説明文で言っていることと実際にプログラムでやっていることが, 勘違い以上に 違うので, まるで意味をなしていません。ここまでわけわからない計算をしているのは 正直言ってはじめてです。もしかしたらスゴイことをやってるのかもしれませんが, どう理解して評価すれば良いでしょうか ?
    h04s2028
    practice1a.f, practice2a.f, practice3.f (20060706j): プログラム修正と 説明にグラフを入れたんだそうです。修正点だけ見ましょうか。
    まず practice1a.f ですが, あぁ, 直ってるみたいですね。
    そして practice3.f の説明文ですが, あ, 図が貼り付けてあるだけね。ふうん。
    practice1a.f, practice2a.f, practice3.f (20060706a): そうですか, がんばったんですか, ではお手並み拝見といきましょうか (笑)。
    まず practice1a.f ですが, キレイにまとまっていますね, との評価を下そうとした とたん, バグがあることに気付いた。コンパイルエラーにはならないけど, それは お約束の呪文を唱えていないから。ふーん, 説明文中では実行結果も示されている けど, 私には再現できませんねぇ。
    次に practice2a.f ですが, えっともしもデータの数が一個でも増えたら, この プログラムは使えないんですね。少なくとも修正して再コンパイルが必要だと, ふむ ふむ。さらに整数と宣言されているカウンタ変数に実数を代入していると。非常に 珍しいやり方ですね。それから最大値・最小値の求め方ですが, なるほどそういう手も ありますね。いわば「最高得点者」を探すというやり方ですね。
    最後に practice3.f ですが, ふうん, R/((Z/a)**(3/2)) なんて書くから R が何かの 定数かと思っちゃったよ。プログラムとしては, ま, こんなもんでしょう。 ところでさあ, 添付の .xls ファイルに関する説明が全く無いわけだけど, どういう つもりかな ?
    h04s2030
    pro21.f, pro22.f, pro222.f, exp.f (20060707f): あれれ ? プログラムが四つ あるよ。説明文を見ると ... なるほどそういうことですか。ちなみに実行例を表組み してくれたのは見やすいんだけど, 実行例を示すって, そういうつもりじゃなかったん だけどね。
    ではまず pro21.f について, ほぅ, なるほど。分母にゼロを入力されたときの対策を こうじたわけですね。変数が倍精度型なのには, 何か意味があるのでしょうか ? それ以外は, 計算結果は約分されてないけど, まあいいんじゃないかな。
    次に pro22.f と pro222.f ですが, ふうん, 最大値・最小値と平均値・標準偏差を, 二つの別のプログラムにしたのね。それぞれまとまっていますが, いずれも冒頭の お約束の一行がないから危険を抱えていますね。そして pro222.f の方ではデータの 個数が 23 と決めうちになっているので, そうでない場合への対応が, とてもやりにくい構成になっているのが残念ですね。もちろん文法的には正しいん だけどね。
    最後に exp.f ですが, はい, とってもシンプルにできました。ある意味これで充分 なんですよ。でもそれじゃつまらないから, ちょっと課題に色をつけたんですけど, そういうわけで, とりあえず数値の表は出力されるけど, どんな物理的・化学的意味の 数式を教科書から拾ってきたんだろうね ? って言わせてもらいます。
    h04s2032
    kadai1, kadai1.f, kadai1.f~, kadai2, kadai2.f, kadai2.f~ (20060707s): なんだかなぁ, ゾロゾロと沢山のファイルが添付されているけど, ......, *.f の 二つしか見ないよっ ! (もちろん説明文書も見るよ) ちなみに三番目の課題は解答なし なのね。
    ではまず kadai1.f ですが, ふうん。インデントがずれてるところもあるけど, まあ まあなんじゃないかな。どっかで見かけたような気もするってとこが, やや難だけど。 ちなみに「13〜14が分数の足し算」との説明文で, いったい何が 13 や 14 なの だろうか, 説明が全くないね。で, 「分数の足し算」って一括されていたって, この プログラム自体が分数の足し算を計算するものなのだから, 部分は全体を含むっていう 禅の世界ですか ?
    次に kadai2.f ですが, ......, あれれ ? 一見正しい答を出力しているように見える かもしれないけど, プログラムの論理に間違いがあるよ。惜しかったね。 それ以外は, 冒頭のお約束の一行が無いのであぶないとか, 説明文が簡単すぎて ほとんど意味をなしていないとか, そういう点を除いてまあまあ良いんじゃないの。
    h04s2034
    kadai1.f, kadai1.f~, kadai2.f, kadai2.f~, kadai2.f.swp (20060707b): えっと いろいろなファイルが添付されて送られてきましたが, *~ とか .swp とかは何のつもり なのでしょうか ? で, 課題の三つめについては, 解答無しなんだね。
    さてまず kadai1.f ですが, bunsou taizan が何を意味しているのか, とまどった。 それはさておき説明の文章を見ると, ...... なかなか謎だぁ〜。変数の型が何なのか 分かってるのか ? とか, 最高公約数って何だ ? とか, 見つけるためにはそれを用いる ことこそが重要なのか ? とかね。おっとっと, 冒頭のお約束行が無いことで, 危険を はらんだプログラムに仕上がってますね。
    つぎに kadai2.f だけど, あ〜っ, そうやっちゃったんじゃあプログラムした意味が ほとんど無いねぇ。(以下同文 (何処と ? (笑))) 説明の文章の日本語も, かなりの程度, 滅茶苦茶ですね。困ったもんだ。
    h04s2036
    (20060706c): メッセージが間違っていたのを修正したらしいです。
    (20060705a): インデントを直したらしいです。
    p2.1.f, p2.2.f, file2.2.f, p2.3.f (20060701a): 全体に言えることだけど, 主プログラムの先頭の program 文でプログラムに与える英字名ですが, 文法的には ``英字名'' を与えるのであって, 説明文を書くのではないヨ。コンパイラの解釈上は どちらでも同じだけどね。また主に if 文で, インデントが一貫していないので, プログラムの読みやすさが損なわれている。 あと, メッセージのつづりが間違ってるのは, 恥ずかしいね。
    まず p2.1.f について, 計算のアルゴリズムは良いでしょう。最大公約数を求めて 約分したり, 結果の分数が 1 より大きかったときに帯分数で表示するところで format 文を駆使していたり, 分数がちょうど割りきれて整数になる場合まで, ちゃんと作ってある。素晴らしい ! ちなみに関数副プログラムの名称の IVF って何だろうとか (笑)。 だがしかーし, 入力のインターフェースがイマイチです。四つの数を入力せよと 言うわりには, 二個入力毎に [RETURN] ([ENTER]) キーを押さなくちゃいけないし, 入力側にも format が指定されているので形式に沿った入力でなければ意図通りに 受け付けない (ということが利用者にはわからない, )。 またプログラムの終了条件が ..., 入力に負の数を受け付けないのも ..., などなど。 惜しかったね。
    次に p2.2.f と file2.2.f について, 後者が入力データのファイルらしいが, ファイル名のサフィックスが .f なのがご愛嬌 (?)。 さてプログラム本体ですけど, 読み込んだデータの数がゼロだった場合に平均とか 標準偏差を計算しないようにしてるなど, 工夫の跡が見られます。でも, その時に 偽の最大値・最小値を出力してしまうのが, 惜しいね。
    最後に p2.3.f ですが, 出力される数値の表の形式がコンマ区切りでないことは 置いとくとして, 冒頭で入力を求められる四つの数の意味がわからない。 いや, 解説の文書に定義は書いてあるので, 物理的な意味はわかります。 でも利用者に入力を求めるという, プログラムとしての意味がわからない。
    h04s2038
    kadai1.f, kadai2.f, kadai3.f (20060707c): ふうん, 一生懸命やったんですか。 ところで .doc ファイルのファイル名に「1 program」ってあるんだけど, これがくっついていることの意味は何なんでしょうね。
    さてまず kadai1.f ですが, ふうん, そうですか。アレととってもよく似てるね。
    じゃあ次の kadai2.f ですが, はぁ, そうきましたか。今度はソレとよく似てるね。 そう言う意味で一生懸命やったってワケですか, そうですか。
    では最後に kadai3.f ですが, ま, コンパイルエラーは無いみたいだね。 変数の宣言文が, どうしてそういう形式なのかは謎なんですが ......。 で, とりあえず数値の表は出力されるけど, どんな物理的・化学的意味の数式を 教科書から拾ってきたんだろうね ?
    h04s2039
    problem2_1.f, problem2_2.f, problem2_3.f (20060704b): 三つのプログラムに それぞれワード文書で実行結果と説明文がついている。説明文は ...... あんまり 説明になってないような気がするなぁ, 国語力に問題ありカモですな。
    まず problem2_1.f について, ふむふむ分母にゼロという入力にならないようにしてる のは, 苦心の跡が見られますね。あれれ ? でもよく見たら, 計算式まちがっとるよ。 ということで, 付属文書に示したような簡単な実行例で正しい答が出ても, それは偶然のことだったってわけだね。
    次に problem2_2.f ですが, かなり論理が交錯しているプログラムですね。その前に, hyou5 って何だ ? 「表5 をファイルとしてプログラムに組み込んである」って, どういう意味でしょうか ? それ以降の説明もちんぷんかんぷんですね, 日本語が 不自由なのかな。 それはさておき, まず open したファイルをいつ close するのか, おかしな事を やってますね。read 文が複数ありますね, ある程度仕方ないことかもしれませんが, できれば避けたほうが良いでしょう。で, 初めの read 文でいきなり err だとどう なりますか ? また読み込むデータの数が多くて 100 を越えるとどうなりますか ? 危険なプログラムですね。
    最後に problem2_3.f ですが, きゃあ, これも論理がかなり交錯しているなぁ。 こういうのをスパゲッティ・プログラムって言うんだよ。空白行のあき方も, ぐちゃ ぐちゃで見にくいし。 で, プログラムなわけだけど, 説明文と照らし合わせながら見ていくと ... あれ ? 説明文で論理的におかしな事を言っていて, プログラムはおかしな説明にそったものに なってるよ。いいのかい ? それにしても, わかりにくい文章だ。例えば「次の3つの 場合に分けられる」と言いながら次に三つの場合が無かったり, 「これらの式から データを求める」ってどういう事だ ? とか, 「DO loop を終わらせ, 表を画面に表示 させ」って言うけど表なんか画面に出力されないよ, とか, ふぅ。 で, プログラムとして無駄だなと思うのは, 同じ計算を二度も行なっているってこと。
    h04s2042
    pro1.f, problem2-1-1.f, pro3.f (20060707g): 分割送信されたファイルの解読に, ちょっと手間取りました。最近の事情を考えると, AL-Mail の設定で「分割送信しない」でも良いのではないでしょうか。 また 三次関数.shs という見慣れないサフィックスがついたファイルは, エクセルの ファイルらしい。なんで .shs になるのか謎ですが。
    まず pro1.f ですが, ...。説明によると「分母がゼロになるとき以外を除き計算する」 そうです。分かりにくいんですけど, いつ計算するんでしょうか ? 説明してることと 実際のプログラムがやってることとが違うような気がするんですけど。そして実行例 らしきもので「1/2 + 1/2 = 2/4」なんてのがあるけど, もし本当にそうならば, 計算間違いじゃないかなーっと思うのですが。 ちなみに約分はしてくれないんだね。
    次に problem2-1-1.f ですが, ...。あぁ, 暗黙の型宣言を利用して, さらに変数の 明示的な型宣言無しで dimension 文を使っているのね。プログラムが小さいあいだは 全体を把握可能だけど, でも危険をはらんだプログラミングだなぁ, この癖はなくした 方がいいと思うよ。ついでに, 最大値・最小値を求める所をサブルーチンにしたのは, おもしろいアイデアですね。でもこれも変数の型宣言に難があるなぁ。サブルーチン の仮引数のなかの配列 (仮配列) の大きさについては, 擬寸法配列宣言子を用いて 記述すればイイコトもあるよとつぶやいてみる。
    最後に pro3.f なわけですが, ...。あ〜ぁ。わざわざお勧めでないことを沢山やって, スパゲッティプログラムにしてるって感じかな。説明文の「7行目で式と(X,Y)=(3,4) を出力する」っていうのも意味不明だ。(X,Y)=(3,4)に何の意味があるのか分から ないし, 実際に出力されるのは「*** Y=2X**3-3X**2-12X-4 ; (-3,4) ***」だし。 「Nをひとつ読みこむ毎に(X,Y)の数値をだしている」っていうのも意味不明だし, ちなみにバグがあって数値の表は出てこないよ。答の例としての「10 20 30 のときの グラフ」の意味も分からない。ちなみに意図した通りのグラフが得られたのかどうか, 胸に手を当ててじっくり考えてほしいものだ。 ついでに言わせてもらえば, どんな物理的・化学的意味の数式を教科書から 拾ってきたんだろうね ? ってこと。
    h04s2044
    ex1.f, ex2.f, ex3.f (20060706k): えっと, 変数の宣言文ですけど, どこを 見たらそういう形式が載っていたのでしょうか ? 激しく疑問です。Fortran77 レベル では, そうは書かないと思うんだけどね。
    さてまず ex1.f ですが, キレイにまとまってますね, と言おうとしたら ...... コメント文中のコメントと実体が合っていないのではないか ?! そういうコメントは, 理解の助けどころか誤解の助けになっちゃいますよ。説明の文書も, 微妙に日本語が 変だし。実行結果って, 本当にそういう出力が得られるんですかね。 ちょっと惜しいね。
    次に ex2.f ですが, そこそこキレイに書けているように見えるのですが, 微妙に表現に チグハグな所があったり無駄があったり, 不思議ですね。
    最後に ex3.f ですが, だんだん (?) プログラムの書き方が変になってきてるし, 用語が微妙に違ってるのも気になるし, そもそも反応速度の式なのにナゼ常用対数 なんだろうとか, ちょっと疑問に思ったりした。
    h04s2046
    kadai1.f.doc, kadai2.f.doc, kadai3.f.doc (20060705c): さて何やら新たに 送ってきてくれたらしい, どれどれ ... きゃあ ! プログラムのソースをワード文書に 貼り付けているよ !! これじゃあこっちでコンパイルしたりプログラムの検証・評価が やりにくくってしょうがない。あ, そういう作戦なのかな (笑) ?
    さて kadai1.f ですが, dunnshi1 っていうのがちょっと意味不明だし, 分子・分母に 1 番と 2 番があるのだろうなと思いつつも番号なしの bunnshi だったりで, 利用者はちょっと戸惑うと思うゾ。 計算のアルゴリズムについては, yakusuu を求めるところがかなりムズカシイなぁ, 論理を理解するのがひと苦労だ (ていうか, あまりの面倒くささに解読を放棄したく なる)。そうか ! 論理が分かりにくいのは, 論理通りにプログラムが構成されていない からだ。例えば if---elseif---elseif---endif という文があると, これは三択の構造 だと思ってプログラムを眺めるんだけど, 確かに zz の取りうる値の範囲で分枝して いるのだけど, 計算の論理構造は必ずしもそうじゃなくって異なるループの末端に なっている。そのためもあって goto 文による飛び先 (戻り先) が交錯している。 そういう見かけの構造と意味論理上の構造の不一致と, 飛び先の交錯による スパゲッティ化により, 読みにくくて理解しにくいプログラムに なっちゃってるんだね。 ひとつ気になったのは, 説明文中で「直接割り算して余りは求められない」と書いて いるけど, 本当にそうか ?? ってこと。 んでアルゴリズムについて, 残念ながら入力した数値によっては無限ループに 陥っちゃう。
    次に kadai2.f ですが, 説明文に「(データの)総数は aa の直後のカッコ内に書いて いる」って, そりゃ間違いじゃないかもしれないけど, こんな表現じゃあ Fortran 語を 理解しているとは思えない稚拙な説明だ。で, 提出されたプログラムはここが 3 に なっている。汎用性を意識した説明はいいんだけど, 少なくとも提出物は課題を満足 しなくちゃ意味がない。このプログラムでは課題を満足しないよ (笑)。ま, 提出物に 「実行結果」が含まれていないことから推して知るべし, か。 で, 計算のアルゴリズムなんだけど, まあ何と言いますか, 細かく一ステップずつ 処理が進行するのはいいんだけど, ある程度のまとまりとしての構造が, わかっているのかいないのか。非常に微視的な視点ですねって感じですか。 おまけに標準偏差の求め方の説明で, 「順を追って計算した」って言われてもねぇ。 プログラムって基本的に順を追って文が実行されていくわけだからねぇ。 ちなみに提出してくれたプログラムは, コンパイルエラーになりますヨ。
    最後に kadai3.f ですが, ハッキリ言って課題の意味を理解していないと思われる 作りです。とりあえずコンパイルエラーにはならないけどね (笑)。
    kadai1, kadai2, kadai3 (20060629a): プログラムを添付して送って くれたらしいんですけど, どうやらバイナリらしくて *ソースファイル* では ありません。すなわち課題提出の要件を満たしていません。残念。
    h04s2048
    p21.f, p22.f, p23.f (20060707m): 説明の文章は, あんまりうまくないですね。
    まず p21.f ですが, ふうん, そうですか。アレととってもよく似てるね。
    次に p22.f ですが, ほう, 今度はソレとよく似てるのね。 最後に p23.f ですが, まあ簡単なプログラムなんですけど, それはいい。でもやはり 説明が微妙にハズシテいるように思えます。
    h04s2054
    分数.f, 得点.f, 平方根.f (20060706m): えっと (笑), ファイル名が漢字なんて 始めてですけど (笑)。あなた本当にこういうプログラムファイルを作って, コンパイル して, 実行したんですかぁ ?
    ではまず 分数.f ですが, ああなるほど, 最もシンプルな部類のプログラムですね。 でも, シンプルすぎて, お約束の一行が抜けてます。
    次に 得点.f ですが, はぁ。まず冒頭のお約束の行が無いので, 潜在的な危険が一杯の プログラムになっちゃってます。で, 23 個のデータだからいいものの, もっともっと 増えたらどうするつもりでしょうね ? って思っちゃうプログラムですね。 こういうプログラムだから, 意味のある変数名を使いなさいっていうのは無理な相談 ですか, そうですか。
    最後に 平方根.f ですけど, これまたシンプルなプログラムですね (以下同文)。 さてところで, これだけ短くてシンプルなプログラムにも関わらず, 不思議な行が あるんですけど ... しかもどこかで見かけたような ...... 謎だ。 とりあえず数値の表は出力されるけど, どんな物理的・化学的意味の数式を教科書から 拾ってきたんだろうね ?
    h04s2057
    problem1.1.f, problem2.2.f, seiseki, problem3.3.f (20060704a): 今度は ちゃんとソースファイルでした。write 文で出力されるメッセージに日本語文字を 使って分かりやすくしたのは良いのだけど, 文字コードの関係でコンパイルエラーに なるシステムもあることに注意しましょうね。って, 実は教育用のシステムでは エラーになるじゃん。こらっ !
    ではまず problem1.1.f について, なるほど非常にシンプルに作ってありますね。 分母と分子の公約数なんて, まさしく定義通りで分かりやすくて良いですね。 でも, 実は, よーく考えると, ループ回数を減らせるんだよ。 すなわちこの方法でももう少し計算時間を短縮できる。 それから, 結果表示の所で format 文を使っているけど, この書式では変数の桁数が 多くなると不都合を生じるんだよねー。 説明文には「出力の見易さを優先した」とあるけど, このプログラムじゃ添付のような 実行結果にならないよ。だから前述のように言っても, ちっとも説得力ナシ。 ダメじゃん。
    あら, とある入力に対しての結果では, 約分してくれないときがあるね。
    では次に problem2.2.f だけど, まあ基本的なところは押えられたプログラムになって いて, 良いでしょう。しかし, データの入力時に format 文で書式が指定されている のがつらいところですね。書式に従わない場合 (例えば一桁ずれたりしたとき) は, 期待した通りの結果が得られない。書式つき入力を人間が行なうのは, 結構たいへん なんだよ。それから, 結果の出力のための書式指定も無駄があるし, 日本語文字を shift-jis で出力しようとするから a8 だけど, 文字数との対応はわかってるのかな ? 文字コードの変換によって動作がおかしくなる可能性があるって, わかってた ? 端末の設定によっては出力の日本語文字も正しく表示されないから, 説明文中の 実行結果というものも, その通りに得られない場合もある。ていうか, イコール ``='' なんて, 何をどう間違えても出力されんだろーが, こら。
    最後に problem3.3.f だけど, これだけ簡単なものならば, まあそれなりにできて いると言えるカモ。でもこの数式では, 「教科書から適当な式を選びだし」って所に 抵触するかどうかがビミョーですね (笑)。ていうか, 引数がとる範囲って, 何の意味が あるのかい ? っていう疑問がわいてきますね。 それからこの計算手順では, x に誤差が蓄積されていくヨ, 危ない危ない。
    problem1.f, problem2.f, problem3.f (20060623a): プログラムを添付して送って くれたらしいんですけど, どうやらバイナリらしくて *ソースファイル* では ありません。すなわち課題提出の要件を満たしていません。残念。
    h04s2058
    fraction.f, statistic.f, graph.f (20060704c): 添付のような説明は, 実は必要ないというか意味がない。だって Fortran 語の代わりに日本語で書いている だけでしょ。だからほとんど情報量は増えないわけだ。
    さてまず fraction.f について, 見やすくまとまっています。入力時に分母がゼロの 場合の対策もされていて, 良いですね。ただし何を見たのかわかりませんが, 「分母」ってふつうはその単語を用いないと思うゾ。結果の出力で, 場合分けが 全てを尽くしていて例外がないのかどうか, すぐにはわからなかった。
    つぎに statistic.f について, 入力データファイルについての説明がない。 書式付きの入力だし。さらに, i の順に書いてなかったり, 飛んでるところがあったり したときに, ちょっと困ったことになるねぇ。もちろん, データの数が多かった ときにも。計算手順は, まあ標準的なものですね。データ入力時の i の飛びがあると, ここで困ったことになるわけだ。最後の結果出力が, データ数に応じて少し工夫して あるのは, 良いですね。
    最後に graph.f について, ふむ, これはまあまとまっているね。でも 0.5 乗が何度も 出てくるのが, 気になるといえば気になる。
    h04s2067
    ploblem2_1.f, ploblem2_2.f, ploblem2_3.f (20060707d): うひゃあ, オフィスドキュメント .doc と .xls のみですか。 プログラムのソースファイルの毎行の和訳では「説明」とは言わないと上で書いた のになぁ。おまけにソースファイルは // で毎行コメントつけて word ファイルに 取り込まれているから, 抜き出してコンパイルなどの検証・評価をしようとしても, あなたが作ったものをそっくり再現できたという保証はないので, 評価できない。 どうしましょう。と思ったら, 後から別便でソースファイルを送って寄越していたの ですね。はいはい。
    ではまず problem2_1.f ね。なるほど, 複数の分数をあつかうから配列を使うという アイデアは面白いですね。でも宣言している大きさと, 実際に使っている分との間に 不整合があるのが意味不明です。また, 分子と分母との最大公約数を求めて約分して いるらしいのですが, このアルゴリズムでは約分しない場合もあることに気付いて いるのかなぁ, 説明は全くないのだけど。また間違った答を出す場合もあることに 気付いているのかなぁ, それってダメじゃん。そして, 結果が分数でない場合に特別な 表示法をさせている点にも, 工夫の跡が見られます。惜しかったね。
    次に problem2_2.f ですが, 一部でインデントがおかしくて, あれ ? っと思うところが ありましたが, それ以外は丁寧な作りですね。変数の型変換が, ちょっとしつこい様に 思われましたが。
    最後に problem2_3.f ですが, do 文によるループの範囲は, ちょっと苦肉の策という 感じですね。 それから, 演算の優先順位を把握すると, もうちょっと見やすくなるでしょう。 ちなみに説明文は, 実際に計算していることと一致していません。 ヒントはエネルギー保存則です。
    h04s2069
    (20060707n): 説明の訂正らしい。説明文だけの再提出ですね。 なるほど, pro23.f の説明を追加したのですね, どらどら。ほう, 平均と標準偏差は こっちで求めるということか。ううむ, 冒頭のお約束の行がなかったり, 推奨されない 書き方をしていたり, 無秩序に空白行があったりで, あまりヨロシクナイですね。 説明の文章もなんだかチグハグです。 ってゆーか, 確かにコンパイル時にエラーは出ないけど, 致命的なミスがあるから そもそも期待通りに動かないでしょ, これじゃあ。なんだダメじゃん。
    pro21.f, pro22.f, pro23.f, pro24.f (20060707i): あれれ, プログラム四つ なんだね。あ, pro23.f は説明文がないから関係ないのか。
    ではまず pro21.f から。あらら " Input four intege " という意味の分からない 文言が ...。それ以外にも, 日常的には使われないような表示があるし, 説明の文章も 言葉に即して素直に理解しようとしても意味がわからない。独自の世界なのかな ?
    次に pro22.f ですが, これは最大値・最小値を求めるだけだね。じゃあ平均値と 標準偏差は求めないのか ? とききたくなる。
    最後に pro24.f だけど, シンプルにまとまってますね。冒頭のお約束の一行が 無かったり, ループ変数が実数だったり (あまり推奨されない) する欠点があるけど。 ところで, とりあえず数値の表は出力されるけど, どんな物理的・化学的意味の数式を 教科書から拾ってきたんだろうね ?
    h04s2070
    kadai1.f, kadai2.f, kadai3.f (20060706b): 微修正というわけらしいけど, 添付のプログラムは全く変更無しなんだね。説明文の英数文字が, いわゆる全角から 半角になったってだけか。じゃあプログラムのバグや説明文との矛盾点は解消されて いないのね。なあんだ。
    kadai1.f, kadai2.f, kadai3.f (20060705d): 実行例が添付されているものもある (無いものもある) んだけど, これが全部全角文字だったり「、」だったりするんだな。 本当にそういう風に出力されたのかっ ? ってツッコミを入れたくなるね (笑)。
    まず kadai1.f について, ほお, きわめてシンプルな作りですね。それにしては 使用している変数の数が多いけど。でも間違いではないから, 文句は言えないネ。 だがしかし, あいかわらず日本語に不自由しているようだ。「(aa/bb)+(cc /dd)=ee/ffと書くように命令する」と説明しているけど, 実際に画面に 書いているのは違うことだよね。
    次に kadai2.f について, えっとこの論理で正しく最大値・最小値が得られるの ですか ? と問い詰めたいです。 もしできたとしたら, それは偶然以外のナニモノでもないです。 ところで d だけ倍精度実数としたことには何の意味があるのでしょうか ?
    最後に kadai3.f ですが, まあ間違いではない, でも ...... っていう所ですね。 例えば出力の数値の部分 (10 行かな) を Excel などのソフトで読み込んでグラフを 書けますか ? とか a(v) はいったい何の役に立っていますか ?? とか思うわけだ。 おまけにオススメされていない dimension 文を使っているとか, h が倍精度実数である 意味は何だ ? とかね。ちなみにこの計算の有効数字は何桁ですか ? なんてツッコミ たくなるわけだ。
    h04s2073
    分数の足し算, 最大値・最小値・平均・標準偏差, 数値の表, 実行結果.txt (20060707o): あらら, ファイル名が日本語文字だ。あなたはこれでコンパイル・実行を行なったの かな ? と思ったら, 「実行結果.txt」にはコンパイルと実行のコマンドラインまで 全部のってる。それによると ...... ちがうじゃん。厳密に言えば, たとえば実行結果 の中の probrem21 が添付ファイルのどれに対応するのか, わからない。 おまけに, 何のためにソースファイルを添付させているのか想像できていない, ということですね。
    ではまず 分数の足し算 から見てみましょう。なるほど, とてもシンプルな プログラムですね。でも冒頭のお約束の一行が無い。今はとりたてて支障はないけど, ちょっとでも規模の大きなものを作ろうとすると, このままでは危険だよ。 ちなみに説明の文章も, 「〜を入力することにより...計算を行った」とは, 何かおかしくないか ?
    次に 最大値・最小値・平均・標準偏差 ですが, あららこれじゃあプログラムした ことの意味がほとんど無いね。おまけに変数の宣言とか拡張性とか, 一応の動作を しているのは, ほとんど偶然の産物なんじゃないか。そしてここでもまた説明文の 「テキストの表を見て式をプログラムに打ち込み」っていうのが意味不明ですね。
    最後に 数値の表 ですが, アレ と似てるね。で, とりあえず数値の表は出力される けど, どんな物理的・化学的意味の数式を教科書から拾ってきたんだろうね ?
    h04s2075
    (20060706d): toi1.f のサブルーチン副プログラム bunsuu を廃止したそうです。 その理由が, 私が下で「必要ですか ?」と書いたからだそうだ。私は必要かどうかを 聞いただけで, 廃止しろとは言っていないんだけどね。必要だと思えば理由をつけて, 「こういう理由で必要だと思う」と説明すれば良いだけですね。逆に, 問題提起された ことで再考した結果, 「こういう理由で不必要だと思うので直した」となるはずです。 直す理由は, 他人にイチャモンをつけられたから, ではないハズなんだけどね。
    それから toi2.f の実行結果の出力時のメッセージを日本語にしたらしい。 チェックしてみたら漢字の文字コードは euc らしい。文字コード問題については, 他の人のコメントにも書いたけど, 本人はわかってやってるのかな。
    toi1.f, toi2.f, toi3.f (20060701b): えっと, 私の名前は「宮元」ではあり ません。よって「宮元分」と書かれてメールされたものは, 私宛のものではないの ですね ? 他人宛の手紙を勝手に読むのは気がとがめるな :-p
    さて toi1.f ですが, サブルーチン副プログラムとして bunsuu と gcd があるが, bunsuu って必要ですか ? 副プログラムにすることで, プログラム全体の見通しが良く なるとも思えないし, 一般的汎用的な仕事をまとめたものでもなさそうだし。 ちなみに gcd は後者の意味があるね, もちろん前者の意味もあるけど。 あと, コメントが */ ... /* などという形式なのは, Fortran では他に例を見ない 独自の書き方だね。
    次に toi2.f ですが, プログラムはまあ良いでしょう。でもデータの数を入力させて いるわりには, データを格納する変数の配列の大きさが 23 に固定だし。 何かの得点以外に対になる数を入力させているけど, プログラムを見てもその意味が わからない。
    最後に toi3.f ですが, 一応もっともらしく計算結果を吐き出していますが, とても危険なプログラムです。システムによっては誤動作することでしょう。 ていうか, 現在すでにおかしな計算結果を出力していることに気付きましたか ? たぶん気付いていないだろ〜な〜。 それから parameter 文での pi の扱いも, あなたが期待した精度になっていない でしょう。
    h04s2076
    problem1.f (20060707k): ひとつだけ提出ですか, そうですか。
    では problem1.f について, ひとこと, とてもシンプルな作りですね。 まあ, それ以上でもそれ以下でもありません。説明の文章も逐次行和訳だしね。
    h04s2078
    problem21, problem22 (20060707e): そうですか, 「頑張ってみた」んですか。 「〜してみた」っていう表現は, 「試みた」っていうだけで, あまり真剣に取り組んだ ように聞こえませんね。気のせいかな ? 閑話休題。課題の一番と二番について解答し, 三番は出来なかったそうだ。ところで提出されたものは Office ドキュメントと バイナリで, ソースファイルは無いのね。と思ったら, ドキュメントの中に貼り付け られていた。しかも行番号つきで, はぁ。抜き出して編集したものは, あなたが 作成したものを正しく再現した保証はないので, 検証・評価はできませんね。 どうしますか。なお, プログラムの (ほぼ) 逐次行和訳は説明ではないってことは, 理解していないのかなぁ。
    とりあえず problem21 について。ふむ, まあシンプルな作りで計算してますね。 約分はしないようです。説明にありませんでしたが。
    そして problem22 について。へえ, いいんじゃないの。前述のように説明文はダメ だけど。
    h04s2081
    bunsuu.f, tokuten.f, gurafu.f (20060706e):
    まず bunsuu.f ですが, なるほど非常にシンプルな作りになってる。約分はしない。 入力値が悪いと分母がゼロになるが, その点については説明されている。 しかし変数の型が宣言されていない。文法エラーではないが, その点はいくない。
    次にtokuten.f ですが, あー, これではプログラムであることの意味がほとんど無い。 ちなみに, 今回は手におえる程度の数 (23 個) の数値だったけど, 例えば倍に増えた として, プログラムをどう直す ? ちなみにこれも変数の型が宣言されていないから, 今のところ計算結果が正しそうだけど, こんな作りをしていたら, いずれ破綻するよ。
    最後に gurafu.f だけど, うむう, とりあえず数値の表は出力されるけど, どんな 物理的・化学的意味の数式を教科書から拾ってきたんだろうね ? それから出力装置の指定が滅茶苦茶ですな。結果オーライじゃあダメだよ。
    h04s2085
    p2-1.f, p2-2.f, p2-3.f (20060705b): えっとですねぇ, 説明が説明になって いません。これは Fortran 語を日本語に (一部だけ) 直訳したにすぎません。 少なくとも処理とか計算式の意味を説明しなくちゃ。ていうか, モノによっては 誤訳になってるよ (笑)。つまり嘘の説明が書いてあるわけだけど, どうしよう ?
    さてまず p2-1.f について, 入力した数値に基づいて計算する式を表示するつもりなの だろうが, これが間違ってる。入力ガイドにしたがって入力したら, 違う式を入力した かのように表示されてしまう。実行例もそのようなおかしな表示にるのに ... で, プログラムでは, 不必要な変数が宣言されていたり, 逆に使用している変数で 宣言されていないものがあったり。始まりのお約束の文を書いていないなど, ちょっと イカンですね。 あ, あと, とある数値の入力により無限ループに陥る場合があるね, 危ない危ない。
    次に p2-2.f ですが, なるほどね入力ファイル中に書きこまれたデータの数を人間が 誤りなく数えて入力しなくちゃいけないのね。またデータ数が多かったときに困った ことになるけど, その点はわかってるのかなぁ。 ファイルにデータを準備するやり方も, 書式の説明されていないし。 ちなみに最大値・最小値を求めていないので, 要求仕様を満たしていません。 それから, 変数の宣言とかプログラムの開始文とかがダメなのは前に同じ。
    最後に p2-3.f ですが, とりあえず数値の表は出力されるけど, どんな物理的・化学的 意味の数式を教科書から拾ってきたんだろうね ? そして全く説明がないんだけど, .xls ファイルも添付されている。開いてみると, 計算結果の数値の表を読み込んだ Excel ファイルなわけだけど, それが何か ? それから ... 以下同文。
    h04s2086
    problem2.2.txt, problem2.3.txt (20060706h): 課題の二番と三番についての レポートで, 一番については無回答ですか, そうですか。うむぅ, テキストファイルの 中にソースファイルが埋め込まれているのね。実行例はあるけど, プログラムの 説明文が無いね。あ, problem2.3 には実行例すらない。
    まず problem2.2.txt ですが, あー, 文法的には間違いじゃないけど, こういう プログラムではプログラムを書いた意味がほとんど無いなぁ。
    次に problem2.3.txt だけど, うわっ, ganma 関数というのが何か分からないのに 加えて, 出力は題意を満足していないゾ。ま, 文法のエラーは無いんだけど, これじゃ 困りますねぇ。

    (2006-07-27, 16:25 更新)