<< zur Fortran-Startseite
< Cray PointerAnhang B: Anwendungsbeispiele >


Nachfolgend werden einige grundlegende Sprachelemente von Fortran95 und C tabellarisch gegenübergestellt. Die Gegenüberstellung erfolgt nur schematisch, da hier nur ein Überblick über die Gemeinsamkeiten und Unterschiede der beiden Programmiersprachen aufgezeigt werden soll.

Tabellenlegende:

  • ----- : nicht vorhanden
  • ...  : nicht näher bestimmt, aber irgendwas Sinnvolles und Zulässiges
  • kursiv Geschriebenes steht für beliebige (aber natürlich nur sinnvolle und zulässige) Variablennamen, Zahlen, etc.

Programmgrundstruktur

Groß-, Kleinschreibung

Fortran95 C
Fortran ist case-insensitivC ist case-sensitiv

Kommentare

Fortran95 C
! xyz 
/* xyz */

Das Ende einer Anweisung

Fortran95 C
  1. Jede Anweisung steht grundsätzlich in einer eigenen Zeile.
  2. Die Zeilenlänge ist begrenzt.
  3. Mehrere Anweisungen dürfen auch in einer Zeile stehen, wenn sie durch Semikolon ; voreinander getrennt sind.
  4. Eine Zeilenfortsetzung muss durch ein Kaufmanns-Und & am Ende der fortzusetzenden Zeile angezeigt werden.
  5. Die Anzahl der erlaubten Fortsetzungzeilen ist begrenzt.
  1. Einzelne Anweisungungen sind immer durch Semikolon ; zu trennen.
  2. Eine Anweisung kann sich über mehrere Zeilen erstrecken.

Hauptprogramm

Fortran95 C
program bsp
  ... 
end program bsp
int main(int argc, char **argv) {
  ...
} 

Unterprogramme

Fortran95 C
call sub1(...)

...

subroutine sub1(...)
  ...
end subroutine sub1
void sub1(...);

...

sub1(...);

...  

void sub1(...) {
  ...
}
var = fun1(...)

...

function fun1(...)
  datentyp :: fun1
  ...
  fun1 = ...
end function fun1
datentyp fun1(...);

...

var = fun1(...);

...
 
datentyp fun1(...) {
  ...
  return ...;
}
  • Prinzipiell werden Parameter per "call by reference" übergeben.
  • Die Datenübertragungsrichtung lässt sich mittels intent-Angabe steuern.
  • Prinzipiell werden Parameter per "call by value" übergeben.
  • "call by reference" wird mittels Übergabe von Zeigern realisiert.

Einfache Datentypen

Fortran95 C Bytes
-----unsigned-Datentypen...
integerint4
integer(kind=1)signed char1
integer(kind=2)short int2
integer(kind=4)int4
integer(kind=8)long int8
realfloat4
double precisiondouble8
real(kind=4)float4
real(kind=8)double8
complex----- (ab ISO C99 -> complex.h-Bibliothek)8
logical----- (-> int-Zahlen, ab ISO C99 -> stdbool.h-Bibliothek)4
characterunsigned char1
character(len=...)unsigned char[...]...

(Zu beachten ist, dass die Byteanzahl der Datentypen teilweise maschinenabhängig ist. Die kind-Angaben sind zudem auch compilerabhängig.)

Variablendeklaration

Fortran95 C
datentyp :: var1, var2, ...datentyp var1, var2, ...

Konstanten

Fortran95 C
'Hallo' oder "Hallo""Hallo"
'A', "A"Character: 'A', Zeichenkette: "A"
Arithmetische Konstanten höherer Genauigkeit sind zwingend mit einer speziellen Datentypendung zu versehen-----

Benannte Konstanten

Fortran95 C
datentyp, parameter :: konstante = wertconst datentyp konstante = wert
oder
#define konstante wert

Operatoren

Arithmetische Operatoren

Fortran95 C
++
--
**
//
**----- (-> Bibliotheksfunktion)
---- (-> intrinsic functions)% (Modulo)

Vergleichsoperatoren

Fortran95 C
====
<<
<=<=
>>
>=>=
/=!=

Logische Operatoren

