Sunteți pe pagina 1din 3

Aplicaii tipuri structurate.

Tablouri unidimensionale (vectori)


Definire, declarare, prelucrri elementare Un tablou este o colecie de date de acelai tip, memorate ntr-o zon de memorie contigu, reunite sub un nume comun. Declararea unei variabile de tip tablou: tip_dat nume[nr_elemente ! "#emple: int a[$% ! &loat b['% ! c(ar c[) ! *bservaie: nr_elemente este o constant ntreag ce speci&ic numrul de elemente ale vectorului! precizarea valorii sale se poate &ace i printr-o constant simbolic, de e#emplu: const int D+,-'%%! int a[D+, ! .ccesul la un element al tabloului se poate &ace pe baza indicelui acelui element /numerotarea ncepe de la %0. De e#emplu, elementele tabloului c declarat mai sus sunt c[% , c[' , c[$ , c[1 , c[2 . Un ast&el de tablou, pentru care la declarare este speci&icat o singur dimensiune, iar poziia unui element este speci&icat utiliz3nd un singur indice, se numete tablou unidimensional sau vector. 4itirea unui vector se realizeaz ca n e#emplul de mai 5os:
int a[100],n,i; cin>>n; for(i=0;i<n; i++) cin>>a[i];

.&iarea unui vector:


for(i=0;i<n; i++) cout<<a[i]<<' ';

Determinarea elementului minim6ma#im dintr-un vector:


int minim; for(i=1;i<n; i++) if (a[i]<minim) minim=a[i];

Verificarea unei proprieti 7e nt3lnim deseori cu probleme n care trebuie s veri&icm dac toate elementele unui vector au o anumit proprietate, sau dac e#ist n vector un element care are o anumit proprietate. 4oncret, iat cele dou situaii prezentate separat: a. 8e consider un vector cu n elemente numere naturale /n9'%%0. 8 se veri&ice dac toate elementele vectorului sunt numere pare. :om &olosi o variabil ntreag, numit ok, care va avea valoarea ' dac toate elementele vectorului sunt numere pare i % n caz contrar. ;resupunem iniial c toate elementele vectorului sunt numere pare /ok=10! parcurgem vectorul i dac gsim un element impar, vom atribui variabilei ok valoarea %.

unsigned int a[100]; ... ok=1; for (i=0;i<n && ok;i++) if (a[i] !"=0) ok=0;

b. 8e consider un vector cu n elemente numere ntregi /n9'%%0. 8 se veri&ice dac e#ist n vector un element negativ. :om &olosi o variabil ntreag numit gasit, creia i vom atribui valoarea iniial % /adic presupunem c toate elementele sunt pozitive0. ;arcurgem vectorul i dac gsim un element negativ, vom atribui variabilei gasit valoarea '.
int a[100]; ... gasit=0; for(i=0;i<n && "gasit; i++) if (a[i]<0) gasit=1;

Cutarea unui element ntr-un vector 8e consider un vector cu n componente ntregi /n9'%%0 i o valoare ntreag #. 8 se veri&ice dac # apare sau nu n vector. *bservm c este o situaie similar celei prezentate anterior la punctul b, adic va trebui s veri&icm dac e#ist n vector un element egal cu valoarea #. .ceast metod de cutare, n care testm succesiv elementele vectorului, se numete cutare secvenial. <recvent apar probleme de cutare a unui element ntr-o mulime ordonat. =n aceast situaie, comparm valoarea # cu elementul din mi5locul vectorului i avem urmtoarele posibiliti: - # este egal cu elementul din mi5loc, deci am terminat cutarea - # este mai mic dec3t elementul din mi5loc, deci vom continua cutarea n prima 5umtate a vectorului - # este mai mare dec3t elementul din mi5loc, deci vom continua cutarea n a doua 5umtate a vectorului .ceast metod de cutare, n care lucrm prin n5umtiri succesive, se numete cutare binar. .lgoritmul de cutare binar este urmtorul:
st=0; dr=n#1; gasit=0; $%i&e ("gasit && st<=dr) 'mi(=(st+dr))!; if (a[mi(]==*) gasit=1; e&se if (a[mi(]>*) dr=mi(#1; e&se st=mi(+1;+ if (gasit) cout<<*<<, se gaseste -e -o.itia /<<mi(; e&se cout<<*<<, nu se af&a in 0ector,;

iblio!rafie ". 4erc(ez, ,. 8erban - ;rogramarea n limba5ul 464>>. :olumul +. "ditura ;olirom ". 4erc(ez ?+n&ormatica, 4ulegere de probleme pentru liceu. "ditura ;olirom

"#$ %&'& "#$"()& '. <ie a un vector cu n/n9)%0 componente de tip int. a. :eri&icai dac toate elementele vectorului a sunt numere prime. b. :eri&icai dac e#ist n vectorul a un palindrom. c. Determinai cea mai lung secven &ormat din elemente egale e#istent n vector. .&iai lungimea secvenei, poziia de nceput i valoarea care se repet. $. <iierul @numere.inA conine pe prima linie un numr natural n9$)), iar pe a doua linie n numere naturale mai mici sau egale cu $)). 8 se construiasc &iierul @numere.outA care s conin: a. pe primele n linii reprezentrile n baza $ ale numerelor din &iierul @numere.inA b. pe r3ndurile urmtoare, grupele de numere cu proprietatea c orice dou numere ale aceleiai grupe au n reprezentarea binar un numr egal de ci&re de '. 7umerele din aceeai grup se vor a&ia pe acelai r3nd cu spaiu ntre ele. "#emplu: numere.in numere.out B '%%' C D )1 ) ') 1 '%%% ''%'%' '%' '''' '' )1 ') C)1 D 1. petrol (ttp:66campion.edu.ro6ar(iva6inde#.p(pEpage-problemFaction-vieGFid-'2' 2. <ie un tablou unidimensional cu n elemente valori naturale. 8 se determine o submulime de elemente din tablou, pentru care suma elementelor este divizibil cu n. "#emplu: pentru n-H i a-/1,B,2,$,'',),'',B0 se va a&ia /B,2,$,'',)0 ). 8e consider un vector a cu n /n9'%%0 componente numere ntregi. 8 se tearg din vectorul a un numr minim de elemente ast&el nc3t la &inal s se obin un ir strict cresctor de elemente. ;rimul element din vectorul iniial nu se va terge. "#emplu: pentru n-H i a-/1,2,D,2,$,',C0 se va a&ia /1,2,D,C0 B. roci (ttp:66campion.edu.ro6ar(iva6inde#.p(pEpage-problemFaction-vieGFid-'2% H. livada' (ttp:66campion.edu.ro6ar(iva6inde#.p(pEpage-problemFaction-vieGFid-'%D1

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