Sunteți pe pagina 1din 26

CICLOS DE REPETICIN

(Fortran 90)
Expositores:
AimeeOsorioAnguiano
AntonioMartinezMorales
DanAdrinAlbaMontiel

ESQUEMASREPETITIVOSEN
FORTRAN90
QUESUNESQUEMAREPETITIVOENFORTRAN?
Unaestructuraderepeticin,tambinllamadalazoobucle,haceposiblela
ejecucinrepetidadeseccionesespecficasdecdigo.

SEPUEDENDIVIDIRDELASIGUIENTEMANERA:

Ciclosinteractivos(CI):Buclesdondeelnmerodeiteracioneses
Ci
fijoyconocido
deantemano.

Cicloswhile(CW):Buclesdondeelnumerodeiteracioneses
desconocidodeantemano.

Enestecasoelbucleserepitemientrasse
cumpleunadeterminadacondicin(bucles
condicionales).

TIPOSDEESQUEMA
CICLODO
CICLOS
INTERACTIVOS
CICLOSDEREPETICIN
CICLODOWHILE
CICLOSWHILE
CICLODO+EXIT
CICLODOCYCLE

CICLOSINTERACTIVOS
(nmerodeiteracionesfijoyconocido)

ESQUEMADO
Sintaxis:
DOindice=valorinicial,valorfinal,incremento
<sentencias>
ENDDO

Descripcin:
Elindiceesunavariableenteraque,actuandocomouncontador,permitecontrolarelnmero
deejecucionesdelciclo.

Losvalorinicialyvalorfinalsonvaloresenterosqueindicanloslmitesentrelosque
varandicealcomienzoyfinaldelbucle.

Elincrementoeselaumentosobreelindicedespusdeunaiteracin,estospuedensermayores
oigualesalaunidadeinclusonegativos.

ElnmerodeiteracionesdelbucleesN=valorfinalvalorinicial+1

Dentrodelasinstruccionesdelbuclenoeslegalmodificarlavariablendice,porlotanto,
lautilidaddelavariablendiceselimitaalaestructuradeiteracin.

Programa ejemplo ciclo DO


PROGRAMpromedio_DO
!Iniciodelprograma
!
!ProgramaejemplodecicloDO
!
!Declaracindetipodevariables(Ningunaimplcita)
!
IMPLICITNONE
integer::i!valorinicialdelbucle
integer::n!nmerodetrminosasumar
real::suma!valordelasuma
real::x!valordeelemento
!
!Mensajeamigablealusuario
!
CALLSYSTEM("clear")
WRITE(*,*)"************************************"
WRITE(*,*)Esteprogramacalculaelpromediodennmeros
WRITE(*,*)
WRITE(*,*)Inserteelnmerodeelementosdesusuma
READ(*,*)n!Lecturadevalordetrminosasumar
!
!Inicializamoslasuma
!
suma=0.0
DOWHILE((n<0).OR.(n==0))
WRITE(*,*)"Valorinvalido"
CALLSYSTEM("clear")
WRITE(*,*)"************************************"
WRITE(*,*)"Esteprogramacalculaelpromediodennmeros"
WRITE(*,*)"Inserteelnmerodeelementosdesusuma"
READ(*,*)n!Lecturadevalorfinal
ENDDO

Programa ejemplo ciclo DO


!
!IniciodecicloDO
!
DOi=1,n
WRITE(*,*)Inserteelelemento,i
READ(*,*)x
suma=x+suma
ENDDO
!
!Finciclodo
!
suma=suma/n
!
!Salidadedatos
!
WRITE(*,*)"Elpromedioes",suma
!
!Terminodelprograma
!
ENDPROGRAMpromedio_DO

SITAXISDEUNBUCLEITERATIVOCONNOMBRE:

Nombre: DO ndice = inicio, fin,incremento


<sentencias>
IF (expresin_lgica) CYCLE Nombre
<sentencias>
END DO Nombre

