Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Fortran und BASIC 10 Programmiersprachen in einem Semester.

Ähnliche Präsentationen


Präsentation zum Thema: "Fortran und BASIC 10 Programmiersprachen in einem Semester."—  Präsentation transkript:

1 Fortran und BASIC 10 Programmiersprachen in einem Semester

2 Fortran und Basic Patrick Mächler, David Ammann2 Zitate Fortran FORTRAN, 'the infantile disorder', by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use. Edsger W. Dijkstra FORTRAN was the language of choice for the same reason that three-legged races are popular. Ken Thompson (in "Reflections on Trusting Trust")

3 Fortran und Basic Patrick Mächler, David Ammann3 Fortran, Hintergründe FORTRAN bedeutet Formula Translation. Wurde ab 1954 mit Backus bei IBM entwickelt und gilt als erste realisierte höhere Programmiersprache. Der Compiler wurde erst ab 1957 ausgeliefert. Bisher existieren 8 offizielle Versionen: FORTRAN I, FORTRAN II, FORTRAN IV, FORTRAN-66, FORTRAN-77, Fortran90, Fortran95, Fortran2003.

4 Fortran und Basic Patrick Mächler, David Ammann4 Programmstruktur PROGRAM program-name [IMPLICIT NONE] [specification part] [execution part] [subprogram part] END PROGRAM program-name

5 Fortran und Basic Patrick Mächler, David Ammann5 Kommentare "!" kommentiert nachfolgende Zeichen Beispiele: READ(*,*) Year ! read in the value of Year ! This is a comment line Leere Zeile wird ebenfalls als Kommentar interpretiert.

6 Fortran und Basic Patrick Mächler, David Ammann6 Zeilenfortsetzung "&" dient zur Zeilenfortsetzung Beispiel: A = * Year & + Count / 100 ist dasselbe wie: A = * Year + Count / 100

7 Fortran und Basic Patrick Mächler, David Ammann7 Konstanten/Datentypen I Integer Constants: Folgen von Zahlen mit (optionalem) Vorzeichen: 0, -345, 768 Real Constants (Decimal Representation): Folgen von Zahlen und ein Dezimalpunkt mit (optionalem) Vorzeichen: 23.45,.123, 123., -.12 Real Constants (Exponential Representation): Integer oder Real (decimal), gefolgt von "E" oder "e", gefolgt von einem Integer: 12.34E2, -1.2e-3

