際際滷

際際滷Share a Scribd company logo
Vectori c1
 Introducere
 Definiie
 Declararea tabloului
 Iniializarea tabloului
 Accesul la elemente
 Operaii posibile
Memorarea i prelucrarea mediilor de absolvire pentru
totalitatea elevilor unui liceu
!
Numrul de variabile ce pot fi declarate i utilizate 樽ntr-o aplicaie
este limitat. Exist aplicaii care necesit memorarea i
prelucrarea unor serii de sute i mii de valori. Accesarea unui numr mare de
variabile este anevoios i generator de erori. Pentru a rezolva aceast problem au
fost create structuri de date (colecii de date) specializate ce ocup spaii de
memorie 樽nvecinate i 樽n care aranjarea lor este interdependent.
Memorarea i identificarea numerelor de 樽nmatriculare ale
autovehiculelor dintr-un jude
Evidena biletelor eliberate (v但ndute) ctre clieni cu ocazia
unui spectacol de anvergur (de exemplul pe un stadion)
Tip_de_baz nume_tablou [dimensiune_max]
Tip_de_baz - precizeaz tipul datelor (樽ntregi, caracter, etc.)
Nume tablou  identificator, precizeaz numele dat tabloului
Dimensiune max  numrul maxim de componente (o constant 樽ntreag)!
Structur de date creia i se atribuie un nume. Este format dintr-o
colecie de elemente de acelai tip, dispuse contiguu 樽ntr-un bloc
de memorie. Elementele pot fi accesate individual prin indici sau ca un tot unitar.
Toate elementele au un predecesor (excepie primul) i un succesor (excepie ultimul)
Dimensiune max = memoria fizic alocat. Dimens. logic  dimens.max
vectorul (poate) conine 99 elem.
vectorul (poate) conine 99 elem de tip float
vectorul (poate) conine 3 elemente de tip char
vectorul sir(poate) conine 11 elemente de tip char
au fost declarai doi vectori a, b
vectorul (poate) conine 3 elemente de tip int
tipul integer nu e definit in C++
max este declarat ca variabil
樽n nume exist caracterul spaiu
s-a folosit ca nume cuv但ntul rezervat char
lungimea declarata este mai mare ca max[3]
vectorul conine elementele din acolad
coninutul este indicat 樽n acolad
vectorul conine caracterele a, b ,c
vectorul sir conine 6 elemente de tip char
vectorul conine caracterele a, b
vectorul (poate) conine 3 elemente de tip int
Primul element din vector are numrul de ordine (indicele) zero !
Astfel, elementul cu numr de ordine 0 din vector este 12, elementul al 2-lea
este 23 i elementul 45 este al 4-lea element din vector (are indicele 3).
V[0] V[1] V[2] V[3]
12 23 34 45
Se folosete numele tabloului urmat de indicele (numrul de ordine)
elementului referit, 樽nscris 樽ntre paranteze ptrate. Ex. nume[indice]
Vectori c1
#include<iostream.h>
#include<conio.h>
void main()
{ const max=99;
int vec[max], i, n;
clrscr();
do { cout<<"nNr. elemente = ";
cin>>n;
}
while (n>99);
for ( i=0;i<n;i++) vec[i]=i;
getche();
}
 Vectorul a fost declarat ca av但nd
lungimea max.
 max a fost declarat ca o constant
av但nd valoarea 99
Numrul de elemente n al
vectorului se citete repetat 樽n
instruciunea do  while at但ta timp c但t
valoarea citit este mai mare ca 99
 n repetiia for, i se atribuie fiecrui
element al vectorului valoarea i, astfel
樽nc但t vectorul va avea forma :
1, 2 ,3 ,4 , ...n
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[999], i, n;
clrscr();
do { cout<<"nNr. elemente = ";
cin>>n; }
while (n>99);
for ( i=0;i<n;i++)
{ cout<<"nElementul = ";
cin>>vec[i]; }
cout<<"nVectorul este : ";
for (i=0; i<n; i++) cout<<vec[i]<<" ";
getche();
}
 Numrul n de elemente al
vectorului se citete de la tastatur 樽n
mod repetat at但ta timp c但t numrul
citit este mai mare ca 99
 n repetiia for, se citete de la
tastatur valoarea fiecrui element al
vectorului (citirea se face simultan cu
memorarea 樽n vector)
 Afiarea se face 樽n interiorul
structurii repetitive for, 樽ntre
elementele vectorului fiind un spaiu
liber (cout<<vec*i+<<" ;)
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[999], i, n, este=0, k, poz;
cout<<"nNr. elemente = ";
cin>>n;
for ( i=0;i<n;i++)
{ cout<<"nElementul = ";
cin>>vec[i]; }
cout<<"Cautam elementul : ";
cin>>k;
for (i=0;i<n;i++)
if (vec[i]==k) { poz=i; este=1; }
if (este == 1)
cout<<Gasit pe pozitia "<<poz;
else cout<<k<< nu e in vector";
getche();
}
 Numrul n de elemente al
vectorului se citete de la tastatur
 n repetiia for, se citete de la
