大学四年で研究室配属がありました。
複雑系を扱っているのでフォートランを使うようです。
でも最近ではあまり使われないと聞き、
また、担当の先生はCでもC++でもやりたかったら
言いなさい。という感じでした。
就職希望してるので、Cをやってたほうが
就職とか有利でしょうか?
誰か教えてください。

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

A 回答 (5件)

複雑系を始めとして、物理系の数値計算でFORTRANを使う理由は、過去の遺産のプログラムが大変豊富にあるからです。

こういうのをライブラリといいます。つまりライブラリが豊富なので、複雑系の計算をしようとすると、違う研究でも同じような微分方程式の解法が役に立ったりして、改めてプログラムを書くことなく、研究の効率があがるというのが、FORTRANを使う最大の理由です。
Cは、まだそれほどライブラリの蓄積がないので、研究をしていくうえでは、プログラムを書くのが大変ということになります。研究や卒論の効率から考えるFORTRANでプログラムを書いたほうがよいと思われます。他の言語だと、プログラムを自分で長く書かねばならなくなります。

さて、研究から離れて社会の話しをしましょう。基本情報処理試験をご存知ですか?情報処理技術者の取得すべき国家資格です。その試験で、言語を選択するのですが、選択できるのは、アセンブラ、COBOL、C、そしてJavaです。実はついこの間までFORTRANが選択できてJavaはありませんでした。つまり、FORTRANは研究者の間の「方言」になってしまい、その代わり新進気鋭のJavaが入ってきたわけです。これは、社会のニーズを大変的確に反映しています。
Javaは今、いちばんニーズの高い言語です。それからC++です。これらの言語の共通点は「オブジェクト指向言語」であるということです。現在のITの流れは「オブジェクト指向」になっています。VBもニーズが高いです。この言語も、準オブジェクト指向です。CやCOBOLはFORTRANと同じく「手続き型言語」ですが、CやCOBOLで新しいプログラムを書くことは少なくなりました。これらの言語で書かれたシステムは「レガシー(遺産)」とさえ呼ばれています。つまり、Cももはや、社会ではあまり使われていない言語なのです。

つまり、就職では、FORTRANでもCでも変わりはないということです。C++は少し有利かもしれません。しかし、C++(もしくはJava)のような「オブジェクト指向」で数値計算のプログラムをかくと、恐ろしく面倒です。ライブラリも少ないです。
研究でこれらの言語をもちいたら、大変な時間がかかります。とくにJavaは計算時間が馬鹿みたいに長くかかります。ですから、研究のためにC++やJavaを使うことはお勧めできません。

では、どうするか。研究は素直にFORTRANでやるのが良いでしょう。
そしてまず、「アルゴリズム」というものをしっかり身につけましょう。
そして、なるべく学生のときに基本情報技術者試験に合格するといいです。
こういう資格のほうがずっと就職に有利になります。そのために、Cを勉強するのは良いことだと思います。
就職のときには、自分は「アルゴリズム」をちゃんと身につけているとか、長いプログラムを書いた、とか、論理的思考が得意であるとかでアピールするとよいです。例えばSEになるとしても、みんながプログラミングをするわけでは、ありません。そう言う意味では、学生時代どの言語をやっていたかということは、それほど重要なことではないと思います。それよりも、どの言語でも良いから、しっかりとした、明確な構造をもった、読みやすいプログラムが書けるという能力のほうがずっと重要だと思います。

こんなところですが、参考になさってください。
    • good
    • 0

通常のアプリケーションではC,C++が多いですが、


複雑な計算や計算スピードが求められるシステムでは
まだまだFORTRANが使われています。
(どの言語を使うかはシステムの内容によります。)
就職先の会社によりますが、まあ何かしらプログラム言語を
一つ覚えておけばいいと思います。
    • good
    • 0

結論から言うと、C・C++やVC、VB等の言語の方が就職には有利だと思われます。


FORTRANですので、多分汎用系だと思いますが、
汎用系の求職は確実に減っていると感じます。
逆にクライアント/サーバー系の仕事は特に減っているとは感じられません。
汎用系でもCOBOLならまだなんとかなりそうなんですがね。

そんな私も汎用系でCOBOLやってましたが、必要にせまられてVBもやってます。時代なんですね。
    • good
    • 0

市場規模で考えるとFortranは少数派になりました。


しかし、全く需要が無いわけではありません。

現在主流の言語はJavaとC++です。
Windowsだけで考えるとC#の隆盛が始まろうとしています。
また、VBも大きな市場を持っています。

Cも時代遅れになりつつあります。
これには異論もあるでしょうが、今「Cはまだまだいける!」といっているのは15年前に「COBOLは永久にビジネスアプリのの主流だ!」と言っていた人と同じです。

しかし、所詮は言語に過ぎません。
言語は道具です。
言語にこだわるのはノコギリの種類にこだわるのに等しい考え方です。
もっと大切なこと(論理、設計など)に注目して学べば言語なんて何でもかまわないのです。
    • good
    • 0

現在、私は就職活動をしていますが、FORTRANを使ってプログラムを組んでいるという企業は聞いたことがありませんね・・・。

ほとんどがCでした。
しかし、研究室で使う程度の経験では就職には役に立たないでしょう。
私の好みですがCの方が面白いですよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しの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つの方向へのループ回数を指定するだけで済むという読み書きなのですが。
>いかがでしょうか。

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

QフォートランとC言語について

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

Aベストアンサー

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,http://oshiete1.goo.ne.jp/kotaeru.php3?q=80834

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

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

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

Aベストアンサー

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

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

binmode(FILE_HANDLE);

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

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のヘルプに詳しい説明が出ていますよ。
読みましたか?

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フォートランプログラムのエラーについて

自作のフォートランのプログラムを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の値からエラー場所を特定するスキルがない限り必須です。

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

こんな感じですね。

では。

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って必要?)

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系のアーキテクチャの影響でホストに比べ、一部の機能が制限されている場合があります、これらについてはマニュアルを参照してください。

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ランキング