CICLOSWHILE
(nmerodeiteracionesindefinidoycondicinconocida)

ESQUEMADOWHILE
Sintaxis:
DOWHILE(<expr.Lgica>)
<sentencias>
ENDDO

Descripcin:
Esequivalentealbuclemientrasdellenguajealgortmico

Nosesabeaprioridadelnmerodeiteraciones

Slosi<expr.lgica>escierta,seejecutaelbucle(sentenciasdentrodeldowhile).

CadavezquesealcanzaENDDOvuelveaevaluarselaexpresinlgica

Elbuclepuedeejecutarsedecerooinfinitasveces

Semantieneporcompatibilidadconotroslenguajes

Programa ejemplo 1 ciclo DO WHILE


PROGRAMcuento_DO_WHILE
!Iniciodelprograma
!
!ProgramaejemplodecicloDOWHILE
!
!Declaracindetipodevariables(Ningunaimplcita)
!
IMPLCITNONE
character(20)::entrada!variabledecondicinenla<exp.lgica>
!
!Mensajeamigablealusuario
!
WRITE(*,*)Deseassabercomopasarprogramacin2?(s/n)
READ(*,*)entrada!Lecturadevariables

Programa ejemplo 1 ciclo DO WHILE


!
!Iniciodeciclodo
!
DOWHILE((entrada/=s).OR.(entrada/=n))
WRITE(*,*)Segurodeseassabercomoaprobar?...(s/n)
READ(*,*)entrada
IF((entrada=="s").OR.(entrada=="S"))THEN
WRITE(*,*)"Estudiamuchito(:"
EXIT
ENDIF
IF((entrada=="n").OR.(entrada=="N"))THEN
WRITE(*,*)"Graciasporutilizarelprograma"
EXIT
ENDIF
ENDDO
!
!Finciclodo
!
!Terminodelprograma
!
ENDPROGRAMcuento_DO_WHILE

ESQUEMA DO + EXIT
Sintaxis
DO
<sentenciasdelbloqueprecondicin>
IF(<expr.lgica>)EXIT
<sentenciasdelbloquepostcondicin>
ENDDO

Descripcin

Equivalente al esquema general de repeticiones (iterar-salir-si)

Tambin, implementa los esquemas mientras y repetir


Puede utilizarse en lugar del bucle DO-WHILE-END DO
Si existen, se ejecutan el conjunto de

<sentenciasdelbloqueprecondicin>

Despus se comprueba si la <expr. lgica> es cierta:


Si es cierta en ese caso se sale del bucle (avanza a la instruccin tras END DO)
Si es falsa, se ejecutan las <sentenciasdelbloquepostcondicin> y se vuelve a entrar al
DO

Programa ejemplo DO + EXIT


PROGRAMSUMA_DO_EXIT !Iniciodelprograma
!
!ProgramaejemplodecicloDOWHILE
!Declaracindetipodevariables(Ningunaimplcita)
!
IMPLICITNONE
integer::i,suma,n
!
!Mensajeamigablealusuario
!
WRITE(*,*)Esteprogramacalculalasumadennmerosenteros
!
!Inicializamosdevariables
!
suma=0
i=0
!IniciodecicloDo+EXIT(Compruebaqueloslmitesseancorrectos)
!
DO
WRITE(*,*)"Cuantosnmerosquieressumar(max.100)?"

Programa ejemplo DO + EXIT


READ(*,*)n
IF((n>=0).and.(n<=100))EXIT
ENDDO
!
!FindelcicloDO
!
!IniciodecicloDo+EXIT(realizalasuma,equivalenteaunDOWHILE)
!
DO
IF(i>n)EXIT
suma=suma+i
i=i+1
ENDDO
!
!FindelcicloDO
!Salidadedatos
!

WRITE(*,*)"Lasumade",n,"enteroses",suma
!
!Terminodelprograma
!
ENDPROGRAMSUMA_DO_EXIT