tastatur valoarea fiecrui element al
vectorului (citirea se face simultan cu
memorarea 樽n vector)
 Pentru cutarea elementului k se
parcurge vectorul i fiecare element al
su se compar dac este egal cu k.
 Dac se gsete o egalitate, variabila
este se modific din 0 樽n 1 i
variabila poz memoreaz valoarea
lui i (unde a fost gsit elementul).
 Afiarea se face funcie de este .
#include<iostream.h>
#include<conio.h>
void main()
{ int a[9]={3,5,6,7,8,9,19,99,101}, n=0, x,
este=0, st=0, dr, mi;
while (a[n+1]!=NULL)
{ cout<<a[n]<<" "; n++; }
dr=n-1;
cout<<"nElementul cautat = "; cin>>x;
while (st<=dr && !este)
{ mi=(st+dr)/2;
if(a[mi]==x) este=1;
else if (x<a[mi]) dr=mi-1;
else st=mi+1; }
if (st>dr) cout<<"Element negasit !";
else cout<<Gasit pe pozitia "<<mi+1;
getch();
}
 Algoritmul presupune c vectorul
este sortat anterior
 Cutarea se execut prin 樽njumtiri
repetate a intervalului de cutare
rezult但nd doi subvectori x*st+x*mij-1]
i x*mij+1+x*dr+ (st = indicele primului
element din st但nga, dr = indice din
dreapta, mij = indice element central)
 Algoritmul identific subvectorul 樽n
care poate fi elementul cutat
diviz但ndu-l succesiv dac este cazul,
p但n la gsirea elementului cutat sau
p但n c但nd subvectorul nu mai poate fi
divizat (elementul nu a fost gsit)
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[999], i, n, sum=0;
clrscr();
do { cout<<"nNr. elemente = ";
cin>>n; }
while (n>99);
for ( i=0;i<n;i++)
{ cout<<"nElementul = ";
cin>>vec[i];
sum+=vec[i]; }
cout<<"nSuma elementelor = "
<<sum;
getche();
}
 Variabila sum este iniializat cu 0
 n repetiia do-while, se citete
numrul de elemente n p但n c但nd
acesea este mai mic ca 99
 Simultan cu citirea elementelor
vectorului (樽n repetiia for) suma se
incrementeaz cu valoarea
elementului de vector citit adic altfel
scris : suma = suma + vec[i]
 La terminarea repetiiei, suma
elementelor citite este afiat
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[999], i, n, par=0;
clrscr();
do { cout<<"nNr. elemente = ";
cin>>n; }
while (n>99);
for ( i=0;i<n;i++)
{ cout<<"nElementul = ";
cin>>vec[i]; }
for (i=0;i<n;i++)
if (vec[i]%2 == 0) par++;
cout<<"nElem. pare = "<<par;
cout<<"Elem. impare = "<<n-par;
getche();
}
 Variabila par este iniializat cu 0.
Ea va numra c但te elemente sunt pare
 n repetiia do-while, se citete
numrul de elemente n p但n c但nd
acesta este mai mic ca 99
 Dup memorarea elementelor,
parcurgem vectorul (cu repetiiafor)
i comparm pentru fiecare element
dac restul 樽mpririi lui la 2 este 0.
(vec[i] % 2 == 0).
 Dac da, (restul = 0) atunci 樽nseamn
c elementul este par i contorul par
crete cu o unitate.
 Numr impare = total  par
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[999], i, n, max, min;
cout<<"nNr. elemente = ";
cin>>n; }
for ( i=0;i<n;i++)
{ cout<<"nElementul = "
cin>>vec[i]; }
max = min = vec[0];
for (i=0;i<n;i++)
{ if (vec[i]>max) max = vec[i];
if (vec[i]<min) min = vec[i]; }
cout<<"nElement max = "<<max;
cout<<"nElement min = "<<min;
getche();
}
 Variabilele min i max sunt
iniializate cu valoarea primului
element de vector vec[0].
 Dup memorarea elementelor,
parcurgem vectorul (cu repetiiafor)
 Comparm pentru fiecare element
dac este mai mic ca min. Dac da,
atunci acesta devine min min=vec[i])
 Comparm i dac este mai mare ca
max. Dac dac da, acestuia i se
atribuie valoarea lui max
(max=vec[i]).
 La terminarea parcurgerii, valorile
min i max sunt afiate
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[]={1,2,3,4,5,6,7,8,9}, i=0;
clrscr();
while (vec[i]!=NULL)
{ cout<<vec[i]<<" ";
i++; }
cout<<"Element = ";
cin>>vec[i]; i=1;
do { cout<<vec[i-1]<<" ";
i++; }
while (vec[i] != NULL);
getche();
}
 Vectorul este afiat folosind
instruciunea while 樽n mod repetat,
at但ta timp c但t elementul de afiat este
diferit de NULL
 Variabila i reine lungimea
vectorului, cresc但nd cu o unitate dup
fiecare afiare (i++)
 Dup ultima afiare, lungimea
vectorului crete cu o unitate, astfel se
creaz o locaie suplimentar pentru
adugarea unui element nou.
 Elementul ce se adaug la capt se
