Windows Me上でCompaq Visual Fortran 6.0を使用しています。

ほぼ同じようなプログラムですが、パラメータが異なり、
明らかに違う計算結果になるはずなのですが、
まったく同じ数字が出てきてしまいます。

コンパイルして作られたexeファイルが同一であると思われるのですが、
どなたか分かりますでしょうか。

A 回答 (1件)

 どのようなプログラムなのかは知らないので自信持てませんが、その二つのプログラムは同じWorkspaceでコンパイルしている(つまりコンパイルしてもEXEファイルが1つしか作られない)状態じゃありません?



 本来、一つのプログラムに対してEXEファイル1個ですよね?

 あと、パラメータはRealで定義してますか?integerで定義してますか?

 同じ計算結果になるというのなら、バグ探しのコツは、一方のプログラム中の計算式を大幅にいじってみるといいんじゃないかな?

  
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

Workspaceに問題がありそうです。
毎回コンパイルするごとにWorkspaceを削除しながらコンパイルしていたのですが、
フォルダ自体は同じフォルダだったので、
今回はフォルダごと削除し、新たなフォルダでコンパイルしたらうまく行ったようです。

ちなみにパラメータは、commonで変数定義して後で数値代入しています。

お礼日時:2002/02/11 04:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC,C++でのきれいに並んだ数値データの読み書き

CとC++での並びによる入出力についてお尋ねします。

1.2 3.2 4.5
0.4 2.1 3.2
4.1 3.2 1.5
9.1 2.5 2.1

というようなエクセルのシートのような状態になっている数値のファイルがあります。
(この例は4x3ですが、200x100程度です。)
数値の切れはカンマか空白かですが基本空白です。

このようなファイルへの入出力についてどのような処理になるでしょうか。
Fortranだと書き込みは以下のような感じで至極簡単です。
(縦、横方向にループが回って1つ1つ読み書きしているイメージです。)

---以下を想定
配列 fの宣言
nx=3
ny=4
---

open(10,file='xxx')
do j=ny,1,-1
write(10,*) (f(i,j),i=1,nx)
enddo
close(10)

読み込みについてはwrite→readにすればいいです。

読み書きする場合、1つ1つの数値のフォーマットの問題があるでしょうか。fortranは指定しなければデフォルトでの読み書きとなり、普通書き込む場合は1.242e+5, ±1.24236など指定した方が見やすくはなりますが。

これのC, C++版です。CとC++はだいぶ違うかもしれませんけれども。

よろしくお願いします。

CとC++での並びによる入出力についてお尋ねします。

1.2 3.2 4.5
0.4 2.1 3.2
4.1 3.2 1.5
9.1 2.5 2.1

というようなエクセルのシートのような状態になっている数値のファイルがあります。
(この例は4x3ですが、200x100程度です。)
数値の切れはカンマか空白かですが基本空白です。

このようなファイルへの入出力についてどのような処理になるでしょうか。
Fortranだと書き込みは以下のような感じで至極簡単です。
(縦、横方向にループが回って1つ1つ読み書きしているイメージです。...続きを読む

Aベストアンサー

>fscanf( fp1,"%lf %lf %lf", &arr[i][0],&arr[i][1],&arr[i][2]);
は、変数が3個の場合に限定されていると思います。
>これが100とか多い場合1000とかの場合はどうなるでしょうか。
>fortranの場合、
>read(10,*) (f(i,j),i=1,nx)
>においてnxの値を1000にしておけばいいですし、何個であってもそれに体操してnxを変えるだけです。
>2次元配列なので、ループが2方向となります。2つの方向へのループ回数を指定するだけで済むという読み書きなのですが。
>いかがでしょうか。

提示したサンプルが悪かったかもしれません。
以下のソースでも、同じ結果が得られます。
------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp1, *fp2;
double arr[4][3];
int i,j;
if( (fp1 = fopen( "in_data27.txt", "r")) == NULL ) {
printf("入力ファイルをオープンできません\n");
return 10;
}
if( (fp2 = fopen( "out_data27.txt", "w")) == NULL ) {
printf("出力ファイルをオープンできません\n");
return 10;
}
for(i = 0;i < 4;i++){
for(j = 0; j < 3; j++){
fscanf( fp1,"%lf ", &arr[i][j]);
}
}
for(i = 0;i < 4;i++){
for(j = 0; j < 3; j++){
fprintf(fp2,"%f ",arr[i][j]);
}
fprintf(fp2,"\n");
}
fclose(fp1);
fclose(fp2);
return 0;
}
---------------------------------------------------
100×100の場合は
for(i = 0;i < 100;i++){
for(j = 0; j < 100; j++){
fscanf( fp1,"%lf ", &arr[i][j]);
}
}
のようになります。
C言語の場合は
3つ一度に読む方法もありますし、1つずつ読む方法もあるということになります。