Fortran95 C
.AND.&&
.OR.||
.NOT.!
.EQV.-----
.NEQV.-----

Stringverknüpfung

Fortran95 C
//----- (-> Bibliotheksfunktion)

Bitoperatoren

Fortran95 C
----- (-> intrinsic functions)<<, >>, &, |, ^, ~

Weitere Operatoren

Fortran95 C
-----++, --, +=, -=, etc.

Zusammengesetzte Datentypen

Fortran95 C
type :: name
  sequence
  integer :: a
  ...
end type name

...

type(name) :: var
var%a = wert
struct name {
  int a;
  ...
}; 

...

struct name var;
var.a = wert;

Felder

Fortran95 C
datentyp, dimension(zahl) :: var datentyp var[zahl]
datentyp, dimension(zahl1, zahl2, ...) :: var; datentyp var[zahl1][zahl2]...;
  • Ein Feldindex startet standardmäßig bei 1. Dieser Indexstartwert kann aber vom Programmierer verschoben werden.
  • Ein mehrdimensionales Feld wird spaltenweise gespeichert.
  • Fortran95 kennt standardmäßig viele Möglichkeiten mit Feldern (Vektoren und Matrizen) zu hantieren (z.B. Feldkonstruktor, reshape, where, Zugriff auf eine Teilmenge eines Feldes, etc.).
  • Ein Feldindex starten immer bei 0.
  • Ein mehrdimensionales Feld wird zeilenweise gespeichert.
var(zahl) = wert   
var[zahl] = wert;
var(zahl1, zahl2) = wert   
var[zahl1][zahl2] = wert;
var = wert   
----- (-> mittels Schleifendurchlauf über das ganze Feld)
var(zahl1:zahl2) = wert   
----- (-> mittels Schleifendurchlauf über die Feldteilmenge)

Zeichenketten

Fortran95 C
character(len=zahl) :: var       
char var[zahl] 
-----Zeichenketten werden (intern) mit einem \0-Zeichen terminiert. Dies muss bei der Variablendeklaration hinsichtlich der Feldlänge berücksichtigt werden.

Blöcke, Verzweigungen, Schleifen

Block

Fortran95 C
...
{
  ...
}

Verzweigungen

Fortran95 C
if (bedingung) anweisung
if (bedingung) anweisung;
if (bedingung) then
  ...
end if 
if (bedingung) {
  ...
}
if (bedingung) then
  ...
else
  ...
end if 
if (bedingung) {
  ...
}
else {
  ...
}
-----
... ? ... : ...
select case (...)
  case (...)
    ...
  case (...)
    ...
  ...
  case default
    ...
end select 
switch (...)
{
  case ...:
    ...
    break;
  case ...:
    ...
    break;
  ...
  default:
    ...
}

Schleifen

Fortran95 C
do schleifenvar = anfangswert, endwert, schrittweite
  ...
end do
for (anfangsbedingung; endbedingung; durchgangsanweisung)
{
  ...
}
do while (...)
  ...
end do
while (...)
{
  ...
}
do
  ... 
if (...) exit
end do
do {
  ...
} while (...);

Sonstiges

Fortran95 C
stop
#include <stdlib.h>
exit(status); 

oder im Hauptprogramm

return;
exit
break;
cycle
continue;

Ein-, Ausgabe

Fortran95 C
 write(*, format) ...
 #include <stdio.h>
 printf(...);
 read(*, format) ...
 #include <stdio.h>
 scanf(...);

Dateien

Fortran95 C
open (unit=nr, ...)
write (nr, format) ...
read (nr, format) ...
...
close(unit=nr)
#include <stdio.h>
...
FILE *f = fopen(...);
fprintf (f, ...);
fscanf(f, ...);
...
fclose(f);

Zeiger

Fortran95 C
datentyp, pointer :: var
datentyp *var;
...
datentyp, pointer :: var1 => null();
datentyp, target :: var2 = wert;
...
var1 => var2
write(*,*) var1 
...
datentyp *var1 = 0;
datentyp var2 = wert;
...
var1 = &var2;
printf("%d", *var1);

<< zur Fortran-Startseite
< Cray PointerAnhang B: Anwendungsbeispiele >
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.