      PROGRAM WTAB
C
C-----------------------------------------------------------------------
C
C Wertetabelle eines Polynoms.
C Die Berechnung der Funktionswerte des Polynoms erfolgt
C in der Funktion P(ORDNUNG, KOEFF, X)
C
C Uebergabeparameter:
C
C ORDNUNG...............Tatsaechliche Ordnung des Polynoms
C KOEFF.................Koeffizienten
C X.....................Unabhaengige Variable
C 
C Lokale Variablen:
C
C MAX...................Maximale Anzahl der Koeffizienten
C IUNIT, NIN, NOUT......I/O-Kanalnummer
C N.....................Anzahl der Wertepaare
C DX....................Inkrement der unabhaengigen Variablen
C XMAX, XMIN............Grenzen des Wertebereichs
C DNAME.................Name der Erbenisdatei
C I, TAUSCH.............Hifsvariablen
C IER...................Fehlerparameter
C                       = 0   o.k.
C                       = 1   Koeffizientenfeld zu klein -> MAX erhoehen
C
C Benoetigte Unterprogramme:
C
C REAL FUNCTION P(...)
C
C 23.03.93  S. Schaub
C
C-----------------------------------------------------------------------
C
      INTEGER           MAX
      PARAMETER         (MAX = 10)
C
      INTEGER           I, IER, IUNIT, N, NIN, NOUT, ORDNUNG
      REAL              DX, KOEFF(MAX), P, X, XMAX, XMIN, TAUSCH
      CHARACTER*50      DNAME
C
      DATA              NIN, NOUT, IUNIT/ 5, 6, 63/
C
C...Fehlerparameter vorbelegen
C
      IER = 0
C
C...Titel
C
      WRITE (NOUT, 1)
1     FORMAT(//, 'WTAB -- Wertetabelle eines Polynoms', /,
     &           '___________________________________', //)
C
C...Einlesen des Dateinamens und Oeffnen der Datei
C
      WRITE (NOUT, 2)
2     FORMAT(/, 'Dateiname [1-50 char]: ', $)
      READ (NIN, '(A)') DNAME
C
      OPEN(IUNIT, FILE = DNAME)
C
C...Einlesen von Ordnung und Koeffizienten
C
      WRITE (NOUT, 3)
3     FORMAT(/, 'Ordnung des Polynoms: ', $)
      READ (NIN, *) ORDNUNG
      IF ((ORDNUNG + 1) .GT. MAX) THEN
        IER = 1
        GOTO 9999
      END IF
C
      DO I = 1, ORDNUNG + 1
        WRITE (NOUT, 4) I - 1
        READ (NIN, *) KOEFF(I)
      END DO
4     FORMAT(/, 'A(', I2, ') = ', $)
C
C...Wertebereich und Anzahl der Wertepaare
C
      WRITE (NOUT, 5)
5     FORMAT(/, 'xmin = ', $)
      READ (NIN, *) XMIN
      WRITE (NOUT, 6)
6     FORMAT(/, 'xmax = ', $)
      READ (NIN, *) XMAX
C
      IF (XMAX .LT. XMIN) THEN
        TAUSCH = XMAX
        XMAX = XMIN
        XMIN = TAUSCH
      END IF
C
100   WRITE (NOUT, 7)
7     FORMAT(/, 'Anzahl der Wertepaare [>1]: ', $)
      READ (NIN, *) N
      IF (N .LE. 1) GOTO 100
C
C...Erstellen der Wertetabelle
C
      DX = (XMAX - XMIN) / REAL(N - 1)
      X = XMIN
      WRITE (IUNIT, 8) ORDNUNG
8     FORMAT('Polynom der Ordnung ', I2, //,
     &'       x      |      p(x)', /,
     &'_____________________________')
C
      DO I = 1, N
        WRITE(IUNIT, '(E14.7, 1X, E14.7)') X, P(ORDNUNG, KOEFF, X)
        X = X + DX
      END DO
C
C...Schliessen der Datei
C
      CLOSE(IUNIT)
C
C...Normales Programmende
C
      STOP
C
C...Fehlerfall
C
9999  CONTINUE
      WRITE (NOUT, 9998) IER
9998  FORMAT(//, '*** Fehler ***', /,
     &           'IER = ', I2)
C
      END
