Sie sind auf Seite 1von 16

Estructurasdecontrol:Iterativa

ltimamodificacinporautor2UOCel2015/10/1203:08
Comentarios(0)Adjuntos(6)HistorialInformacin
Contenidos
x
x

Objetivos
1:Introduccin
o Aproximacinintuitiva
o Ejemplo1
o Ejemplo2
o Ejemplo3
2:Codificacinestructuraiterativa
o Ejemplo4
o Ejemplo5
o Ejemplo6
o Ejemplo7
o Lacondicindefinaldelbucle
Apartado3:Variantedelaestructuraiterativa
o LaconstruccinMientras
o LaconstruccinPara
o Ejemplo8convectores
o Ejemplo9convectores
o Ejemplo10convectores
Resumen

Objetivos
Losobjetivosdeestemdulosonlossiguientes:
x
x
x
x
x
x
x
x
x

Entenderelconceptodeestructuraiterativa(bucle)
Tenerclaroel"patrn"oesquemadeunbucle
Comprenderelflujodeejecucindeunprogramaconestructurasiterativas
Saberreflexionarsobrelacondicindefinaldeunbucle
Aprenderaconstruirunaestructuradecontroliterativa
Conocerlasdiferentesvariantesdelaestructuraiterativa:MientrasyPara
Saberresolverproblemassencillosutilizandoestructurasiterativas
Saberresolverproblemassencilloscombinandolostrestiposdeestructuras:
secuencial,alternativaeiterativa
Aplicarlaestructuraiterativaalrecorridodeunasecuencia

1:Introduccin
Enestemdulosepresentanlasestructurasdecontroldeflujoiterativasqueseaaden
alasestructurasdecontrolsecuencialyalternativaqueyaconocemosparacontrolar
dinmicamentelaejecucindeunprograma.Esloqueesconocetambincomobucleo

loop.Veremosqueconestaestructura,unprogramapuedeejecutarrepetidamenteun
bloquedeinstruccionessiemprequesecumplaunadeterminadacondicin.

Aproximacinintuitiva
Conlasestructurasqueyaconocemospodemosresolverdiversosproblemas,perono
otros,paralosquenecesitamos,comoveremos,laestructuraiterativa.Laestructura
iterativaestmuypresenteenlavidacotidiana.Fijarosenlasiguienteinstruccinde
unarectadecocina:"Mientraslasalsanoestsuficienteligada,removerafuego
lento".Oenesteotropensamiento:"Voyenbicimientrastengaganas".Setratapuesde
repetirunamismaaccinmientrassecumplaunadeterminadacondicin.Noenvano,
elverboiteraressinnimodelverborepetir.
Eneldiagramadeflujosiguientesepresentanlaspartesdeunaestructuraiterativa.Las
flechasindicanelsentidodelflujodeejecucin.
Enprimerlugarsehacelaconsultasobreelestadoactualocondicin(romboverde)y
segnelvalorresultadodelaevaluacin(CIERTOoFALSO)haydosposiblescaminos
aseguir:silaavaluacindaCIERTOseejecutaelbloquedeinstrucciones(rectngulo
amarillo)ysevuelveaevaluarlacondicinsin,sielresultadoesFALSOelflujode
ejecucincontinuateniendounsolocamino(romboazuldeFIN)yseacabalaiteracin.

Elprimerpasoesconsultarelestadoactualocondicin.Aquseavalaunaexpresin
lgicaquedacomoresultadounvalorbooleano(CIERTOoFALSO).Segnel
resultadoobienseejecutarnlasinstruccionesdelbucle(cuandoelresultadoes
CIERTO)ysevolveralpuntodeevaluacindelacondicinobien,cuandoel

resultadoesFALSOsecontinuarconlaejecucindelrestodelprogramayseacabar
laiteracin.
Veamosacontinuacinalgunosejemplosdeusodelaestructuraiterativa.Parailustrar
comfuncionaelflujodeejecucinsepresentaparacadaejemploeldiagrama.

Ejemplo1
Paralareceptadecocinaanterior"Mientraslasalsanoestsuficienteligadaremovera
fuegolento",siidentificamoslaspartesdelaestructuraalternativaobtenemosel
siguientediagramadeflujodeejecucin:

Portantpues,estaremosremoviendolasalsaafuegolentomientrasnoestligada.
Fijarosqueenesteejemplolacondicindelmientrasestformuladaennegativo
"Mientrasnoestligada...".

