Sunteți pe pagina 1din 9

Lucrarea de laborator N6

Tema: Lucrul cu tablourile unidimensionale.


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.

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