Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Motivatie:
Rezolvarea problemelor cu vectori necesit
anumite cunotine despre folosirea tablourilor
unidimensionale, la fel ca i majoritatea concursurilor i
olimpiadelor colare. Acestea propun in mare parte
probleme informatice ce implic folosirea vectorilor, motiv
pentru care am ales aceast tem.
Voi susine atestatul la inforatic , iar tema aleas
imi va consolida cunotinele despre vectori si m va ajuta si
in viitoarea cariera.
Page
1
II.Introducere
1.Tabloul:
Pentru a pastra in memoria calculatorului diverse informatii se folosesc variabile. Daca
informatiile pe care vrem sa le pastram se pot reprezenta prin numere intregi atunci folosim
variabile de tipul int, daca se pot reprezenta prin numere reale atunci folosim variabile de tipul
float, etc.
Spre exemplu pentru a calcula suma a trei numere reale, vom declara patru variabile
de tip float: trei variabile vor memora cele trei numere, iar a patra variabila va memora suma
lor.
Putem avea situatii cand avem nevoie de un numar mare de variabile, sau de un numar
de variabile care nu este cunoscut dinainte. Spre exemplu daca vrem sa facem calcule asupra a
100 de numere, este incomod sa declaram 100 variabile.
Sau daca trebuie sa facem calculi asupra a N numere, unde N este introdus de la
tastatura, atunci nici macar nu stim cate variabile s declaram.
n asemenea situatii putem folosi tablouri. !n tablou reprezinta un sir de mai multe
variabile de acelasi tip, grupate sub un acelasi nume. "ablourile sunt compuse din elemente.
#iecare element al unui tablou poate fi considerat ca fiind o variabila independenta, de acelasi
tip ca $i tabloul.
"ablourile au o dimensiune, care reprezint numarul de elemente din tablou.
"ablourile se declar specificand tipul de date, numele si dimensiunea. Spre exemplu o
declarare de forma: int a%100&'
nseamn ca declaram un tablou de 100 de elemente de tip int. (lementele tabloului se
acceseaza specificand numele tabloului si indicele dorit.
Numerotarea indicilor incepe de la 0. Primul element al tabloului de mai sus va fi a%0&,
al doilea va fi a%1&, iar ultimul va fi a%))&. n general prelucrearea tablourilor se face prin
instructiuni repetitive: for, *+ile sau do...*+ile.
2.TABLOURI UNIDIMENSIONALE
!neori este necesara prelucrarea unui set de valori de acelasi tip,asezate intr,o anumita
ordine.- astfel de structura se numeste sir,iar valorile respective se numesc elementele sirului.
.imba/ul 011 ofera posibilitatea de a memora toate elementele sirului intr,o singura
variabila indexata,in care elementele sunt dispuse intr,o anumita ordine,ocupand locatii de
memorie succesive,binedeterminate.- astfel de variabila se numeste tablou unidimensional
sau vector.
Page
2
!n tablou2arra34 este o structura formata dintr,un numr fixat de componente de
acela$i tip, numit tip de baza. Numrul de componente este determinat de numrul de valori
ale indicilor, care sunt obligatoriu tipuri ordinale. Pozi5ia unui element se mai nume$te si
indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului.
#ie 6n
i
781,9,..., n
i
: multimea primelor n
i
numere naturale. #ie ;76n
1
< 6n
9
< =..< 6n
>
produsul cartezian a k astfel de multimi.
Se numeste tablou o functie f:; ", unde " este o multime oarecare. Numarul k este
dimensiunea tabloului. Daca k71 tabloul se mai numeste si vector.?ectorul are n
1
componente. Daca k79 tabloul se mai numeste si matrice. ;atricea are n
1
x n
9
elemente.
(xemple : 1. ?ector cu @ componente numere naturale
?7 21,A,B,9,C=.4
6ici k71' n
1
7@, TN, elementele vectorului sunt !
1
71, !
9
7A, =.,!
@
7C
9. ?ector cu n componente numere reale
D72z
1
,z
9
,z
A
,==,z
n
4, z
i
" E, i F 81,9,==,n:
6ici k71,n
1
7n,T7R
Atent#e$ #recvent se confunda numarul componentelor cu dimensiunea tabloului. De
exemplu, despre un vector cu n componente se poate spune ca este de dimensiune n 2cand, de
fapt, toti vectorii au dimensiunea 14.
Gn esen5 un tablou este o list de variabile de acela$i tip. !n tablou de caractere poarta
numele de sir. 6ccesul la un element al tabloului se face cu a/utorul unui indice sau mai a
mul5i indici. Sirurile, tablouri unidimensionale de caractere cu un caracter special, caracterul
null 2HI0J4."ablourile ocup Kn memorie loca5ii contigue. "ablourile pot avea una sau mai
multe dimensiuni.
"ablourile unidimensionale sunt tablouri cu un singur indice 2vectori4. Dac tabloul
con5ine n elemente, indicii elementelor au valori Kntregi din intervalul %&' n(1). #orma
general de declarare a unui tablou unidimensional este:
tip nume_tablou [dimensiune];
unde: , tip , declar tipul de baz al tabloului, care este tipul fiecrui element al tabloului'
Page
3
, dimensiune L specific numrul de elemente ale tabloului'
, numeMtablou , este numele dat tabloului.
Numim tablou o colec5ie 2grup, mul5ime ordonat4 de date, de acela$i tip, situate Kntr,o
zon de memorie continu 2elementele tabloului se afl la adrese succesive4. Gn func5ie de
numrul indicilor utiliza5i pentru a referi elementele tabloului, putem KntNlni tablouri
unidimensionale 2vectorii4 sau multidimensionale 2matricile sunt tablouri bidimensionale4.
0a $i variabilele simple, variabilele tablou trebuie declarate Knainte de utilizare..a
KntNlnirea declara5iei unei variabile tablou, compilatorul aloc o zon de memorie continu
2dat de produsul dintre dimensiunea maxim $i numrul de octe5i corespunztor tipului
tabloului4 pentru pstrarea valorilor elementelor sale. Numele tabloului poate fi utilizat Kn
diferite expresii $i valoarea lui este c+iar adresa de Knceput a zonei de memorie care i,a fost
alocat. !n element al unui tablou poate fi utilizat ca orice alt variabil 2Kn exemplul
urmtor, atribuirea de valori elementelor tabloului vector4. Se pot efectua opera5ii asupra
fiecrui element al tabloului, nu asupra Kntregului tablou. .imba/ul 0 nu controleaz limitele
unui tablou. 6stfel se poate dep$i ambele OmarginiP ale unui tablou, se poate scrie valoarea
unui element de tablou Kn locul altor variabile sau peste instruc5iunile ma$ina ale programului.
De aceast problem este rspunztor cel care scrie programul $i nu compilatorul 0.
De exemplu:
#nt x%10&,i'
*or 2i 7 0' i Q 710' i 114
x %i& 7 i'
determin + s dep$easc limitele.
!n element de tablou poate s apar oriunde pot apare variabile simple sau constante,
Kn general Kn cadrul expresiilor. Gn 0 nu este posibil s copiem direct elementele unui tablou Kn
alt tablou, printr,o instruc5iune de atribuire de forma:
#nt x%@&, 3%@&'
Page
4
.. . . . . . . . . .
3 1 x' RS nu este posibil SR
37x' RS nu este admisSR
Pentru a realiza acest lucru este necesar s copiem fiecare element Kn mod explicit,
adica:
#nt x %@&, 3%@&, i' R
, , , , , , , , , Rsau
*or 2i 7 0' i Q @' 11i4 R *or 2i 71' i QB' i114
3%i& 7 x%i&' R 3%i,1& 7 x%i,1&'
- variabila de tip tablou retine o colectie de elemente, toate avand acelasi tip
2numit tip de baza4 si fiind asezate intr,o anumita ordine.
,.O-erat## .-ec#*#ce
1.Acce.ul la un ele/ent
6ccesul la un element se face prin intermediul indicilor, care arata numarul de ordine
in cadrul colectiei. Spre exemplu, a%>& este element din vectorul a care se afla pe pozitia k.
Prima pozitie este 0, iar ultima este dimensiunea,1.
2.Atr#bu#r#
Se pot face atribuiri intre elementele aceluiasi tablou. Se pot face atribuiri intre
elementele a doua tablouri cu acelasi tip de baza. Se pot face atribuiri intre elementele unui
tablou sau variabile si avand tipul identic cu tipul de baza al tabloului. Nu se pot face atribuiri
intre 9 tablouri, global.
,.0#t#rea ele/entelor unu# tablou
Se citesc n elemente 2maxim 1004 de tip intreg.
Page
5
int a[100], n;
cout<<n=;cin>>n;
for(int i=0;i<n;i++){
cout<<a[<<i<<]=;
cin>>a[i];
}
1.2enerarea ele/entelor aleator
Se foloseste generatorul de numere aleatoare care e descris in stdlib.+. Pornirea
generatorului se face cu randomize24' (xtragerea numerelor se face cu functia random2max4'
aceasta ofera un numar intreg cuprins intre & si /a+#/(1.
3.A*#.area tabloulu#
1.DE0LARAREA 4E0TORILOR IN 055
!n vector trebuie declarat,la fel ca orice variabila,in sectiunea de declaratii a
programului.n declaratia unui vector trebuie sa apara:identificatorul vectorului si
tipul elementelor.
Modul de declarare:
QtipT QnumeMtablouT%n1&%%n9&,=%n&&'
Page
6
int a[100], n;
cout<<n=;cin>>n;
for(int i=0;i<n;i++){
cout<<a[<<i<<]=;
cin>>a[i];
}
for (int i=0;i<n;i++)
cout<<a[i]<< ;
unde:
,tip reprezint tipul elementelor tabloului'
, n1, n9,...,n sunt numere Kntregi sau expresii constante Kntregi 2a cror valoare
este evaluat la compilare4, reprezentNnd limitele superioare 2valorile maxime
posibile4 ale indicilor tabloului.
Gn limba/ul 0, cazul parametrilor tablou constituie o excep5ie de la regula transferului
parametrilor prin valoare: o variabil tablou are ca valoare adresa de Knceput a tabloului 2este
un pointer constant4.
Gn cazul unei func5ii care prelucreaz elementele unui tablou unidimensional 2vector4, Kn
lista declara5iilor parametrilor formali vor apare tipul $i numele vectorului 2pentru care se
poate omite specificarea numrului maxim de elemente ale acestuia4 $i numrul de elemente
cu care se lucreaz:
QtipMvalMretTQnumeMfunctieT2QtipMtabTQnumeMtabT%&,int QnrMelemT4'
QtipMvalMretTQnumeMfunctieT2QtipMtabTSQnumeMtabT,int QnrMelemT4'
6pelul func5ei creia i se transmite ca parametru un vector este:
QnumeMfunctieT2QnumeMtabT, QnrMelemT4'
E+e/-le:
.!"emplul nr.
#nt vect%90&'RR declararea tabloului vect, de maximum 90 de elemente, de tipul int.
RR Se rezerv 90Ssizeof2int4790 S 9 7 C0 octe5i
#.!"emplul nr. #
double p,U,tab%10&'
RR declararea variabilelor simple p, U $i a vectorului tab, de maximum 10 elemente, tip double
$.!"emplul nr. $
Page
7
Vdefine ;6<10
c6ar tabc%;6<&' RSdeclararea tabloului tabc, de maximum ;6< 2104 elemente de tip c+arSR
%.!"emplul nr. %
double matrice%9&%A&' RR declararea tabloului matrice 2bidimensional4,
RR maximum 9 linii $i maximum A coloane, tip double
&.!"emplul nr. & ' (eclararea tabloului vector
(xemplul @.1 : int !%100&
!%&) !%1) ==============.. !%78) !%77)
6m declarat un vector cu 100 de componente de tip intreg. 6dresarea unei componente
se face prin indice, care se trece intre paranteze drepte. 6tentieW 0omponentele au indicii intre
0 si )). 6ceasta regula este valabila in general. De exemplu daca dorim sa adresam
componenta a 9,a scriem !%1&.
(xemplul @.9 : *loat a%3&)' b%3&) 'am declarat 9 vectori, a si b care au componente de tip
*loat.
b%&) b%1) ============== b%18) b%17)
.imba/ul 09055 nu ne permite sa declaram o variabila tablou cu numar variabil de
componente. De multe ori nu stim cate componente vor fi necesare pentru o anumita rulara a
programului. -rice problema in care se lucreaza cu variabile de tip tablou si in care se cere
prelucrarea unui numar 2care nu se cunoaste de la inceput4 de componente , constituie un
exemplu in acest sens.
deea este sa rezervam un numar maxim de componente L atat cat este necesar pentru
rulare atunci cand n este maxim. .a fiecare rulare a programului se cere numarul de
componente. De cele mai multe ori o parte dintre ele raman neutilizate.
Page