introduce aadar pe poziia i (pe
ultima poziie)
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[11]={1,2,3,4,5}, i=0, capat, k;
clrscr();
while (vec[i]!=NULL)
{ cout<<vec[i]<<" "; i++; }
capat=i+1;
cout<<"Pozitia unde memoram = ";
cin>>k;
for (i=capat; i>=k; i--) vec[i]=vec[i-1];
cout<<"Elementul introdus = ";
cin>>vec[k];
for (i=0;i<capat;i++) cout<<endl<< ;
getche();
}
 Vectorul este afiat folosind
instruciunea while 樽n mod repetat,
at但ta timp c但t elementul de afiat este
diferit de NULL
 Variabila capat reine lungimea
vectorului iniial i mrit cu o unitate,
pentru a permite inseria
 Noul element se adaug pe poziia k
 Toate elementele, 樽ncep但nd de la
capt, descresctor p但n la k+1, sunt
deplasate spre dreapta cu o poziie
 Fiind creat o locaie liber (indice k)
aici se introduce noul element (vec[k])
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[11]={1,2,3,4,5,6,7,8,9}, i=0,
capat,k;
while (vec[i]!=NULL)
{ cout<<vec[i]<<" ";
i++; }
capat=i;
cout<<"Pozitia din care stergem = ";
cin>>k;
for (i=k;i<capat;i++) vec[i]=vec[i+1];
capat--;
for (i=0; i<capat; i++)
cout<< <<vec*i+ ;
getche();
}
 Vectorul este afiat folosind
instruciunea while 樽n mod repetat,
at但ta timp c但t elementul de afiat este
diferit de NULL
 Variabila capat reine lungimea
vectorului iniial, fiind i
 Elementul se terge de pe poziia k
 Fiecare element, 樽ncep但nd de la
poziia k, p但n la capat ia valoarea
urmtorului element : vec[i]=vec[i+1]
 Prin suprascriere, elementele de la
capt p但n pe poziia k sunt deplasate
spre st但nga.
 Lungimea vectorului scade cu 1
(capat--)
 Sortare prin metoda bulelor
 Sortare prin inserie
 Sortare prin inserie direct
 Sortare prin numrare
 Sortare prin inserie rapid
 Sortare prin selecie direct
A sorta un vector 樽nseamn a-l
reordona dup anumite criterii.
Criterii uzuale folosite 樽n sortare :
o numeric cresctor
o numeric descresctor
o alfabetic cresctor (A ... Z)
o alfabetic descresctor (Z ... A)
Exemplu
tablou nesortat = {2, 7, 9, 1, 0, 5, 4}
tablou sortat = {0, 1, 2, 4, 5, 7, 9}
Exist mai multe metode de sortare
bazate pe algoritmi diferii. n
continuare sunt prezentate c但teva
metode utilizate 樽n acest scop.
#include<iostream.h>
#include<conio.h>
void main()
{ int vec[99]={7,5,29,9}, i=0, n, ok, inv;
while (vec[i] != NULL)
{ cout<<vec[i]<<" "; i++; }
n = i;
do { ok=1;
for (i=0;i<n-1;i++)
if (vec[i]>vec[i+1])
{ inv=vec[i];
vec[i]=vec[i+1];
vec[i+1]=inv;
ok=0; } }
while (ok==0);
cout<<endl<<Vectorul sortat = ;
for (i=0;i<n;i++) cout<<" "<<vec[i];
}
 Elementele de vector se afiaz p但n
c但nd elementul de afiat este NULL
 Variabilele: n= lungimea vectorului
inv= variabil pentru inversarea
elementelor, ok=comutator (iniial 1)
 Se parcurge vectorul i se compar
elementele 樽nvecinate. Dac elementul
din st但nga e mai mic dec但t vecinul din
dreapta (vec[i]>vec[i+1]), ele se
interschimb i comutatorul ok
devine 0.
 Interschimbarea (a dou c但te dou
elemente) continu at但ta timp c但t
comutatorul ok este egal cu 0
#include<iostream.h>
#include<conio.h>
void main()
{ int x[9]={3,1,9,7,4}, y[9],i,j,l ,k;
l=5;
y[0]=x[0];
clrscr();
for (i=1;i<l;i++)
{ j=0;
while (j<=i-1 && x[i]>y[j]) j++;
for (k=i; k>=j+1;k--) y[k]=y[k-1];
y[j]=x[i];
}
for (i=0;i<l;i++) cout<<" "<<y[i];
getch();
}
 Metoda folosete doi vectori x i y
 Variabilele: l= lungime, i, j, k indici
 P1 - Se copiaz primul element din
vectorul x 樽n vectorul y.
 P2 - Pentru toat lungimea l a
vectorului x, se compar elementul x[i]
cu y[j] i dac x[i]>y[j] j crete cu 1
pentru a gsi urmtoarea poziie de
inserare
 P3 - Se iniializeaz k cu i pe pentru a
efectua creterea indicelui de inserie
樽n vectorul cu elemente sortate y .
 P4  se insereaz 樽n y[j] elementul
x[i]
 n final, vectorul y este cresctor
