Você está na página 1de 7

WHILE(estruturaderepetio)

While(enquantocondioforverdadeira)do(faacomando) *Estaestruturaderepetiosecaracterizaporefetuarumtestelogiconoiniciodeumloop, verificandosepermitidoexecutarotrechodeinstruesabaixodela.Aestruturado WHILE...DOtemoseufuncionamentocontroladoporcondio.Destaforma,poder executarumdeterminadoconjuntodeinstruesenquantoacondiopermanecer verdadeira.Nomomentoemqueacondiosetornafalsa,oprocessamentodarotina desviadoparaforadoloop.Sendoacondiofalsalogonoinicioasinstruescontidasneles soignoradas. SINTAXE; WHILE<condio>DO <comando>; *<condio>=Expressocondicionalcujoresultadoumvalorlogico(trueoufalse).A expressocondicionaldescritademaneiraanlogaa<condio>deumcomandoif. *<comando>=Comandoqueexecutadorepetidasvezesenquantoaexpressocondicional doWHILEforverdadeiraOcomandopodersersubstitudopormaisdeumcomandose usarmosoBEGIN/END. Obs *TodocomandopodesersubstitudoporBEGIN/ENDcontendomltiploscomandosemseu interior(damesmaformacomoocorrenosoutroscomandosdopascalcomoporexemplo no:IF/THEN/ELSE)OWHILEDO,tendoounoBEGIN/ENDsemprevaiterminarporum; (pontoevirgula) PresteMUITAatenonosBEGIN/ENDoesquecimentodeumdelespodemcausar inmerosproblemas(ex;laosinfinitos). CertifiquesedequeaexpressocondicionaldoWHILEserafetadaspeloscomandos contidosdentrodolao(comandosescritosapsoDO)Casoaexpressonoseja afetadavocircriarumlaosemfim(loopinfinito)poisjamaisaexpresso condicionalmudarseuestado,. CertifiquesequeasvariveisdaexpressocondicionalusadanocomandoWHILE tenhamsidocorretamentelidasouinicializadasANTESdaexecuodoreferido comando. VARIAVELSINALIZADORAFLAG Umconceitotcnicointeressanteusadosnalinguagemdeprogramaooemprego deumavarivelparasinalizaralguntipodeevento.,situaaoouestadodo

programa.Estavarivelqueexerceafunodesinalizaralgumacoisadenominada deFLAG(bandeiraemingls). EmmuitassituaesousodosFLAGspodesimplificarbastanteoprograma. PodemostrabalharcomFLAGsquesovariveisBooleanas(true/false)oumesmo podemosusarumavarivelcorrentedoprogramaeatravsdaatribuiodeum valorespecialparaestavarivelusalaparasinalizaralgumasituao. COMANDOWHILE...DOEXEMPLO1; VAR Resposta_invalida:boolean; Fim_program:string[3]; BEGIN Resposta_invalida:=true WHILE(resposta_invalida)DO BEGIN Writeln(Desejaterminaroprograma?); Readln(fim_program); IF(fim_program=S)or(fim_program=s)THEN Resposta_invalida:=false; End; End. COMANDOWHILE...DOEXEMPLO2; Programfimprogram; var fim_program:char; Begin fim_program:='n'; While(fim_program='n')do begin Write('desejaterminaropragrama?'); readln(fim_program); end; writeln('fim'); End. COMANDOWHILE...DOEXEMPLO3; Programnum;VarNum:integer; Bergin Num:=1;[inicializandocontador] Whilenum<10DO[enquantoNumformenorque10faa] <comando>; End.

ExemplosdeusoincorretodoWHILE 1) Laoinfinito. WHILEidade<20DO[paraidademaiorque20faa] Salario:=salariodesconto;[idadenoalteradanolao] 2) Num:=10; WHILENum<100do; Num:=num1;[condiomaldefinidanumdiminui.]101=9...91=8e etc..numcachegaraNUMmaiorque100 3) Laoinfinitoporfaltadebegin/end Resp:=?; WHILEresp<>Sdo WRITELN(novamente); Readln(resp);[readln(resp)nuncaserlidopoisoprogramasvailero primeirocomandosemobegin/end.Erepetirinfinitamente.] IMPORTANTE NOWHILEANTESDEENTRAREMUMLAOPRECISOVERIFICARUMA CONDIAOSEESSACONDIAOFORVERDADEIRAOUENQUANTOESSA CONDIAOFORVERDADEIRAELASEREPETIR.

COMANDO
REPEAT(repita)UNTIL(atqueacondiosetorneverdadeira)
OcomandoREPEATUNTILrepete(looplao)aexecuodeumconjuntode comandosatqueaexpressocondicionaldocomandosetorneverdadeira inicialmenteocomandoquesegueoREPEATexecutadoseguindosedotesteda expressocondicionalcontidanoUNTILondeseelaforfalsavoltamosparauma novaexecuodocomandoeemcasocontrario,seaexpressoforverdadeira Terminaolao(loop)derepetio.AoterminarocomandoREPEATUNTILaexecuo seguesenormalmenteapartirdaprximalinhaquesegueoUNTIL. AdiferenaentreWHILE/DOeREPEATUNTILquenocasodoWHILEocomandono podeserexecutadonenhumavezcasoaexpressosejafalsanaprimeiravezquefor testadaejnocasodoREPEATocomandosempreexecutadoaomenosumavez> NoWHILEotesteoiniciodolaoenoREPEATotestenofinaldolao. OtestedoWHILE/DOfazcomqueocomandosejaexecutadodiversasvezes enquantoacondioforverdadeira.NotestedoREPEAT_UNTILocomando executadoenquantoacondioforfalsa,terminandoquandoaexpressosetornar verdadeira. SINTAXE

