Pascal/Turbo Pascal - Metodo Simpson en pascal

   
Vista:
Imágen de perfil de DANIEL ALEXANDER

Metodo Simpson en pascal

Publicado por DANIEL ALEXANDER dfrancomorales@gmail.com (1 intervención) el 07/03/2017 03:34:58
Buenas a todos espero que me puedan ayudar con mi programa del metodo simpson , el programa me corre bien el problemas es cuando genero una tabla con todos los valores mas las iteraciones que se desorganizan al llegar a un cierto numero de iteraciones y ya no se porque este es mi codigo:
________________________________________________
program Metodo_o_regla_de_Simpson;
Uses crt,Math;
{Declaracion de variables}
Var
a,b,n,j,y,y1,y2,y3,y4,y5,op:Integer;{Variables de los intervalos de a y b y el numero de iteraciones n}
h,Impar,par,ant,act,antp,actp,Extremoa,Extremob,Extremot,xj,resulf:real;{Variable que almacena el valor de tamaño del paso}




Function Funciones(x:real):real;
begin
If op = 1 then
Begin
Funciones:=Exp(-(X*X));
end;
If op = 2 then
Begin
if x=0 then
begin
clrscr;
Writeln('No se divide entre cero');
readkey;
halt
end
else

Funciones:=1/x;
end;
end;
Procedure Mostrar;
Begin
writeln;
Gotoxy(25,3);writeln('Tabla de valores');
Gotoxy(1,4);writeln('___________________________________________________________________');
Gotoxy(1,5);writeln(' j xj Extremo Impares Pares');
Gotoxy(1,6);writeln('___________________________________________________________________');
y:=1;
y1:=1;
y2:=1;
y3:=1;
y4:=1;
y5:=1;
end;
Procedure MostrarExtremos;
Begin
iF J=0 THEN
BEGIN
Extremoa:=Funciones(xj);
Gotoxy(25,y1+6);writeln(Extremoa:0:6);
end
ELSE
IF J=N THEN
BEGIN
Extremob:=Funciones(xj);
Gotoxy(25,y1+6);writeln(Extremob:0:6);
end;
end;
Procedure Mostrarxj;
Begin

gotoxy(12,y+6);writeln(xj:3:2);

end;
Procedure MostrarNImpares;
begin
if j mod 2 <> 0 then
begin
impar:=Funciones(xj);
ant:=impar;
act:=ant+act;
gotoxy(42,y2+6);writeln(impar:0:6);
end



end;

Procedure MostrarNpares;
begin
If j=0 then
begin
//no hacer nada
end
else
if j=n then
begin

end
else
if j mod 2 = 0 then
begin
par:=Funciones(xj);
antp:=par;
actp:=antp+actp;
gotoxy(58,y3+6);writeln(par:0:6);
end;
end;

Procedure CicloFor;
begin
For j:=0 to n do
Begin
Gotoxy(2,y+6);writeln(j:1);
Mostrarxj;
MostrarExtremos;
MostrarNImpares;
MostrarNpares;
y:=y+1;
y1:=y1+1;
y2:=y2+1;
y3:=y3+1;
y4:=y4+1;
y5:=y5+1;

xj:=xj+h;
Extremot:=Extremoa+Extremob;

readkey;
end;




Gotoxy(1,y5+6);writeln('_____________________________________________________________________________');
Gotoxy(25,n+9);writeln(Extremot:0:6);
Gotoxy(42,n+9);writeln(act:6:6);
gotoxy(58,n+9);writeln(actp:0:6);
resulf:=(h/3)*(Extremot+4*(act)+2*(actp));
Gotoxy(1,n+10);writeln('_____________________________________________________________________________');
gotoxy(2,n+12);writeln('El resultado de la integral es:',resulf:0:6);
readkey;

halt
end;

Procedure Calculopaso;
Begin
h:=(b-a)/n;
xj:=a;
Mostrar;
CicloFor;
end;

Procedure EvaluarNumeroPasos;
Begin
{Condicion que evalue que el numero de pasos de par}
If n mod 2 = 0 then
Begin
Calculopaso;

end
else
Writeln('El numero de pasos debe ser par por favor reintroducirlo nuevamente');
readln(n);
clrscr;
EvaluarNumeroPasos;
end;

Procedure DatosEntrada;
Begin
Writeln('Introduzca valor de a');
Readln(a);
clrscr;
Writeln('Introduzca valor de b');
Readln(b);
clrscr;
{Condicion que valide que a sea menor que b}
If a > b then
Begin
Writeln('El valor de a no puede ser mayor que el valor de b por favor reintroduzca sus datos nuevamente');
DatosEntrada;
end
else
Writeln('Introduzca el numero de pasos');
Read(n);
clrscr;
EvaluarNumeroPasos;

end;
Procedure Opciones;
{Procediemiento par validar la opcion de la funcio seleccionada}
Begin
Case op of
1:Begin
DatosEntrada;
clrscr ;
end;
2:Begin
DatosEntrada;
clrscr;
end;
3:Begin
Writeln('Opcion Incorecta: Solo existen dos opciones');
Readln(op);
clrscr;
Opciones;

end;
end;
end;

Begin
writeln('Alumno:Daniel Franco');
writeln('CI:21.468.758');
writeln('Regla de simpson compuesto');
writeln('Programa que calcula el valor aproximado de dos integrales definidas por la regla de simpson compuesto');
Writeln('Seleccionar Funcion a Evaluar');
WRITELN('1.- e^(-(x^2))');
WRITELN('2.-1/X');
Readln(op);
clrscr;
Opciones;
end.
_____________________________________________________
img1
en esta primera imagen se observa hasta donde corre bien mi programa
img2
y en la imagen 2 se observa como se desorganizan los valores en la tabla al llegar a un cierto numero de iteraciones.
Espero me entiendan sobre mi problema y me puedan ayudar.Utilizo el lazaruz
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder