PDA

View Full Version : [C++]Algoritmi vectori



~Wolf~
05-03-2020, 02:21 PM
Algoritmi cu vectori

NOTA!
-voi posta la fel ca in topicul "Algoritmi cu cifre"

Citirea si afisarea unui vector
#include <iostream>
using namespace std;
int n; //in acest caz, n va reprezenta numarul de elemente al vectorului
int v[10]; //vom declara un vector care poate stoca cel mult 10 elemente
/*NOTA! Incepeti parcurgerea vectorului de la 0 si nu folositi ultimul element
De exemplu daca se spune intr-un enunt "Un vector de maxim 20 elemente", vom declara
unsigned v[20], parcurgerea acestuia facandu-se v[0],v[1],v[2],...,v[19], iar daca le
numarati veti obtine exact 20 numere
*/
int main()
{
//citim numarul de elemente(important este sa introduceti o valoare mai
//mica decat dimensiunea vectorului, voi alege 5
cin>>n;
//parcurgem vectorul exact cum am spus , de la 0 pana la n-1 inclusiv
//(fiindca ultimul va ramane liber)

//voi citi prima data numerele apoi le voi afisa
for(int i=0;i<n;i++)
cin>>v;
for(int i=0;i<n;i++)
cout<<"v["<<i<<"]="<<v[i]<<endl; //aici am afisat elementele vectorului,unde i este pozitia si v[i] valoarea elementului
return 0;
}


**NOTA!
-cand declarati un vector global toate elementele sale vor avea valoarea initiala 0

<b>You have to register to ba able to see this link</b>

O alta metoda de declarare a vectorului pe care eu o prefer este urmatoarea:
#include <iostream>
using namespace std;
int n;
int main()
{
cin>>n;
int v[n]; //explic mai jos
for(int i=0;i<n;i++)
{
cin>>v[i];
cout<<v[i]<<' ';
}
return 0;
}

Am declarat astfel cu scopul de a salva cat mai multa memorie, fiindca atunci cand se declara un vector de 10 elemente dar tu folosesti doar 5, celelalte 5 raman tot acolo in memorie.Cu metoda de mai sus declar un vector de atatea elemente cate am nevoie si de cate voi folosi.

[I]Suma elementelor unui vector
#include <iostream>
using namespace std;
unsigned n;//declaram numarul de elemente; il declaram natural fiindca nu putem avea -5 elemente
int suma,diferenta;//declaram variabila pentru suma;o declaram de tip intreg deoarece poate fi si negativa
int main()
{
cin>>n;
int v[n];//declaram vectorul intreg datorita faptului ca valorile elementelor pot fi si negative
for(unsigned i=0;i<n;i++) //citim vectorul
cin>>v[i];
for(unsigned i=0;i<n;i++) //prelucram vectorul
suma=suma+v[i];//efectuam suma
cout<<"Suma elementelor vectorului este: "<<suma;
return 0;
}

~TraNda~
05-03-2020, 02:38 PM
Cum afisezi invers in vector:


#include <iostream>

using namespace std;
int n, v[10], i;
int main()
{
cout<<"nr elemente="; cin>>n;
for(i=0;i<n;i++)
{
cout<<"v["<<i+1<<"]=";
cin>>v[i];
}

for(i=n-1;i>=0;i--)
cout<<v[i]<<' ';

return 0;
}



Algoritm pentru a afla elementele de pe pozitii pare, respectiv impare


//Acest alogritm le afiseaza pe rand, pe fiecare
#include <iostream>

using namespace std;
int n, v[10], i;
int main()
{
cout<<"nr de elemente =";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
for(i=1;i<=n;i++)
{
if(i%2==0)
cout<<"Element de pe pozitie para: "<<v[i]<<'\n';
else
cout<<"Element de pe pozitie impara: "<<v[i]<<'\n';
}

return 0;
}



//Acest algoritm le afiseaza intr-un sir
#include <iostream>

using namespace std;
int n, v[10], i;
int main()
{
cout<<"nr de elemente =";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
cout<<"Elemente de pe pozitii pare:"<<'\n';
for(i=1;i<=n;i++)
if(i%2==0)
cout<<v[i];
cout<<'\n'<<"Elemente de pe pozitii impare:"<<'\n';
for(i=1;i<=n;i++)
if(i%2!=0)
cout<<v[i];
return 0;
}



Algoritm de calcul a numerelor negative, respectiv pozitive, dintr-un vector


#include <iostream>

using namespace std;
int n, v[10], i, sumanrneg, sumanrpoz;
int main()
{
cout<<"nr de elemente =";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]=";
cin>>v[i];
}
for(i=1;i<=n;i++)
if(v[i]<0)
sumanrneg=sumanrneg+v[i];
else
sumanrpoz=sumanrpoz+v[i];
cout<<"Suma numerelor negative = "<<sumanrneg<<'\n'<<"Suma numerelor pozitive = "<<sumanrpoz;
return 0;
}

~Wolf~
05-03-2020, 05:05 PM
Minimul si maximul unui vector
#include <iostream>
using namespace std;
unsigned int n,i,minim, maxim;
int main()
{
cin>>n;
unsigned int v[n];
for(i=0;i<=n-1;i++) //echivalent cu for(i=0;i<n;i++)
cin>>v;
minim=v[0]; //luam ca nr minim initial valoarea primului element din vector
for(i=0;i<=n-1;i++)
{
if(v[i]<minim) //calculam minimul
minim=v[i];
if(v[i]>maxim)//calculam maximul
maxim=v[i];
}
cout<<"Valoarea minima din vector este: "<<minim<<" iar valoarea maxima "<<maxim;
return 0;
}


