「Fortran90を使って、以下↓の機能を持つプログラムを作成し、ソースと実行結果を示せ」という問題です。
「実数rを入力すると、そのrを半径とする円の面積、球の体積、球の表面積を表示する。」

まず、自分で以下のようなプログラム文をTeraPadで作成しました。
!-----課題1(2)-----
REAL :: pi, r, S1, V, S2
pi = 3.141593
PRINT *, 'Hankei r'
READ *, r
S1 = pi * r**2
V = 4 * pi * r**3/3.0
S2 = 4 * pi * r**2
PRINT *, 'Ennomenseki =', S1
PRINT *, 'Kyuunotaiseki =', V
PRINT *, 'Kyuunohyoumenseki =, S2
END
次にCygwin画面上で、gfortran -o Hankei r.exe Hankei r.f90と打ったら、 gfortran: Hankei r.f90: No such file or directoryという文字列が出てきました。拡張子はちゃんと、f90にしてるし、プログラム文も文法的に間違ってないはずなのに、どうしてうまくいかないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

あなたが作ったソースファイルの名前と gfortran を起動するために打ったコマンドでのファイル名をよく見てください, ということではあるけどファイル名に空白は入れない方が安全だと思う.


実際, あなたがここに記した「Hankei r.f90」と「Hankei r.f90」ですら違ってるし (前は「半角空白」, 後ろは「全角空白」).
Windows だけであれば #1 の「ダブルクォートでくくる」で終わりなんだけど, Cygwin だとどうだっけなぁ. メッセージからすると全角空白を使っているように見えるんだけど, こいつはサポートしてたっけ....

この回答への補足

全角空白の件は、ここで質問文を書く際に間違って入力してしまっただけです、すみません。今日、学校で、ファイル名をHankeirとして、Cygwin上で、gfortran -o Hankeir.exe Hankeir.f90と打っても、やはり、gfortran: Hankeir.f90: No such file or directoryという文字列が出てきました。"Hankeir"というふうに、ダブルクオートでくくっても、上手くいきません。何度見直しても、どこが間違っているかさっぱり分かりません。いったいどこがおかしいのでしょう?

補足日時:2009/05/27 00:03
    • good
    • 0

ご説明ありがとうございます>#4.


「No such file or directory」というメッセージですから, そのまま訳すと「そんなファイル (もしくはディレクトリ) は存在しない」ってことです. ということで, Cygwin でコンパイルするときのカレントディレクトリに「ソースファイルが存在するかどうか」を確認してほしいんです.
そのための手段として
1. まずファイルそのものが存在するかどうかを調べる: これは ls を実行すれば分かります
2. そのファイルが読み込めるかどうか確かめる: cat を使って読み込んでみる
くらいをやってみてほしいな, と.
もちろんご存じだと思いますが UNIX でもファイル名に空白を入れることができます>#4.
    • good
    • 0
この回答へのお礼

今日やっと原因が分かりました。
Cygwin上のgfortran -o ( ).exe ( ).f90の( )の中身は作ったソースファイルの名前にしないといけなかったんですね。誤って、プログラム文中の
PRINT *, 'Hankeir' の中の「Hankeir」を( )の中に入れてしまっていました(笑)。いや~、今回は僕がプログラミングに疎かっただけに
ほんと色々とご迷惑をおかけしました。が、皆さんのアドバイスなどのおかげで何とかうまくいきました。ありがとうございました。

お礼日時:2009/05/27 23:25

こんにちは


”Cygwin”って、Windowsの上にかぶせるUnixエミュレータ環境なんですね。 バージョン 1.7 だとダメ文字問題も解決されているとか..

>Isとかcatって何ですか?
Windows のコマンドプロンプトは判りますか?
Is ではなく LS(LiSt)で dir と同じ目的を持つ UNIX コマンドです。
Cat(conCATenate) は、type と同じ使い方もできる便利コマンドだと思います。

 コマンドの詳細は、参考URLで。

 ちなみにファイル名やディレクトリ名に空白を挟むのは、UNIX では空白がコマンドやパラメータの区切りを意味するので禁じ手のような気がします..(っていうか 空白を許す Windowsの仕様がいやっ!)

