僕は機械系の人間なんですが、卒業研究で理論計算をするためフォートランを勉強しています。最近ではフォートランはなくなりつつある言語だとよく聞ききますが、本当のところはどうなんでしょう?来年は大学院へ進学予定なんですが就職後のことを考えてC言語も勉強した方がよいでしょうか?技術職、研究職、院生の方、意見をお願いします。

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

A 回答 (4件)

Fortranがなくなりつつある言語かどうかはわかりませんが、すでに「古い」言語になりつつあることは


確かでしょう。構造体やポインタなどもないし(Fortran90にはあるようですが)
少なくとも民間企業では機械組み込み用であれパッケージソフトであれ使われていないと思います。
研究機関などにはまだFortranの資産も残っているのでしょうが、FortranのコードをCのコードに直す
トランスレーターなどもあるので、Fortranが使えなくても差し支えないと思います。
少なくとも大学院の研究ではCかC++を使うことをお勧めします。

なによりいけないのはFortranになれてしまうと、現在主流のオブジェクト指向プログラミングを
理解しづらくなってしまうことだと思います。Fortran77だとそれ以前にポインタや構造体の概念も理解しづらい。
これらの概念はみなFortranにはないものだからです。

私自身もそれで苦労しました。私のプログラミング経験は学部の頃にFortran77をちょっとやっただけです。
そしてファイルとかOSとかの概念さえ知らないまま卒業以来コンピューターとは無縁の生活。
10年近いブランクの後、大学院に入学したらいきなりCでプログラムを組む課題が出たりして
戸惑ったものです。ましてやC++のゼミまであったので…
BASICまたはperlのような言語ならFortran77の経験で十分対応できるのですが、Cはちょっとかけはなれています。
このあたりのことは以前にも回答したことがあるので参考URLの1つ目を御覧下さい。

なお以前に「教えて!goo」で、CとC++のどちらを先に学ぶのが良いかと言う議論がなされていました。
こちらも参考になるかと思います。参考URLの2つ目を御覧下さい。
私はCよりC++を先に学ばれることをお勧めします。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=89442,h …
    • good
    • 0

FORTRANは確か複素数を普通に使えるのでは


ありませんでしたか?(私の記憶では…)
CやC++にはなかったと思います.(最近離れてる
ので,自信なし.)

また私は去年卒論を提出するのにFORTRANで
プログラミングをしてましたから,上記の理由も
ありますから,今後,完全になくなるということは
ないでしょう.

ちなみに私は大学院生ですが,プログラミングはしない
専門分野なので,詳しいことは分かりません.
ちなみに企業が注目するITスキルは,
C,C++が第1,2位のようです.
    • good
    • 0

fortranはスーパーコンピュータなどのベクトル、パラレルプロセッサを持ったマシンではベクトル化率、パラレル化率がC言語に比べて高いのでまだまだ使っているところが多いですね。


Cの構造化プログラミングなどが効率を下げる原因になっていることが多いです。

しかし最近ではコンパイラも良くなってきていますのでこれから色々プログラミングをすることを考えたらCを勉強して置いて損はないですよ。

どちらも出来るというのが一番良いんです。

勉強を初めてすぐはCの特長を生かしたプログラミングはフォートランをやっていた方だとなかなか出来ないのですが、ちょっとやればすぐに出来るようになりますよ。
    • good
    • 0

Fortran はまだまだ使っているところはありますよ。

数値計算を今後の
専門にするつもりなら、知っていることは損になりません。

確かに、技術計算の分野でもライブラリが揃って来てるので C でも
十分役に立ちますが、いわゆる大型計算機(ベクトルプロセッサみたいな)な
方面では、Fortran がまだまだ活躍しています。

でも、これから先、計算機と関わって行くつもりならば、C はかじる程度でも
良いのでやっておいた方が良いと思います。Fortran77 のレベルだと、ちょっと
考え方が古いので、他の言語への応用が利きにくいので。


ちなみに、私は仕事(計算機屋です)で3年くらい前までは Fortran ばりばり
でした。まあ、Fortran だけでは飯を食って行きにくいので、C なども
当然使っていたのですが…
    • good
    • 0

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

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

Qアセンブラ言語って何をするための言語なんですか?

CASL II を勉強しようと思うのですが、そもそもアセンブラ言語って何をするための言語なんですか?また、どんなことができるんですか?

Aベストアンサー

プログラム言語の中でも、もっとも機械よりの言語(機械語除く)ですね。
何ができるというより、何でもできます。
他の言語では実行する際にはコンパイルして機械語に翻訳して実行します。で、この機械語とアセンブラは1対1に対応しています。通常のC言語やCOBOLなどでコンパイルして100行になるプログラムでも、アセンブラですと50行ぐらいで記述する事も可能です。
命令自体が少ないですし、本番の問題には言語仕様も記述されます。非常にシンプルなプログラムになります。他の言語に比べて読解力を必要としませんので、試験の合格だけを求めるならおすすめの言語です。

Qウインドーズでのフォートランについて

フォートラン77をリナックスで使用していたのですが、最近、ウインドーズにもフォートラン77と、fcpadをダウンロードして使っています。で、質問なのですが

フォートランでのコンパイルの際
(1)データをキイインして結果をモニターに表示
(2)データをキイインして結果をファイルに保存してプリント
(3)データをファイルに保存しておきそれを読ませて結果をモニターに表示
(4)データをファイルに保存しておきそれを読ませて結果をファイルに保存して、プリント
と言うケースがあって、(1)はわかったのですが(2)(3)(4)がどのようにするのかわかりません。

リナックスでは、それぞれemacs上にて、(2)./a.out>kekka (3)./a.out<data  (4)./a.out<data>kekka
で、できたはずなのですが、ウインドーズではどのようにすればよろしいのでしょうか。