[I]Algoritm pentru afisarea indicelui valorii minime si valorii maxime a unui vector
#include <iostream>
using namespace std;
unsigned int n,i;
unsigned int minim,maxim; //variabile pentru minim si maxim
unsigned int i_min,i_max; //variabile pentru indicii minimului si maximului
int main()
{
cin>>n;
unsigned int v[n];
for(i=0;i<n;i++)
cin>>v;
minim=v[0];
for(i=0;i<n;i++)
{
//gasim minimul si ii salvam indicele
if(v[i]<minim)
{
minim=v[i];
i_min=i;
}
//gasim maximul si ii salvam indicele
if(v[i]>maxim)
{
maxim=v[i];
i_max=i;
}
}
//verificam daca minimul e chiar primul element
if(minim!=v[0])
cout<<i_min<<' '<<i_max; //daca nu e se va afisa indicii gasiti
else
cout<<0<<' '<<i_max; //daca este vom afisa 0,v[0] avand valoarea minima , apoi indicele maxim
return 0;
}

[I]Afisarea elementelor dintre valoarea minima si valoarea maxima a unui vector, inclusiv ele
#include <iostream>
using namespace std;
unsigned int n,i;
unsigned int minim,maxim;
unsigned int i_min,i_max;
int main()
{
cin>>n;
unsigned v[n];
for(i=0;i<n;i++)
{
cin>>v[i];
if(v[i]<v[i_min]) //comparam elementele si salvam pozitia minimului
i_min=i;
if(v[i]>v[i_max]) //comparam elementele si salvam pozitia maximului
i_max=i;
}
if(i_min>i_max) //daca i_min>i_max, valorile vor trebui inversate, fiindca nu putem porni un for de exemplu de la i=4,i<=2
{
unsigned aux=i_min;
i_min=i_max;
i_max=aux;
}
for(i=i_min;i<=i_max;i++)
cout<<v[i]<<' ';
return 0;
}

~Wolf~
09-03-2020, 05:08 PM
Algoritm pentru suma elementelor dintre primul element par si ultimul element par al unui vector
#include <iostream>
using namespace std;
unsigned n,primul_par,ultimul_par,suma;
int main()
{
cin>>n;
unsigned v[n];
for(unsigned i=0;i<n;i++)
cin>>v;
for(unsigned i=0;i<n;i++)//cautam primul element par
if(v[i]%2==0)
{
primul_par=i;//daca l-am gasit, memoram pozitia si inchidem for-ul;n-are rost sa mai cautam pentru altul
break;
}
for(unsigned i=0;i<n;i++)//cautam ultimul element par si ii retinem indicele
if(v[i]%2==0)
ultimul_par=i;
if(!primul_par && !ultimul_par)//verificam daca exista elemente pare
{
cout<<"NU EXISTA";//daca nu exista afisam un mesaj de neexistenta si inchidem programul
return 0;
}
else//daca exista efectuam suma de la indicele primului element par pana la indicele ultimului element par, inclusiv si o afisam
{
for(unsigned i=primul_par;i<=ultimul_par;i++)
suma+=v[i];
cout<<suma;
}
return 0;
}

[I]Media artimetica a n elemente dintr-un vector
#include <iostream>
using namespace std;
int n,i,suma,elemente;
int main()
{
cin>>n;
unsigned v[n];
for(i=0;i<n;i++)
{
cin>>v;//citim elementele
suma+=v[i];//efectuam suma
elemente++;//numaram elementele
}
//prin definitie, media aritmetica=suma elementelor/numarul de elemente
cout<<"Media aritmetica a celor "<<n<<" elemente este "<<(float)suma/elemente;//le afisam ca numere zecimale
return 0;
}


[I]Algoritm de numarare a perechilor de numere prime intre ele dintr-un vector
#include <iostream>
using namespace std;
unsigned n,i,j,contor;
//algoritmul lui Euclid pe care l-am prezentat in topicul cu aflarea CMMDC si CMMMC transpus in subprogram
bool primalitate(unsigned x,unsigned y)
{
unsigned r;
while(y)
{
r=x%y;
x=y;
y=r;
}
if(x==1)//daca x primeste valoarea 1, inseamna ca CMMDC dintre cele 2 numere este 1=>Numerele sunt prime intre ele
return true;//si returnam "adevarat"
return false;//altfel se returneaza fals
}
int main()
{
cin>>n;
unsigned v[n];
for(i=0;i<n;i++)
cin>>v[i];
for(i=0;i<n-1;i++)//luam pana la n-1 ca sa nu ne iasa din vector
for(j=i+1;j<n;j++)//incepem sa parcurgem perechile
if(primalitate(v[i],v[j])==true)//folosindu-ne de subprogram verificam daca cele 2 numere sunt prime intre ele
contor++;//daca da, le contorizam
cout<<contor;
return 0;
}

~Wolf~
15-03-2020, 11:55 AM
Suma primelor n elemente, apoi primelor n-1 elemente, s.a.md dintr-un vector
#include <fstream>
using namespace std;
unsigned n,i,j,s;
int main()
{
cin>>n;
unsigned v[n];
for(i=0;i<n;i++)
{
cin>>v[i];
s+=v[i]; //calculam prima data suma tuturor elementelor apoi o afisam
}
cout<<s<<endl;
for(i=n-1;i>=1;i--) //mergem descrescator incat sa afisam suma pe rand, si ne oprim la 1 fiindca suma tuturor numerelor am afisat-o deja
{
s-=v[i]; //scadem pe rand elementele, obtinandu-se suma celor n-i elemente
cout<<s<<endl;
}
return 0;
}