0% au considerat acest document util (0 voturi)
2 vizualizări16 pagini

Vector I

Documentul oferă o prezentare detaliată a vectorilor în programarea C++, incluzând declarația, inițializarea, citirea și afișarea acestora. De asemenea, sunt prezentate algoritmi elementari pentru manipularea vectorilor, cum ar fi calcularea sumei, găsirea maximului și minimului, inversarea vectorului și căutarea elementelor. Exemplele de cod ilustrează fiecare concept, facilitând înțelegerea utilizării vectorilor în diverse scenarii.

Încărcat de

Lutaru Iulia
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
2 vizualizări16 pagini

Vector I

Documentul oferă o prezentare detaliată a vectorilor în programarea C++, incluzând declarația, inițializarea, citirea și afișarea acestora. De asemenea, sunt prezentate algoritmi elementari pentru manipularea vectorilor, cum ar fi calcularea sumei, găsirea maximului și minimului, inversarea vectorului și căutarea elementelor. Exemplele de cod ilustrează fiecare concept, facilitând înțelegerea utilizării vectorilor în diverse scenarii.

Încărcat de

Lutaru Iulia
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

Declararea vectorului

Sintaxa este:

tip_elemente_vector nume_vector [dimensiune_maxima_vector];

Exemple:

int x[100];// tipul elementelor vectorului este int iar


dimensiunea maxima 100 double a[50]; char s[1000];

Exemple:

#include <iostream>
using namespace std;

int v[100];
int main() {
...
return 0; }

Inițializarea vectorilor

Fiecare element al vectorului este o variabilă separată, care poate fi atribuită, citită sau
scrisă întocmai ca o variabilă de tipul vectorului.

Exemple:
int v[4]={5, 6, 10, 21}; // inițializarea la declarare

int numere[50];
for(i=0;i<numar_numere;i++)
{ numere[i]=i; } // inițializarea la atribuire

v[3] = 30; // atribuirea v[i]


= v[i] + 1; // atribuirea
Citirea vectorilor
Citirea mai multor valori dintr-un fișier și introducerea lor într-un vector se face similar
cu citirea unei secvențe: vom citi mai întâi numărul de elemente, n și apoi cele n
elemente, de la 0 la n-1 sau de la 1 la n.
int a[100];//un vector de maxim 100 elemente Explicație
int main()
{ int n,i; Aici indicii tabloului sunt
cout<<”n= ”; cin>>n; //n este lungimea vectorului 0, 1 ,2, … 99.
for(i=0;i<n;i++) Deci daca tabloul are n
{ elemente atunci primul
cout<<”a[ ”<<i<<”]= “; /*se afiseaza numarul de ordine al elementului, indice este 0, iar ultimul
care este cu 1 mai mare decat indicele */ indice este n-1;
cin>>a[i];
}
return 0; }
int a[100]; //un vector de maxim 100 elemente
int main() Aici indicii tabloului sunt
{ int n,i; 1, 2 ,… 99, 100.
cout<<”n= ”; cin>>n; //n este lungimea vectorului Deci daca tabloul are n
for(i=1;i<=n;i++) elemente atunci primul
{ indice de la care pornim
cout<<”a[ ”<<i<<”]= “; //se afiseaza numarul de ordine al elementului, este 1, iar ultimul indice
cin>>a[i]; este n, deși este si
} elementul de indice 0 dar
return 0; pe care nu îl folosim;
}
Afişarea vectorilor
Afișarea valorilor vectorului este similară cu citirea. Vom scrie în fișierul de ieșire fiecare
valoare, pe rând: de la 0 la n-1 sau de la 1 la n.
int a[100]; Explicație
int main()
{ int n,i;
……. Aici indicii tabloului sunt 0,1,2,…99.
for(i=0;i<n;i++) Deci daca tabloul are n elemente atunci primul indice este 0,
{ iar ultimul indice este n-1;
cout<<a[i]<<” ”;
}
return 0;
}
int a[100];
int main()
{ int n,i; Aici indicii tabloului sunt 1,2,…99,100.
……. Deci daca tabloul are n elemente atunci primul indice de la
for(i=1;i<=n;i++) care pornim este 1, iar ultimul indice este n, deși este si
{ elementul de indice 0 dar pe care nu îl folosim;
cout<<a[i]<<” ”;
}
return 0;
}
2. Algoritmi elementari cu vectori

2.1 Suma elementelor unui vector


#include <iostream>

using namespace std;

int v[100];// se declară vectorul ca variabilă globală


int main()
{
int i, n, s=0; //suma se iniţializează cu 0
cin>>n;
for ( i = 1; i <= n; i++ )
{ cin>>v[i];
s= s + v[i];//la suma anterioară se adaugă noua valoare
}

cout<<s;

return 0;
}

2.2 Maximul dintr-un vector


