99年度のレポート課題において多かった間違いとその解決法

4/23レポート 5/7レポート 6/4・6/11レポート

4月23日のレポート課題において多かった間違い

感想

今年は生徒数も多く、メールの量もすごいものがありました。大半の人は、遅れてでも結果を出そうと頑張ってくれていたのが良く分かったのですが、中には、何も書かずに白紙同然のメールを送っておられる方もいました。何らかの努力の跡が見られれば、こちらとしても採点のしようがあるのですが…

Written by Y.S.

5月7日のレポート課題において多かった間違い

  • 6章の問題4について。問題の場合分けには表記されていませんが、a=0、b=0だと、エラーが出ます。「そんなデータを入力しないだろう」と思ってもa=0、b=0を受けつけないようにするのがベスト。

  • 6章の問題5ついて。”X**3+X**2-5.0*X-2.0=0”の解を前もって求めるプログラムにした場合
     
          d=0.001
          A=-1.0
          B=-3.0
          do 10 I=1,1000
           X=(A+B)/2.0
          if ((A-B).lt.d) goto 20
           FX=X**3+X**2-5.0*X-2.0
          if (FX.lt.0.0) then ------------------(*)
           B=X
           else
            A=X
          endif
    10     continue
     
    となりますが、これは前もってグラフが右上がりか右下がりかを判断しておかないと、(*)以降の条件分岐を誤ります。よって、FA=A**3+A**2-5.0*A-2.0を計算しておき、
     
          if (FA*FX.le.0.0) then
          B=X
          else
            A=X
          endif
     
    のようにすると間違いはないでしょう。
     

    Written by H.Y.

    6月4日・6月11日のレポート課題において多かった間違い

  • 実行結果の抜けている方が何名かいました。実行結果も体裁良くTexでまとめて再提出してください。
  • 6月11日のレポートについて
     5章の課題4を選んだ人へ:
    ・「積分を台形則で近似して計算した」と書いた場合は、計算結果としてグラフだけでなく数値も出力結果のところに書いておく必要があるのでは?(というより、こちらの方が重要)
    ・分割数を2,3,…と変化させ、その場合の計算結果の違いをグラフに表わす場合、グラフは連続的な線ではなく、離散的な点で表現すべき。(連続的な線で表わした場合、例えば分割数2.5の場合の計算を行ったのか?という問題が出てくる)


98年度のレポート課題において多かった間違いとその解決法

4/24レポート 5/1講義 5/1レポート 5/8講義 5/8レポート
5/15レポート 5/29講義 6/12講義 5/26講義 7/17講義

4月24日のレポート課題において多かった間違い

  • PRINTなどにおける文字表示のシングルクォーテーションですが、両方ともアポストロフィです。

  • I,J,K,L,M,Nで始まる変数は整数型となります。(暗黙の型宣言分)
    {暗黙の型宣言は便利な面もありますが、プログラミングを行なうという点では、 間違いが生じた場合に発見されにくく、危険です。変数を使う際には、REAL、INTEGERで宣言してから使うことを心掛けてください。}

  • 定数は、整数と実数の区別を付けて書くようにしましょう。
    1だけだと整数に、1.0もしくは1.だと、実数です。

  • 割り算では、分子、分母とも同じ型でなくてはなりません。また、整数÷整数では、小数点以下は切り捨てられ、整数値が返ります。(1以下の分数は0となるということ。)

  • 左辺(代入される変数)の型に合った値が入りますが、右辺を計算する時において、加減乗除する2数の型に合わせて計算されます。(まず、右辺を計算してから、左辺の型に合わせて、代入されるということ。)

  • カウンター(counter)として、i(整数型変数)を用いて、以下のようにすることで、繰り返しができます。(5章で学ぶDO文なら記述が簡単だが、知っておいた方がいい。)
    i=0
    200z=x+y
    ……などの
    プログラム文
    i=i+1
    if(i.LT.100) GOTO 200

  • 文字定数の代入や、比較は、アポストロフィで囲う。
    CHARACTER C='ABC'
    IF(C.EQ.'DEF') THEN〜

  • 加減、乗除、階乗など、優先順位はありますが、分かりやすいように、 括弧()で括ると良いでしょう。

  • 関数の引数の型に注意。LOG(2)--->LOG(2.0)と、実数型です。

  • フィボナッチ数列の間違いが目立ちます。以下にフローチャートを載せます。

感想

