Programare Java Curs – 2 TABLOURI Tablourile reprezinta o modalitate de a pastra o lista de elemente cu aceleasi tipuri de date primitive sau

de clase . Fiecare element al listei este pastrat intr o locatie proprie ! numerotata ast"el incat in"ormatia poate "i usor accesata . Tablourile pot contine orice tip de in"ormatie pastrata in mod normal intr o variabila ! insa ! o data creat ! tabloul nu poate "i "olosit decat pentru acel tip de date . #e e$emplu ! putem avea un tablou de intregi ! un tablou de obiecte %tring sau un tablou de tablouri insa nu putem avea un tablou care sa contina atat siruri cat si intregi . Pentru a crea un tablou in Java trebuie sa urmarim pasii de mai &os ' (. ). +. #eclaram o variabila care sa re"ere un tablou *ream un obiect de tip tablou si il atribuim variabilei tablou %tocam in"ormatia in tabloul respectiv

#,*LARAR,A -ARIABIL,LOR TABLOU Primul pas de mai sus este declararea variabilei care va re"eri tabloul . -ariabilele tablou indica tipul de obiecte sau de date pe care le va contine tabloul ! precum si numele acestuia . Pentru a le di"erentia de declaratiile normale de variabile se adauga o perec.e de paranteze patrate /0 la tipul de obiecte sau de date sau la numele variabilei . ,$emplu ' %tring cuvinte/01 Point lovituri1 int salariu/01 ,$emplele de mai &os sunt si ele valide ' %tring/0 cuvinte1 Point/0 lovituri1 int/0 salariu1 *R,AR,A #, OBI,*T, TABLOU #upa ce declaram variabila tablou ! urmatorul pas este de a crea un obiect tablou si de a l atribui unei variabile . ,$ista mai multe modalitati ' "olosim operatorul ne2 initializam direct continutul tabloului #eoarece tablourile sunt obiecte Java putem "olosi operatorul ne2 pentru a crea o noua instanta a unui tablou ' %tring/0 numeJucatori3ne2 %tring/(401 Aceasta instructiune creaza un tablou de siruri cu (4 pozitii ! care poate contine obiecte %tring . Atunci cand cream un obiect tablou "olosind operatorul ne2 ! trebuie sa indicam cate pozitii urmeaza sa contina acesta . Aceasta instructiune nu introduce nici un "el de obiecte %tring pe aceste pozitii . Obiectele tablou pot contine si tipuri primitive cum ar "i intregi sau valori booleene ! nu numai obiecte '

