1

入力した温度が絶対零度かどうかをユーザーに知らせるプログラムがあります。もしそうなら、彼らは「あなたのためのエントロピーはありません」と見るはずです。それが大きい場合は、a0をどれだけ上回っているかを伝える必要がありますが、ifステートメントにエラーがあり、どこにあるのかわからないというメッセージが表示され続けますはじめに、誰か私を助けてくれませんか?

PROGRAM Project2

CHARACTER(1):: tempType
REAL:: k, f, c
REAL:: temp
REAL:: answer

PRINT *, "What is the temperature type?"
READ *, tempType
PRINT *, "whats the temp?"
READ *, temp

k = 0.0
c = -273.15
f = -459.67

answer = getMinTemperature(tempType)
PRINT *, answer


CONTAINS

FUNCTION getMinTemperature(tempType)
REAL:: getMinTemperature
CHARACTER(1), INTENT(IN):: tempType
REAL:: temp
DO i = 1, num
IF(ACHAR(tempType(i)) <= temp .AND. k > temp) THEN
 k= 0.0
 getMinTemperature = k
 EXIT
ELSE IF (c <= temp .AND. c > temp) THEN
 c= -273.15
 getMinTemperature = c
 EXIT
ELSE IF ( f <= temp .AND. f > temp) THEN
 f=-459.67
 getMinTemperature = f
 EXIT
END IF
END DO

END FUNCTION

END PROGRAM Project2
4

3 に答える 3

6

これは、あなたが報告したエラーに関連するだけの無意味なアドバイスです。

  1. implicit noneプログラム、ルーチン、およびモジュールの先頭に挿入する習慣を身につけてください。ステートメントの後use、他の宣言の前に配置する必要があります。誤って変数を宣言したり、変数を再宣言したくないスコープで変数を再宣言したりするのを避けるのに役立ちます。
  2. 引数リストを介してルーチンに出入りするすべてのデータを渡す習慣を身につけてください。あなたのコードでは、変数k,f,c(これは何ですか、鶏を揚げるコードの一部ですか?) は含まれている のスコープ内にあるgetMinTemperatureため、明示的に渡さなくてもそこで使用できます。しかし、現在のアプローチでは、大規模なプログラムでは何が起こっているのかを把握することがはるかに難しくなり、他のプログラムでコードを再利用することがはるかに難しくなります。
于 2012-11-06T07:52:36.623 に答える
4

宿題だと仮定して、答えではなく、いくつかの指針を示します。まず、プログラムのロジックを再考してください。そのループオーバーが本当に必要iですか?次に、の最初の Google ヒットをachar検索します。本当に必要ですか?また、関数の引数の属性にachar干渉するのは後者であるように、行を でコメントアウトするとコードがコンパイルされることにも注意してください。intent(in)

于 2012-11-06T05:57:36.773 に答える
3

Zhenyaは絶対に正しいです。もう少しヒントを得るために、関数で次のコード サンプルを使用することをお勧めします。もちろん、必要なロジックを追加する必要があります。あなたの割り当ては、 for を使用するのに適していますSELECT CASE

SELECT CASE ( tempType )
 CASE ( 'k', 'K' )
     ! do something - kelvin input
 CASE ( 'c', 'C' )
     ! do something - celsius input
 CASE ( 'f', 'F' )
     ! do something - fahrenheit input
 CASE DEFAULT
     ! handle input error
END SELECT
于 2012-11-06T06:38:29.153 に答える