Ejemplo2
Y,sirepresentamoselpensamientoanterior"Voyenbicimientrastengaganas",
obtenemoselsiguientediagramadeflujo:

Ejemplo3
Pensemosahoraenelcasodeunpaletaquevasubiendounapareddeladrillos.Debeir
aadiendofilasdeladrilloshastaquelaparedlleguealtecho.Elprocesosigueel
siguientediagramadeflujo:

2:Codificacinestructuraiterativa
Enesteapartadopresentamoslacodificacindeunaestructuradecontroliterativa,en
estecasolaestructuraMIENTRASqueeslamsgeneral.Veremosdespusqueadmite
otrasvariantes.

Parts
Codificacinenlenguatgealgortmico
Consultasobreelestadoactualocondicin mientrasexpresincondicionalhacer
QuhacercuandolacondicinesCierta bloquedeinstrucciones
Marcadefindeestructuraiterativa
fmientras

Ejemplo4
Acontinuacinteniscodificadounprimeralgoritmotantoenlenguagealgortmico
comenC.Imaginemosquetenemosunrobotautomticocapazdeconstruirparedes.
SupondremosimplementadaslasaccionesleerAlturaPared(),leerAlturaTecho()y
subirPared()queseencargandehacertodaslasoperacionesnecesariasparamedirla
alturadelapared,laalturadeltechoyaadirunafiladeladrillosmsencimadela
paredrespectivamente.
x
x

Algoritmo
C

algoritmohacerPared
var
alturaPared:real
alturaTecho:real
fvar
leerAlturaPared(alturaPared)
leerAlturaTecho(alturaTecho)
mentrealturaPared<alturaTechohacer
subirPared()
leerAlturaPared(alturaPared)
fmientras
falgoritmo
Analizemoslaejecucindelaestructuraiterativa:
#Lnia
Codi
1
mientrasalturaPared<alturaTechohacer
2
subirrPared()
3
leerAlturaPared(alturaPared)
4
fmientras
Lalnea1avalalacondicin:
CasoCIERTO:Silaalturadelaparedesinferioraladeltecho,entonceslaexpresin
esCIERTAyseejecutarlalnea2decdigo.Esdecir,elrobotsubirlapared
aadiendounafiladeladrillosnueva.Unavezejecutadalaaccindelalnea2el
controldelprogramapasadenuevoalalnea1(bucle).Fijarosquelafuncin
subirPared()estmodificandolaalturadelaparedy,portanto,cuandovolvamosa
ejecutarlalnea1,laalturadelaparedyaserdiferente.

CasFALSO:Encasoquelacondicinnoseacierta(portanto,laparedyatocaal
techo),elresultadodelaexpresinesFALSOynoseejecutarlalnea2sinoque
pasaremosdirectamentealalnea4.

Ejemplo5
Acontinuacinteniscodificadounalgoritmotantoenlenguagealgortmicocomen
llenguatgeCperamultiplicardosnmerosenteroscualesquiera(n*m)sinutilizarel
operadordemultiplicacin*.Esteesunejemploclsicoparaentenderelusodela
estructuraiterativa.Sinodisponemosdeloperador*podemoshacerigualmentela
multiplicacindedosenterosapartirdelasuma.Poresohabrquesumarmvecesl
nmeron.Ex.2*5=2+2+2+2+2,sumarcincoveceselnmero2.
x
x

Algoritmo
C

algoritmomultiplicacionEnteros
var
n:enterom:enterox:entero
fvar
leerEntero(n)
leerEntero(m)
x:=0
mientrasm<>0hacer
x:=x+n
m:=m1
fmientras
escribirEntero(x)
falgoritmo
Enesteejemplo,noshacefaltaunavariableauxiliarxdondeiremosguardandolos
resultadosparciales.Deberemosinicializarlaa0.

Ejemplo6
Enestecaso,disearemosunalgoritmopararesolverunproblemamatemtico,el
clculodelfactorialdeunnombreenterpositivo.Elfactorialdeunnmerosecalcula
as:factorial(0)=1yfactorial(n)=factorial(n1).Parahacerelclculohayque
multiplicartodoslonmerosentreel1yelnmerodelcualqueremoscalcularsu
factorial.
x
x

Algoritmo
C

algorithmfactorial
var
n:integeri:integerfact:integer
endvar
readInteger(n)