>fscanf( fp1,"%lf %lf %lf", &arr[i][0],&arr[i][1],&arr[i][2]);
は、変数が3個の場合に限定されていると思います。
>これが100とか多い場合1000とかの場合はどうなるでしょうか。
>fortranの場合、
>read(10,*) (f(i,j),i=1,nx)
>においてnxの値を1000にしておけばいいですし、何個であってもそれに体操してnxを変えるだけです。
>2次元配列なので、ループが2方向となります。2つの方向へのループ回数を指定するだけで済むという読み書きなのですが。
>いかがでしょうか。

提示したサンプルが悪かったかもしれ...続きを読む

QCompaqのVisual Fortranの使い方について

CompaqのVisual Fortranを使っているのですが,英語なので使い方がよく分かりません.このソフトの使い方を説明している本やサイトがありましたら,教えてください.(Fortranの文法自体はある程度分かります.)

Aベストアンサー

compaq visual fortranで検索するとすぐに以下のページが
出てきますよ。
http://www1.jpn.hp.com/products/software/development/dvf/

QWebサイトのバイナリーファイルをダウンロード

Perlを使用して、Webサイトのバイナリーファイルを自動ダウンロードすることは可能でしょうか?
LWPを使用してHTMLファイルを取得することはできたのですが、バイナリーファイルをダウンロードすることができませんでした。
可能であれば、ポインタとなるようなサイトを教えていただけるとうれしいです。

Aベストアンサー

おそらく、ファイルの取得まではできるが保存したファイルが壊れている、ということですか?

もしwindowsのActivePerlをお使いなら、ファイルを書き出す前にbinmodeでバイナリモードにしてください。

binmode(FILE_HANDLE);

これをしないと書き出し時に改行コードが変換されるのでバイナリファイルをうまく書き出せません。

QCompaq Visual Fortranを使っていて困っています。

Compaq Visual Fortranを使っているのですが、バッチファイルを使って実行を何度も行いたいのですが、毎回実行が終わるたびに「QuickWinを終了しますか?」というウィンドウが出てきてyes を押さないと次の実行に移りません。この操作をせずに何度も実行を行う方法をご存知の方、よろしければ教えてください。よろしくお願いいたします。

Aベストアンサー

参考まで、

Compaq Visual Fortran の日本語マニュアルなどはエクセルソフト株式会社のホームページ http://www.xlsoft.com/jp/products/intel/cvf/index.html で公開しておりますので,適宜ご利用いただけますよう,お願いいたします。

弊社が保有しておりますユーザ登録情報は,個人情報保護の観点からエクセルソフト株式会社へは移管いたしておりません。今後 Intel Visual Fortran の情報を必要とされるお客様は,大変お手数ですが,エクセルソフト株式会社へお申し込みいただけますよう,お願いいたします。

以上,よろしくお願いいたします。


敬具

2004年6月
日本ヒューレット・パッカード株式会社

QFORTRAN

初めまして。

今大学でFORTRANについて議論が交わされてるのですが
FORTRANについて知ってるいる方がいたら是非教えてください。