太い赤鉛筆を採点に使ったので、見栄えの悪い添削になってしまいました。 (買ったばかりの赤鉛筆なので、許してほしいが。) でも、それよりも、プログラムが汚かったり、適当だったりをきちんとしてください。 いきなりのプログラム作成だったからか、書き方ができていませんでした。 書き方を学んでください。 変数は宣言してから使うと、プログラムとして見やすいものになります。 突然、変数が出てきて、びっくりすることがあります。 また、青ボールペンでの訂正は訂正の訂正です。 あまりにも大変だったもので、失敗が多かった。 それから、三角形の求積の式はテキストが間違っています。 いつになったら、訂正される事やら。以上、感想まで。

Written by W.K.

5月1日に多かった質問

  • パスワードを忘れて来た人が多かったです。自分が覚えられて、かつ、他人に推測されないパスワードに変更しておくと良いです。kterm上でpasswdと打てば、変更できます。(パスワードを忘却した場合は、メディアセンター事務室まで。)

  • netscapeの日本語の表示はOptions->DocumentEncoding->Japanese(Auto-Detect)です。設定後、Optionsにあるsave Optionsをやっておくと、設定が保存されます。
    (実は日本語化されたnetscapeがあって、kterm上でjnetscape &とすると出てくる。)

  • プログラムのファイル名は、ちゃんと、ピリオド、エフ ( .f ) で終わる名前にする。

  • プログラムは原則的に一つのファイルに一つだけ書く。(メインプログラムは一つと言うこと。)

  • コンパイルと、実行のコマンドの関係は、以下の通り。
    f90 プログラム名.fなら、実行は、./a.out
    f90 プログラム名.f_-o_実行プログラム名なら、実行は、./実行プログラム名
    _(アンダースコア)は空白を表す。

  • print文のアポストロフィなど、全角文字(2バイトの文字)で打つというミスが目立ちました。プログラムが半角で書かれていることを確認しましょう。

  • shutdownと入力してから、画面に turn off power を含む文章が出て、電源を切るまで退席しない。

5月1日のレポート課題において多かった間違い

  • 他人のレポートの間違っている部分をそのまま、写さないこと。

  • IF(条件式) THEN があれば、必ず同じ数の ENDIF が必要。
    (ただし、ELSE IF(条件式) THEN [<--同一行にある場合のみ、] は数に入らない。)

  • 入れ子にするなら、空白を入れて字下げして揃えると、対応がはっきりして見やすいし、ENDIFなど忘れにくい。

  • 複素数型の型宣言である COMPLEX の使い方を勘違いしている人が多かったです。詳しくはテキストの50ページに載っています。

  • 5章の問題5において、正の整数(<1000) という条件をまったく考慮していない人が多かったです。

  • 5章の問題5はテキストの例題を参考にするとスマートです。というか、それ以外にはないでしょう。(5章の例題参照。エラトステネスのふるいの原理です。……ふるい法については7章の問題2参照)

感想

 レポートの採点の経験がまだ少ないので、修正などみにくい部分があるかと思いますが、なにとぞご容赦を。

 さて、レポートについてですが、まず気になったのは、A4以外のレポート用紙や、ルーズリーフに書いて提出した人が多かった事です。 レポートはA4のレポート用紙で提出するのが常識です。あと、前回同様、書き方の雑な方も見受けられました。

Written by Y.S.

5月8日に多かった質問

  • コンパイル時のエラー。(エラーの英語は分かりにくいと思うので、一度、書き直してみるのも手。)
    行番号でエラーを知る
    エラーの出ている行番号は、左からだいたい30文字目ぐらいに表れる。行番号か、エラーに関係する文字変数が書いてある。
    exceeds 255 character
    この文があれば、プリント文のアポストロフィ忘れとか、改行忘れの可能性があります。
    ... is defined, ....not used.
    変数が定義されていても、使われていないよ。と言うエラー。ちゃんとプリント文に使ったり、式の右辺に使われていないと、これが出る。それほど、クリティカルなエラーではなく、走ることは走る。
    (variable=変数。常識?)
    キーワードを探す
    文の中にifとかdoとか、gotoとかあれば、その構文に関するエラー。対応や必要な記述がきちんと為されていない時になる。

    きちんとした説明ではありませんが、参考になると思います。エラーは自分で読んでください。たくさん出ているときは、一つずつエラーを訂正して、コンパイルして確かめることが必要です。一箇所の訂正により複数のエラーが消えることがあります。

  • 実行時のエラー。
    Except Floatation(※綴り不明。昔はFloating Exceptionだったが。)
    浮動小数点例外。だいたいは指数関数でとても大きな値になってしまったからか、分母が0(ゼロ)のわり算をしているか。不適切な値を入力していたり、そうなるようにプログラムが組まれている。
    プログラムが止まらない。
    普通のプログラムなら10分もかからないでしょう。長いループ(無限かも。)に入っています。Ctrl-C(コントロールキー+C)で止めます。
    read error(詳細な文章は忘れた。どこかにid 5の記述)
    これは、リダイレクトで、入力ファイルを用いた時、ファイルの書き方が不適切な場合です。id 5は標準入力を指しています。1つずつ順番に数値を改行していくと確実です。カンマ”,”で区切ると、長い行になりすぎてエラーとなる場合があるので、改行の方がいいと思います。また、最後の数値の後には必ず改行を入れるようにしましょう。プログラムがデータの終わりを認識できない場合があるので。