#include<iostream.h>
#include<conio.h>
void main()
{ int x[9]={3,1,9,7,4}, i, j, l , inv;
l=5;
clrscr();
for (i=1;i<l;i++)
{ inv=x[i]; j=i-1;
while (j>0 && inv<x[j])
{ x[j+1]=x[j]; j--; }
if (inv>=x[j]) x[j+1]=inv;
else {x[1]=x[0]; x[0]=inv;
}
}
for (i=0;i<l;i++) cout<<" "<<x[i];
getch();
}
 Metoda 樽mparte vectorul 樽n doi
subvectori : surs x*i+x*l-1] i
destinaie x*0+x*i-1]
 Variabila inv memoreaz elementul
x[i] pe timpul deplasrii spre dreapta
樽n interiorul vectorului destinaie
 Variabila i 樽mparte vectorul 樽n
subvectori i la fiecare 樽mprire crete
cu 1 p但n c但nd are valoarea n-1
(subvectorul surs nu mai conine
elemente)
 Variabila j se iniializeaz cu indicele
ultimului element din subvectorul
destinaie
#include<iostream.h>
#include<conio.h>
void main()
{ int x[9]={3,1,9,7,4}, y[9],z[9]={NULL},i ,j ,l ;
l=5;
clrscr();
for (i=0; i<l-1; i++)
for (j=i+1; j<l; j++)
if (x[i]>x[j]) z[i]++;
else z[j]++;
for (i=0; i<l; i++) y[z[i]]=x[i];
for (i=0; i<l; i++) cout<<" "<<y[i];
getch();
}
 Metoda folosete trei vectori sursa x,
destinaie y i pentru contoare z
 Elementele din sursa x sunt copiate
樽n y prin inserie
 Pentru a determina locul de inserie
樽n y, este parcurs sursa x i se
memoreaz 樽n z pentru fiecare x[i] c但te
elemente sunt mai mici dec但t acesta
 Fiecare element din z este deci un
