Sunteți pe pagina 1din 10

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 intro locatie proprie ! numerotata ast"el incat in"ormatia
poate "i usor accesata .
Tablourile pot contine orice tip de in"ormatie pastrata in mod normal intro 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 al 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 sa 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 intro 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 sau
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 dintrun ast"el de tablou nu se va
copia valoarea dintro pozitie in alta ci se va atribui re"erinta . In sc.imb ! tablourile de tipuri de date
primitive copiaza valorile dintro 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 printrun 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 ia "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 intro 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 sar "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" 6oper3397: scadeArg6arg(!arg):1
else i" 6oper339P9: inmultireArg6arg(!arg):1
else i" 6oper33989: imparteArg6arg(!arg):1
Folosirea IFului 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 intro 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 . Intro 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 printro 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 sar 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 intrun 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 intrun 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 intrun anume "el elementele intrun 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 intrun punct a"lat in a"ara unui ciclu
imbricat sau continue pentru a sari intrun 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 .

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