8 Fortran und Basic Patrick Mächler, David Ammann8 Konstanten/Datentypen II Complex Constants: Bestehend aus zwei Real Constants: (3.1415, -5.5), (1.4, 7.1e4) Logical Constants: True und False:.TRUE.,.FALSE. ("." Beachten!) Character String: Müssen durch double quotes oder single quotes eingeschlossen werden: 'John', "John" (Bem: "Lori's apple" = 'Lori''s apple'

9 Fortran und Basic Patrick Mächler, David Ammann9 Identifiers Nicht länger als 31 Zeichen Erstes Zeichen muss Buchstabe sein Restliche Zeichen (falls vorhanden) bestehend aus Buchstaben, Zahlen und dem Unterstrich "_" Case insensitive (Smith=smith=sMiTh=smitH) Beispiele (korrekt): MTU, MI, John, Count, I, X, I1025, a1b2C3 Beispiele (inkorrekt): M.T.U., R2-D2, 6feet, _System

10 Fortran und Basic Patrick Mächler, David Ammann10 Variablendeklaration I Allgemein: type-specifier :: list type-specifier = INTEGER, REAL, COMPLEX, LOGICAL, CHARACTER list = kommaseparierte Liste von Variablennamen Beispiele: INTEGER :: ZIP, Mean, Total

11 Fortran und Basic Patrick Mächler, David Ammann11 Variablendeklaration II Spezialfall CHARACTER: CHARACTER(LEN=i) :: List Beispiel: CHARACTER(LEN=15) :: Name, Street Name und Street sind CHARACTER-Variablen der Länge 15. "LEN=" ist optional: CHARACTER(15) :: Name, Street CHARACTER :: digit entspricht CHARACTER(1) :: digit

12 Fortran und Basic Patrick Mächler, David Ammann12 Variablendeklaration III Verschiedene Längen mit einem Statement sind möglich: CHARACTER(LEN=10) :: City, Nation*20, BOX, bug*1 City:Länge = 10 Nation:Länge = 20 Box:Länge = 10 bug:Länge = 1

13 Fortran und Basic Patrick Mächler, David Ammann13 PARAMETER Attribut Einer Konstante einen Wert zuweisen Beispiele REAL, PARAMETER :: E = , PI = INTEGER, PARAMETER :: Total = 10, Count = 5, Sum = Total*Count Ein Name, der mit Parameter deklariert wurde, ist ein Alias für einen Wert und keine Variable!

14 Fortran und Basic Patrick Mächler, David Ammann14 Variablen initialisieren Keine Standardinitialisation (z.B. mit 0, "", usw) Beispiele: REAL :: Offset = 0.1, Length = 10.0 INTEGER, PARAMETER :: Quantity=10, Amount=435 INTEGER :: Pay=Quantity*Amount, Received=Period+5 INTEGER, PARAMETER :: Period=3 Fehler?

15 Fortran und Basic Patrick Mächler, David Ammann15 Variablen Werte zuweisen variable = expression Der Wert rechts von "=" wird der Variable links vom "=" zugewiesen INTEGER :: Total, Amount, Unit Unit = 5 Amount = Total = Unit * Amount

16 Fortran und Basic Patrick Mächler, David Ammann16 Arrays I Allgemein type, DIMENSION(extent) :: name-1,..., name-n Beispiel: INTEGER, DIMENSION(0:100) :: InputData INTEGER, DIMENSION(10) :: arr (Achtung: Index startet hier mit 1!) INTEGER :: arr(10)

17 Fortran und Basic Patrick Mächler, David Ammann17 Arrays II Zugriff auf Array-Elemente: array-name ( integer-expression ) Beispiel: InputData(2) InputData(i*j) InputData(3:7) usw.

18 Fortran und Basic Patrick Mächler, David Ammann18 Arrays III Array-Initialisierung: Felder lassen sich gleich bei der Deklaration mit Werten Initialisieren. Eindimensionale Arrays: INTEGER :: arr(5) = (/1, 2, 4, 7, 16/) Mehrdimensionale Arrays (Befehl "reshape"): INTEGER :: arr(2,3)=reshape((/1, 1, 3/),(/2, 3/))

19 Fortran und Basic Patrick Mächler, David Ammann19 Arrays IV Mehrdimensionale Arrays: Allgemein: type, DIMENSION(a:b, c:d,...) :: arr Beispiel (2D-Array): soll in einem 2D-Feld gespeichert werden. INTEGER :: arr(2,3) = reshape((/1, 2, 3, 4, 5, 6/),(/2, 3/)) (Analog für n Dimensionen)

20 Fortran und Basic Patrick Mächler, David Ammann20 Implied DO I Methode zur raschen Auflistung von vielen Elementen: (item-1,...., item-n, var = initial, final, step) Beispiele: (i, i = -1, 2)-1, 0, 1, 2 (i, i*i, i=1, 10, 3)1, 1, 4, 16, 7, 49, 10, 100

21 Fortran und Basic Patrick Mächler, David Ammann21 Implied DO II Anwendung: Array Input INTEGER, DIMENSION(1:10) :: x INTEGER :: n, i READ(*,*) n DO i = 1, n READ(*,*) x(i) END DO Einfacher: READ(*,*) n READ(*,*) (x(i), i=1, n)

22 Fortran und Basic Patrick Mächler, David Ammann22 Arithmetische Operatoren links nach rechts.NEQV..EQV. links nach rechts.OR. links nach rechts.AND. rechts nach links.NOT. Logisch keine/===>=><=< Relational links nach rechts-+ /* rechts nach links** Arithmetisch AssoziativitätOperatorTyp Priorität von oben nach unten: -3**2 = -9

23 Fortran und Basic Patrick Mächler, David Ammann23 Intrinsische Funktionen I REAL LOG(x) REAL EXP(x) REAL ATAN(x) REAL ACOS(x) REAL ASIN(x) REAL TAN(x) REAL COS(x) REAL SIN(x) REAL SQRT(x) INTEGER/REAL ABS(x) Rückgabe TypArgument TypFunktion

24 Fortran und Basic Patrick Mächler, David Ammann24 Intrinsische Funktionen II Unwandlungsfunktionen: REAL INTEGER: INT(x), NINT(x), FLOOR(x) REAL REAL: FRACTION(x) INTEGER REAL: REAL(x) Diverse Funktionen: MAX(x1, x2, …, xn), MIN(x1, x2, …, xn), MOD(x,y)

25 Fortran und Basic Patrick Mächler, David Ammann25 Das READ Statement Werte von Tastatur in Variablen einlesen: READ(*,*) list list : kommaseparierte Liste von Variablen

26 Fortran und Basic Patrick Mächler, David Ammann26 Das READ Statement II Beispiel: INTEGER :: P, Q, R, S READ(*,*) P, Q READ(*,*) READ(*,*) R, S Input: P=?, Q=?, R=?, S=? Lösung: P=100, Q=200, R=700, S=800

27 Fortran und Basic Patrick Mächler, David Ammann27 Das WRITE Statement Funktioniert wie READ Statement Allgemein: WRITE(*,*) exp1, exp2,..., expn WRITE(*,*) ohne Argument(e) gibt leere Zeile aus.

28 Fortran und Basic Patrick Mächler, David Ammann28 Character Operators Es existiert nur ein Character Operator: "//" dient zur Verknüpfung von Strings Beispiele: CHARACTER(LEN=*) :: John*4="John", Lori*6="Lori" CHARACTER(LEN=10) :: Ans1 Ans1 = John // Lori Ans1 = ? Lösung: Ans1 = 'JohnLori**' (* = Space)

29 Fortran und Basic Patrick Mächler, David Ammann29 Substrings Anfügen von (integer-exp1 : integer-exp2) an eine CHARACTER Variable. Beispiele: CHARACTER(Len=*) :: LeftHand = " " LeftHand(3:5) = "abc" "12abc67890" LeftHand(4:) = "lmnopqr" " 123lmnopqr"

30 Fortran und Basic Patrick Mächler, David Ammann30 IF-THEN-ELSE-END IF I Allgemeine Form: IF (logical-expression) THEN statements-1 ELSE statements-2 END IF Else und statements-2 optional! Logical IF: IF (logical-expression) one-statement

31 Fortran und Basic Patrick Mächler, David Ammann31 IF-THEN-ELSE-END IF II Verschachtelte IF-THEN-ELSE-END-IF Statements sind möglich. ELSE IF ebenfalls möglich: IF (logical-expression-1) THEN statements-1 ELSE IF (logical-expression-2) THEN statements-2 ELSE statements-ELSE END IF

32 Fortran und Basic Patrick Mächler, David Ammann32 SELECT CASE Statement SELECT CASE (selector) CASE (label-list-1) statements-1 CASE (label-list-2) statements CASE DEFAULT statements-DEFAULT END SELECT Wertebereich für label-list-n : (value1 : value2), also zum Beispiel (:-1) für alle negativen Zahlen.

33 Fortran und Basic Patrick Mächler, David Ammann33 General DO-Loop Allgemein DO statements END DO " EXIT " verlässt Schleife

34 Fortran und Basic Patrick Mächler, David Ammann34 Counting Do-Loop Allgemein: DO var=initial-value, final-value, [step-size] statements END DO Wenn step-size nicht angegeben, wird 1 genommen. " CYCLE " beginnt mit nächster Iteration.

35 Fortran und Basic Patrick Mächler, David Ammann35 WHERE Allgemein: WHERE( bedingung ) variable = ausdruck Beispiel: INTEGER :: arr(5) = (/1,2,3,4,5/) WRITE(*,*) arr ! Ausgabe: WHERE (arr>=3) arr=99999 WRITE(*,*) arr ! Ausgabe:

36 Fortran und Basic Patrick Mächler, David Ammann36 FORALL Wie WHERE für Einsatz bei Arrays gedacht, Bestimmung der Feldelemente aber über Indizes: Allgemein: INTEGER :: arr(5) = (/1,2,3,4,5/) INTEGER :: i FORALL(i=2:4) arr(i) = END WRITE(*,*) arr ! Ausgabe:

37 Fortran und Basic Patrick Mächler, David Ammann37 Datenverbund I Bildung eigener Datentypen aus Fortran- Datenelementen: Allgemein: TYPE :: typename [sequence] ! opt. seq. Speicherplatzablage datentyp :: varname1 !... datentyp :: varnamen END TYPE typename

38 Fortran und Basic Patrick Mächler, David Ammann38 Datenverbund II Beispiel: TYPE :: PERSON CHARACTER(25) :: vorname CHARACTER(25) :: nachname INTEGER :: alter END TYPE PERSON

39 Fortran und Basic Patrick Mächler, David Ammann39 Unterprogramme Fortran 95 kennt zwei Typen von Unterprogrammen: Funktionen (FUNCTION): Geben einen Wert von bestimmtem Typ zurück. Subroutinen (SUBROUTINE): Besitzen im Gegensatz zu Funktionen keinen Datentyp und Rückgabewert.

40 Fortran und Basic Patrick Mächler, David Ammann40 Funktionen I Allgemein: type FUNCTION function-name (arg1,..., argn) [IMPLICIT NONE] [specification part] [execution part] [subprogram part] END FUNCTION function-name Beinahe identisch mit dem Hauptprogram.

41 Fortran und Basic Patrick Mächler, David Ammann41 Funktionen II Beispiel: INTEGER FUNCTION Sum(a, b, c) IMPLICIT NONE INTEGER, INTENT(IN) :: a, b, c Sum = a + b + c END FUNCTION Sum INTENT(IN) definiert die Variable als formale Argumente. Sie können innerhalb der Funktion nicht verändert werden.

42 Fortran und Basic Patrick Mächler, David Ammann42 Funktionen III Wohin gehören die Functions? PROGRAM program-name IMPLICIT NONE [specification part] [execution part] CONTAINS [your functions] END PROGRAM program-name

43 Fortran und Basic Patrick Mächler, David Ammann43 Subroutinen I Allgemein: SUBROUTINE subName ([formal parameters]) [specification part] [execution part] [return] END SUBROUTINE subName Aufgerufen werden Subroutinen mit: CALL subName

44 Fortran und Basic Patrick Mächler, David Ammann44 Subroutinen II Beispiel: PROGRAM bsp CALL sub END PROGRAM bsp SUBROUTINE sub() WRITE(*,*) 'Hallo Welt!' RETURN END SUBROUTINE sub Kompilieren mittels: gfortran bsp.f90 sub.f90 Datei "bsp.f90" Datei "sub.f90"

45 Fortran und Basic Patrick Mächler, David Ammann45 Prozeduren als Parameter I Prozeduren können als Parameter übergeben werden. Unterprogramme werden dazu im Vereinbarungsteil gekennzeichnet: Standard-Funktionen: INTRINSIC namensliste Eigene Unterprogramme: EXTERNAL namensliste

46 Fortran und Basic Patrick Mächler, David Ammann46 Prozeduren als Parameter II Beispiel: PROGRAM bsp REAL, parameter :: PI= INTRINSIC sin, cos ! intrinsic functions CALL sub(sin, PI) ! Ausgabe: CALL sub(cos, PI) ! Ausgabe: END PROGRAM bsp SUBROUTINE sub(funk, x) REAL :: funk, x WRITE(*,*) NINT(funk(x)*1000)/ END SUBROUTINE

47 Fortran und Basic Patrick Mächler, David Ammann47 File I/O I In Fortran ist alles, was mit READ und WRITE bearbeitbar ist, eine Datei! Zugriff: Sequentiell: Lesen ab Beginn der Datei und dann immer nächsten Datensatz. Schreiben an's Dateiende. Direkt: Bearbeiten in beliebiger Reihenfolge durch Angabe der Satznummer.

48 Fortran und Basic Patrick Mächler, David Ammann48 File I/O II Allgemein: open(liste) liste (kommasepariert): [unit =] x :Dateinummer (Integer > 10) file = x :externer Dateiname iostat = x :-1 für EOF, >0 bei Fehler, 0 sonst action = x :'read', 'write' oder 'readwrite' access = x :'sequential', 'direct' position = x :Position des Datensatzzeigers ('asis', 'rewind', 'append')

49 Fortran und Basic Patrick Mächler, David Ammann49 The legacy of FORTRAN There is a vast body of Fortran in daily use throughout the scientific and engineering communities. It is the primary language for some of the most intensive supercomputing tasks, such as weather/climate modeling, computational chemistry, quantum chromodynamics and simulation of automobile crash dynamics. Indeed, one finds that even today, half a century later, floating-point benchmarks to gauge the performance of new computer processors are still written in Fortran (e.g., the floating- point component of the SPEC CPU2000 benchmarks), an eloquent tribute to the longevity of the language. en.wikipedia.org

50 Fortran und Basic Patrick Mächler, David Ammann50 BASIC Hintergründe BASIC steht für Beginners All-purpose Symbolic Instruction Code 1964 wurde es am Dartmouth College entwickelt, um den Elektrotechnikstudenten den Einstieg in Algol und Fortran zu erleichtern. BASIC spielte eine massgeblich Rolle in der Anfangs- zeiten der Firma Microsoft. BASIC kann wohl als die Sprache mit den meisten Dialekten bezeichnet werden. Viele neue Dialekte erfreuen sich heute grosser Beliebtheit (Profan, VisualBasic, Blitzbasic, Darkbasic, Purebasic).

51 Fortran und Basic Patrick Mächler, David Ammann51 BASIC Entwurfsprinzipien BASIC liegt acht Entwurfsprinzipien zugrunde: 1. Für Anfänger einfach zu erlernen 2. universell einsetzbar 3. Erweiterbarkeit der Sprache für Experten 4. Interaktivität 5. Klare Fehlermeldungen 6. Rasche Antwortzeiten 7. Hardwareunabhängigkeit 8. Betriebssystemunabhängigkeit

52 Fortran und Basic Patrick Mächler, David Ammann52 Goto I In Fortan I war Goto neben if-then-else die einzige verfügbare Kontrollstruktur. Mit Fortran90 wurde Goto komplett abgeschafft. Auch im ursprünglichen BASIC spielte Goto eine wichtige Rolle. Neuere Dialekte verzichten oft auf das Konstrukt. In einem Brief an die Zeitschrift der ACM, Go To Statement Considered Harmful (die berühmte Phrase stammte von dem damaligen Editor Wirth) sprach sich Dijkstra für eine Abschaffung des Statements aus, da es zu Spaghetti Code führe.

53 Fortran und Basic Patrick Mächler, David Ammann53 Goto II Dies löste eine grössere Kontroverse aus, die Knuth später mit einer relativ realistischen Betrachtung wohl beendete. Auch in vielen neueren Programmiersprachen lässt sich Goto noch finden. Entweder in ursprünglicher (C#) oder restriktiver Form (Java: return innerhalb einer Methode, break und continue innerhalb einer Schleife).

54 Fortran und Basic Patrick Mächler, David Ammann54 Für Übungsblatt relevante Vergleiche Fortran-Basic


Herunterladen ppt "Fortran und BASIC 10 Programmiersprachen in einem Semester."

Ähnliche Präsentationen


Google-Anzeigen