program SIMPSON;
uses crt,printer;
var
  I,N,NS2 :integer;
  X,SOMA,H,HS3,SOMA2,SOMA4,DELTA,A,B,ERRO :real;
  NOVO :string[1];
  TITULO :string[70];
function FUNCAO(X:real):real;
begin
  FUNCAO := exp(X)
end;
begin
  clrscr;
  writeln('Integracao pelo metodo de SIMPSON');
  writeln('Indique a seguir qual a integral a ser calculada ');
  readln(TITULO);
  writeln(Lst,'Integracao pelo metodo de SIMPSON');
  writeln(Lst,TITULO);writeln(Lst,' ');
  writeln('Forneca A e B para calculo da integral de A ate B ');
  write(' A = ');
  readln(A);
  write(' B = ');
  readln(B);
 repeat
  writeln('Forneca o numero de divisoes do intervalo AB ');
  write(' N = ');
  readln(N);
  H := ( B - A ) / N; X := A; SOMA := FUNCAO(A);SOMA2 := 0;SOMA4 := 0;
  NS2 := N div 2;
  for I := 1 to NS2 do begin
      X := X+H;SOMA4 := SOMA4 + FUNCAO(X);
      X := X+H;SOMA2 := SOMA2 + FUNCAO(X)
                     end;
  SOMA := (SOMA + 4 * SOMA4 + 2 * SOMA2 - FUNCAO(X)) * H / 3;
  ERRO := 1.7182818284590 - SOMA;
  writeln(Lst,'Integral com ',N:5,' divisoes e de ',SOMA:13:10,
      ' erro de ',ERRO:13:10);
  writeln(' ');
  write('Tecle S se deseja novo calculo ');
  readln(NOVO);
 until NOVO <> 'S'
end. { fim do SIMPSON }

