実行の画面に数字を入力すると、
英語の文章と
0.0 0.0 0.0
-NaN -NaN -NaN
という文字が出てくるだけなんですが、これはプログラムが組めていないということなのでしょうか?
ちなみに、打ったプログラムは、
C 判別関数
WRITE(*,100)
100 FORMAT(1H1/22X,'判別関数モデル'//19X,'消費量',3X,'消費比率'//19X,
+'清酒',5X,'焼酎',5X,'ビール',7X,'清酒',6X,'ビール',7X,'M'10X,'D'/
+/)
DO 10 I=1,47
CALL SUB1
10 CONTINUE
STOP
END
SUBROUTINE SUB1
DIMENSION B1(3),B2(3),C(3),L(3),P(3)
CHARACTER*12 A
READ(5,50) A
50 FORMAT(3F8.1,3F7.1)
X=1.0
DO 11 K=1,300
Y1=(-1.0)
Y2=0.0
DO 12 J=1,3
B2=0.0
B1=0.0
L(J)=(-NINT(B1(J)*10.0/B2(J)))
S1=Y1+X**L(J)
S2=Y2+L(J)*X**(L(J)-1)
Y1=S1
Y2=S2
12 CONTINUE
W=X-Y1/Y2
IF(ABS(W-X).LT.1E-10) GO TO 13
X=W
11 CONTINUE
13 WO=W
DO 14 J=1,3
C(J)=WO**L(J)
14 CONTINUE
R1=0.0
DO 15 J=1,3
R2=R1+B2(J)
R1=R2
15 CONTINUE
D=0.0
DO 16 J=1,3
P(J)=B2(J)/R1
DO=D+P(J)*ALOG(P(J)/C(J))
D=DO
16 CONTINUE
E=0.0
DO 17 J=1,3
EO=E+(B1(J)/B2(J)*P(J))
E=EO
17 CONTINUE
WRITE(*,200) A,B2,P,E,D
200 FORMAT(1H,2X,A12,3X,3(F7.1,2X),4X,3(F9.6,X),4X,F9.6,2X,F9.6)
RETURN
END
です。
No.3ベストアンサー
- 回答日時:
> B1(J), B2(J) に値が代入される前に参照していますね。
と書いてしまいましたが、ちょっと勘違いで、
B1 = 0.0
で B(1)~B(3) のすべてに 0 が格納されるのでした(少なくともFortran90では)。
でも、やっぱり 0 での除算が起こりますが。
まず、ソース全体を載せただけではよく分からないので、何がしたいのかを書くべきです。できれば、入力としてどのようなデータをどのような形式で入力し、どのような計算方法を用いて何を計算し、結果をどのような形式で出力するかを示してください。
エラーになる原因ですが、入力部分
> READ(5,50) A
> 50 FORMAT(3F8.1,3F7.1)
に問題があるようです。おそらく入力は「文字列(12文字)と6個の実数値」で1行を構成していて、それが47行並んでいるのではないかと思われます。おそらく
READ(5,50) A,B1,B2
50 FORMAT(A12,3F8.1,3F7.1)
のようなことがしたいのでしょうか。こうすると、1行のデータが変数 A, B1(1)~B1(3), B2(1)~B2(3) に代入されます。で、B1, B2 には値が格納されたので、後ろの
> B2=0.0
> B1=0.0
は削除します。これでとりあえず、何らかの値は計算されるとおもいます(入力があってれば、多分)。何を計算しているのかは分かりませんが。
あと、たびたび
> DO 17 J=1,3
> EO=E+(B1(J)/B2(J)*P(J))
> E=EO
> 17 CONTINUE
のような表現が見られますが、
DO 17 J=1,3
E=E+(B1(J)/B2(J)*P(J))
17 CONTINUE
でいけますので(変数 EO などが余分です)。
No.2
- 回答日時:
> READ(5,50) A
> 50 FORMAT(3F8.1,3F7.1)
これも問題ですが、それ以外に23行目
> L(J)=(-NINT(B1(J)*10.0/B2(J)))
で、B1(J), B2(J) に値が代入される前に参照していますね。
直前の行で
B2(J)=0.0
B1(J)=0.0
とするつもりだったのでしょうか。
(でもそれだとゼロで除算してしまいますけど。)
ありがとうございます。
では、B2(J)=0.0 B1(J)=0.0 となおせばいいということなのでしょうか??すいません、、初心者なもので・・・
No.1
- 回答日時:
実は良く解らないのですがREAD(5,50) Aの意味は
装置番号5のデータAを行番号50のフォーマットに
従って読めという意味です。
3F8.1は 小数点以下1位で整数部分は6桁のデータ
が三個で3F7.1は同様に整数部分は5桁小数点1位の
データが三個ある。というので入力データがカード
リーダーより合計6個有ることになりますね。
**はべき乗を意味します。
1Hは今で言うcharみたいです。
早くに返事をくださってありがとうございます。。
ということは、プログラムがまだ成立していないということなのでしょうか?翻訳できたので、通ったつもりでいたのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- Excel(エクセル) エクセルの計算で 4 2022/12/13 16:49
- Excel(エクセル) エクセルの条件付き書式 2 2022/05/09 11:15
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) Google Spreadsheetのカスタム表示形式について 2 2023/05/20 09:10
- 統計学 個別の期待値は小さいけど集計すると期待値は大きくなる場合とは? 4 2022/06/14 08:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Javaの問題なのですが、「3文字...
-
excel vba 時間計算と条件分岐...
-
ダブルクォーテーションを含む...
-
実行シェルからCOBOLへパラメー...
-
直し方について教えて頂きたい...
-
JSPでの計算結果表示
-
VB6,論理演算子Orの使い方がわ...
-
DateTimePickerに値を入れたい...
-
wsprintf関数の使い方について
-
テキストボックスの数値チェック
-
getParameterの値変更
-
char型での演算子
-
struts ActionFormについて
-
Evaluate()に文字列の形式の数...
-
matchesを否定文として使う方法...
-
Stringクラスの変数の格納アド...
-
プログラミング言語で変数って...
-
String型の値が大文字か小文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Stringクラスの変数の格納アド...
-
結合した文字列をファイル名に...
-
BCD形式で時刻を!
-
DateTimePickerに値を入れたい...
-
Evaluate()に文字列の形式の数...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
DOSバッチで変数の値を変数名に...
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
Javaの問題なのですが、「3文字...
-
matchesを否定文として使う方法...
-
8桁整数を限りなく短い文字列に...
-
JSPでの計算結果表示
-
指定した日付が何日前なのかを...
おすすめ情報