4) X:=0;

REPEAT<comando>;UNTIL<condio>; Ou REPEAT<comando>; <comando>; ...... UNTIL<condio> *<condio>=Expressocondicionalcujoresultadoumvalorlogico(true/false) #Aexpressocondicionaldescritademaneiraanloga<condio>deum comandoIf.Olaocontinuaaserrepitidosomenteseacondionoforsatisfeita (resultadofalse. #<comando>=Comandoqueexecutadorepitidasvezesenquantoaexpresso condicionaldoRepeat/Untilnoforverdadeira.Ocomandopodesersubstitudopor maisdeumcomandoseusarmodobegin/end.oumesmosenofizermosouso deste> *Repitao<comando>atqueasatisfaaa<,condio> OBSERVAOES Todo<comando>podesersubstitudoporbegin/endcontendomltiploscomandos noseuinterior(damesmaformacomoocorrecomosoutroscomandosdopascal comoporexemplonoIF/THEN/ELSE. OREPEAT/UNTILtendoounoBEGIN/ENDsemprevaiterminarporumpontoe virgula;apsoscomandoseapsaexpressocondicional. Certifiquesedequeaexpressocondicionaldorepeat/untilserafetadapelos comandoscontidosdentrodolao(comandosdescritosapsoREPEAT)casoa expressonosejaafetadavocircrarumlaoinfinitopoisjamaisaexpresso condicionalmudarseuestado. EXEmPLOS4;

REPEAT X:=X+1; UNTIL X=10;[repitaxatxseriguala10]

5) Repeatreadln(nota); Until (nota>=0.0)and(nota<=10.0); 6) Repeat Writeln(HelloWorld); Write(Novamente(S/N)?); Readln(resp); Until (Resp=N)or(resp=n); 7) Repeat{media=>Usamosumvaloreespecialparaterminar(1)} Begin {1servecomoumsinalizador(flag)paraterminarolao} Readln(media); If(media<>1then If(media>=6.0)then Writeln(aprovado)else Writeln(Reprovado); END; UntilMedia=1

FOR
*FOR(para)umavariavelindodovalorinicialTO(at)umvalorfinalDO(faa)comando OcomandoFor/To/Dorepetelaoaexecuodeumconjuntodecomandotantasvezes quantoforemindicadapelocontador.InicialmenteavarivelcontadoradoForrecebem valorinicialsendodepoisestavarivelincrementada(noFor/TO/Do)oudecrementada. NocomandoFOR/DOWNTO/DOestelao(executacomando+atualizaocontador) repetidoatqueavarivelalcancevalorfinal,somandoousubtraindosempreumaunidade decadavez(acadanovainteraodolao)dovalordestavarivel. AoterminarocomandoFOR/DOaexecuoseguesenormalmenteapartirdaprximalinha quesegueoDO. OcomandoFOR/DOmuitosimilaraimplementaodeumlaoWHILE/DOou REPEAT/UNTILquandoesteusadopararealizarumacontagem, importanteressaltarqueavarivelutilizadanocontroledolaoFOR/DO(varivel controladora)Temqueserdotipoordinal(dotipointeiro)ealmdissoimportante lembrarqueoFOR/DOspodeusarcontagemsimplesquecontadeumaemuma unidade,somando(FOR/TO/DO)ousubtraindo(FOR/DOWNTO/DO)umaunidadeda varivelcontroladora. SINTAXE FOR<variavel>:=<valor_inicial>TO<valor_final>DO<comando>; Ou FOR<valor_inicial>:=<valor_final>DOWNTO<valor_final>DO <comando>; .................................................................................................

*<varivel>=VariaveldotipoordinalqueserusadacomocontadordocomandoFOR/DO *<valorinicial>=Valorouexpressoqueindicaovaloriniciaaseratribudoavarivel contadora *<valorfinal>=Valorouexpressoqueindicaovalorfinalousejaovalorquequandoo contadorultrapassarovalorfinalolaoderepetiotermina. *<comandos>=Comandoqueexecutadorepetidasvezesenquantonoultrapassarmoso valorfinalestabelecidoparaocontador.ocomandopodesersubstitudopormaisdeum comandoseusarmosoBEGIN/ENDcomoosdemaiscomandospascal paraquea<varivel>variede<inicio>ato<fim>faao<comando>;

Observaoes

AvariveldoFOR/DOincrementadaoudecrementada AUTOMATICAMENTEnodeveDEMODOALGUMalterarovalordesta variveldentrodolaoFOR/DO.noatribuenemaltereovalordavarivel contadoradoFOR/DO Ovaloriniciale/oufinaldavarivelusadanofor/Dopodeserdefinidapor umavarivelouumaexpressonumricacujoresultadodeveserum numerodotipointeiro>Atenaovocnodevedemodoalgumalteraro valorfinaldoFOR/DOduranteaexecuo(usualmentetodaalteraodo valorfinaldofor/doserignorada) AvariveldoFor/Dodeveserdotipointeiro(ordinal)sendoqueovalor inicialdevesermenorouigualaofinalquandousarmosoFor/To/Do.ouo valorinicialdevesermaiorqueovalorfinalquandousarmoso FOR/DOWNTO/DO. OpontoevirgulacolocadosomenteaofinaldocomandoFOR.,ouseja apsocomandoassociadoaoDO Certifiquesequeavarivelcontadoravairealmentechegarateovalor finalindicadonoFOR/DO.Casocontrarioteremosumlaoinfinito

Você também pode gostar