int/0 temp3ne2 int/5501 Atunci cand cream un obiect tablou "olosind operatorul ne2 toate pozitiile sale vor "i initializate automat 6 cu 4 cele numerice ! cu "alse pentru boolean ! cu 7849 pentru tipul caracter si cu null pentru obiecte :. OB% ' null nu este ec.ivalent cu zero sau cu caracterul ;84< ! ca in cazul limba&ului * Putem crea si initializa un tablou in acelasi timp . In loc sa "olosim operatorul ne2 pentru a crea noul obiect tablou includem elementele tabloului intre => ! separate prin virgula ' %tring/0 nume3=;Ion< ! ;Andrei<! ;?i.ai< >1 Fiecare dintre elementele dintre acolade trebuie sa "ie de acelasi tip cu variabila tablou . Atunci cand cream un tablou cu valori initiale in acest "el ! tabloul are dimensiunea egala cu numarul de elemente incluse . ,$emplul anterior creaza un tablou de obiecte %tring ! denumit nume ! care contine trei elemente . A**,%AR,A ,L,?,@T,LOR TABLOULUI #upa ce s a creat un tablou cu valori initiale putem accesa ! modi"ica si testa valorile "iecarei locatii a acestuia . -aloarea unei locatii este accesata cu numele tabloului ! urmat de pozitia ei in cadrul acestuia ! incadrata intre /0 . @umele si pozitia pot "i "olosite intr o e$presie ! cum ar "i ' scorParticipant/A403B441 scorParticipant reprezinta o variabila care re"era un obiect tablou . Pozitia 6 inde$ul : speci"ica locatia care va "i accesata in cadrul tabloului @umerotarea pozitiilor incepe de la 4 ast"el incat un tablou cu (4 elemente poate "i accesat "olosind pozitiile 4 C 5 . Toate pozitiile unui tablou sunt veri"icate daca se incadreaza in limitele tabloului asa cum s au speci"icat la crearea tabloului . In Java este imposibil sa accesam sau sa atribuim o valoare unei pozitii a tabloului a"lata in a"ara limitelor sale ! problema care aparea in * de e$emplu . %tring/0 vorbitor3ne2 %tring/(401 vorbitor/(40 3<Te$t introdus<1 Un program care "oloseste aceste doua linii de cod va da eroare de compilare la "olosirea variabilei vorbitor/(40 . ,roarea apare din cauza ca tabloul nostru nu poseda pozitia a zecea . Pentru a evita in programe depasirea accidentala a s"arsitului tabloului putem "olosi o variabila de instanta lengt. C disponibila pentru toate obiectele tablou ! indi"erent de tip ' int lungime3lungime.lengt.1 ?O#IFI*AR,A ,L,?,@T,LOR TABLOURILOR #upa cum am vazut mai sus putem atribui o valoare unei anumite pozitii a tabloului prin introducerea operatorului de atribuire dupa numele tabloului si al inde$ului ' notele?ele/A03(41 propozitai/403<Aici<1 propozitia/(403propozitia/401 Un lucru important de retinut este ca un tablou de obiecte ! in Java ! este un tablou de re"erinte la obiectele respective . Atunci cand atribuim o valoare unei pozitii dintr un ast"el de tablou nu se va

copia valoarea dintr o pozitie in alta ci se va atribui re"erinta . In sc.imb ! tablourile de tipuri de date primitive copiaza valorile dintr o locatie in alta . Tablourile sunt relativ simplu de creat si modi"icat insa o"era "oarte multe avanta&e si sunt "oarte utile in Java . (' class TestTablou = )' +' %tring/0 prenume3=;#ennis<!<Drace<!<B&arne<!<James<>1 A' %tring/0 nume#eFamilie3ne2 %tring/prenume.lengt.01 B' E' void a"iseaza@ume6: = F' int i341 G' %Hstem.out.println6prenume/i0 5' I< ; Inume#eFamilie/i0:1 (4 iII1 ((. %Hstem.out.println6prenume/i0 ()' I< ; Inume#eFamilie/i0:1 (+ iII1 (A. %Hstem.out.println6prenume/i0 (B' I< ; Inume#eFamilie/i0:1 (E iII1 (F. %Hstem.out.println6prenume/i0 (G' I< ; Inume#eFamilie/i0:1 (5 > )4' )(' public static void main 6%tring argumente/0: = ))' TestTablou a3ne2 TestTablou6:1 )+' a.a"iseaz@ume6:1 )A' %Hstem.out.println6;JJJJ<:1 )B' a.nume#eFamilie/403<Ritc.ie<1 )E' a.nume#eFamilie/(03<Kopper<1 )F' a.nume#eFamilie/)03<%troustrup<1 )G' a.nume#eFamilie/+03<Dosling<1 )5' a.a"iseaza@ume6:1 +4' > +(' > In acest program cream o clasa TestTablou ! cu doua variabile de instanta care pastreaza tablouri de obiecte %tring . Primul ! prenume ! este declarat si initializat in linia + pentru a contine patru siruri . A doua variabila ! nume#eFamilie ! este declarata si creata in linia A ! insa nu contine nici o valoare initiala . Tabloul acesta are acelasi numar de pozitii ca si tabloul prenume ! deoarece "oloseste valoarea prenume.lengt. . Atunci cand este "olosita pentru un obiect tablou ! variabila de instanta lengt. intoarce numarul de pozitii din tablou . *lasa TestTablou mai contine si doua metode ' a"iseaza@ume si main . ?etoda a"iseaza@ume6: ! de"inita in liniile E C (5 ! parcurge succesiv tablourile prenume si nume#eFamilie ! a"isand continutul "iecarei pozitii . ?etoda main creaza o instanta initiala a clasei TestTablou 6 in linia )) : asa incat sa I se poata "olosi variabilele si metodele de instanta . Linia )+ apeleaza metoda a"iseaza@ume6: ! pentru a prezenta cum arata initial obiectul . Rezultatul este dat in primele patru linii a"isate . Liniile )B C )G seteaza valorile "iecarei pozitii din tabloul nume#eFamilie . Linia )5 apeleaza inca o data metoda a"iseaza@ume6: pentru a arata noile valori din tabloul nume#eFamilie .

TABLOURI ?ULTI#I?,@%IO@AL, #imensiunile multiple ale unui tablou sunt "olositoare atunci cand reprezentam de e$emplu un table $!H de elemente ale unui caroia& . Java nu suporta tablourile multidimensionale ! insa obtine acelasi e"ect prin declararea unui tablou de tablouri . Acele Tablouri pot contine si ele tablouri si asa mai departe ! pana cand este obtinut numarul de dimensiuni dorit . ?ai &os avem un e$emplu de declarare si accesare a unor ast"el de tablouri ' int/0/0 coordonate3ne2 int/()0/()01 coordonate/40/403(1 coordonate/40/(03)1 I@%TRU*TIU@I BLO* Instructiunile din Java sunt grupate in blocuri . Inceputul si s"arsitul unui bloc sunt notate cu acolade => . Blocurile sunt denumite si instructiuni bloc ! deoarece un bloc poate "i "olosit oriunde poate "i "olosita o instructiune simpla . Fiecare instructiune din cadrul blocului se e$ecuta secvential . Blocurile pot "i plasate si in cadrul altor blocuri ! asa cum se procedeaza la introducerea unei metode in cadrul unei de"initii de clasa . Un lucru de retinut re"eritor la blocuri este acela ca ele creaza un domeniu de vizibilitate pentru variabilele locale create in cadrul blocului . Domeniu de vizibilitate este un termen "olosit in programare pentru a denumi acea parte a programului in care o variabila e$ista si poate "i "olosita . #aca programul paraseste domeniul de vizibilitate al unei variabile ! aceasta nu mai e$ista si incercarea de a o accesa va da nastere unei erori . #omeniul de vizibilitate al unei variabile este blocul in care a "ost creata . Atunci cand cream si "olosim variabile locale in cadrul unui bloc ! aceste variabile isi inceteaza e$istenta dupa ce blocul isi termina e$ecutia . void testBloc6: = int $3(41 = 88 incepere bloc int H3A41 H3HI$1 > 88 s"arsit bloc > In e$emplul anterior e$ista doua variabile de"inite in cadrul acestei metode ' $ si H . #omeniul de vizibilitate al variabileH H este blocul in care se a"la 1 ea poate "i "olosita doar in cadrul acestui bloc . #aca am incerca sa o "olosim oriunde in alta parte a metodei testBloc6: vom obtine o eroare . -ariabila $ a "ost creata in interiorul metodei ! insa in a"ara blocului interior ! deci poate "i "olosita in orice alta parte a metodei . Putem modi"ica valoarea lui $ oriunde in cadrul metodei . I@%TRU*TIU@,A *O@#ITIO@ALA IF Unul dintre aspectele c.eie ale programarii este posibilitatea unui program de a decide ce va "ace . Acest lucru este tratat printr un tip special de instructiuni denumite instructiuni conditionale . O instructiune conditionala reprezinta o instructiune e$ecutata doar in cazul indeplinirii unei anumite conditii . *ea mai des "olosita instructiune conditionala este IF 6 daca : . Aceasta "oloseste o e$presie booleana pentru a decide daca o instructiune va "i sau nu e$ecutata . #aca e$presia intoarce valoarea true instructiunea se va e$ecuta .

i" 6varstaLB4: %Hstem.out.println6;@u mai esti c.iar tanar<:1 #aca dorim ca atunci cand e$presia IF intoarce valoarea "alse sa se e$ecute totusi ceva "olosim cuvantul c.eie optional else . i" 6alegere33true: restaurant3<President<1 else restaurant3<Lido<1 ,$presia IF e$ecuta instructiuni di"erite in "unctie de rezultatul unei singure testari booleene . OB% ' Testul instructiunii IF in Java trebuie sa returneze o variabila booleana 6 true sau "alse : 1 in * testul poate returna un intreg . In practica se "oloseste si o versiune prescurtata a testului conditional IF 1 in locul e$presiei ' i" 6alegere33true: Putem "olosi doar ' i" 6alegere: In continuare vom vedea un e$emplu complet de aplicatie Java care se bazeaza pe "olosirea testului IF ' (' class TestParitate = )' +' void veri"icareParitate6int val: = A' %Hstem.out.println6;-aloarea este ; B' IvalI<. ;:1 E' i" 6valM)334: F' %Hstem.out.println6;Par<:1 G' > 5' (4' public static void main 6%tring argumente/0: = ((. TestParitate e3ne2 TestParitate6:1 ()' (+' e.veri"icareParitate6(:1 (A' e.veri"icareParitate6):1 (B' e.veri"icareParitate6BA:1 (E' e.veri"icareParitate6FF:1 (F' e.veri"icareParitate6(+AE:1 (G' > (5' > ;@ucleul< clasei TestParitate este metoda veri"icareParitate6: C liniile + G C in care valorile sunt testate si se tipareste mesa&ul corespunzator . ?etoda incepe prin tiparirea valorii care i a "ost transmisa . Argumentul este apoi testat "olosind o instructiune conditionala IF ! pentru a veri"ica daca un numar este par . ?etoda main6: a aplicatiei creaza o noua instanta a clasei TestParitate si o testeaza apeland metoda veri"icareParitate6: de mai multe ori ! cu di"erite valori . OP,RATORUL *O@#ITIO@AL O alternativa viabila in practica este "olosirea intr o instructiune conditionala ! in locul cuvintelor c.eie IF si ,L%, a operatorului conditional 6 numit si operator ternar C deoarece are trei termeni : .

Operatorul conditional este o e$presie ! ceea ce inseamna ca intoarce o valoare ! spre deosebire de mai generalul IF care are ca rezultat doar e$ecutarea unei instructiuni . Operatorul conditional este mai util pentru instructiuni conditionale scurte sau simple ! ca in e$emplul urmator ' testNrezultatJadevarat'rezultatJ"als1 test este o e$presie care intoarce true sau "alse ! la "el ca testul din instructiunea IF . #aca testul este adevarat 6 true : operatorul conditional intoarce valoarea rezultatJadevarat iar daca este "als returneaza rezultatJ"als . ?ai &os putem vedea un e$emplu practic ' int cel?aiBun%cor3scorul?euLscorulTauNscorul?eu'scorulTau1 Folosirea operatorului conditional este ec.ivalentul urmatorului cod IF ' int cel?aiBun%cor1 i" 6scorul?euLscorulTau: cel?aiBun%cor3scorul?eu1 else cel?aiBun%cor3scorulTau1 Operatorul conditional are o precedenta "oarte scazuta C este de obicei evaluat dupa toate sube$presiile sale . %ingurii operatori care au precedenta mai mica sunt cei de atribuire . I@%TRU*TIU@,A %OIT*K O operatie des intalnita in orice limba& este compararea unei variabile cu o anumita valoare ! apoi compararea cu o alta in caz ca nu se potriveste cu prima si asa mai departe . Acest proces poate deveni destul de di"icil daca s ar "olosi doar instructiuni IF ! in "unctie de diversitatea valorilor pe care trebuie sa le comparam . #e e$emplu putem a&unge la un set de instructiuni de genul ' i" 6oper339I9: adunaArg6arg(!arg):1 else i" 6oper339 7: scadeArg6arg(!arg):1 else i" 6oper339P9: inmultireArg6arg(!arg):1 else i" 6oper33989: imparteArg6arg(!arg):1 Folosirea IF ului in acest caz este o imbricare deoarece "iecare instructiune else contine o alta i" pana se "ac toate testele posibile . Un mecanism prescurtat pentru aceste instruciuni IF imbricate ! care poate "i "olosit in unele limba&e de programare ! este gruparea testelor si actiunilor intr o singura instructiune . In Java putem grupa actiunile C ca si in * C "olosind instructiunea %OIT*K . s2itc.6nota: = case (4' %Hstem.out.println6;Foarte bine<:1 breaQ1 case G' %Hstem.out.println6;Bine<:1breaQ1 case B' %Hstem.out.println6;Ai trecut<:1breaQ1 de"ault' %Hstem.out.println6;A ai cazut<:1 > Instructiunea %OIT*K este bazata pe un test 1 in e$emplul nostru se testeaza variabila nota . -ariabila testata ! care poate "i de orice tip primitiv 6 bHte ! s.ort ! c.ar sau int : este comparata pe rand cu "iecare dintre valorile case . #aca se gaseste o potrivire se e$ecuta instructiunea speci"icata dupa test 1 daca nu se gaseste nici o potrivire se e$ecuta instructiunea de"ault . Aceasta instructiune este de "apt optionala 1 daca este omisa si nu se gaseste nici o potrivire case atunci instructiunea %OIT*K se inc.eie "ara a se e$ecuta nimic . Implementarea Java a instructiunii %OIT*K este oarecum limitata C testele si valorile pot "i doar tipuri primitive simple ce pot "i convertite in int . Intr o asemenea instructiune nu se pot "olosi tipuri primitive de dimensiuni mai mari C large sau "loat C siruri sau alte obiecte si nici nu se pot testa alte relatii in a"ara de cea de egalitate . Aceste restrictii limiteaza "olosirea %OIT*K la cazuri relativ simple . In sc.imb instructiunile IF imbricate pot "i "olosite pentru orice tip de testare .

Trebuie sa mentionez ca dupa o instructiune case putem include oricate instructiuni "ara a "i necesare acoladele 6 ca in cazul lui IF : . Instructiunea breaQ "orteaza iesirea din instructiunea %OIT*K la gasirea unei potriviri de valoare . ,$ista posibilitatea ne"olosirii acestei instructiuni C caz in care programul e$ecuta mai departe instructiunile pana intalneste un breaQ sau pana la s"arsitul instructiunii s2itc. . Instructiunea breaQ intrerupe e$ecutia in punctul curent si "ace un salt la codul a"lat dincolo de urmatoarea acolada inc.isa > . Avanta&ul ne"olosirii lui breaQ apare atunci cand se doreste e$ecutarea acelorasi instructiuni pentru mai multe valori . Pentru aceasta se "olosesc mai multe linii case "ara instructiuni 1 ast"el ! s2itc. va e$ecuta primele instructiuni pe care le va intalni . #e e$emplu ! in urmatoarea instructiune s2itc. sirul 7$ este un numar par9 este a"isat doar daca $ are una dintre valorile ) ! A! E sau G . Toate celelalte valori ale lui $ duc la a"isarea te$tului de"ault ' s2itc.6$: = case )' case A' case E' case G' sHstem.out.println6;$ este un numar par<:1 breaQ1 de"ault' %Hstem.out.println6;$ nu este par<:1 > In cele ce urmeaza vom detalia inca un e$emplu care "oloseste instructiunea %OIT*K . Aceasta clasa converteste valorile intregi in cuvintele ce le denumesc . class *ititor@umere= %tring conversie@umar6int val: = s2itc. 6val: = case 4' return ;zero<1 case (' return ;unu<1 case )' return ;doi<1 case +' return ;trei<1 case A' return ;patru<1 case B' return ;cinci<1 case E' return ;sase<1 case F' return ;sapte<1 case G' return ;opt<1 case 5' return ;noua<1 de"ault' return ; ;1 > > public static void main6%tring argumente/0: = *ititor@umere n3ne2 *ititor@umere6:1 %tring num3n.conversie@umar6A:In.conversie@umar6(:In.conversie@umar6+:1 %Hstem.out.printl6;A(+ este convertit in ' ;Inum:1 > > Instructiunea s2itc. preia un argument intreg care este transmis metodei conversie@umar6: care ! daca gaseste o potrivire ! intoarce valoarea corespunzatoare sub "orma de sir . @u este nevoie de instructiuni breaQ in *ititor@umere deoarece se "oloseste in sc.imb instructiunea return . Aceasta este asemanatoare cu breaQ ! deosebirea "iind ca return iese de"initiv din metoda si returneaza o valoare .

*I*LURI FOR *iclurile "or repeta o instructiune de un numar speci"icat de ori ! pana in momentul cand se intalneste o conditie . *.iar daca sunt "olosite de obicei pentru simple iteratii ! in care o instructiune este repetata de un numar de ori ! ciclurile "or pot "i "olosite pentru orice tip de operatii repetitive . *iclul "or arata in Java ca mai &os ' "or 6 initializare1 test1 incrementare: = instructiune1 > Inceputul ciclului "or contine trei parti ' initializare este o e$presie care initializeaza pornirea ciclului . #aca "olosim o variabila inde$ a ciclului aceasta e$presie o poate declara si initializa in acelasi timp . -ariabilele declarate in "or sunt locale ciclului in sine . In acesta sectiune se pot initializa mai multe variabile ! separand "iecare e$presie printr o virgula . test este testul care se "ace dupa "iecare parcurgere a ciclului . Testul trebuie sa "ie o e$presie booleana sau o "unctie care returneaza o valoare booleana ! cum ar "i iR(4 . #aca testul este true ciclul isi continua e$ecutia . O data intoarsa valoarea "alse ciclul isi intrerupe e$ecutia . incrementarea este o e$presie sau un apel de "unctie . #e obicei incrementarea este "olosita pentru a modi"ica valoarea inde$ului ciclului ! pentru a aduce starea ciclului mai aproape de "inal . Asemanator sectiunii initializare ! putem speci"ica aici mai multe e$presii ! separate prin virgule . In e$emplul de mai &os putem vedea o instructiune "or care atribuie tuturor pozitiilor unui tablou %tring valoarea #l. ' %tring/0 "ormul%alut3ne2 %tring/(401 int i1 "or 6i341iR"ormula%alut.lengt.1iII: "ormula%alut/i03<#l. <1 ,lementul "inal al instructiunii "or este e$presia iII 1 aceasta "ace ca inde$ul ciclului sa "ie incrementat cu ( la "iecare parcurgere a ciclului . Fara aceasta instructiune ciclul nu s ar inc.eia niciodata . Trebuie mentionat un aspect destul de "recvent intalnit si generator de erori ' nu se pune 1 dupa paranteza : ciclului "or ' "or 6i341iR(41iII1 $3$Pi1 In e$emplul de mai sus ciclul "or se inc.eie dupa primul semn 1 ! "ara a se e$ecuta instructiunea $3$Pi ca parte a ciclului . Aceasta eroare poate "i greu de depistat pentru ca nu apare ca o eroare la compilare C ea este o eroare logica a programatorului . *I*LURI OKIL, si #O *a si ciclurile "or ! ciclurile 2.ile si do permit e$ecutarea unui bloc de cod Java pana in momentul cand se indeplineste o anumita conditie . Folosirea ciclurilor "or ! 2.ile sau do este de multe ori o problema doar de stil . *iclurile 2.ile si do sunt identice cu cele din * ! cu e$ceptia "aptului ca testul trebuie sa "oloseasca o conditie booleana . *I*LURI OKIL, *iclul 2.ile este "olosit pentru a repeta o instructiune atata timp cat o anumita conditie este adevarata 6 true : . 2.ile 6iR(4: = $3$PiII1>

In e$emplul anterior conditia care insoteste cuvantul c.eie 2.ile este o e$presie booleana ! iR(4 . #aca e$presia returneaza true ciclul e$ecuta corpul sau si apoi testeaza din nou conditia . Acest proces se repeta pana cand conditia ia valoarea "alse . class *opieTablouO.ile = public static void main 6%tring argumente/0: = int/0 tablou(3=F!A!G!(!A!(!A>1 "loat/0 tablou)3ne2 "loat/tablou(.lengt.01 %Hstem.out.print6;tablou( ' /;:1 "or 6int i341 iRtablou(.lengt.1 iII : = %Hstem.out.print6tablou(/i0I< ;:1 > %Hstem.out.println6;0<:1 %Hstem.out.print6;tablou)' / ;:1 int inde$3o1 2.ile 6inde$Rtablou(.lengt. SS tablou(/inde$0T3(: = tablou)/inde$036"loat: tablou(/inde$01 %Hstem.out.print6tablou)/inde$II0I< ;:1 > %Hstem.out.println6;0<:1 > > Programul declara doua tablouri C tablou( este un tablou de intregi ! initializat cu cateva numere . tablou) este un tablou de numere in virgula mobila ! care are aceleasi dimensiuni cu tablou( ! insa nu are valori initiale . Programul parcurge apoi iterativ tablou( a"isand valorile din toate pozitiile acestuia 1 in continuare programul veri"ica valorile din tablou( si in cazul in care sunt di"erite de ( le trans"orma in numere reale si le inscrie in tablou) . *I*LURI #O U OKIL, Acest ciclu este "oarte asemanator cu 2.ie C di"erenta ma&ora este locul unde se "ace testarea conditiei in ciclu . Un ciclu 2.ile testeaza conditia inainte de ciclu si ast"el daca avem valoarea "alse corpul ciclului nu va "i deloc e$ecutat . Un ciclu do e$ecuta corpul sau cel putin o data inainte de a testa conditia ! deci daca aceasta are valoarea "alse la prima testare corpul ciclului se va "i e$ecutat de&a o data . do = $3$PiII1 > 2.ile 6iR(4:1 *orpul ciclului este e$ecutat o data inainte de evaluarea conditiei ! iR(4 . I,%IR,A FORTATA #I@ *I*LURI In toate tipurile de cicluri acestea isi termina e$ecutia atunci cand se indeplineste conditia testata . Pot "i cazuri in care apare ceva in e$ecutia ciclului si dorim sa iesim mai repede din el . Pentru aceasta pot "i "olosite cuvintele c.eie breaQ si continue . Am intalnit de&a breaQ in paginile anterioare C breaQ oprea e$ecutia instructiunii s2itc. iar programul continua cu codul urmator instructiunii s2itc. . *uvantul c.eie breaQ ! "olosit intr un ciclu ! "ace acelasi lucru C inceteaza imediat e$ecutia ciclului curent . #aca e$ista cicluri imbricate in cadrul altor

cicluri e$ecutia continua cu urmatoarea iteratie a ciclului din e$terior . Ast"el ! programul continua e$ecutia urmatoarei instructiuni a"lata dupa ciclu . %a revenim la e$emplul ciclului 2.ile care copia elementele unui tablou de intregi intr un tablou de numere in virgula mobila pana cand se intalnea valoarea ( . Putem testa aceasta conditie in cadrul corpului ciclului 2.ile ! dupa care "olosim instructiunea breaQ pentru a parasi ciclul ' int inde$341 2.ile 6inde$Rtablou(.lengt.: = i" 6tablou(/inde$033(: breaQ1 tablou)/inde$036"loat: tablou(/inde$II01 > *uvantul c.eie continue incepe ciclul de la o noua iteratie . Pentru ciclurile do si 2.ile aceasta inseamna ca se incepe din nou cu e$ecutia corpului ciclului 1 pentru ciclurile "or se evalueaza e$presia de incrementare si apoi se e$ecuta blocul de instructiuni . Instructiunea continue este "olositoare atunci cand dorim sa tratati intr un anume "el elementele intr un ciclu . Folosind e$emplul anterior ! de copiere a unui tablou in altul ! putem testa daca valoarea elementului curent este egala cu ( si sa "olosim continue pentru a reincepe ciclul dupa "iecare ( intalnit ! asa incat tabloul rezultat sa nu contina niciodata ( . Trebuie sa "im atenti ca ! deoarece sarim peste unele elemente din primul tablou acum trebuie sa pastram doua valori inde$ pentru cele doua tablouri ' int inde$341 int inde$)341 2.ile 6inde$II R3tablou(.lengt.: = i" 6tablou(/inde$033(: continue1 tablou)/inde$)II036"loat:tablou(/inde$01 > *I*LURI ,TI*K,TAT, Instructiunile breaQ si continue pot avea etic.ete optionale care sa indice locul de unde se va continua e$ecutia programului . Fara etic.eta ! breaQ sare in a"ara celui mai apropiat ciclu sau la urmatoarea instructiune a"lata dupa ciclul . Instructiunea continue sare la urmatoarea iteratie a ciclului care o contine . *u a&utorul etic.etelor putem "olosi breaQ pentru a sari intr un punct a"lat in a"ara unui ciclu imbricat sau continue pentru a sari intr un ciclu a"lat in a"ara ciclului curent . Pentru a "olosi un ciclu cu etic.ete se introduce etic.eta inainte de partea de inceput a ciclului ! urmata de semnul ' . Apoi ! dupa numele instructiunii breaQ sau continue introducem numele etic.etei ! ca mai &os ' a"ara' "or 6int i341 iR(41 iII : = 2.ile 6$RB4: = i" 6iP$IILA44: breaQ a"ara1 88 ciclu interior > 88 ciclu e$terior > In acest e$emplu de cod ! etic.eta a"ara marc.eaza ciclul e$terior . In cadrul ciclurilor "or si 2.ile ! atunci cand este indeplinita o anumita conditie ! instructiunea breaQ cu etic.eta are ca rezultat terminarea ambelor bucle . Fara "olosirea etic.etei a"ara ! instructiunea breaQ ar "i terminat e$ecutia ciclului interior si ar "i continuat e$ecutia cu cel e$terior .

Sign up to vote on this title
UsefulNot useful