ESQUEMA DO CYCLE
Sintaxis
IF (<exp. lgica>) CYCLE (NOMBRE)
Descripcin

Puede utilizarse dentro de los esquemas DO -- END DO

Si se cumple la expresin lgica, se pasa directamente al END DO y se vuelve al


inicio: DO o DO WHILE.

Puede llevar asociado el nombre del bucle DO asociado.

Su uso no es necesario, disponiendo de IF-THEN-ELSE y variables lgicas


adecuadas NO DEBE USARSE.

Programa ejemplo DO CYCLE


fuera: do i=1,n
medio: do j=1,m
dentro: do k = 1, l
read (*,*) x
if (x < 0.0) exit fuera
if (j == 5) cycle medio
if (K == 7) cycle fuera
end do dentro
end do medio
end do fuera

SINTAXISDECICLOWHILECONNOMBRE

nombre: DO
<sentencias>
IF (expresin_lgica) CYCLE nombre
<sentencias>
IF (expresin_lgica) EXIT nombre
<sentencias>
END DO nombre

CICLOS/BUCLES ANIDADOS DENTRO DE


ESTRUCTURAS IF Y VICEVERSA

CICLOS ANIDADOS DENTRO DE ESTRUCTURAS IF

Programa ejemplo Do anidado en estructura IF


PROGRAMfactorial
!Iniciodelprograma
!
!ProgramaejemplodecicloDO
!
!Declaracindetipodevariables(Ningunaimplcita)
!
IMPLICITNONE
integer::i!valorinicialdelbucle
integer::n!nmerodetrminosasumar
real::fact!fact
!
!Mensajeamigablealusuario
!
CALLsystem("clear")
WRITE(*,*)"************************************"
WRITE(*,*)"Esteprogramacalculaelfactorial"
WRITE(*,*)""
WRITE(*,*)"Inserteelnumerodefactorialquedeseacalcular"
READ(*,*)n!Lecturadevalordetrminosamultiplicar
!
!Inicializamoselfactorial
!
fact=1.0

Programa ejemplo Do anidado en estructura IF


!
!EstructuraIF
!
IF(n>=0)THEN
!
!CicloDOanidado
!
DOi=1,n
fact=fact*i
ENDDO
!
!FincicloDOanidado
!
WRITE(*,*)"Elfactorialde",n,"es",fact
ELSEIF(n<0)THEN
WRITE(*,*)"Losentimosinsertovaloresnegativos"
!
!FinestructuraIF
!
!Terminodelprograma
ENDPROGRAMfactorial

ESTRUCTURAS IF DENTRO DE CICLOS DO

Programa ejemplo estructura IF anidado en ciclo DO

PROGRAMmetodo_de_newton

!Iniciodelprograma

!
!ProgramaejemplodeestructuraIFanidadaencicloDo
!
!Declaracindetipodevariables(Ningunaimplcita)
!
IMPLICITNONE
integer::i!valorinicialdelbucle
integer::nmax=500!valorfinaldelbucle
real::x1,eps=1E7,df,f!puntoinicial,psilon,derivada,funcin
!
!Mensajeamigablealusuario
!
CALLsystem("clear")
WRITE(*,*)"************************************"
WRITE(*,*)"Esteprogramalasraicesdelafuncionsenx"
WRITE(*,*)""
WRITE(*,*)"InserteelpuntoinicialXoen[0,2pi]"
READ(*,*)x1!Lecturadepuntoinicial

!
!CicloDO
!
DOi=1,nmax
f=sin(x1)
!
!EstructuraIFanidado
!
IF(f<eps)THEN
WRITE(*,*)Elmtodoconvergialaiteracin,i
WRITE(*,*)Xr,x1
WRITE(*,*)f(xr)=,f
EXIT
ENDIF
!
!FinEstructuraIFanidado
!
df=cos(x1)
x1=x1(f/df)
ENDDO
!
!FinCicloDO
!
!Terminodelprograma
ENDPROGRAMmetodo_de_newton

S-ar putea să vă placă și