i:=1:
fact:=1
whilei<=ndo
fact=fact*i
i:i+1
endWhile
writeInteger(fact)
endAlgorithm
#Lnea
Codi
1
mientrasi<=nfer
2
fact:fact*i
3
i:=i+1
4
fmientras
Analizandolaejecucindelaestructuraiterativa,observadquecadavezqueseejecuta
lalnea1elvalordelavariableiesdiferente.
Fijarosqueellenguagealgortmiconoestsujetoaningnidioma.Podemosescribirlo
encastellano,catalnoeningls.Enesteejemplolohemoshechoencastellanoe
angls.Enlamayoradelosexemplesfuturosloencontrariseningls.Lasparaules
clavequeseutilizanpuedencambiarligeramentetambin,porejemploendaltorithm,
endAlg,...

Ejemplo7
Finalmente,vemoscomoseutilizalaestructuraiterativaenalgunosejemplosde
Scratch.
Sirevisislaficha12queprogramasteisenlaprimeraunidad,verisqueelprograma
paraqueelpezgrandepersigaalpequeotieneunaestructuraiterativaquecontrolael
movimientodelpezgrande.
EnScratchlopodemoscodificardelasiguienteforma:

FijarosqueelScratchospermiteutilizardiversasconstruccionesiterativas,quetiene
predefinidascomobloquesensusestructurasdecontrol.Enestecaso,elprograma
utilizalaconstruccinPARASIEMPRE,querepresentaunbucleinfinito,esdecirque
seproducelaiteracinmientraselprogramaestenfuncionamiento.
OtroejemploesesteprogramaScratchquecontrolaelmovimientodeunanoriadelego
conectadaalordenadoralaquepuedensubircuatropasajeros:

Lacondicindefinaldelbucle
Unaspectosobreelquehayqueponermuchaatencincuandoutilizamosestructuras
iterativasesasegurarnosqueelbucleacabarenalgunmomento.Sinolohacemos
bien,podriapasarqueelbuclefuerainfinitoyelalgoritmonoacabasenunca.Portanto
pues,aseguremnossiemprequeestonopasar.Haymtodosformalesparaasegurarque
laconstruccinestbiendefinidayqueelbuclesiempreacaba,peronolos
estudiaremosan.Detodasmaneras,intuitivamentetambinpodemosdeducirqueel
bulesacabarenalgnmomento.Vemosloenalgunosdelosejemplosquehemos
trabajadoanteriormente.
Recordemoselalgoritmoparacalcularelfactorialdeunnmeroenteropositivo.
x
x

Algoritmo
C

algorithmfactorial
var
n:integeri:integerfact:integer
endvar
readInteger(n)
i:=1:
fact:=1
whilei<=ndo
fact:=fact*i
i:=i+1

endWhile
writeInteger(fact)
endAlgorithm
#Lnia
Codi
1
i:=1:
2
fact:=1
3
mentrei<=nfer
4
fact:=fact*i
5
i:=i+1
6
fmentre
Observandolaejecucindelalgoritmovemosque:
1. Lasinstruccionesdedentrodelbucle(lneas4y5)seejecutaranalmenosuna
vezamenosqueelnmeroalquesedebacalcularelfactorialseael1.
2.Encadaiteracin,esdecir,cadavezqueentremosdentrodelcuerpodelbucle(lneas
4y5),lavariableiseincrementaenunaunidad,portanto,cadavezqueseejecutala
lnea3,dondeseavalalacondicin,elvalordelavariableiesdiferente.
Concretamente,valeunaunidadms.Deestamanera,vaaumentandosuvalordesde1
hastallegaralvalorn.Portantopues,elbucleacabarenalgunmomento,cuandola
expresin(i<=n)seacierta.Estoes,cuandolavariableicontengaelvalordelnmeron.
Pero,qupasariasihubiramosolvidadoincrementarelvalordelavariableidentro
delcuerdodelbucle?
#Lnia
Codi
1
i:=1:
2
fact:=1
3
mientrasi<=nfer
4
fact:=fact*i
5
mientras
Lavariableisemprevaldria1asqueelbucleserainfinito,noacabaranuncaamenos
queelvalordelavariablenfueratambin1.Vaya,queelalgoritmosolofuncionaraen
elcasodelclculodelfactorialdelnmero1.Paraelrestodenmerospositivosno
funcionara.Elprogramasequedarabloqueadoenunbuclesinfin.Digamosquese
"colgara"porquenohemoscontroladobienelfindelbucleynosveramosinmersosen
infinitasiteraciones.
Aseguraospuessiemprequeencadaiteracin(vuelta)delbuclequedemmenos
iteracionesporhacer.