Aベストアンサー

fcpad上から実行→実行時パラメータで、
(2),(3),(4)のそれぞれで使用するパラメータが入力できます。
その後F8キーを押すとソースがコンパイルされてから、exeファイルが実行されます。
その際に実行→実行時パラメータで設定したパラメータが渡されて、(2),(3),(4)がそれぞれ実行されます。
fcpadのヘルプに詳しい説明が出ていますよ。
読みましたか?

Qフォートランプログラムのエラーについて

自作のフォートランのプログラムをvisual fortranでコンパイル後,走らせたところ,以下のようなエラーがでました.

forrtl: severe(161): Program Exception-array bounds exceeded
Image   PC     Routine  Line   Source
hoge.exe  ********  Unknown  Unknown Unknown

注)********:アルファベット交じりの数字.たぶん,16進数.

LineやSourceなどは,Unknownと書いてありますので,トラブル解決のカギは,PCのところに表示されている,数字だと思われます.しかし,その数字が何の手がかりなのかがよくわかりません.
どなたかご教示いただけませんでしょうか?

よろしくお願いいたします.

Aベストアンサー

エラーの内容については、#1の方がお書きの通り、配列の添え字の範囲オーバーです。

PCの値は、エラー発生時のプログラムのアドレスです。
Routine Line Source が Unknownになっていると言うことは、デバッグオプションを付けずにコンパイルしてしまったのだと思います。デバッグオプションは、PCの値からエラー場所を特定するスキルがない限り必須です。

Qフォートランですが。。

以下のように関数を定義したのですが、
double precision function theata(x, u, ns, i)
のところでwarningがでて、"関数の戻り値が定義されていない"みたいなことを言ってるんですが、何がいけないのでしょう?
double precision function theata(x, u, ns, i)
implicit double precision(a-h, o-z)
dimension y(51), u(51)
do 100 i=1, ns
y(i)=cos(x)-sin(u(i))
100 continue
return
end

Aベストアンサー

theata関数で計算した結果をtheataに代入していないからです

サンプル
real*8 FUNCTION G(x,y)
G = cos(x)+sin(y)
RETURN END

サブルーチン的なのに、関数にしていますので、このワーニングは絶対取れません
どうしてもファンクションを使いたい場合は、
関数の中のループを外に出して、ループの中でtheataをCALLしてください
(パタメタのiって必要?)

Qフォートランのソース変更を試みています

オリジナルは、ファイルAを読み込んで計算後に別ファイルへ書き出す内容です。それを繰り返し行なうよう変更すべく、恐らくは配列処理で対応可能かと思うのですが力不足のためご教授願いたく。

下記ファイルAには1行目にトータルグループ数、2行目に縦・横・奥行きのポイント数、3行目以降で各ポイントの値が入っています。
  1
  41 33 33
 -0.622790027E-02 -0.585733028E-02 -0.541264331E-02
 -0.487901969E-02 -0.423867628E-02 -0.349753047E-02 
 -0.622790027E-02 -0.585733028E-02 -0.541264331E-02 ---以下省略

下記ファイルBについても同様にしたいのですが、配列について今ひとつ理解不足なので困っています。
  3
  41 33 33 ---(1)
  21 33 12 ---(2)
  11 33 21 ---(3)
 -0.622E-02 -0.585E-02 -0.541E-02
 -0.487E-02 -0.423E-02 -0.349E-02 
 -0.622E-02 -0.585E-02 -0.541E-02 ---中略ここまで(1)
 -0.622E-02 -0.585E-02 -0.541E-02
 -0.487E-02 -0.423E-02 -0.349E-02 
 -0.622E-02 -0.585E-02 -0.541E-02 ---中略ここまで(2)
 -0.622E-02 -0.583E-02 -0.541E-02
 -0.487E-02 -0.421E-02 -0.349E-02 
 -0.622E-02 -0.585E-02 -0.541E-02 ---中略ここまで(3)

元ソース内のDo文については理解できていると思いますが、プログラムに関しては初心者レベルです。ファイルAでは上から順に読み込まれて計算処理し、別ファイルに書き出しています。始めの(1)~(3)を配列に格納してポイント値へ移行し、(1)分が終われば(2)分へ移るようなDo文で対処できるのかな?と考えられるのですが・・・・

よろしくお願い致します。

オリジナルは、ファイルAを読み込んで計算後に別ファイルへ書き出す内容です。それを繰り返し行なうよう変更すべく、恐らくは配列処理で対応可能かと思うのですが力不足のためご教授願いたく。

下記ファイルAには1行目にトータルグループ数、2行目に縦・横・奥行きのポイント数、3行目以降で各ポイントの値が入っています。
  1
  41 33 33
 -0.622790027E-02 -0.585733028E-02 -0.541264331E-02
 -0.487901969E-02 -0.423867628E-02 -0.349753047E-02 
 -0.622790027E-02 -0.58573302...続きを読む

Aベストアンサー

オリジナルでは、最初にトータルのグループ数を読み込んでいるとのことですが、この値を2以上にした場合の処理(繰り返し処理)は考慮されていないのでしょうか。


オリジナルでは、
  41 33 33 
これらを、I , J , K の各変数に読み込んでいるとするなら。

例えば、
  41 33 33 ---(1) は、
     I( 1 ) , J( 1 ) , K( 1 ) に

  21 33 12 ---(2) は、
     I( 2 ) , J( 2 ) , K( 2 ) に
     
  11 33 21 ---(3) は、
     I( 3 ) , J( 3 ) , K( 3 ) に読み込んでから

処理するというように考えてみてはいかがでしょうか。


人気Q&Aランキング

おすすめ情報