参考URL:http://x68000.q-e-d.net/~68user/unix/genre.html
    • good
    • 0
この回答へのお礼

今日やっと原因が分かりました。
Cygwin上のgfortran -o ( ).exe ( ).f90の( )の中身は作ったソースファイルの名前にしないといけなかったんですね。誤って、プログラム文中の
PRINT *, 'Hankeir' の中の「Hankeir」を( )の中に入れてしまっていました(笑)。いや~、今回は僕がプログラミングに疎かっただけに
ほんと色々とご迷惑をおかけしました。が、皆さんのアドバイスなどのおかげで何とかうまくいきました。ありがとうございました。

お礼日時:2009/05/27 23:27

そうなると, 「本当にそのディレクトリにファイルがあるのか」ってことが問題になりますな.


ls とか cat あたりで確認してみました?

この回答への補足

Isとかcatって何ですか?

補足日時:2009/05/27 01:10
    • good
    • 0

こんにちは


Cygwin画面上という環境もよく判らない人ですが、Windows環境なら下記のようにダブルクォーテーションでファイル名をくくってもらっていいですか?
gfortran -o "Hankei r.exe" "Hankei r.f90"
    • good
    • 0

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

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

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

Qfortranのコメントアウト

fortranで書かれたプログラムをせこせこ勉強しているのですが、普通に
C
と書かれた行のほか、
CTK
CTF
とコメントアウトされている行があるのです。このCTKやCTFはfortranの世界でなにか通例使用されているやりかたなのでしょうか?それとも私の見ているプログラムが特異なのでしょうか?

もしfortranのプログラマーはこれこれこう言う理由でこんな使い方をする、というものであれば教えてください。

Aベストアンサー

>それとも私の見ているプログラムが特異なのでしょうか?

だと思います
第1カラムに'C'を記述すれば、その以降は何を書いてもいいので。。。

私は
COMMNET メッセージ
と書いてます

Qruby "\001\376".unpack("C*") => [1, 254]の意味

"\001\376".unpack("C*") => [1, 254] の
[1, 254]ってどういう数字を意味するのですか?8ビット整数なのに配列で結果が出ていることの意味がわかりません。ご教授ください。

Aベストアンサー

"\001\376"
は、バイナリ文字列で
"C*"

バイトとして数値を取り出し配列にする
ということだと思います。
\376は、8進数で、10進にすると254になります。
見当違いだったらすみません。

Qfortranのwrite文コメント有無で処理結果が変わる

初めまして。インテルfortranを使っているのですが、ソースのwrite文をコメントにするだけで処理結果が変わってしまうという現象に遭遇しています。
環境は以下です。
OS:Fedora Core 6
コンパイラ:インテルfortran 10.0.023

具体的には、下記のソースで45行目の

ccc write(*,*) ians,sn

write(*,*) ians,sn

とするだけで、コンパイルは正常にできるのですが処理結果が変わってしまうのです。
      
43 j4=ians+ifix(wind_p*samp)
44 if(j4.gt.nnn) j4=nnn
45 ccc write(*,*) ians,sn
46 cc write(*,*) 'pick plib ',stnw(kst),ians,sn
47 if(sn.lt.aic_pmin_repic.or.ians.lt.1) go to 5
48 jjans=jj1+ians

原因が全くわからず困り果てております。
解決方法や原因の心あたりがありましたら、是非教えてください。

初めまして。インテルfortranを使っているのですが、ソースのwrite文をコメントにするだけで処理結果が変わってしまうという現象に遭遇しています。
環境は以下です。
OS:Fedora Core 6
コンパイラ:インテルfortran 10.0.023

具体的には、下記のソースで45行目の

ccc write(*,*) ians,sn

write(*,*) ians,sn

とするだけで、コンパイルは正常にできるのですが処理結果が変わってしまうのです。
      