Apartado3:Variantedelaestructura
iterativa
LaconstruccinMientras
LaconstruccinMIENTRASqueacabamosdever,permiteexpresarcualquier
composicindeinstruccionesquesenecesiterepetirsegnunascondiciones
determinadas.Esportantolaconstrucciniterativamsgeneral.Algunoslenguajes,
pero,incluyenotrasconstruccionesiterativasquesonvariantesdestayquesolose
puedenaplicaracasosmuyconcretos,siemprequesedenunasdeterminadas
circunstancias.EnesteapartadoveremostambinlaconstruccinPARA.
RecordadquelaestructuradelMIENTRASeslasiguiente:
Partes
Codificacinenlenguajealgortmico
Consultasobreelestadoactualocondicin mientrasexpresincondicionalhacer
QuhacercuandolacondicinesVerdadera bloquedeinstrucciones
Marcadefindeestructuraiterativa
fmientras

LaconstruccinPara
LavariantePARAseutilizacuandosedeberepetirunbloquedeinstruccionesun
nmeroconocidodeveces.Porejemplo,enelcasodelfactorialquehemosvisto
anteriormente,sabemosquedebemosrepetirunmismoclculo(fact*i)unnmero
determinadodeveces,enestecasodesde1hastaelnmerodelcualqueremoscalcular
elfactorial.SiutilizamoslainstruccinPARAlaestructuraiterativasesimplifica.
x
x

Algoritmo
C

algorithmfactorial2
var
n:integeri:integerfact:integer
endvar
readInteger(n)
fact:=1
fori=1tondo
fact:=fact*i
endFor
writeInteger(fact)
endAlgorithm
#Lnea
Cdigo
1
parai=1hastanhacer
2
fact:fact*i

4
fpara
Siosfijis,enelcasodelaestructuraiterativaPARA,laslneasdecdigoquehay
dentrodelbuclesonmenos.Enestecaso,solouna,lalnea2.Estoesasporquela
estructuraPARAyaseencargadeirincrementandoelvalordelndicedelaprimera
lnea(enestecasolai)desdeelvalorinicialqueseindicaalamismaestructuraPARA
(1)hastaelvalorfinal(n),quetambinseindicaenlamismalnea.Observadtambin
queenestecaso,noesnecesarioiniciarantesdelaestructuraiterativalavariablei.Por
tanto,noshemosahorradodoslneasdecdigoenrelacinalaresolucindelmismo
problemaconlaestructuraMIENTRAS.
ElesquemadelaestructuradecontrolPARAespueslasiguiente:
Codificacinenlenguaje
algortmico
Inicializacindelavariabledecontroliindicacindel parandice:=valorinicial
nmerodevecesquesedeberepetirlaiteracin
hastavalorfinalhacer
bloquede
Quhacer
instrucciones
Marcadefindeestructuraiterativa
fpara
Partes

Fijaosqueenestecaso,lamismaestructuraPARAyaseencargadeirincrementandoel
valordelndiceencadaiteracin.
Aspues,siemprequesepamoselnmerodeiteracionesqueserequierehacer,serms
cmodoutilizarlaconstruccinPARAenlugardelaconstruccinMIENTRAS,yaque
nosahorramosinicializarlavariablendiceytambindeirlaincrementandoencada
iteracin.Pero,recordadquenotodaslasiteracionessepuedenrepresentarconuna
estructuraPARA.

Ejemplo8convectores
Enlaunidadanteriorhemosvistolaestructuradedatostipovector.Utilizandoesta
estructuraescribimoselalgoritmoparacalcularlatemperaturamediadeunasemana:
algorithmmeanTemp
var
t:vector[7]ofreal
m:real
endVar
readReal(t[1])
readReal(t[2])
readReal(t[3])
readReal(t[4])
readReal(t[5])
readReal(t[6])
readReal(t[7])

m:=(t[1]+t[2]+t[3]+t[4]+t[5]+t[6]+t[7])/7
writeReal(m)
endAlgorithm
AhoraqueconocemoslaestructuraiterativaMIENTREyaprovechandoqueel
algoritmorepiteunconjuntodeinstruccioneslopodemossimplificardelasiguiente
manera:
x
x

Algoritmo
C

algorithmtemperaturaMedia
var
t:vector[7]ofreal
m:real
i:integer
endVar
i:=1
m:=0
whilei<=7do
readReal(t[i])
m:=m+t[i]
i:=i+1:
endWhile
writeReal(m/7)
endAlgorithm
Deestamanera,lainstruccinparaleerlatemperaturasoloesnecesarioescribirlauna
vez.Pero,qupasarasiahoraquisiramoscalcularlatemperaturadetodoelao?Se
deberadefinirunvectorconcapacidadpara365elementosinadams,elalgoritmo
prcticamenteseraelmismo:
x
x

