next up previous contents
Nächste Seite: Literatur Aufwärts: Programmiersprachen, FORTRAN Vorherige Seite: Fragen und Übungen zu   Inhalt

Antworten zu den Fragen und Übungen zu Kapitel 4.

  1. bessere Dokumentationsmöglichkeiten ; problemorientiert ; maschinenunabhängig, daher portabler Code ; leichtere Programmierung
  2. Aus der Größe des Objektcodes (Codesegment) plus der Größe des Datensegmentes. In das Codesegment gehen sowohl die übersetzten Anweisungen des selbstgeschriebenen Programms als auch der Code der Routinen aus der Laufzeitbibliothek (z.B. für Ein-/Ausgabe) ein. Vergrößerungen des Datenbereiches, z.B. durch größere Dimensionen von Feldern, gehen nicht notwendig linear in die Größe des Lademoduls ein.
  3. Mehrfachbenutzung von Variablen (-namen). Mehrfachnutzung von COMMON-Bereichen. Mehrfachnutzung von Speicherbereichen mit EQUIVALENCE. Datenauslagerung auf Massenspeicher (Platte) statt Halten im Arbeitsspeicher. Sinnvolle, problemangepasste Dimensionierung von Feldern.
  4. Eine statement function ist eine besondere Art einer Funktion. Sie besteht aus einer einzigen Anweisung und wird in einer Programmeinheit vor den ausführbaren Anweisungen vereinbart. Sie ist nur lokal gültig (wie die interne Funktion und im Gegensatz zur externen Funktion).

  5. Vor allen DATA-Anweisungen, Formelfunktionsdefinitionen und vor allen ausführbaren Anweisungen.

  6. Ä ?
  7. Es enthält $10 \cdot 21 \cdot 2 = 420$ Elemente
  8. Zum Besetzen von Konstanten, wobei der Compiler überwacht,daß sie nicht verändert werden, sowie zum eleganten Dimensionieren von Feldern.
  9. 10, 27, 2
  10. F F F T F F T T F F
  11. Die Standardfunktion LEN alleine reicht nicht aus, da sie nur die in der CHARACTER-Anweisung definierte Länge des Strings ermittelt. Eine mögliche Lösung lautet:

           SUBROUTINE StrLen (String, NCLead, NCStr)
     !---- --------------------------------------
     !*  Zweck: Subroutine zur Ermittlung der Anzahl fuehrender Leer -
     !    zeichen und der Laenge einer Zeichenkette
     !*  Vars:  String  --- zu untersuchende Zeichenkette (IN)
     !          NCLead  --- Anzahl fuehrender Leerzeichen (OUT)
     !          NCStr   --- Laenge der Zeichenkette ohne fuehrende und
     !                      nachfolgende Leerzeichen (OUT)
     !          LenStr  --- Laenge des uebergebenen Strings (LOC)
     !          i       --- Laufvariable (LOC)
     !*  Mods:  Version  7.11.90/WWB  f"ur InfoTech VL
     !*         Version  7.03.02/TFS  f"ur InfoTech VL
     !---- --------------------------------------
     !*  Deklarationen und Initialisierungen
           CHARACTER :: String*(*)
           INTEGER :: LenStr, NCLead, NCStr
           NCLead  = 0
           NCStr  = 0
     !*  Ausfuehrbarer Teil des Unterprogramms
     !---- Uebergegebene Laenge ermitteln
           LenStr  = LEN  (String)
     !---- Fuehrende Leerstellen ermitteln
           i = 1
           DO WHILE ((i<=LenStr) .AND. (String (i:i)  /= ' '))
              NCLead  = i
              i = i + 1
           ENDDO
     !---- Echte Stringlaenge ermitteln durch Absuchen des Strings
     !---- nach Leerstellen vom Ende her
           NCStr  = LenStr - NCLead
           i = LenStr
           DO WHILE (i <= NCLead +1 .AND. (String (i:i)  .NE. ' '))
              NCStr  = i - NCLead - 1
              i = i - 1
           ENDDO
    !-------------------------------------------
           END SUBROUTINE
    
  12. DO-Schleifen sind geschachtelt, wenn sich im Wiederholungsbereich einer Schleife eine weitere DO-Schleife befindet. Sprünge sind nur von der inneren in die äußere erlaubt. Einzige Ausnahme ist ein Sprung aus der äußeren an den Beginn der inneren Schleife. Jedoch sollten Sprünge vollkommen vermieden werden!!
  13. Direkt über Parameterliste

    Direkt und indirekt über COMMON-Blöcke Indirekt über externe Dateien

  14. Die FUNCTION gibt ihr Ergebnis über den Function-Namen zurück, die SUBROUTINE über die Parameterliste.
  15. -
    Man schreibt die Anzahl der records (Zeilen) an den Anfang der Datei.
    -
    Man vereinbart ein spezielles Dateiendezeichen.
    -
    Man benutzt den END-Parameter der READ-Anweisung.
  16. In Standard-FORTRAN gibt es diese Möglichkeit nicht. Falls es mit einem bestimmten Compiler möglich ist, handelt es sich um eine nichtstandardisierte Spracherweiterung.
  17. Das FORTRAN-Programm könnte so aussehen:

    
    i = 0 
    
    j = 0
    k = 0
    DO
    IF (j $>$ k) THEN
    k = k + 2
    ELSE
    k = k + 1
    j = j + k
    ENDIF
    IF (j $>$ 10) EXIT
    ENDDO
    DO i = 1, 10
    j = j + i
    ENDDO
    PRINT*, i, j, k
    END

  18. 3 5 4 6
  19. 12345678901234567890

    1010

    10

  20. Das FORTRAN-Programm könnte so aussehen:

    
    OPEN (1,file='TEST.DAT') 
    
    i=0
    xm=0.
    DO
    READ (1,*, IOSTAT=ios) x
    IF (ios = 0) THEN
    i = i + 1
    xm=xm+x
    ENDIF
    IF (ios /= 0) EXIT
    ENDDO
    PRINT *,' Der Mittelwert ist ',xm/i
    END

    Der Mittelwert ist 4.409


next up previous contents
Nächste Seite: Literatur Aufwärts: Programmiersprachen, FORTRAN Vorherige Seite: Fragen und Übungen zu   Inhalt
Lars Tornow 2003-03-31