43 j4=ians+ifix(wind_p*samp)
44 if(j4.gt.nn...続きを読む

Aベストアンサー

この文面だけで回答できるほど超能力のある人はそうそういないと思いますが....
出てくる変数や関数, そして「どのように変わったのか」くらいは書けませんか?

QGASの.align 4,0x90の0x90の意味

Cソースをアセンブリしたとき、.align 4,0x90とでるのですが、.align 4,0x90の0x90はどういう意味ですか。align 4+NOPという意味ですか。それとも4Bを0x90で埋めろと意味ですか。どちらでしょう。

Aベストアンサー

困ったときはまずマニュアルを読む.

参考URL:https://sourceware.org/binutils/docs-2.24/as/Align.html#Align

Qfortranの ! ってなんですか?

fortranで c(コメント)を書くところに ! があるんですが,
これってなんですか?
c と同じですか?

Aベストアンサー

Fortran90 から自由形式(5桁目までが文番号、とかいうしばりが無い)の記述が
決められました。

Fortran90 では、"!" から行末までが注釈(コメント)として扱われます。

参考URL:http://www.fqs.co.jp/fort-c/f90.txt

Qgfortran, g95の衝突?

WindowsXP, vistaなどでfreeのフォートランコンパイラ、g95, gfotranの2つをインストールしました。
ソースをコンパイルすると、ライブラリの参照で問題が起こります。おそらくgfortranのライブラリをg95が参照したりするので、g95でトラブルが生じるようです。その逆の可能性もあります。
お互い、環境変数の設定をしてその保存先を見に行くのですが、環境変数の設定はその設定が出てくる順番で決まると思いますので、このような問題が生じていると思います。特に環境変数pathはいろんなソフトが設定していると思います。
Linuxでも環境変数問題があると思いますが、こちらはWindowsでの問題です。gfortran, g95をクリーンにインストールする方法を教えて頂きたいのですが。
片方だけでも用事は足りるのですが、比較したいので、両方インストールしたいと思っています。

よろしくお願いします。

Aベストアンサー

環境変数が問題なのでしたら、システムのプロパティで環境変数を設定せずに、それぞれのコンパイラやプログラムの実行の前に、set コマンドで環境変数をそれぞれ適した値に設定すれば良いです。

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の方がベクトル化率、パラレル化率が高くその分高速で計算を行えました。
最近で...続きを読む

Qオートマトン L = {ww^R: w ∈ {a, b}+}の中心の見つけ方

下記のようなオートマトンがあります。

L = {ww^R: w ∈ {a, b}+}
M = (Q, Σ, Γ, δ, q0, z, F)
Q = (q0, q1, q2),
Σ = {a, b},
Γ = {a, b, z},
F = {q2}.

(1)wをスタックに載せるために:
δ(q0, a, a) = {(q0, aa)}
δ(q0, b, a) = {(q0, ba)}
δ(q0, a, b) = {(q0, ab)}
δ(q0, b, b) = {(q0, bb)}
δ(q0, a, z) = {(q0, az)}
δ(q0, b, z) = {(q0, bz)}

(2)どこが文の中心か見つけるために(状態がq0からq1に変わる):
δ(q0, λ, a) = {(q1, a)}
δ(q0, λ, b) = {(q1, b)}

(3)w^Rと一致させるために:
δ(q1, a, a) = {(q1, λ)}
δ(q1, b, b) = {(q1, λ)}

(4)最後に:
δ(q1, λ, z) = {(q2, z)}

とあります。
問題の中にこれを元にしてL = {wcw^R: w ∈ {a, b}*}のnpdaをつくりなさい、
というのがありますが、それは(2)を
δ(q0, c, a) = {(q1, a)} ←cが入力されたらそこが中心
δ(q0, c, b) = {(q1, b)}
に変えて
δ(q0, λ, z) = {(q2, λ)} ←何も入力されなかったら文字を受け付ける(* → +なので)
を付け加えればよいですか? (多分、そうですよね?)

それと、上の(2)がどうやって中心を見つけているのか分かりません。
入力中は何文字入力されるかなんて分かりませんよね。
例えばbaabbaabという文があったとすると最初の四文字でbaabで
「さては中心はbaとabの間だな!」とか勘違いとかしないんですか?
入力がλということは毎回毎回入力がある度にチェックしているということでしょうか?
混乱している私に分かりやすい説明ができる方、どうかお願いします。

下記のようなオートマトンがあります。

L = {ww^R: w ∈ {a, b}+}
M = (Q, Σ, Γ, δ, q0, z, F)
Q = (q0, q1, q2),
Σ = {a, b},
Γ = {a, b, z},
F = {q2}.

(1)wをスタックに載せるために:
δ(q0, a, a) = {(q0, aa)}
δ(q0, b, a) = {(q0, ba)}
δ(q0, a, b) = {(q0, ab)}
δ(q0, b, b) = {(q0, bb)}
δ(q0, a, z) = {(q0, az)}
δ(q0, b, z) = {(q0, bz)}

(2)どこが文の中心か見つけるために(状態がq0からq1に変わる):
δ(q0, λ, a) = {(q1, a)}
δ(q0, λ, b) = {(q1, b)}

(3)w^Rと一致させるため...続きを読む

Aベストアンサー

先の2つの御質問からすると、non-deterministic(非決定的)なPDAを考えているわけですよね。

非決定的なオートマトンでは、「1つの入力系列に対して複数の遷移経路が考えられるが、そのうち1つでも受理状態で遷移が終了する経路が存在すれば、オートマトンはその入力を受理する」と考えます。

baabbaabの例であれば、"b"しか入力されていない状態、"ba"まで入力された状態、...、"baabbaab"まで入力されてしまった状態、のどこで(2)の遷移をやってもいいんです。
そのうち"baab"の状態で(2)の遷移をすれば受理状態で遷移が終了するので、このオートマトンは"baabbaab"を受理するといえるわけです。

> それは(2)を
> ....
> を付け加えればよいですか? (多分、そうですよね?)
そこはそれで合っていると思いますよ。

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);