Algoritmo
C

algorithmtemperaturaMedia
var
t:vector[365]ofreal
m:real
i:integer
endVar
i:=1
m:=0
whilei<=365do
readReal(t[i])
m:=m+t[i]
i:=i+1:
endWhile

writeReal(m/365)
endAlgorithm
UnaopcinanmsptimaserautilizarlaestructuraPARA,aprovechandoque
sabemoscantoselementosdelvectoresnecesariorecorrer.Vemoslo:
x
x

Algoritmo
C

algorithmtemperaturaMedia
var
t:vector[365]ofreal
m:real
endVar
m:=0
fori:=1to365do
readReal(t[i])
m:=m+t[i]
endFor
writeReal(m/365)
endAlgorithm
VeamospuesquelaestructuraPARAesmuytilparrecorrerloselementosdeun
vector.Retomaremosesteconceptoderecorridomsadelante,enunaunidadposterior,
cuandohablamosdelosesquemasalgortmicosderecorridoydebsqueda.

Ejemplo9convectores
Paraacabar,imaginemosahoralasiguientesituacin.Disponemosdeunregistrodelas
temperaturasdetodoelao,quetenemosalmacenadasenunvector,delamisma
maneraquehemoshechoenelejemploanterior.Ahoraqueremosdescubrirsialgnda
hahelado.Estoequivaleaircomprobandosialgunadelestemperaturasesnegativa.
x
x

Algoritmo
C

algorithmhaHelado?
var
t:vector[365]ofreal
helado:boolean
i:integer
endVar
i:=1
helado:=false
whilei<=365andhelado=falsedo
readReal(t[i])
ift[i]<=0thenhelado:=true
i:=i+1:
endWhile
writeBoolean(helado)

endAlgorithm
Fijaosquecuandoencontramoselprimercasodetemperaturanegativa,yapodemos
acabar,noesnecesarioquesigamosrevisandomstemperaturas.Soloqueremossaber
sialgndahahelado,nocuntosoqudashahelado.
Siquisiramossabercuantosdashaheladoentoncesdeberamosrevisartodoslos
elementosdelvectoryenestecasoseramsadecuadaunaestructuraPARA.
Vemoslo:

Ejemplo10convectores
x
x

Algoritmo
C

algorithmcuantosDasHaHelado?
var
t:vector[365]ofreal
das:integer
endVar
das:=0
fori:=1to365do
readReal(t[i])
ift[i]<=0thendas:=das+1
endFor
writeinteger(das)
endAlgorithm
Observadque,enesteejemplohemosutilizadolaestructuraiterativaFORydentrodel
cuerpo,laestructuraalternativa.
Unavezpresentadalaestructuradecontroliterativa,conocemosyatodaslasestructures
decontroldeflujodelaejecucindeuncdigo:secuencial(unainstruccina
continuacindeotra),alternativaeiterativa.Portanto,apartirdeahora,utilizando
combinacionesdeestastresestructurasdecontrol,podemosresolvercualquier
problema.

Resumen
Enestemdulohemosdefinidolaestructuraiterativaconsusvariantesprincipales.Este
tipodeestructuraesfundamentalparacontrolarelflujodeejecucindeunprogramay
completalasestructurasdecontroldeflujonecesariaspararesolvercualquierproblema
yquesontres:secuencial,alternativaeiterativa.
Hemosutilizadoelgrafismodelosdiagramasdeflujoparamostrarelfuncionamiento
deestaestructuradecontrol.Yhemospuestonfasisenlaimportanciadeasegurarla
condicindefinalelbucleparagarantizarqueelprogramafuncionarbien.

Hemosvistodiversosejemplosdeestructuraalternativajuntoconsutraduccinal
lenguagealgortmicoyallenguageCconsiderandodiversasposibilidadesvariantes,
desdelaconstruccinMIENTRAS,deusogeneral,hastalaconstruccinPARAquese
puedeutilizarenloscasosenqueconozcamosdeentradaelnmerodeiteracionesa
hacer.
Finalmentehemosvistoalgunosejemplosdeusocombinadodelastrasestructurasde
controldeflujo(secuencial,alternativaeiterativa)ydetiposdedatosestructurados,
comoeselcasodelosvectores.

Das könnte Ihnen auch gefallen