6.1.1 Fortran-Version

Bei Programmiersprachen aus der Prä-OO-Ära (beispielsweise C gemäß Kernighan und Ritchie oder dann später ANSI-C, ebenso wie Fortran, ALGOL und Pascal) sind Daten und die Operationen darauf nicht zwangsweise miteinander verbunden, sondern müssen bei Bedarf vom Programmierer zusammengeführt werden.

Eine Beispiellösung in Fortran 77 könnte so aussehen:

C     Time-stamp: "(13.05.02 19:04) suchestud.for [Klaus@Wachtler.de]"     1
C     Fortran77-Programm, um nach einem Studenten zu suchen                2
C     Unter Linux:   g77 -Wall suchestud.for -o suchestud                  3
                                                                           4
      PROGRAM SUSTUD                                                       5
                                                                           6
C     Da es in F77 keine Strukturen gibt, kann man auch kein Feld          7
C     bilden, dessen Elemente jeweils aus Vorname, Nachname, und           8
C     Matrikelnummer bestehen.                                             9
C     Ersatzweise bilden wir halt drei Felder; jeweils eines für jedes    10
C     Element.                                                            11
                                                                          12
C     Die vorhandenen Studenten:                                          13
      CHARACTER*20 VNAME(5)                                               14
      CHARACTER*20 NNAME(5)                                               15
      INTEGER      MATR(5)                                                16
                                                                          17
C     Index für Ergebnis:                                                 18
      INTEGER      IDXERG                                                 19
                                                                          20
C     Suchfunktion:                                                       21
      INTEGER      SUCHE                                                  22
                                                                          23
C     Vorbelegung der Felder:                                             24
      DATA VNAME / 'Kurt', 'Hein', 'Fritz', 'Klaus', 'Sina' /             25
      DATA NNAME / 'Pappnase', 'Meier', 'Schmidt', 'Lahm', 'Flink' /      26
      DATA MATR / 978123, 987456, 998159, 988123, 977111 /                27
                                                                          28
C     Unter den Studenten nach der Matrikelnummer 988123 suchen:          29
      IDXERG = SUCHE( MATR, 5, 988123 )                                   30
                                                                          31
      IF( IDXERG .GT. 0 ) THEN                                            32
         PRINT*, 'gefunden: ', VNAME(IDXERG), NNAME( IDXERG )             33
      ELSE                                                                34
         PRINT*, 'nicht gefunden!'                                        35
      ENDIF                                                               36
                                                                          37
      END                                                                 38
                                                                          39
                                                                          40
C     Sucht in dem Feld MA (mit ANZAHL Matrikelnummern) nach dem          41
C     Eintrag mit dem Wert KEY, und liefert den Index (1 bis ANZAHL).     42
C     Wenn nichts gefunden wird, dann wird -1 zurückgegeben:              43
      INTEGER FUNCTION SUCHE( MA, ANZAHL, KEY )                           44
                                                                          45
      INTEGER MA(*), ANZAHL, KEY                                          46
                                                                          47
      INTEGER I                                                           48
                                                                          49
C     Lineare Suche über das gesamte Feld, bis gefunden:                  50
      DO 100, I = 1, ANZAHL                                               51
                                                                          52
         IF( MA(I) .EQ. KEY ) THEN                                        53
C           Gefunden!                                                     54
            SUCHE = I                                                     55
            RETURN                                                        56
         ENDIF                                                            57
                                                                          58
 100  CONTINUE                                                            59
                                                                          60
C     Nicht gefunden:                                                     61
      SUCHE = -1                                                          62
      RETURN                                                              63
                                                                          64
      END                                                                 65

Durch das Fehlen fast aller oben aufgeführten Sprachmöglichkeiten ist das Fortranbeispiel aus heutiger Sicht sehr unelegant. Schon bei kleinen oder mittleren Programmen hat man sehr viele Fehlerquellen, die eine Änderung bestehender Programme gefährlich und aufwendig machen.



www.wachtler.de