Seien Sie neugierig und lernen Sie: Modernes Fortran auf den Punkt gebracht

Fortschritte in Wissenschaft und Technik beruhen nach wie vor mehr als jede andere Sprache auf Fortran. Überrascht? Das sollten Sie nicht sein, obwohl viele Leute, die sich Programmierer nennen, Fortran noch nie gelernt haben. Ich werde dir Fortran in fünf Minuten oder weniger beibringen. Es wird nicht schaden und Sie werden wissen, was möglicherweise die wichtigste und einflussreichste Programmiersprache überhaupt ist.

Informatiker mögen sich so verhalten, als gäbe es Fortran nicht, aber die Populärkultur ( The Simpsons , Staffel 26, Folge 10) schnitt mit der weisen Beobachtung besser ab: „Fortran, die größte der Programmiersprachen!“ Tatsächlich mehr als die Hälfte der Berechnung Die leistungsstärksten Computer der Welt stammen aus Fortran. In einigen großen Systemen kann Fortran-Code für 80-100% der Berechnung verantwortlich sein.

Es ist auch unglaublich einfach zu lernen, wie Sie an dieser kurzen Einführung in die Fortran-Programmierung sehen werden. Ich gehe davon aus, dass Sie bereits wissen, wie man in etwas anderem als Fortran programmiert (wenn Sie mit dem Programmieren völlig neu sind, empfehle ich dringend, Fortran mit „A Fortran Coloring Book“ zu lernen).

 Lass uns anfangen

 Programm Hallo

    print *, "Hallo Welt!"

Programm beenden Hallo

Geben Sie ein (verwenden Sie die Erweiterung .f95 oder .f90 für Ihre Datei), kompilieren Sie diese, führen Sie sie aus und es wird "Hallo Welt!" Das "*" in der print-Anweisung bedeutet im Wesentlichen, dass automatisch formatiert wird .

Mein zweites Beispiel macht einige Berechnungen und endet mit 'if / then / else'-Anweisungen:

Programm mymath

  implizit keine

  real :: answer, x, y, sum, prod, cubedx, cubedy

  print *, 'Geben Sie zwei Zahlen ein (x und y)'

  lies *, x                                          

  bereit                                          

  Summe = x + y  

  prod = x * y                                       

  cubedx = x ** 3;

  Würfel = y ** 3;

  print *, 'Die Summe x + y ist', Summe

  print *, 'Das Produkt x * y ist', Art.-Nr.

  print *, 'Cubed x and y', cubedx, cubedy

  print *, 'Sinus von x und y', sin (x), sin (y)

  wenn (x> y) dann

    print *, 'Ich habe festgestellt, dass x größer als y ist'

  sonst

    print *, 'Es scheint, dass y nicht kleiner als x ist'

  ende wenn

Programm beenden mymath  

Sie werden vielleicht bemerken, dass ich "implizit keine" eingegeben habe. Das ist im modernen Fortran normal - es weist den Compiler an, dass Variablen explizit deklariert werden müssen, damit unbekannte Variablen als Fehler gekennzeichnet werden. Ohne sie geht Fortran davon aus, dass Variablen, die mit 'i' bis 'n' beginnen (die ersten beiden Buchstaben der Ganzzahl), Ganzzahlen sind und andere Gleitkommazahlen ('Real'). Das reduzierte die Anzahl der Karten, die wir vor Jahrzehnten schlagen mussten, ist aber in diesen modernen Zeiten allgemein verpönt.

 Wenn Sie dieses Programm ausführen (und 3.14 und 1.57 eingeben), erhalten Sie Folgendes:

Geben Sie zwei Zahlen ein (x und y)

3.14

1,57

 Die Summe x + y beträgt 4.71000004   

 Das Produkt x * y ist 4.92980051   

 Würfel x und y 30.9591484 3.86989355   

 Sinus von x und y 1,59254798E-03 0,999999702

 Mir ist aufgefallen, dass x größer als y ist   

Fortran wurde für Mathematik (FORmula TRANslation) entwickelt. Beachten Sie, dass „sin (…)“ integriert ist, ohne dass ein Header oder ein Paket enthalten sein muss. Natürlich unterstützt Fortran Gleitkomma- und Ganzzahlzahlen, aber auch komplexe Zahlen. Keine Zusatzstoffe erforderlich.

Mein drittes Beispiel betrifft Schleifen (in Fortran „do“ genannt):

 Programmschleife

  implizit keine    

  Ganzzahl :: i, j, behalte (100,2), w

  w = 0

  do i = 10, 50, 5

    do j = i, 20, 5

       print *, i, j

       w = w + 1

       behalte (w, 1) = i

       behalte (w, 2) = j

    Ende tun

  Ende tun

  mache ich = 1, w

    print *, 'keep:', keep (i, 1), keep (i, 2)

  Ende tun

Programmschleife beenden

