• ベストアンサー

Fortran90に詳しい方、お願いします。

「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にしてるし、プログラム文も文法的に間違ってないはずなのに、どうしてうまくいかないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あなたが作ったソースファイルの名前と gfortran を起動するために打ったコマンドでのファイル名をよく見てください, ということではあるけどファイル名に空白は入れない方が安全だと思う. 実際, あなたがここに記した「Hankei r.f90」と「Hankei r.f90」ですら違ってるし (前は「半角空白」, 後ろは「全角空白」). Windows だけであれば #1 の「ダブルクォートでくくる」で終わりなんだけど, Cygwin だとどうだっけなぁ. メッセージからすると全角空白を使っているように見えるんだけど, こいつはサポートしてたっけ....

u260926i
質問者

補足

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

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

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

u260926i
質問者

お礼

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

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.4

こんにちは ”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
u260926i
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

そうなると, 「本当にそのディレクトリにファイルがあるのか」ってことが問題になりますな. ls とか cat あたりで確認してみました?

u260926i
質問者

補足

Isとかcatって何ですか?

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

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

関連するQ&A

  • Fortran90 プログラミング

    プログラミング初心者です。Fortran90を使って、次の機能を持つプログラムを作成し、ソースと実行結果を示していただけませんか? 「半径rを入力すると、そのrを半径とする円の面積、球の体積、球の表面積を表示する。」

  • Fortran90についての質問です。

    Fortran90に関する問題です。 「正の整数mを正の整数nで割った余りrを求める手順を、組み込み関数MOD(m,n)を用いずに、単一の算術式で表せ」 このプログラム文を以下のように作成しました。ファイル名は「amari.f90」にしました。 INTEGER::m,n,f,r REAL::a,k PRINT*,'Input 正の整数' READ*,m,n a=REAL(m) k=a/n f=INT(k) IF(m>0,n>0) THEN r=m-(f*n) PRINT*,'余り=',r END IF END そして、Cygwin画面上で gfortran -o amari.exe amari.f90と打って、コンパイルしようとしたら以下のようなエラー文が出ました。 amari.f90:8.6: IF(m>0,n>0) THEN 1 Error: Syntax error in IF-expression at (1) amari.f90:11.3: END IF 1 Error: Expecting END PROGRAM statement at (1) プログラム文のどこの箇所が間違っているのかを教えていただけませんか?お願いします。

  • FORTRANの質問

    FORTRANのプログラムについての質問です。 プログラム中に以下の文がありました。 PI=8*ATAN(1.DO) 1.DOの意味がわからずに困っています。 もしご存知の方がいましたら教えていただけないでしょうか? よろしくお願いいたします。

  • Fortran : 複数の.fファイルのコンパイル

    先輩からあるシミュレーションコードをもらったので、Cygwin上でコンパイラにgfortranを用いてプログラムを回したいのですが、複数の.fファイルと.hファイルが有りどうすればコンパイルできるのか解りません。gfortran ???←ここのコマンドがわかりません。 全くのド素人だと思ってください。 先輩にはVisual Fortranを用いているので解らないと言われてしまいました。 どなたかアドバイスお願いします。

  • Fortran90/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のプログラム

    fortranのプログラム 現在、fortranの勉強をしております。 そこで、質問があるのですが、 ある関数f(x,y,z)の座標(x,y,z)の値がデータとして与えられているとき、 S=10+f をfortranで計算したいと考えております。 ただ、関数fは複数(f1、f2、f3)あり、次々とfに代入してSを計算したいのですが、どのようにプログラムしたらいいか思いつきません。 どなたか、ヒントだけでもいいので、教えてください。 ちなみに、私が考えたプログラムは(下のプログラムはポイントだけ書いてあります。endやその他関係ないと思われるところは省いております。) do 100 k=1,3 S=S+fk(x,y,z) continue function f1 f1(s,t,u)=・・・ return end f2(s,t,u)=・・・ return end 使用しているバージョンは、fortran77(本当は90を使っているのですが、77だけで書いています)です。

  • fortran77教えてください

    fortran77のプログラムについての質問です。 次のプログラムを実行するとどのような結果になるか教えてください REAL A,B,C,D,E,F A=7.0 B=5.0 CALL WASA(A,B,C,D) CALL WASA(C,D,E,F) WRITE(*,*)E,F STOP END SUBROUTINE WASA(P,Q,R,S) REALP,Q,R,S R=P+Q S=P-Q RETURN END

  • fortranのコメントについて

    昨日からfortranを始めた者です。 調べてみると、コメントアウトするには 先頭を"C"または"*"で始めればいい と書いてあるのですが 以下のように実際にやってみると Unclassifiable statement at (1) とエラーが出てしまいます。 (文の先頭に半角6文字のスペースを入れてあります。 コメント行は"c"と"test"の間に5つスペースが入れてあります。) コンパイル文: g95 read.f90 ソース: ______program read ______implicit none ______integer i ______real r ______character(len=4) c c_____test ______print *,"Please input number" ______read *,i,r,c ______print *,i,r,c ______stop ______end もうひとつ、 上のソースをコメント行なしでコンパイルすると通るのですが 全ての実行ファイルがa.exeとして保存されるので 毎回exeファイルが上書きされる形になってしまいます。 この2点の解決方法ご存知の方いらっしゃいましたら 教えてください。お願いします。

  • Fortranで地下水の解析を

    Fortranを使って「海岸付近の塩水侵入の数値解析」をしなければいけませんが、 どこから何をすればいいのか分かりません。 不飽和浸透流の基礎式をプログラムに入れればいいんですか??? 差分法ってなんですか?S.O.R法って??? プログラムの書き方(writeとかread文とかの意味)は 教えてもらったんですけど、それ以外は自分たちで調べろと・・・。 わたしの頭の容量をこえてます。助けてください。

  • フォートランの動作に関する質問

    以下のような短いフォートランプログラムがあります。OS:Windows10 module com integer,parameter ::nd=10 end module program main use com print *, nd call sub stop end subroutine sub use com print *, nd return end 内容はモジュールで宣言したパラメータを確認してみるということです。 このプログラムがgfortranで動作せず、intel fortranでは全く問題ありません。 gfortranの結果は以下のようです。 f951.exe: Fatal Error: Reading module 'com' at line 1 column 1: Unexpected EOF GNU Fortran (Rev1, Built by MSYS2 project) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. gfortranのこのバージョンに何か問題があるのでしょうか。前からすこしおかしいことには気づいていたのですが。私のコードに問題があるでしょうか。 ※Cが一番近いと思いましてこちらに上げました。