5月8日の授業までに出されたメール

  • 数学の勉強が必要な人がいます。自分の部屋でじっくり考えて、演習に臨みましょう。

  • タイプミスも目立ちます。コンパイルして、実行して、動いたものを送ってください。

  • 無闇に実数を使って.EQ.で比較しないように。実数には、計算機誤差が含まれる可能性もあって、厳密に一致させるのは難しいです。無限のDOループにおいて、if(実数.EQ.実数) GOTO 文番号で離脱させるのは、危険だと思います。

  • 章番号および問題番号を記述してください。(絶対)

  • 返事を書くまではできませんが、間違えている人がいます。チェックされたレポートと、この質問コーナーを参考に間違いを直した、プログラムを作ってください。

  • メールの文字化けが目立ちます。(数名だけど。)
    きちんと本文の部分にカーソルを移動させてから、include-fileしましょう。本文の部分は、----の下からです。また、それより上の部分は大切な部分ですので、To:や、Cc:、Subject:の後ろ以外は、熟知していない限り変えないようにしてください。

  • 相手に伝わるメールとして、Subjectは英語orローマ字の方が良いです。日本語はコード変換されて送られますので、それに対応していないメーラーの相手にSubjectの内容が伝わらない場合もあります。

  • 章の問題をいくつか忘れている人がいます。また、メールで送ってこられる方もいると思いますが、金曜日の授業終了時までのメールでカウントしています。まだの章末問題も受け付けていますので、送ってください。

  • 回答を添付ファイルとして送らずにInsert-File(C-x i)して内容を確認してから送ってください。添付されるとそのまま読めませんので。

5月15日のレポート課題について

  • 今回の課題は、5/1に出したレポートのプログラム(テキスト5,6章の章末問題各1題)を実行して提出、です。1問しかやってない人が何人かいました。

  • read文の前に '数値を入力してください。' という文を入れている人がほとんどでしたが、リダイレクションでデータを入力する場合、意味はありません。無いほうがスマートでしょう。

  • 今回は一度提出したプログラムなので、プログラム自体はほとんど間違いがなかったです。

5月29日に多かった質問

  • コンパイルしたとき、エラーがないか画面に注意してください。a.outというファイルができていても、エラーがあって実行できないことがあります。

6月12日に多かった質問

  • 第一行目に書かれた c は、その行がコメント行であることを示します。アスタリスク( * )を書いても同じです。両方ともコメント行を扱います。行の先頭にきちんと書くようにしましょう。

  • コピーのコマンドは、、、(kterm上で) 
    cp コピー元のファイル名 新しくコピーするファイル名

    です。上書きに注意!

6月26日提出のレポートについて

  • Runge-Kuttaの課題において、(z/x at x=0)を気を付けているのは分かりますが、それ以降、z/xの値を一定にしてしまっているケースが目立ちます。注意しましょう。

  • 関数を表現するのに、文関数定義やfunction宣言、subroutineなどを用いると、見やすいプログラムになります。

7月17日の講義に関して

  • Subroutineに関して勉強して下さい。メインプログラムとサブルーチンプログラムで定義された変数は名前が同じでも、別の物です。

  • メインプログラムで使っている変数の値を用いて、サブルーチンで計算をさせたい場合は、引数で渡すか、COMMON文で変数を定義する必要があります。

  • 変数や文関数などが、どの範囲まで有効なのかを念頭に置いて使用しましょう。

  • 実行時に出るFloatingExecptionなどのデバッグ(エラーを探すこと)は、どこまでステップが続いているのかを見るために、print文などで位置や値などを出力すると良いです。

  • 今回の課題は刻み幅が大きい(サンプル数が少ない)と、収束しませんので、注意が必要です。