#include <iostream>
using namespace std;

int v[101];//declararea vectorului de dimensiune maximă 100

int main()
{
int i, vmax,n;
cin>>n;
for ( i = 1; i <= n; i++ )
{ cin>>v[i];}
vmax = v[1];// se iniţializează maximul cu valoarea primului element din vector
for ( i = 2; i <= n; i++ )
{
if (v[i] > vmax ) //daca se gaseste un element mai mare
vmax = v[i]; //vmax ia valoarea lui
}
cout<<vmax;
return 0;
}
Maxim multiplu: Dacă elementul maxim apare de mai multe ori în vector, afişaţi-l,
precum şi numărul de apariţii ale acestuia.

Rezolvare:
#include <iostream>
using namespace std;
int v[101];//declararea vectorului de dimensiune maxima 100 int
main()
{ int i, vmax,n;
cin>>n;
for ( i = 1; i <= n; i++ )
{
cin>>v[i];
}
vmax = v[1]; // se inițializează maximul cu primul element din
vector int nr=1; // si contorul de elemente maxime cu 1;
for ( i = 2; i <= n; i++ )
{
if (v[i] > vmax )
{ //daca elementul curent este mai mare decât valoarea maxima
vmax = v[i];// se atribuie maximului noua valoare
nr=1; //contorul se resetează la valoarea 1
}
else if (vmax==v[i])
{ //daca elementul curent este egal cu valoarea maxima
nr++; // se adaugă la contor 1 unitate: nr=nr+1;
}
}
cout<<vmax<<" apare de "<<nr<< " ori ";
return 0;
}
Min/Max

int a[101], n, i;
min=max=a[1];
for (i=2; i<=n; i++)
{ if(min>a[i]) min=a[i];
if(max<a[i]) max=a[i]; }
Exersaţi:
1. Se introduc de la tastatură cel mult 10000 de numere întregi. Să se afişeze
valoarea cea mai mică şi numărul de ordine (indicele) al elementelor care au valoarea
minimă. Indicaţie Pentru memorarea indicilor elementelor cu valoarea minimă se va
folosi un vector.

2. Ionel s-a documentat şi a făcut o listă cu preturile ultimelor n smartphone-uri


apărute şi altă listă cu preţurile celor mai vândute m tablete. Ajutaţi-l să determine cel
mai scump smartphone şi cea mai ieftină tabletă. Dacă sunt mai multe, sa afişeze toate
poziţiile din listele corespunzătoare.

3. Se citesc din fişierul text [Link] numărul de elemente n (n<40) şi apoi cele n
medii la informatică ale unei clase de elevi a1, a2, ....an. Să se scrie în fişierul [Link]:
1. Indicii elevilor cu media 10
2. Numărul de elevi corigenţi (cu media<5)
3. Media clasei
4. Media cea mai mică şi media cea mai mare din clasă

2.3 Afişarea în ordine inversă a elementelor unui vector


for (i=n-1; i>=0; i--) for (i=n; i>=1; i--)
{ cout<<a[i]<<” ” ; { cout<<a[i]<<” ” ;
} }

2.4 Inversarea unui vector în el însuşi

for(i=0; i< n/2; i++) for(i=1; i< =n/2; i++)


{ x=a[i]; a[i]=a[n-i-1]; a[n-i-1]=x; } { x=a[i]; a[i]=a[n-i+1]; a[n-i+1]=x; }
2.5 Permutare circulară
la stânga la dreapta
aux=a[1]; aux=a[n];
for(i=1;i<=n-1;i++) for(i=n; i>1; i--)
{ a[i]=a[i+1]; { a[i]=a[i-1];
} }
a[n]=aux; a[1]=aux;

2.6 Inserarea valorii x pe poziția k


for(i=n+1; i>k; i--) a[i]=a[i-1];
a[k]=x;
n++;

2.7 Eliminarea elementului a[k] aflat pe poziția k


for(i=k; i<=n-1; i++)
a[i]=a[i+1]; n--;

2.8 Căutarea unui element în vector


Exercițiu: se citesc n şi x numere naturale, iar apoi se citesc n numere. Să se spună prima
poziție pe care apare elementul x. Dacă elementul x nu se află în vector vom afișa poziția
n (în afara vectorului).
#include <iostream>
using namespace std;
int v[100];
int main()
{
int n, i, x;
cin>>n>>x;
for ( i = 0; i < n; i++ )
{
cin>>v[i] ;
}
i = 0;
while ( i < n && v[i] != x ) // câtă vreme suntem încă în vector
{
i++;
} // şi nu l-am găsit pe x, avansăm cu un pas
cout<<i ; // afisam pozitia pe care am gasit elementul x
return 0;
}
2.8.1 Căutarea unui element în vector după poziţia k1 **

Exercițiu: se citesc n, x și k numere naturale, iar apoi se citesc n numere. Să se spună


prima poziție după poziția k pe care apare elementul x. Dacă ajungem la ultima poziție,
n-1, avem voie să începem din nou cu zero, deoarece se consideră că cele n numere sunt
așezate în cerc. Dacă elementul x nu se află în vector vom afișa poziția n (în afara
vectorului).

Soluție: vom citi cele n valori într-un vector, iar apoi vom porni de la poziția k și vom
înainta fie până ce găsim elementul x, fie până când ajungem la poziția k din nou.
Avansul indicelui i se va face % n. Iată soluția:

#include <fstream>
using namespace std;
int v[100];
int main() {
ifstream fin( "[Link]" );
ofstream fout( "[Link]" ); int
n, i, x,k;
fin>>n>>x>>k;
for ( i = 0; i < n; i++ )
{ fin>>v[i] ; }
[Link]();
i = k;
while ( v[i] != x ) // dacă pe poziţia k nu avem x
{ i=(i+1)%n; // avansăm cu un pas
while ( i != k && v[i] != x )// câtă vreme nu ne-am întors la k
{i=(i+1)%n; }
}
if ( v[i] != x )
{ i=n; }
fout<<i ;
[Link]();
return 0;
}
Observăm că pentru a începe din nou de la zero atunci când i devine n este de ajuns să
aplicăm operația %n lui i. Acest lucru este posibil tocmai pentru că indicii vectorului v
încep de la 0.

Aplicație: Fiind dat un vector v și un element x, să se elimine din vector prima apariție a
elementului x, în cazul în care acesta apare în vector.
i = 0;
while ( i < n && v[i] != x ){ i++;
}
if ( i < n ) { // dacă am găsit elementul, îl
eliminăm for ( j = i + 1; j < n; j++ ){ v[j-1] = v[j];

1 Problemă rezolvată cu fişiere


}
n--;
}

Întrebare: Pe ce poziție se află primul element din vector? Modificaţi exerciţiul pentru
cazul în care primul element este pe poziţia 1.

2.9 Secvenţe de numere


1. Să se afişeze cea mai lungă secvenţă de elemente consecutive de parităţi diferite.
Exemplu:
Date de intrare Date de ieşire
8
2 4 3 3 4 7 2 3 4 7 8

Rezolvare:

#include
<iotream>
using
namespace
std;

int a[100];

int main()
{
int n, i, lmax, pmax, pc, lc;
cin>>n;
for ( i = 1; i <=n; i++ )
{
cin>>a[i] ;
}
lmax = 0;
lc=1; //lungimea curenta se inițializează cu 1
pc=1; //poziția curenta este poziția primului element

for ( i = 2; i<=n; i++ )


{
if ((a[i]%2)!=(a[i-1]%2))
{ //dacă resturile sunt diferite
lc++; // se incrementează lungimea curenta cu 1
}
else
{
lc=1; // se resetează
lungimea curenta la 1
pc=i;
}
if
(lma
x<lc)
{
lmax
=lc;
pmax=pc;
}
}
for (i = pmax; i <= pmax+lmax-1; i++ )
{
cout<<a[i]<<" "; //se afișează toate elementele din secvența de lungime
maxima
}
return 0;
}
Secvenţa de sumă maximă
Să se afişeze secvenţa de sumă maximă dintr-un şir de numere întregi şi valoarea acestei
sume.
Exemplu:
Date de intrare Date de ieşire
8 16
2 -4 -3 5 -4 7 8 -2 5 -4 7 8
Rezolvare:
#include <iostream>
using namespace
std; int a[100]; int
main() {
int n, i, sc, smax, pc, ic,sf;
cin>>n;
for ( i = 1; i <=n; i++ ){
cin>>a[i] ;
}
smax = sc=a[1]; // suma maximă si suma curenta se inițializează cu primul element
ic=sf=1; //poziţia de început si poziţia de sfârşit se inițializează cu 1 pc=1;
//poziția curenta este poziția primului element for ( i = 2; i<=n; i++ ){ if
( sc>0 ){ //dacă suma curentă este pozitivă sc=sc+a[i];
}
else
{ sc=a[i]; // se resetează suma curentă
pc=i; // se salvează poziția curentă
}
if (sc>smax){
smax=sc;
ic=pc;
sf=i; }
} cout<<smax<<'\
n';
for (i = ic; i <= sf; i++ )
{ cout<<a[i]<<" ";
}
return 0; }
2. Algoritmi elementari cu vectori

2.1 Suma elementelor unui vector


#include <iostream>

using namespace std;

int v[100];// se declară vectorul ca variabilă globală


int main()
{
int i, n, s=0; //suma se iniţializează cu 0
cin>>n;
for ( i = 1; i <= n; i++ )
{ cin>>v[i];
s= s + v[i];//la suma anterioară se adaugă noua valoare
}

cout<<s;

return 0;
}

2.2 Maximul dintr-un vector


#include <iostream>
using namespace std;

int v[101];//declararea vectorului de dimensiune maximă 100

int main()
{
int i, vmax,n;
cin>>n;
for ( i = 1; i <= n; i++ )
{ cin>>v[i];}
vmax = v[1];// se iniţializează maximul cu valoarea primului element din vector for
( i = 2; i <= n; i++ ){
if (v[i] > vmax ) //daca se gaseste un element mai mare
vmax = v[i]; //vmax ia valoarea lui
}

cout<<vmax;
return 0;
}
Maxim multiplu: Dacă elementul maxim apare de mai multe ori în vector, afişaţi-l,
precum şi numărul de apariţii ale acestuia.

Rezolvare:
#include <iostream>
using namespace std;
int v[101];//declararea vectorului de dimensiune maxima 100 int
main()
{ int i, vmax,n;
cin>>n;
for ( i = 1; i <= n; i++ )
{
cin>>v[i];
}
vmax = v[1]; // se inițializează maximul cu primul element din
vector int nr=1; // si contorul de elemente maxime cu 1; for ( i = 2; i
<= n; i++ ){
if (v[i] > vmax ){ //daca elementul curent este mai mare decât valoarea maxima
vmax = v[i];// se atribuie maximului noua valoare nr=1; //contorul se
resetează la valoarea 1
}
else if (vmax==v[i]){ //daca elementul curent este egal cu valoarea maxima nr+
+; // se adaugă la contor 1 unitate: nr=nr+1;
}
}
cout<<vmax<<" apare de "<<nr<< " ori ";

return 0;
}

Min/Max
int a[101], n, i;
min=max=a[1];
for (i=2; i<=n; i++)
{ if(min>a[i]) min=a[i];
if(max<a[i]) max=a[i]; }
Exersaţi:
4. Se introduc de la tastatură cel mult 10000 de numere întregi. Să se afişeze
valoarea cea mai mică şi numărul de ordine (indicele) al elementelor care au valoarea
minimă. Indicaţie Pentru memorarea indicilor elementelor cu valoarea minimă se va
folosi un vector.
5. Ionel s-a documentat şi a făcut o listă cu preturile ultimelor n smartphone-uri
apărute şi altă listă cu preţurile celor mai vândute m tablete. Ajutaţi-l să determine cel
mai scump smartphone şi cea mai ieftină tabletă. Dacă sunt mai multe, sa afişeze toate
poziţiile din listele corespunzătoare.

6. Se citesc din fişierul text [Link] numărul de elemente n (n<40) şi apoi cele n
medii la informatică ale unei clase de elevi a1, a2, ....an. Să se scrie în fişierul [Link]:
5. Indicii elevilor cu media 10
6. Numărul de elevi corigenţi (cu media<5)
7. Media clasei
Media cea mai mică şi media cea mai mare din clasă

2.3 Afişarea în ordine inversă a elementelor unui vector


for (i=n-1; i>=0; i--) for (i=n; i>=1; i--)
{ cout<<a[i]<<” ” ; } { cout<<a[i]<<” ” ; }

2.4 Inversarea unui vector în el însuşi

for(i=0; i< n/2; i++) for(i=1; i< =n/2; i++)


{ x=a[i]; a[i]=a[n-i-1]; a[n-i-1]=x; } { x=a[i]; a[i]=a[n-i+1]; a[n-i+1]=x; }

2.5 Permutare circulară


la stânga la dreapta

aux=a[1]; aux=a[n];
for(i=1;i<=n-1;i++) for(i=n; i>1; i--)
{ a[i]=a[i+1]; } { a[i]=a[i-1];}
a[n]=aux; a[1]=aux;

2.6 Inserarea valorii x pe poziția k


for(i=n+1; i>k; i--)
a[i]=a[i-1]; a[k]=x; n++;

2.7 Eliminarea elementului a[k] aflat pe poziția k


for(i=k; i<=n-1; i++)
a[i]=a[i+1]; n--;

2.8 Căutarea unui element în vector


Exercițiu: se citesc n şi x numere naturale, iar apoi se citesc n numere. Să se spună prima
poziție pe care apare elementul x. Dacă elementul x nu se află în vector vom afișa poziția
n (în afara vectorului).
#include <iostream>

using namespace std;

int v[100];
int main() {

int n, i, x;
cin>>n>>x;
for ( i = 0; i < n; i++ )
{ cin>>v[i] ; }

i = 0;
while ( i < n && v[i] != x ) // câtă vreme suntem încă în vector
{ i++; } // şi nu l-am găsit pe x, avansăm cu un
pas cout<<i ; // afisam pozitia pe care am gasit elementul x

return 0;
}

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