      PROGRAM PREVISAO_CORRECAO
C     Programa que implementa o metodo de Previsao-Correcao
C     de segunda ordem      
      INTEGER I, N
      REAL    H, X0, Y0, XFIM, X, Y
      REAL    K1, K2, f0, f1, ERRY

      OPEN(UNIT = 1, FILE = 'prevcor.dat', STATUS = 'REPLACE')

      X0 = 0.0;
      Y0 = 1.0;

      H = 0.1;

      XFIM = 3.0;

C     A variavel ERRY e' inicializada aqui mas seu
C     valor e' distituido de significado na primeira 
C     impressao      
      
      ERRY = 0.0;

      N = (XFIM - X0)/H;

      X = X0;
      Y = Y0;

      WRITE(1, *) X, Y

      DO 1 I = 1, 1
           K1 = F(X, Y)
           f0 = k1;

           K2 = F(X + H, Y + H * K1)

           Y  = Y + (H/2.0) * (K1 + K2)

           X = X + H

           WRITE(1, *) X, Y, ERRY
1     CONTINUE

      DO 2 J = 2, N
           f1 = f(x, y)
           yp = y + (h/2.0) * (3.0 * f1 - f0)

           x = x + h

           fp = f(x, yp)

           y = y + (h/2.0) * (fp + f1)

           f0 = f1

           erry = (yp - y)/6.0

           WRITE(1, *), X, Y, ERRY
2     CONTINUE
           
      CLOSE(1)
      STOP
      END

      REAL FUNCTION F(X, Y)
      F = Y
      RETURN
      END