contor pentru elementul
corespunztor din x acesta fiind de
fapt poziia de inserare a lui x[i] 樽n
vectorul destinaie (y (y[z[i]])
 variabile : i, j = contoare, l=lungimea
#include<iostream.h>
#include<conio.h>
void main()
{ int x[9]={3,1,9,7,4},i, j, l=5,inv, st, dr, mi;
for (i=1;i<l;i++)
{ inv=x[i]; st=0; dr=i-1;
while (st<dr)
{ mi=(st+dr)/2;
if (inv<x[mi]) dr=mi-1;
else st=mi+1;
}
j=i-1;
while (j>=st) { x[j+1]=x[j]; j--; }
x[st]=inv;
}
for (i=0;i<l;i++) cout<<" "<<x[i];
getch();
}
 Metoda folosete 樽mprirea
vectorului 樽n doi subvectori surs i
destinaie ca la inseria direct
 Cutarea poziiei unde se insereaz
elementul x[i] din subvectorul surs se
face prin algoritmul de cutare binar.
 Astfel subvectorul destinaie se
樽mparte 樽n doi subvectori i se testeaz
relaia dintre elementul de mijloc i
elementul a[i]
 Se stabilete dac inseria are loc 樽n
dreapta sau st但nga fa de mijloc
 Operaia de 樽mprire a
subvectorului continu p但n se
gsete poziia de inserat a lui a[i]
#include<iostream.h>
#include<conio.h>
void main()
{ int x[9]={3,1,9,7,4}, i, j, l, inv;
l=5;
clrscr();
for (i=0;i<l-1;i++)
for (j=i+1;j<l;j++)
if (x[j]<x[i])
{ inv=x[i];
x[i]=x[j];
x[j]=inv;
}
for (i=0;i<l;i++) cout<<" "<<x[i];
getch();
}
 Variabilele: l= lungimea vectorului
inv= variabil pentru inversarea
elementelor, i i j= contoare
 Se parcurge vectorul i memoreaz
pe prima poziie elementul cu valoarea
cea mai mic
 Se parcurge vectorul i se
memoreaz pe poziia urmtoare
disponibil, urmtorul element cu
valoarea cea mai mic din cele n-i
elemente rmase nesortate
 valorile se inverseaz dac x[j]<x[i]
 Dac i >= l-1 (i crete la fiecare
comparaie) sortarea se 樽ncheie
#include<iostream.h>
#include<conio.h>
void main()
{ int a[9]={3,5,9,19,99}, b[9]={1,7,33},
c[99], i, j, n=5, m=3, k;
i=0; j=0; k=0;
while ((i<n) && (j<m))
{ if (a[i]<b[j]) { c[k]=a[i]; i++; k++;}
else { c[k]=b[j]; j++; k++; }
}
if (i<n)
while (i<n) { c[k]=a[i]; k++; i++; }
else
while (j<m) { c[k]=b[i]; k++; j++; }
for (i=0;i<k;i++) cout<<" "<<c[i];
getch();
}
 Intreclasarea presupune reuniunea a
doi vectori care au fost sortai anterior.
 Algoritmul parcurge cei doi vectori
surs a i b i compar elementele.
 Elementul determinat a avea
valoarea cea mai mic din surs este
memorat 樽n vectorul destinaie c
 Operaia de comparare i memorare
樽n destinaie continu p但n c但nd se
ajunge la captul unuia dintre cele
dou surse
 Elementele rmase 樽n cellalt vector
sunt memorate la captul vectorului
destinaie c

More Related Content

Vectori c1

  • 2. Introducere Definiie Declararea tabloului Iniializarea tabloului Accesul la elemente Operaii posibile
  • 3. Memorarea i prelucrarea mediilor de absolvire pentru totalitatea elevilor unui liceu ! Numrul de variabile ce pot fi declarate i utilizate 樽ntr-o aplicaie este limitat. Exist aplicaii care necesit memorarea i prelucrarea unor serii de sute i mii de valori. Accesarea unui numr mare de variabile este anevoios i generator de erori. Pentru a rezolva aceast problem au fost create structuri de date (colecii de date) specializate ce ocup spaii de memorie 樽nvecinate i 樽n care aranjarea lor este interdependent. Memorarea i identificarea numerelor de 樽nmatriculare ale autovehiculelor dintr-un jude Evidena biletelor eliberate (v但ndute) ctre clieni cu ocazia unui spectacol de anvergur (de exemplul pe un stadion)
  • 4. Tip_de_baz nume_tablou [dimensiune_max] Tip_de_baz - precizeaz tipul datelor (樽ntregi, caracter, etc.) Nume tablou identificator, precizeaz numele dat tabloului Dimensiune max numrul maxim de componente (o constant 樽ntreag)! Structur de date creia i se atribuie un nume. Este format dintr-o colecie de elemente de acelai tip, dispuse contiguu 樽ntr-un bloc de memorie. Elementele pot fi accesate individual prin indici sau ca un tot unitar. Toate elementele au un predecesor (excepie primul) i un succesor (excepie ultimul) Dimensiune max = memoria fizic alocat. Dimens. logic dimens.max
  • 5. vectorul (poate) conine 99 elem. vectorul (poate) conine 99 elem de tip float vectorul (poate) conine 3 elemente de tip char vectorul sir(poate) conine 11 elemente de tip char au fost declarai doi vectori a, b vectorul (poate) conine 3 elemente de tip int
  • 6. tipul integer nu e definit in C++ max este declarat ca variabil 樽n nume exist caracterul spaiu s-a folosit ca nume cuv但ntul rezervat char lungimea declarata este mai mare ca max[3]
  • 7. vectorul conine elementele din acolad coninutul este indicat 樽n acolad vectorul conine caracterele a, b ,c vectorul sir conine 6 elemente de tip char vectorul conine caracterele a, b vectorul (poate) conine 3 elemente de tip int
  • 8. Primul element din vector are numrul de ordine (indicele) zero ! Astfel, elementul cu numr de ordine 0 din vector este 12, elementul al 2-lea este 23 i elementul 45 este al 4-lea element din vector (are indicele 3). V[0] V[1] V[2] V[3] 12 23 34 45 Se folosete numele tabloului urmat de indicele (numrul de ordine) elementului referit, 樽nscris 樽ntre paranteze ptrate. Ex. nume[indice]
  • 10. #include<iostream.h> #include<conio.h> void main() { const max=99; int vec[max], i, n; clrscr(); do { cout<<"nNr. elemente = "; cin>>n; } while (n>99); for ( i=0;i<n;i++) vec[i]=i; getche(); } Vectorul a fost declarat ca av但nd lungimea max. max a fost declarat ca o constant av但nd valoarea 99 Numrul de elemente n al vectorului se citete repetat 樽n instruciunea do while at但ta timp c但t valoarea citit este mai mare ca 99 n repetiia for, i se atribuie fiecrui element al vectorului valoarea i, astfel 樽nc但t vectorul va avea forma : 1, 2 ,3 ,4 , ...n
  • 11. #include<iostream.h> #include<conio.h> void main() { int vec[999], i, n; clrscr(); do { cout<<"nNr. elemente = "; cin>>n; } while (n>99); for ( i=0;i<n;i++) { cout<<"nElementul = "; cin>>vec[i]; } cout<<"nVectorul este : "; for (i=0; i<n; i++) cout<<vec[i]<<" "; getche(); } Numrul n de elemente al vectorului se citete de la tastatur 樽n mod repetat at但ta timp c但t numrul citit este mai mare ca 99 n repetiia for, se citete de la tastatur valoarea fiecrui element al vectorului (citirea se face simultan cu memorarea 樽n vector) Afiarea se face 樽n interiorul structurii repetitive for, 樽ntre elementele vectorului fiind un spaiu liber (cout<<vec*i+<<" ;)
  • 12. #include<iostream.h> #include<conio.h> void main() { int vec[999], i, n, este=0, k, poz; cout<<"nNr. elemente = "; cin>>n; for ( i=0;i<n;i++) { cout<<"nElementul = "; cin>>vec[i]; } cout<<"Cautam elementul : "; cin>>k; for (i=0;i<n;i++) if (vec[i]==k) { poz=i; este=1; } if (este == 1) cout<<Gasit pe pozitia "<<poz; else cout<<k<< nu e in vector"; getche(); } Numrul n de elemente al vectorului se citete de la tastatur n repetiia for, se citete de la tastatur valoarea fiecrui element al vectorului (citirea se face simultan cu memorarea 樽n vector) Pentru cutarea elementului k se parcurge vectorul i fiecare element al su se compar dac este egal cu k. Dac se gsete o egalitate, variabila este se modific din 0 樽n 1 i variabila poz memoreaz valoarea lui i (unde a fost gsit elementul). Afiarea se face funcie de este .
  • 13. #include<iostream.h> #include<conio.h> void main() { int a[9]={3,5,6,7,8,9,19,99,101}, n=0, x, este=0, st=0, dr, mi; while (a[n+1]!=NULL) { cout<<a[n]<<" "; n++; } dr=n-1; cout<<"nElementul cautat = "; cin>>x; while (st<=dr && !este) { mi=(st+dr)/2; if(a[mi]==x) este=1; else if (x<a[mi]) dr=mi-1; else st=mi+1; } if (st>dr) cout<<"Element negasit !"; else cout<<Gasit pe pozitia "<<mi+1; getch(); } Algoritmul presupune c vectorul este sortat anterior Cutarea se execut prin 樽njumtiri repetate a intervalului de cutare rezult但nd doi subvectori x*st+x*mij-1] i x*mij+1+x*dr+ (st = indicele primului element din st但nga, dr = indice din dreapta, mij = indice element central) Algoritmul identific subvectorul 樽n care poate fi elementul cutat diviz但ndu-l succesiv dac este cazul, p但n la gsirea elementului cutat sau p但n c但nd subvectorul nu mai poate fi divizat (elementul nu a fost gsit)
  • 14. #include<iostream.h> #include<conio.h> void main() { int vec[999], i, n, sum=0; clrscr(); do { cout<<"nNr. elemente = "; cin>>n; } while (n>99); for ( i=0;i<n;i++) { cout<<"nElementul = "; cin>>vec[i]; sum+=vec[i]; } cout<<"nSuma elementelor = " <<sum; getche(); } Variabila sum este iniializat cu 0 n repetiia do-while, se citete numrul de elemente n p但n c但nd acesea este mai mic ca 99 Simultan cu citirea elementelor vectorului (樽n repetiia for) suma se incrementeaz cu valoarea elementului de vector citit adic altfel scris : suma = suma + vec[i] La terminarea repetiiei, suma elementelor citite este afiat
  • 15. #include<iostream.h> #include<conio.h> void main() { int vec[999], i, n, par=0; clrscr(); do { cout<<"nNr. elemente = "; cin>>n; } while (n>99); for ( i=0;i<n;i++) { cout<<"nElementul = "; cin>>vec[i]; } for (i=0;i<n;i++) if (vec[i]%2 == 0) par++; cout<<"nElem. pare = "<<par; cout<<"Elem. impare = "<<n-par; getche(); } Variabila par este iniializat cu 0. Ea va numra c但te elemente sunt pare n repetiia do-while, se citete numrul de elemente n p但n c但nd acesta este mai mic ca 99 Dup memorarea elementelor, parcurgem vectorul (cu repetiiafor) i comparm pentru fiecare element dac restul 樽mpririi lui la 2 este 0. (vec[i] % 2 == 0). Dac da, (restul = 0) atunci 樽nseamn c elementul este par i contorul par crete cu o unitate. Numr impare = total par
  • 16. #include<iostream.h> #include<conio.h> void main() { int vec[999], i, n, max, min; cout<<"nNr. elemente = "; cin>>n; } for ( i=0;i<n;i++) { cout<<"nElementul = " cin>>vec[i]; } max = min = vec[0]; for (i=0;i<n;i++) { if (vec[i]>max) max = vec[i]; if (vec[i]<min) min = vec[i]; } cout<<"nElement max = "<<max; cout<<"nElement min = "<<min; getche(); } Variabilele min i max sunt iniializate cu valoarea primului element de vector vec[0]. Dup memorarea elementelor, parcurgem vectorul (cu repetiiafor) Comparm pentru fiecare element dac este mai mic ca min. Dac da, atunci acesta devine min min=vec[i]) Comparm i dac este mai mare ca max. Dac dac da, acestuia i se atribuie valoarea lui max (max=vec[i]). La terminarea parcurgerii, valorile min i max sunt afiate
  • 17. #include<iostream.h> #include<conio.h> void main() { int vec[]={1,2,3,4,5,6,7,8,9}, i=0; clrscr(); while (vec[i]!=NULL) { cout<<vec[i]<<" "; i++; } cout<<"Element = "; cin>>vec[i]; i=1; do { cout<<vec[i-1]<<" "; i++; } while (vec[i] != NULL); getche(); } Vectorul este afiat folosind instruciunea while 樽n mod repetat, at但ta timp c但t elementul de afiat este diferit de NULL Variabila i reine lungimea vectorului, cresc但nd cu o unitate dup fiecare afiare (i++) Dup ultima afiare, lungimea vectorului crete cu o unitate, astfel se creaz o locaie suplimentar pentru adugarea unui element nou. Elementul ce se adaug la capt se introduce aadar pe poziia i (pe ultima poziie)
  • 18. #include<iostream.h> #include<conio.h> void main() { int vec[11]={1,2,3,4,5}, i=0, capat, k; clrscr(); while (vec[i]!=NULL) { cout<<vec[i]<<" "; i++; } capat=i+1; cout<<"Pozitia unde memoram = "; cin>>k; for (i=capat; i>=k; i--) vec[i]=vec[i-1]; cout<<"Elementul introdus = "; cin>>vec[k]; for (i=0;i<capat;i++) cout<<endl<< ; getche(); } Vectorul este afiat folosind instruciunea while 樽n mod repetat, at但ta timp c但t elementul de afiat este diferit de NULL Variabila capat reine lungimea vectorului iniial i mrit cu o unitate, pentru a permite inseria Noul element se adaug pe poziia k Toate elementele, 樽ncep但nd de la capt, descresctor p但n la k+1, sunt deplasate spre dreapta cu o poziie Fiind creat o locaie liber (indice k) aici se introduce noul element (vec[k])
  • 19. #include<iostream.h> #include<conio.h> void main() { int vec[11]={1,2,3,4,5,6,7,8,9}, i=0, capat,k; while (vec[i]!=NULL) { cout<<vec[i]<<" "; i++; } capat=i; cout<<"Pozitia din care stergem = "; cin>>k; for (i=k;i<capat;i++) vec[i]=vec[i+1]; capat--; for (i=0; i<capat; i++) cout<< <<vec*i+ ; getche(); } Vectorul este afiat folosind instruciunea while 樽n mod repetat, at但ta timp c但t elementul de afiat este diferit de NULL Variabila capat reine lungimea vectorului iniial, fiind i Elementul se terge de pe poziia k Fiecare element, 樽ncep但nd de la poziia k, p但n la capat ia valoarea urmtorului element : vec[i]=vec[i+1] Prin suprascriere, elementele de la capt p但n pe poziia k sunt deplasate spre st但nga. Lungimea vectorului scade cu 1 (capat--)
  • 20. Sortare prin metoda bulelor Sortare prin inserie Sortare prin inserie direct Sortare prin numrare Sortare prin inserie rapid Sortare prin selecie direct A sorta un vector 樽nseamn a-l reordona dup anumite criterii. Criterii uzuale folosite 樽n sortare : o numeric cresctor o numeric descresctor o alfabetic cresctor (A ... Z) o alfabetic descresctor (Z ... A) Exemplu tablou nesortat = {2, 7, 9, 1, 0, 5, 4} tablou sortat = {0, 1, 2, 4, 5, 7, 9} Exist mai multe metode de sortare bazate pe algoritmi diferii. n continuare sunt prezentate c但teva metode utilizate 樽n acest scop.
  • 21. #include<iostream.h> #include<conio.h> void main() { int vec[99]={7,5,29,9}, i=0, n, ok, inv; while (vec[i] != NULL) { cout<<vec[i]<<" "; i++; } n = i; do { ok=1; for (i=0;i<n-1;i++) if (vec[i]>vec[i+1]) { inv=vec[i]; vec[i]=vec[i+1]; vec[i+1]=inv; ok=0; } } while (ok==0); cout<<endl<<Vectorul sortat = ; for (i=0;i<n;i++) cout<<" "<<vec[i]; } Elementele de vector se afiaz p但n c但nd elementul de afiat este NULL Variabilele: n= lungimea vectorului inv= variabil pentru inversarea elementelor, ok=comutator (iniial 1) Se parcurge vectorul i se compar elementele 樽nvecinate. Dac elementul din st但nga e mai mic dec但t vecinul din dreapta (vec[i]>vec[i+1]), ele se interschimb i comutatorul ok devine 0. Interschimbarea (a dou c但te dou elemente) continu at但ta timp c但t comutatorul ok este egal cu 0
  • 22. #include<iostream.h> #include<conio.h> void main() { int x[9]={3,1,9,7,4}, y[9],i,j,l ,k; l=5; y[0]=x[0]; clrscr(); for (i=1;i<l;i++) { j=0; while (j<=i-1 && x[i]>y[j]) j++; for (k=i; k>=j+1;k--) y[k]=y[k-1]; y[j]=x[i]; } for (i=0;i<l;i++) cout<<" "<<y[i]; getch(); } Metoda folosete doi vectori x i y Variabilele: l= lungime, i, j, k indici P1 - Se copiaz primul element din vectorul x 樽n vectorul y. P2 - Pentru toat lungimea l a vectorului x, se compar elementul x[i] cu y[j] i dac x[i]>y[j] j crete cu 1 pentru a gsi urmtoarea poziie de inserare P3 - Se iniializeaz k cu i pe pentru a efectua creterea indicelui de inserie 樽n vectorul cu elemente sortate y . P4 se insereaz 樽n y[j] elementul x[i] n final, vectorul y este cresctor
  • 23. #include<iostream.h> #include<conio.h> void main() { int x[9]={3,1,9,7,4}, i, j, l , inv; l=5; clrscr(); for (i=1;i<l;i++) { inv=x[i]; j=i-1; while (j>0 && inv<x[j]) { x[j+1]=x[j]; j--; } if (inv>=x[j]) x[j+1]=inv; else {x[1]=x[0]; x[0]=inv; } } for (i=0;i<l;i++) cout<<" "<<x[i]; getch(); } Metoda 樽mparte vectorul 樽n doi subvectori : surs x*i+x*l-1] i destinaie x*0+x*i-1] Variabila inv memoreaz elementul x[i] pe timpul deplasrii spre dreapta 樽n interiorul vectorului destinaie Variabila i 樽mparte vectorul 樽n subvectori i la fiecare 樽mprire crete cu 1 p但n c但nd are valoarea n-1 (subvectorul surs nu mai conine elemente) Variabila j se iniializeaz cu indicele ultimului element din subvectorul destinaie
  • 24. #include<iostream.h> #include<conio.h> void main() { int x[9]={3,1,9,7,4}, y[9],z[9]={NULL},i ,j ,l ; l=5; clrscr(); for (i=0; i<l-1; i++) for (j=i+1; j<l; j++) if (x[i]>x[j]) z[i]++; else z[j]++; for (i=0; i<l; i++) y[z[i]]=x[i]; for (i=0; i<l; i++) cout<<" "<<y[i]; getch(); } Metoda folosete trei vectori sursa x, destinaie y i pentru contoare z Elementele din sursa x sunt copiate 樽n y prin inserie Pentru a determina locul de inserie 樽n y, este parcurs sursa x i se memoreaz 樽n z pentru fiecare x[i] c但te elemente sunt mai mici dec但t acesta Fiecare element din z este deci un contor pentru elementul corespunztor din x acesta fiind de fapt poziia de inserare a lui x[i] 樽n vectorul destinaie (y (y[z[i]]) variabile : i, j = contoare, l=lungimea
  • 25. #include<iostream.h> #include<conio.h> void main() { int x[9]={3,1,9,7,4},i, j, l=5,inv, st, dr, mi; for (i=1;i<l;i++) { inv=x[i]; st=0; dr=i-1; while (st<dr) { mi=(st+dr)/2; if (inv<x[mi]) dr=mi-1; else st=mi+1; } j=i-1; while (j>=st) { x[j+1]=x[j]; j--; } x[st]=inv; } for (i=0;i<l;i++) cout<<" "<<x[i]; getch(); } Metoda folosete 樽mprirea vectorului 樽n doi subvectori surs i destinaie ca la inseria direct Cutarea poziiei unde se insereaz elementul x[i] din subvectorul surs se face prin algoritmul de cutare binar. Astfel subvectorul destinaie se 樽mparte 樽n doi subvectori i se testeaz relaia dintre elementul de mijloc i elementul a[i] Se stabilete dac inseria are loc 樽n dreapta sau st但nga fa de mijloc Operaia de 樽mprire a subvectorului continu p但n se gsete poziia de inserat a lui a[i]
  • 26. #include<iostream.h> #include<conio.h> void main() { int x[9]={3,1,9,7,4}, i, j, l, inv; l=5; clrscr(); for (i=0;i<l-1;i++) for (j=i+1;j<l;j++) if (x[j]<x[i]) { inv=x[i]; x[i]=x[j]; x[j]=inv; } for (i=0;i<l;i++) cout<<" "<<x[i]; getch(); } Variabilele: l= lungimea vectorului inv= variabil pentru inversarea elementelor, i i j= contoare Se parcurge vectorul i memoreaz pe prima poziie elementul cu valoarea cea mai mic Se parcurge vectorul i se memoreaz pe poziia urmtoare disponibil, urmtorul element cu valoarea cea mai mic din cele n-i elemente rmase nesortate valorile se inverseaz dac x[j]<x[i] Dac i >= l-1 (i crete la fiecare comparaie) sortarea se 樽ncheie
  • 27. #include<iostream.h> #include<conio.h> void main() { int a[9]={3,5,9,19,99}, b[9]={1,7,33}, c[99], i, j, n=5, m=3, k; i=0; j=0; k=0; while ((i<n) && (j<m)) { if (a[i]<b[j]) { c[k]=a[i]; i++; k++;} else { c[k]=b[j]; j++; k++; } } if (i<n) while (i<n) { c[k]=a[i]; k++; i++; } else while (j<m) { c[k]=b[i]; k++; j++; } for (i=0;i<k;i++) cout<<" "<<c[i]; getch(); } Intreclasarea presupune reuniunea a doi vectori care au fost sortai anterior. Algoritmul parcurge cei doi vectori surs a i b i compar elementele. Elementul determinat a avea valoarea cea mai mic din surs este memorat 樽n vectorul destinaie c Operaia de comparare i memorare 樽n destinaie continu p但n c但nd se ajunge la captul unuia dintre cele dou surse Elementele rmase 樽n cellalt vector sunt memorate la captul vectorului destinaie c