こんな感じですね。

では。

QVBAのプログラムで、DIAG = 1# / A(L, L) や R(

VBAのプログラムで、DIAG = 1# / A(L, L) や R(I) = 0# の数字1、0の後についている番号記号#は何を意味しているものでしょうか?

http://www.index-press.co.jp/books/excel/excel-04.pdf

の記事内にあるプログラムで使用されていますが、解説がありません。
調べてみましたがシャープと読まないことぐらいしかわかりませんでした。

どうぞよろしくお願いします。

Aベストアンサー

Pdf拝見しました。
凄く読みづらいプログラムで、どうにか修正したい欲に
かられるわけですが。

ここでいう♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示すものだと思います。

言語が違いますが仕様が似てますので参考まで。
3-1 変数と定数
 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx
 …真ん中のほう:
 …VB .NET はリテラルのデータ型に応じて、以下のような表記をします(表 3-2)。
 …の明示的な記述方法の列

1♯ はDouble型の1ということになります。
基本的に、Dim i as Double と宣言すれば i はDouble型に決まって
いますので♯は要りませんが。

稀に Dim i as Variant(何でも型)と宣言したとき、i=1#とすると
Double型として明示代入ができます。
とはいえ、変数の中身が訳がわからなくなるので、こんな書き方は
通常はしません。
プログラム文中を判りやすく見せているだけだと思います。


とはいえ、このプログラムは読みづらいです。
変数、配列のインデクサ、ループカウンタなど殆どが英字2文字以下の
意味のない単語変数なので、可読性のよいプログラムクォリティとしては
よろしくないと思います。

Pdf拝見しました。
凄く読みづらいプログラムで、どうにか修正したい欲に
かられるわけですが。

ここでいう♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示すものだと思います。

言語が違いますが仕様が似てますので参考まで。
3-1 変数と定数
 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx
 …真ん中のほう:
 …VB .NET はリテラルのデータ型に応じて、以下のような表記をします(表 3-2)。
 …の明示的な記述方法の列

1♯ はDouble型の1ということになります。...続きを読む


人気Q&Aランキング