<< 豆知識 >>
Fortranだけに限りませんが、プログラミング言語というのは、1種類覚えてしまえば他の言語にも簡単に乗り換えることができるといわれています。それは、どれも書き方が似たものであるからです。僕もFortranのほかに、C言語を学びました(本との基礎だけですけど)。最初はビビリまくりでC言語に突入しましたが、少しの違いだけ呑み込めば、後はすんなりと学習が進んでいきました。ですから、Fortranを学ぶことは、その効果はFortranだけにとどまらないということです。
沢山あるプログラミング言語の中でも、Fortranのように科学計算の中心として使われ、またFortranと似た感覚で使用することができるC言語を少しだけ紹介してみたいと思います。全体の概念さえ理解してしまえば、後は命令文の呼び方の違いぐらいなので、少しがんばってみればプログラミングの代表言語であるC言語を簡単に会得することができます(高度なものはさすがにそれ相応の努力が必要ですが)。Fortranが分かっていれば、乗り換えは簡単です。
- C言語では、カラム(欄・列)の概念がありません。また行も存在しません。どういうことかというと、Fortran固定形式では7欄から書かないといけないとか、1行に2つの命令文を書くことができないとかがありますが、C言語では何列目、何行目に書くこともでき、行がないので改行も空白として認識されます。C言語は行の概念がなく、どこに書いても構わないのですが、命令文が終了するときには日本語の句点の役割を持つ「;」をうつ必要があります。またFortran90のように「;」を挟みさえすれば、文を一行に何個でも書くことも可能です。
- 空白は単なる語と語の接続(くっつかないように間隔をあける)だけの役割なので、何個空白を使っても一つの空白と同じに認識されます。なので、ソースコードを見やすくするために空白で文の位置を調節することができます。
- Fortranよりも前の言語であるアセンブリ言語(機械語に近い言語)のように、コンピュータに対する操作能力が非常に大きいです。つまり、コンピュータを他の言語よりもいじりやすのです。。
- プログラムの先頭でヘッダファイルをインクルードする。ヘッダファイルとは、拡張子が「.h」で、C言語で目的の操作を行なうために必要な環境を整備するためのファイルです。インクルードとは、ヘッダファイルをそのプログラムに組み込むという意味です。ヘッダファイルの概念は、Fortranのモジュールをイメージしてみると分かりやすいと思います。変数やサブルーチンをモジュールで定義すれば、USE文を使用したプログラム単位でその内容が使用(参照)可能となりましたよね。ヘッダファイルを組み込むというのもこれと同じで、C言語では変数だけでなく全ての操作がヘッダファイルの中で定義されていて、ヘッダファイルをインクルードしないと、何もできません。例えば、入出力をする場合には「stdio.h」を、Fortranでの組み込み関数を使用するには「math.h」をインクルードする必要があります。ヘッダファイルは、コンパイラを持っていればそのフォルダの中に用意されています。
- C言語では、全てのプログラム単位が関数で成り立っています。ここがFortranと大きく違うかもしれません。関数副プログラムは関数でしたから難なく理解できると思いますが、C言語では主プログラムの部分(PROGRAM)も関数でできています。名称は「main()」です。つまり、主プログラムも副プログラムも関数なのです。
- 関数の初めと終わりには中括弧が付きます。「main()」にも当てはまります。これはFortranでは「PROGRAM」や「SUBROUTINE」ではじまり、「END」で終了していたところが、C言語では「{」で始まり、「}」で終了します。このほうが無駄に長い英字で始まりと終わりを宣言しなくていいので、見やすくなります。くれぐれも中括弧を入力するときには、しっかりshiftキーを押してくださいね。僕はよく失敗して、中括弧とよく似た大括弧で入力してしまい、わけの分からないコンパイルエラーを受けてしまいます。
- C言語では「ポインタ」という道具が有名です。同時に、これがC言語を難しい言語としてしまっている存在であるともいえます。ポインタとは、「指示するもの」という意味です。「アドレス」という、変数(データ)のメモリー上の住所を指し示し、そのアドレスにある値を表示します。これを使用することにより、コンパクトな記述、配列ではできないことが可能となります。ポインタの操作は強力で、時には重大なエラーを生じさせてしまうことがあるが、ハードウェアへの強力な力を発揮します。Fortranにそこまでのポインタ能力はありません。
- ダイクストラの構造化プログラミングの主張の後に登場した言語なので、構造化思考が整っています。とくにgoto文を使用しないことに徹底していて、文番号の概念がありません。
試しにC言語でプログラムを書いてみましょう。Fortranで書いた例文が下の文です。
program main
print *,'Hello world!'
end program
そして、これがC言語で記述した場合の文です。
#include
void main(){
printf("Hello world!\n");
return 0;
}
結構見た目が変わりましたね。でも、最初に適切なヘッダファイル(C言語に必須なのは「stdio.h」)、主プログラムも関数になること、関数の初めと終わりは中括弧、あとは命令文の名称の違いだけ理解できれば、ほとんど同じであることが分かると思います。ちなみに、「void」とあるのは、「この(main)関数は値を返し(持ち)ません」という意味で、それを実行しているのが「return 0」です。値を返すというのは、Fortranでの副プログラムの結果変数に値をしまうことです。この場合は、副プログラムを使用していませんので、mainプログラムを呼び出した別のプログラム単位(例えばFortranのサブルーチン)mainプログラムの値を返す必要がないので、「値0を返す」、つまり値を返さない処理を行なっているというわけです。
では下に、Fortranで使用されている命令文が、C言語ではどのような名称で呼ばれているのかを紹介していきたいと思います。簡単にしか紹介しないので、少ないですが、C言語にはFortranを超える沢山の命令文が他にも用意されています。
|
integer |
int a; | |
real |
float a; | |
character |
char a; | |
double precision |
double a; | |
配列 |
int a[3]; |
write print |
printf("この答えは%d",a); | |
read |
scanf("%d %d",&a,&b); | |
if else endif |
if(a>3){命令文;} else{命令文;} | |
case |
switch(a){
case 0:命令文 break;
case 1:命令文 break;
default:命令文 break;
} | |
do |
for(i=1;i<8;i++){命令文;}
while(i>=2){命令文;}
do{命令文;]while(i=3); | |
save |
static | |
type |
mainよりも上側で
struct Student{
char name;
int number;
};
void main(){
struct Student seito
seito.number=11 | |
function |
mainよりも上側で
int sum(int x,int y);
void main(){
int x,y,z;
z=sum(x,y);
printf("和は%d",z);
return 0;
}
int sub(int x,int y){
int z;
z=x+y;
return z;
} |
どうですか。これは本の一部ですが、結構C言語の言葉はFortranと似ているのではないかと思います。後は慣れです。書き方の形式に慣れてしまえば(特に中括弧とセミコロン)、後はFortranで培った知識を生かせば、簡単にC言語のプログラミングを行なうことができます。C言語にはポインタに代表されるようなFortranよりも強力な操作が可能なので、Fortranでは簡単すぎて飽き飽きしてしまった人にはぴったりかもしれません。
もしC言語をやってみたい・もっと詳しく知りたいと思った人は、ぜひ『プログラムを書こう! C入門』を訪れてみてください。このページはC言語を詳しく分かりやすく書いているページでオススメです。さらにC言語の進化形であるC++や、C言語と並んで有名なJavaも扱っているので、みんなまとめて学習するのもいいと思います。せっかくFortranを学んだなら、C言語にもチャレンジしてみてくださいね。
参考:
ウィキペディア
ASCIIデジタル用語辞典
コマンドプロンプトを使ってみよう!
コマンドプロンプトで作業効率UP
FORTRANの歴史
Fortranを使おう
|