Die Druckzeile in meinem Beispielprogramm wird nur ausgeführt, wenn die j do-Schleife ausgeführt wird. Die j-Schleife wird überhaupt nicht ausgeführt, wenn i 20 überschreitet. In diesem Beispiel werden auch Arrays mit der Verwendung eines Arrays mit dem Namen 'keep' eingeführt. Fortran beginnt mit der Array-Nummerierung bei '1' anstelle von Null. Dies ist die gleiche Art und Weise, wie Amerikaner Gebäudeetagen nummerieren (Etage 2 bezieht sich auf das Erdgeschoss, das als '1' angenommen wird). Andere Orte auf der Welt verwenden für ihre Gebäude eine auf Null basierende Nummerierung (der „erste Stock“ wird von den Amerikanern als „zweiter Stock“ bezeichnet), wie C und C ++ für Arrays. Die Ausgabe dieses Beispiels für die Programmschleife ist unten dargestellt:

           10 10

          10 15

          10 20

          15 15

          15 20

          20 20

 behalten: 10 10

 behalten: 10 15

 behalten: 10 20

 behalten: 15 15

 behalten: 15 20

 behalten: 20 20

 In meinem letzten Beispiel definiere ich eine Unterroutine (Funktion) namens 'ave', um den Durchschnitt von drei Zahlen zu nehmen, die ich statisch definiere. Sie werden feststellen, dass ich faul geworden bin und nach dem Programm und der Funktion nur "Ende" geschrieben habe. Das ist in Ordnung, aber wenn Sie Namen verwenden, wie ich es zuvor getan habe, hilft der Compiler dabei, zu überprüfen, ob das Ende mit dem übereinstimmt, was Sie wollten.

Programmaufruf

  implizit keine

  real a, b, c

  real av, avsq1, avsq2

  echte ave

  Daten a, b, c / 5,0,2,0,3,0 /

  av = ave (a, b, c)

  print *, 'Der Durchschnitt von', a, b, c, 'ist:', AV

Ende

reelle Funktion ave (x, y, z)

  reelle x, y, z, Summe

  Summe = x + y + z

  ave = sum / 3.0

  Rückkehr

Ende

 Dies druckt:

 Der Durchschnitt von 5.00000000 2.00000000 3.00000000 beträgt: 3.33333325 

 Ja, Fortran kann die Ausgabe formatieren. Wenn wir den obigen "Druck" wie folgt ersetzen:

  print 8, 'Der Durchschnitt von', a, b, c, 'ist', AV

8 Format (a, 2 (f4.2, ','), f4.2, a, f7.5)

Die Ausgabe wird:

Der Durchschnitt von 5,00, 2,00, 3,00 beträgt 3,33333

Die Fortran-Formatierung kann auch in einer einzelnen Zeile erfolgen und hat dieselbe hübsche Ausgabe:

print "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'Der Durchschnitt von', a, b, c, 'ist', AV

Wenn Sie glauben gemacht wurden, Fortran sei komisch, wurden Sie in die Irre geführt. Ich habe all diese Beispiele in einer von Fortran-Programmierern als "freie Form" bezeichneten Form geschrieben. Das wurde offiziell Teil von Fortran mit dem 'Fortran 90'-Standard (daher meine Anweisung, .f90 oder .f95 als Dateierweiterungen zu verwenden; diese teilen dem Compiler ohne spezielle Optionsschalter mit, dass wir Freiform verwenden). Denken Sie daran, dass Benutzer 1956 etwas für Kartenstanzen wollten. Ich könnte stundenlang darüber sprechen, wie Fortran dies mit spaltenorientierten Formaten und Fortsetzungszeichen usw. berücksichtigt. Aber wie ich gezeigt habe, müssen Sie das wirklich nicht lernen, um Fortran-Code zu schreiben oder zu lesen.

Warum wird Fortran von Informatikern gemieden? Gute Frage. Fortran ist die älteste Sprache (um 1956). Es begann in einer Ära von Bändern, Lochkarten und dem Ersetzen von menschlichen Computern. Es ist älter als blockstrukturierte Programmierung, Parsing-Theorie und Grafik. Auf dem Weg dorthin erkundeten Informatiker Fortschritte im Computerbereich und führten Tausende von Programmiersprachen ein, von denen sich die meisten nicht durchsetzten. Dennoch ist in jedem Bereich menschlicher Bemühungen „raus mit dem Alten, rein mit dem Neuen“ in Mode. Informatik ist nicht anders. 

Aber wenn das Knacken von Zahlen wichtig ist, ist nichts besser oder einfacher als Fortran. Ich schlage vor, wir sollten alle viele Werkzeuge kennen und das beste Werkzeug für den Job verwenden. Nur weil mein zuverlässiger Hammer schon lange in meinem Werkzeugkasten ist, heißt das nicht, dass ich ihn nicht für den richtigen Job brauche. Fortran ist nicht anders.

Fortran ist nicht nur die ursprüngliche Programmiersprache auf hoher Ebene, es ist lebendig, wichtig und weit verbreitet. Wer hat die Gerüchte gestartet, um etwas anderes vorzuschlagen?

 Ressourcen

  • Intel Fortran - wird häufig für x86 (Intel / AMD) verwendet und bietet hohe Leistung
    • Sie können sich für einen kostenlosen Compiler (und andere Tools) qualifizieren.
    • Testexemplare mit Option zum späteren Kauf erhältlich
    •  Die Beta 2018 läuft bis Juli 2018: Probieren Sie diese neueste und beste voll funktionsfähige Beta, einschließlich Fortran und verwandter Tools, bis dahin kostenlos aus: Intel Parallel Studio XE 2018 Beta - Jetzt beitreten
  • GNU Fortran - breitere Unterstützung (viele Prozessoren, viele Systeme), geringere Leistung
    • Open Source und kostenlos
    • auf meinem MacBook Air… Ich musste nur „Brew Install Gcc“ sagen und bekomme Gfortran kostenlos

Klicken Sie hier, um Ihre kostenlose 30-Tage-Testversion von Intel Parallel Studio XE herunterzuladen