Sentencia While - Miguel Hesiquio en la ESIQIE.Actividades Docentes

Anuncio
Programación
Sentencia While
Prof. Miguel Hesiquio Garduño. Depto. De Ingeniería Química Petrolera
ESIQIE‐IPN
[email protected]
Usando
Sentencia DO
While
Usando
Sentencia DO WHILE
Do i=1,fin
X=2*Xo/Xo^2
Acciones
Do While (condicion)
if (condicion) exit
X=2*Xo/Xo^2
Xo=X
End Do
F
condicion
Xo=X
C=C+1
End Do
V
Acciones
program PFijo
REAL :: X0,X,eps,DIF
INTEGER :: i,maxit
WRITE(*,*) ' programa para punto fijo'
PRINT *,'escribe X0'
read *,X0
PRINT *,'escribe eps'
read *,eps
PRINT *,'escribe maximo de iteraciones'
read *,maxit
Do i=1, maxit !inicion i=1, fin
X=20/(X0*X0+2*X0+10) ! x=g(x0) !enunciados
DIF=ABS(X-X0)
if (dif<eps) exit
!control SI
X0=X
End do
IF (DIF<eps)then
Print *,X, 'Solucion'
Else
Print *,'Intenta otra vez'
end if
END program Pfijo
DO
Acciones
V
condicion
F
Acciones
PROGRAM whilePF
IMPLICIT NONE
REAL :: X0,X,DIF,eps
INTEGER :: i,maxit
WRITE(*,*) ' programa para punto fijo '
PRINT *,'escribe X0 '
read *,X0
PRINT *,'escribe eps '
read *,eps
PRINT *,'escribe maximo de iteraciones '
read *,maxit
i=1
Do WHILE (i<maxit)
X=20/(X0*X0+2*X0+10) ! x=g(x0)
DIF=ABS(X-X0)
X0=X
i=i+1
End do
IF (DIF<eps)then
print *,'SOLUCION'
Print *,X
else
Print *,'solucion NO ENCONTRADA'
end if
end program
DO
WHILE
Acciones
V
condicion
F
Acciones
¿PUEDE
MEJORARSE?,
VERIFICAR
program PFijo
REAL :: X0,X,eps,DIF
INTEGER :: i,maxit
WRITE(*,*) ' programa para punto fijo'
PRINT *,'escribe X0'
read *,X0
PRINT *,'escribe eps'
read *,eps
PRINT *,'escribe maximo de iteraciones'
read *,maxit
i=1 !inicializamos el contador
Do
! un Do más simple acciones:
X=20/(X0*X0+2*X0+10) ! x=g(x0) !enunciados
DIF=ABS(X-X0)
if (i>maxit) exit
! condicion
X0=X ! Acciones
i= i+1
End do
IF (DIF<eps)then
Print *,X, 'Solucion'
Else
Print *,'Intenta otra vez'
end if
END program Pfijo
DO
Acciones
V
condicion
F
Acciones
Todo se escribe en la misma
hoja!
Implementando la subrutina
de cálculo de la función
program PFijo
REAL :: X0,X,eps,DIF
INTEGER :: i,maxit
! los cambios en este caso se realizan dentro del ciclo DO
Do
!un Do más simple, acciones:
call funciones(X0,gx0) !llama a la subrutina que calcula la función
X=gx0 ! x=g(x0) !enunciados
DIF=ABS(X-X0)
if (i>maxit) exit
! condicion
X0=X ! Acciones
i= i+1
End do !un Do con estructura If incluida es equivalente a While
IF (DIF<eps)then
Print *,X, 'Solucion'
Else
Print *,'Intenta otra vez'
end if
END program Pfijo
subroutine funciones(X0,gx0)
!cálculo de la función a evaluar en el programa principal
gx0=20/(X0*X0+2*X0+10)
!esta es la funcion que se evaluará
return
end
A manera de discusión
Do WHILE (i<maxit)
X=20/(X0*X0+2*X0+10)
x=g(x0)
DIF=ABS(X-X0)
X0=X
i=i+1
End do
•
!
Que DIF sea menor que eps en un
numero menor de cálculos que el
establecido por maxit, genera gasto
innecesario
Do WHILE (DIF<eps)
X=20/(X0*X0+2*X0+10)
DIF=ABS(X-X0)
X0=X
i=i+1
End do
•
! x=g(x0)
Al usar como criterio DIF y EPS se
asegura llegar a la solución, pero en
cuantos pasos ? (los contadores i)
• Es posible optimizar el desempeño de los ciclos,
tomando la comparación que lleve la menor
cantidad de cálculos y considerando el
problema a resolver
Descargar