今のところ求めている情報としては
1.FORTRANの強み
2.FORTRANの弱み
3.FORTRANのこれから
4.FORTRANが抱えている問題

URLなどでも結構ですので是非情報をお持ちでしたら教えてください。

Aベストアンサー

Fortranの強みはベクトル化、パラレル化に向いていることです。ですからベクトルユニットを持ったコンピュータ、具体的にはスーパーコンピュータなどのプログラミングには適しています。
Fortranがなぜベクトル化パラレル化に強いかというとC言語のように構造化プログラミングや再帰呼び出しなどを通常はCほどは使わないのでコンパイラが理解しやすいのです。
以前ミニスーパーコンピュータを使っていたときもCよりもForTtranの方がベクトル化率、パラレル化率が高くその分高速で計算を行えました。
最近ではコンパイラの性能も上がってCなどでもベクトル化が進むようにはなりましたがやはりFortranの方が強いですね。

弱みとしては逆に構造化や再帰呼び出しなどの複雑なことが難しいので計算などの問題には強くてもシミュレーションの部分では少し弱くしかもコンパイル後のアプリケーションの大きさが大きめになることです。

Fortranのこれからですがスーパーコンピュータ南アkを使って高速な計算を行う分野ではまだまだ使われるでしょうが使用率でいったら少なくなっていくと思います。

Fortranの強みはベクトル化、パラレル化に向いていることです。ですからベクトルユニットを持ったコンピュータ、具体的にはスーパーコンピュータなどのプログラミングには適しています。
Fortranがなぜベクトル化パラレル化に強いかというとC言語のように構造化プログラミングや再帰呼び出しなどを通常はCほどは使わないのでコンパイラが理解しやすいのです。
以前ミニスーパーコンピュータを使っていたときもCよりもForTtranの方がベクトル化率、パラレル化率が高くその分高速で計算を行えました。
最近で...続きを読む

QFortran90/Fortran95→Fortran77

大学の授業でFortranを使ったプログラミングを勉強しています。

以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます)
大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^;
家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています

なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい)

Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです

前置きが長くなりましたが、エラーが出る文は以下のところです
open(8,file='freq_ex13.dat',action='write',status='replace')
ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

大学の授業でFortranを使ったプログラミングを勉強しています。

以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます)
大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^;
家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています

なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコン...続きを読む

Aベストアンサー

action='write'を削除してみては?
8番にREADを使わなければいいだけの話です。
http://docs.hp.com/ja/B3908-90007/ch10s65.html#id21163286

Fortranはコンパイラ毎に独自の拡張が相当されてますから、移植する際にはどの拡張が使えるのか把握する必要があります。
使えない場合はコンパイルエラーが返ってくるのですぐにわかりますけど。
http://www.cc.nao.ac.jp/vppman/HTML/japan/langFort/fvp11/fvp00079.htm

参考URL:http://docs.hp.com/ja/B3908-90007/ch10s65.html#id21163286

QFortranプログラムからC言語で実装された関数を呼ぶ方法

Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか?何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

Aベストアンサー

回答いたします。

ユーザーガイドの213ページ(アクロバットだと、231ページ)に出ています。具体的には、Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになります。

そしてC側では、
#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことが出来ます。

ユーザガイドの仕様にしたがってサンプルを書いてみると。
サンプル2を例に取ります。

Fortran側
C_EXTERNAL WRITE 'WriteFile' : INTEGER*4
INTERGER*4 RESULT
RESULT=WRITE()
以下続く
最後は、RETURN

C側
#extern int Writefile(int);

こんな感じですね。

では。

QFortran コンパイルエラー

Cygwin上でFortranを用いて流体の数値解析を行っています。
先輩から引き継いだシミュレーションコードなのでプログラムをいじらなくても実行できるだろうと思ったのですが、コンパイル時に以下のエラーが出てしまい、いろいろ試行錯誤しましたが自力では解決できませんでした。

エラーは次のとおりです。何かご存知の方アドバイス頂けたらありがたいです。○はスペースです。カンマの下に1があります。

op.f:13.21:
○101 format(i,4e)
○○○○○○1     
Error:Nonnegative width reqired in format string at (1)

Aベストアンサー

format で使う書式文字列を再確認してください.
エラーメッセージの通りで, I編集にはそのあとに幅を書く必要があります.

QMS-FortranとFortran90

私は研究でFortran90を使っているのですが、研究に使うプログラムはMS-Fortranを用いて書かれているものでした。

そこで質問なんですが、MS-FortranとFortran90の違いについて知っている方がいれば教えてください。
また、MS-FortranでかかれたソースコードをFortranにコピーした時に何か弊害はあるのでしょうか?(人づてに弊害が起こると聞いたことがあるのですが・・・)。

プログラミングを本格的に始めて、まだ3ヶ月ほどで用語の使い方がわかりにくいところがあるかもしれませんがよろしくお願いします。

Aベストアンサー

MicrosoftがFortranを出していた時期を考えると、多分ですが、Fortran77だと思いますね。
Fortran90自体、製品が揃ったのは90年からかなり立っています。そのころには、Microsoftの言語製品はCとBASICだけになっていたんじゃないかな。

なお、MS-Fortranに限らず、intel系のFortranでは、86系のアーキテクチャの影響でホストに比べ、一部の機能が制限されている場合があります、これらについてはマニュアルを参照してください。

Qfortran77 自宅ではコンパイルできないので

課題が出ているのですが、
自宅のパソコンではコンパイルできないので、
このプログラムで動くか教えてほしいです

dx/dt=1+x^2
初期条件x=0,t=0
を0<t<1.5まで
10等分で解く

オイラー法
f(x,t)=1+x**2
x=0,t=0
a=1.5
b=10
h=a/b

do i=0,a,h
x=x+f(x,t)*h
write(*,*) x,t
end do



2次ルンゲクッタ法
do i=0,a,h
x=x+h{(1-m)*f(x,t)+mf(x+h/(2m),t++h/(2m)*f(x,y))}
write(*,*)x,t
end do

4次ルンゲクッタ法
do i=0, a,h
k1=h*f(x,t)
k2=h*f(x+h/2,t+k1/2)
k3=h*f(x+h/2,t+k2/2)
k4=h*f(x+h/2,t+k3/2)
x=x+(k1+2*k2+2*k3+k4)/6
write(*,*) x,t
end do

これでx(t)=tantであることが求められるでしょうか??
間違っている箇所を指摘していただけると嬉しいです。

あと2階常微分でのルンゲクッタ法というのが全く理解できません。
どなたか詳しく教えてください。

お願いします。

課題が出ているのですが、
自宅のパソコンではコンパイルできないので、
このプログラムで動くか教えてほしいです

dx/dt=1+x^2
初期条件x=0,t=0
を0<t<1.5まで
10等分で解く

オイラー法
f(x,t)=1+x**2
x=0,t=0
a=1.5
b=10
h=a/b

do i=0,a,h
x=x+f(x,t)*h
write(*,*) x,t
end do



2次ルンゲクッタ法
do i=0,a,h
x=x+h{(1-m)*f(x,t)+mf(x+h/(2m),t++h/(2m)*f(x,y))}
write(*,*)x,t
end do

4次ルンゲクッタ法
do i=0, a,h
k1=h*f(x,t)
k2=h*f(x+h/2,t+k1/2)
k3=h*f(x+h/2,t+k2/2)
k4=h*f(x+h/2,t+k3...続きを読む

Aベストアンサー

Vectorに無料コンパイラがありませんか。なければ、basicインタープリタでもOKですから、実行してみると良いのですが、、、
(fortranとbasicは言語仕様が似ているので便利かと思います)

●doループは整数刻みで、期待する値とは異なるはず…即ちバグ
●その他は文法エラーはなさそうです


人気Q&Aランキング