Scopul lucrrii: obinerea deprinderilor practice la utilizarea tablourilor unidimensionale i operaiile de prelucrare a lor. Suport teoretic: Definiie: Masivele sunt structuri de date omogene cu un numr finit i cunoscut de elemente, ce ocup un spaiu contiguu de memorie. Un masiv este caracterizat de urmtoarele elemente: numele; tipul de data asociat; numrul de dimensiuni; numrul de elemente pentru fiecare dimensiune. Definiie: Vectorii sunt masive unidimensionale. n !"" vectorii se declara folosind sinta#a: tip nume[n] unde: tip $ tipul de data folosit; poate fi unul din tipurile de baza %int, float, char, &' sau un tip definit de utilizator %articole, obiecte' nume $ numele prin care va fi referit vectorul n $ numrul de elemente eale vectorului Exemple de declaratii: // vector de 100 valori intregi int vanzari[100]; // vector de 15 valori reale float temperaturi[15]; Memorarea vectorilor se face (ntr)un spaiu continuu de memorie. *umele vectorului este de fapt un pointer ctre adresa primului element. +entru o declaraie de forma int v[5]; reprezentarea (n memoria intern este: ,imensiunea total a vectorului este calculat ca produs (ntre numrul de elemente i dimensiunea unui element. niializarea vectorului se poate face la declarare printr)o construcie de forma: tip nume[]={lista_valori}. -e observ c (n acest caz nu este necesar precizarea numrului de elemente. .cesta va fi dedus automat de compilator din dimensiunea listei cu care se face initializarea. n cazul in care numarul de elemente precizat este mai mare decat numrul de elemente din lista se va realiza o initializare partiala a vectorului. Exemple de initializari la declarare: // iniializare fr precizarea explicit a numrului maxim de elemente int v1[] = {1, , !, ", 5#; // iniializare complet cu precizarea // numrului maxim de elemente int v[!] = {1$, 1%, !#; // iniializare pariala int v![5] = {$, &, 5#; .ccesul la elementele vectorului se face direct; compilatorul calculeaz adresa elementului pe baza inde#ului i a dimensiunii unui element. *umerotarea elementelor se face incep/nd cu zero. +entru un vector v cu n elemente referirea elementelor se face folosind v[0], v[1], v[2], , v[n-1]. Operaii de baz: !itirea de la tastatur ; .fiarea pe monitor; !utarea elementului dup valoare ; nserarea elementului; 0tergerea elementului; -ortarea vectororului. Exemple de programe: Exemplul 6.1. -e d un tablou de 12 elemente. - se determine suma elementelor de poziiile pare. 3include4stdio.56 3include4conio.56 void main%' 7 int a8129, i, s; s:2; printf%;ntroducem elementele vectorului:<n='; for%i:2; i412; i""'7 printf%;a8>d9:=, i'; ??ne afieaz poziiile vectorului a, a829, a819, etc. scanf%;>d=, @a8i9'; A for%i:2; i412; i""' if%i>B::2' s:s"a8i9; ?? se verific dac poziia este par, atunci summ elementele printf%;<n-uma elementelor de pe poziiile pare este:>d=, s'; A Exemplul 6.2. -e d un tablou de n elemente, toate elementele sunt diferite. - se afieze pe primele locuri elementele egale cu zero, apoi restul elementelor pstr/nd ordinea lor%C#: 1 B 2 D 2 $ 2 2 1 B D'. 3include4stdio.56 3include4conio.56 void main%' 7 int a81229, n, i, E, #81229; clrscr%'; printf%F<ndimensiunea vectorului:F'; scanf%F>dF,@n'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, @a8i9'; A E:2; for%i:2; i4n; i""' if%a8i9::2' 7 E""; #8E)19:a8i9; A ?? se verific dac elemental este zero, atunci crete i (nscriem for%i:2; i4n; i""' if%a8i9G:2' 7 E""; #8E)19:a8i9; A ?? dac printf%Fvectorul final<nF'; for%i:2; i4n; i""' printf%F>d>cF, #8i9,H;H'; getc5%'; A Exemplul 6.!. -e d un tablou de n elemente. - se deplasare la st/nga cu x poziii i pozitiile eliberate se inlocuiesc cu zero %C#: 1 B I D J K; #:B; I D J K 2 2'. 3include4stdio.56 3include4conio.56 void main%' 7 int a81229, n, i, E, #; clrscr%'; printf%F<ndimensiunea vectorului:F'; scanf%F>dF, @n'; printf%F<nnumrul de poziii de deplasare:F'; scanf%F>dF, @#'; printf%F<nntrodu elementele:<nF'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, @a8i9'; A for%i:2; i4#; i""' 7 for%E:2; E4n; E""' a8E9:a8E"19; a8E)19:2; ?? se face micarea la st/nga i (nscrierea lui zero pe poziiile eliberate A printf%Fvectorul final<nF'; for%i:2; i4n; i""' printf%F>IdF, a8i9'; ?? afim vectorul cu I spaii (ntre elemente getc5%'; A Exemplul 6.". -e d un tablou de n elemente. - se gseasc elementul ma#im din acest tablou. 3include4stdio.56 3include4conio.56 void main%' 7 int a81229, n, i, E, ma#; clrscr%'; printf%F<ndimensiunea vectorului:F'; scanf%F>dF, @n'; printf%F<nntrodu elementele:<nF'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, @a8i9'; A ma#:a829; ??notm iniial c elementul ma#im este elementul de pe poziia zero for%i:2; i4n; i""' if %a8i96ma#' ma#:a8i9; ?? gsim elementul ma#im printf%F>IdF, ma#'; getc5%'; A Exemplul 6.#. -unt dai doi vectori de aceeai dimensiune a i b. - se gseasc: poziiile pentru care elementele din vectorul a sunt mai mari ca elementele din vectorul b; poziiile pentru care elementele din vectorul a sunt egale cu elementele din vectorul b 3include4stdio.56 3include4conio.56 3include4alloc.56 void main%' 7 int L,Ma, n, i, E,Mb, l; clrscr%'; printf%F<ndimensiunea vectorului:F'; scanf%F>dF, @n'; ?? se aloc memorie pentru vectorul a dimensiunea vectorului se (nmulete cu dimensiunea tipului int%B baii' a:%intM'malloc%nMsizeof%int''; b:%intM'malloc%nMsizeof%int''; ?? se aloc memorie pentru vectorul b printf%Felementele vectorului a:<nF'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, a"i'; A printf%Felementele vectorului b:<nF'; for%i:2; i4n; i""' 7 printf%F<nb8>d9:F, i'; scanf%F>dF, b"i'; A printf%Fa:F'; for%i:2; i4n; i""' printf%F>IdF, a8i9'; printf%F<nb:F'; for%i:2; i4n; i""' printf%F>IdF, b8i9'; L:2; printf%F<npoziiile pentru care elementele din vectorul a sunt mai mari ca din b<nF'; for%i:2; i4n; i""' ?? dac mcar un element din a este mai mare ca un elment din b, atunci $ pstreaz poziia elementului mai mare if%M%a"i'6M%b"i'' 7 L:i; printf%F>IdF, L'; A l:2; printf%F<npoziiile elementele corespunztoare primului vector egale cu elementele din al doilea vector<nF'; for%i:2; i4n; i""' if%M%a"i' ::M%b"i'' 7 l:i; ?? dac elemental sunt egale, atunci l pstreaz poziia elementelor egale printf%F>IdF, l'; A free%a'; ?? se elibereaz memoria alocat vectorului a free%b'; ?? se elibereaz memoria alocat vectorului b getc5%'; A Exemplul 6.6. -e d un tablou de n elemente. - se gseasc cel mai mic element pozitiv 3include4stdio.56 3include4conio.56 3include4alloc.56 void main%' 7 int L,Ma, n, i, min; clrscr%'; printf%F<ndimen vec:F'; scanf%F>dF, @n'; a:%intM'malloc%nMsizeof%int''; printf%Felementele vectorului a:<nF'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, a"i'; A printf%Fa:F'; for%i:2; i4n; i""' printf%F>IdF, a8i9'; min:a829; L:2; printf%F<nF'; for%i:2; i4n; i""' if%%M%a"i'42'@@M%a"i'4min' 7 min:M%a"i'; L:i;A printf%Fpozitia elementului negativ >d are minimul >dF, L, min'; free%a'; getc5%'; A Exemplul 6.%. -e d un tablou de n elemente. - se sorteze descresctor folosind metoda bulelor %adic se compar primul cu al doilea, B cu I,etc. C#: K B D I 1 J; prima parcugere: B D I 1 J K; a doua parcurgere: B I 1 D J K; a treia parcurgere: B 1 I D J K; a patra parcurgere: 1 B I D J K; 3include4stdio.56 3include4conio.56 3include4alloc.56 ??biblioteca pentru funcia malocc void main%' 7 int L,Ma, n, i, au#, E; clrscr%'; printf%F<ndimen vec:F'; scanf%F>dF, @n'; a:%intM'malloc%nMsizeof%int''; printf%Felementele vectorului a:<nF'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, a"i'; A printf%Fa:F'; for%i:2; i4n; i""' printf%F>IdF, M%a"i''; printf%F<nF'; for%i:2; i4n)1; i""' ??se parcurge de la 2 p/n la n)1 for%E:i"1; E4n; E""' ?? se parcurge de la i"1 p/n la n 7 if%M%a"i' 4M%a"E'' ??comparm elementele 7 au#:M%a"i'; ?? pstrm elemntul %a829' M%a"i':M%a"E'; ?? se inverseaz %a829:a819' M%a"E':au#; ?? %a819: a829' i etc. A A printf%Fvectorul sortate<nF'; for%i:2; i4n; i""' printf%F>IdF, M%a"i''; free%a'; getc5%'; A Exemplul 6.&. Cste dat vectorul a de lungimea n. - se mite ciclic la drapta cu # poziii. 3include4stdio.56 3include4conio.56 void main%' 7 int a81229, n, i, E, #, L; clrscr%'; printf%F<ndimen vec:F'; scanf%F>dF, @n'; printf%F<nnumarul de pozitii de deplasare:F'; scanf%F>dF, @#'; printf%F<nntrodu numarul de elemente:<nF'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, @a8i9'; A for%i:2; i4#; i""' 7 L:a8n)19; for%E:n)1;E6:2;E))' a8E9:a8E)19; a829:L; A printf%Firul final<nF'; for%i:2; i4n; i""' printf%F>IdF, a8i9'; getc5%'; A Exemplul 6.'. Cste dat vectorul a de lungimea n. - se sc5imbe cu locurile elementul ma#imal cu cel minimal. 3include4stdio.56 3include4conio.56 void main%' 7 int a8129, n, i, E, ma#, min, L; clrscr%'; printf%F<ndimen vec:F'; scanf%F>dF, @n'; for%i:2; i4n; i""' 7 printf%Fa8>d9:F, i'; scanf%F>dF, @a8i9'; A printf%F<nsirul initial<n<nF'; for%i:2; i4n; i""' printf%F>d F, a8i9'; ma#:min:a829; for%i:2;i4n;i""' if%a8i94min' 7min:a8i9; L:i;A for%i:2; i4n; i""' if%a8i96ma#'7ma#:a8i9; E:i;A a8L9:a8E9; a8E9:min; printf%F<nirul final<n<nF'; for%i:2;i4n;i""' printf%F>d F,a8i9'; getc5%'; A (robleme propu)e )pre rezol*are: 1. -e d un tablou de 12 elemente. - se determine suma elementelor pare. B. -e d un tablou de 12 elemente. - se determine c/te elementelor pare i c/te impare. I. -e d un tablou de n elemente. - se determine produsul elementelor divizibile la I. D. -e d un tablou de n elemente. - se tipreasc elementele care se repet cel mai des. ,ac sunt mai multe de acela fel, atunci s se indice unul din ele. J. -e d un vector din n elemente. - gseasc poziia ultimului element pozitiv. K. -e d un tablou de 12 elemente nici un element nu este nul. - se determine de c/te ori se sc5imb semnul numerelor scrise (n tablou%trebuie verificate c/te dou, ca s le vedem semnul mai bine le (nmulim'. N. -e d un tablou de 12 elemente (ntregi pozitive formate din B cifre%12 ) OO'. - se determine c/te elemente sunt distincte%elementul se numr numai odat'. P. -e d un tablou de 12 elemente. - se determine de c/te ori se (nt/lnete elementul ma#im (n tablou. O. -e d un vector de n elemente. - construiasc un nou vector ce conine acelea elemente ca tabloul iniial cu condiia c toate elementele negative preced pe cele pozitive. 12. -e d un tablou de n elemente, toate elementele sunt diferite. - se afieze pe primele locuri elementele diferite de zero, apoi elementele egale cu zero pstr/nd ordinea lor%C#: 1 B 2 D 2 $1 B D 2 2'. 11. -e d un tablou de n elemente. - se deplaseze ciclic la st/nga cu x poziii %C#: 1 B I D J ; #:I D J 1 B I'. 1B. -e d tablou a de n elemente. - se alctuiasc algoritmul de numrare a elementelor ma#ime i minime din tablouul a de n. 1I. -e d tablou a de n elemente. - se construiasc un nou vector de lungimea n, pentru care elemental i este media aritmetic a primelor i elemente din vectorul iniial. 1D. -unt dai doi vectori de lungimea n cu elementele (n ordine descresctoate. - se construiasc un alt vector de lungimea n+n elemente, (n ordine cresctoare i conine elementele vectorilor iniiali. 1J. -e d tabloul a de n elemente. .u fost introduse meciurile cu participarea ec5ipei QMRSU. Clementele tabloului sunt egale cu zero %QMRSU a suferit (nfr/ngere', 1 %meciul s)a terminat la egalitate' cu B %(nvingtoare'. - se stabileasc (n c/te meciuri ec5ipa a suferit (nfr/ngere, (n c/te a c/tigat i (n c/te a fost la egalitate. 1K. Tn tabloul t,!1- a fost (nscris temperature zilnic a lunii ianuarie. - se numere (n c/te zile a fost (nregistrat temperature sub zero grade i (n c/te mai sus de zero grade. - se stabileasc numrul de zile z, (n care a fost (nregistrat o temperatur mai mic dec/t temperature medie a lunii i numrul de zile z1 (n care temperature a depit mrimea medie. 1N. -e d un vector din n elemente. - se determine numrul elementelor pentru care elementele precedente sunt mai mari. 1P. -tatu)+alm)Rarb)!ot a (ngropat patru comori (n v/rfurile unui dreptung5i, scriindu)i coordonatele comorilor pe un pergament. Tn timpul unei lupte cu Ut)Urumos pergamentul s)a pierdut. ,in fericire, -tatu)+alm)Rarb)!ot a memorat coordonatele a trei puncte (n care se afl comorile. -criei un program, care va determina coordonatele celei de a patra comori. +unctle (n care au fost (ngropate comorile au coordinate (ntregi .x 1 /0 1 1, 2x 1 23144, 20 1 23144. !oordonatele a trei v/rfuri ale dreptung5iului se introduc de la tastatur (n ordinea .x 1 /0 1 1, . x 2 /0 2 1, . x ! /0 ! 1. !oordonatele celui de a patra v/rf se afieaz la ecran (n ordinea .x " /0 " 1. Exemplu: 1 1 J 1 1 N. 5ezultat: J N. 1O. -e dau 6.6+1172 numere (ntregi strict positive, mai mici sau egale ca 12222. - se aeze aceste numere, dac este posibil, (ntr)o piramid cu urmtoarele proprieti: ) piramida are 6 nivele, pe fiecare nivel 1 sunt 1 numere; ) fiecare numr din piramid, (n afar de cele de pe ultimul nivel, este egal cu suma celor dou numere pe care ;se spriEin=. Exemplu: 1 1 2 ! ! " # & ' 1% 5ezultat: 1% & ' ! # " 1 2 ! 1. B2. -e d tabloul a de n elemente, unde este introdus informaia despre (ndeplinirea planului de producere a strugurilor de ctre 12 uzine de profil ce aparin ministerului respectiv. Valorile .a8i9 %i:2,..,n' au urmtoarea semnificaie: a8i962 numrul de struguri produs supraplan de ctre uzin cu numrul de ordine i; a8i9:2 arat c uzina a produs at/t c/t prevede planul; a8i942 indic c/i struguri nu aEung pentru a (ndeplini planul. - se compun algoritmul de numrare a uzinelor ce au (ndeplinit planul sau au depit. - se stabileasc dac ministerul respectiv a (ndeplinit planul, rspunsul da sau nu. - se calculeze cu c/t n)au realizat planul unele uzine %a8i942'. 8ntrebri de control: 1. !e (nseamn tablou. !um se defineteV B. +oate tabloul%vectorul' include diferite tipuri. ,ac da sau nu e#plicai. ,ai e#emplu. !. int i/ a,144-/ $94: for.i94: i36: i++1 if.a,i-341 $9$;i: printf.<$9=d>/$1: !e se tiprete la ecranV C#plicai. D. !e se tipreteV C#plicai. int i/ a,144-/ $94: for.i94: i36: i++1 if.a,i-=29911 $++: printf.<$9=d>/$1: J. !/t memorie se aloc pentru un vector de lungimea n i de tipul: int, double, c?ar, float. V K. !/nd se folosesc funcile free.1 i malloc.1, i ce fac eleV Tn care fiier se includ eleV N. !e se tipreteV C#plicai. int i/ a,144-/ $91: for.i94: i36: i++1 if.a,i-@941 $9$;a,i-: el)e $94: printf.<$9=d>/$1: P. -unt dai doi vectori. !um se face (nscrierea ambelor vector (n al treilea vector. 0i ce dimensiune va avea al treilea vector.