Fortran: Anhang A

Aus Wikibooks
<< zur Fortran-Startseite
< Cray Pointer Anhang 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[Bearbeiten]

Groß-, Kleinschreibung[Bearbeiten]

Fortran95 C
Fortran ist case-insensitiv C ist case-sensitiv

Kommentare[Bearbeiten]

Fortran95 C
! xyz 
/* xyz */

Das Ende einer Anweisung[Bearbeiten]

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[Bearbeiten]

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

Unterprogramme[Bearbeiten]

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[Bearbeiten]

Fortran95 C Bytes
----- unsigned-Datentypen ...
integer int 4
integer(kind=1) signed char 1
integer(kind=2) short int 2
integer(kind=4) int 4
integer(kind=8) long int 8
real float 4
double precision double 8
real(kind=4) float 4
real(kind=8) double 8
complex ----- (ab ISO C99 -> complex.h-Bibliothek) 8
logical ----- (-> int-Zahlen, ab ISO C99 -> stdbool.h-Bibliothek) 4
character unsigned char 1
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[Bearbeiten]

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

Konstanten[Bearbeiten]

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[Bearbeiten]

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

Operatoren[Bearbeiten]

Arithmetische Operatoren[Bearbeiten]

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

Vergleichsoperatoren[Bearbeiten]

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

Logische Operatoren[Bearbeiten]

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

Stringverknüpfung[Bearbeiten]

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

Bitoperatoren[Bearbeiten]

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

Weitere Operatoren[Bearbeiten]

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

Zusammengesetzte Datentypen[Bearbeiten]

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[Bearbeiten]

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 startet 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[Bearbeiten]

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[Bearbeiten]

Block[Bearbeiten]

Fortran95 C
...
{
  ...
}

Verzweigungen[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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

oder im Hauptprogramm

return;

exit
break;
cycle
continue;

Ein-, Ausgabe[Bearbeiten]

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

Dateien[Bearbeiten]

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[Bearbeiten]

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 Pointer Anhang B: Anwendungsbeispiele >