Sunteți pe pagina 1din 12

Vectori(Tablouri unidimensionale) c++!

Mai 2014!

Liceul: Teoretic Dunarea
Nume: Lazar
Prenume: Stefan-Ionut
Profesor: Bibicu Dorin














Cuprins!

Prezentare generala!
Teorie!
Probleme!
Concluzie!
Bibliografie














Motivatie!

Am ales vectorii deoarece pot fi folositi in multe domenii si in multe
probleme .Vectorii sunt o varianta simpla prin care putem stoca
informatii , date numerice si le putem folosi mai tarziu!















Teorie!

Vectorii sunt defapt niste spatii in memorie , in care putem retine
anumite valori , citite de la tastatura. Deoarece acestia sunt tablouri
unidimensionale , dupa cum le spune si numele , au o singura dimensiune si
anume lungimea!

Un vector arata cam asa:

Acesta este un vector cu numarul maxim de spatii in memorie egal cu 10. In
prima faza , aceste spatii sunt goale. Trebuie sa le atribuim numere. El se
va numi vectorul v(putem sa-l numim si altfel) , iar spatiile din acesta
sunt numerotate de la 0 la 9. Deci , pentru un vector cu n spatii , ele vor fi
numerotate de la 0 la n-1.



Iata vecotrul cu 10 spatii , atribuite fiecarui numar , ales ales aleator.

Acest vector are de exemplu : v[0]=5, v[1]=11 , etc . De fapt , vectorii
sunt asemanatori unei functii , cu legea de corespondenta definita de
utilizator pentru fiecare valoare a lui f: f(0)=5 , f(1)=11 , etc. In C++
, vectorii se declara astfel : tip <nume vector>[valoarea maxima de spatii
in memorie]; Exemplu: int vector[25]; //am declarat un vector cu maxim 25
de spatii in memorie , de tip intreg (int).




Pasul 2 dupa declarare este citirea fiecarei valori ale fiecarui spatiu,
adica acei v[i]. Pentru asta, vom avea nevoie de o variabila i, care sa
memoreze numarul spatiului , ce va porni evident de la 0. Si vom mai citi
de la tastatura o variabila n, care reprezinta numarul actual de spatii
dorite de utilizator.
In acest program vom citi si afisa un vector. Pentru a citi, avem nevoie de
instructiunea for, care sa ceara de la tastatura, pentru fiecare i de la 0 la
n-1, cate un numar care ii va fi atribuit lui v[i]. Apoi, parcurgem vectorul
asemanator dar de aceasta data afisam fiecare v[i].










//Citirea unui vector
#include <iostream>
Using namespace std;
Int main()
{
Int v[100],n,i;
cout<<Introduceti numarul de spatii: ;
cin>>n;
for(i=0;i<n;i++)//de la fiecare i de la primul spatiu (0) la ultimul (n-
1)
cin>>v[i];//citim fiecare v[i]
for(i=0;i<n;i++)//parcurgem din nou vectorul
cout<<v[i]<< ;//afisam v[i]
return 0;
}
Exemplu :
Date de intrare : n=5 , Valori vector: 1 7 8 9 5(daca punem mai mult de 5
valori cele dupa a cincea nu vor fi afisate)
Date de iesire: 1 7 8 9 5

Sortarea prin inserare

Este cea mai eficienta metoda de a ordona elementele unui vector
crescator sau descrescator. Acest lucru ne ajuta la o aplicatie care suna
cam asa: Se citesc de la tastatura n numere reale. Sa se afiseze aceste
numere, ordonate crescator sau descrescator, la cererea
utilizatorului.Problema consta in memorarea numerelor citite de la
tastatura intr-un vector v.
Sa zicem ca am memorat aceste numere in vectorul v[10]!

Dupa cum se vede , aceste numere sunt introduse aleator, si anume nu sunt
ordonate.Aceasta Strategie a ordonarii prin interschimbare consta in
parcurgerea acelui vector, si schimbarea pozitiei numarului cu cel
precedent, in cazul in care este mai mare sau mai mic decat cel la care am
ajuns(depincand de tipul de ordonare).Procesul se va repeta cat timp
numerele sunt in ordine prefecta. Pentru a intelege mai bine acest proces,
va voi da un exemplu folosind vectorul de mai sus.

Deci incepem sa parcurgem vectorul, in acest caz pentru o ordonare
crescatoare.
Mai intai citim v[0], iar apoi, v[0+1], adica v[1].
Comparam cele doua valori, si observam ca v[0]>v[1], deci ...
interschimbam. Cum facem acest lucru? Schimb de variablie. Folosim o
auxiliara, aux, care va retine valoarea lui v[0] si o va transimte lui v[1].
Apoi, citim v[1+1]=v[2], v[1] va fi egal cu 10, pentru ca am schimbat.
Observam ca v[2] este deja mai mare decat v[1], deci il lasam in pace. Si tot
asa, pana la v[n]=v[10] in cazul nostru, cand facem ultima schimbare.
Procesul se repeta pana cand vectorul va fi complet ordonat. Cum scriem in
c++? Pai, iata cum facem: Citim vectorul de la tastatura, prin metoda
obisnuita. Apoi il parcurgem, tot prin metoda uzuala. Folosim o variabia j,
care desemna de fapt urmatoarea valoare a lui v[i], deci v[j]=v[i+1].
In cazul asta putem compara v[i] cu v[j], schimbam, adica aux=v[i],
v[i]=v[j], iar v[j]=aux. Codul arat cam asa:
//Ordonare
#include <iostream>
using namespace std;
int main()
{
int n,i,j,a,aux,d;//am declarat variabilele folosite:n pentru numarul actual
de spatii in vector, i pentru pozitia fiecarei valoru ale vectorului, j pentru
a afla pozitia urmatoare a lui v[i], a este o variabila care cere
utilizatorului tipul de ordonare, aux este auxiliara care ajuta la
interschimbare, iar d pentru a repeta programul, la cererea utilizatorului.
int v[1000];
do{
cout<<Ordonarea numerelor introduse <<endl;
cout<<Alegeti tipul de ordonare: <<endl;
cout<<1.Ordonare crescatoare<<endl;
cout<<2.Ordonare descrescatoare<<endl;
cin>>a;//cerem de la tastatura tipul de ordonare
if(a==1)//daca am ales ordonarea crescatoare, atunci...>>
{
cout<<Ati ales ordonarea crescatoare.<<endl;
cout<<Cate numere introduceti? (Max=1000);
cin>>n;//aici citim de la tastatura numarul de spatii disponibile in
vector
if(n>1000)//acesta nu trebuie sa fie mai mare de 1000
cout<<Reporniti programul si introduceti un numar corespunzator.;//in
acest caz cerem utilizatorului sa introduca un numar mai mic de 1000.
else
{
cout<<Introduceti numerele: ;//In cazul in care a introdus un numar
corect

for(i=0;i<n;i++)
cin>>v[i];//citim vectorul
for(i=0;i<n;i++)
cin>>b[i];//citim vectorul
for(i=0;i<n;i++)//incepem sa-l parcurgem
{
for(j=i+1;j<n;j++)//iar pentru j=i+1, adica valoarea urmatoarei
pozitii
if(v[i]>v[j])//comparam pozitia initiala cu cea urmatoare.Daca este mai
mare, atunci schimbam pozitiile valorilor
{
aux=v[i];
v[i]=v[j];
v[i]=aux;
}
}
cout<<Ordinea crescatoare a numerelor introduse este ;
for(i=0;i<n;i++)
cout<<v[i]<; ;//si in final afisam ordinea corecta , in acest caz
crescatoare, a numerelor din vector, cu; intre ele
}
}
else if(a==2) // daca am ales ordinea descrescatoare, atunci ...>>
{cout<<Ati ales ordonarea descrescatoare.<<endl;
cout<<Cate numere introduceti?(Max=1000).;
cin>>n;//la fel, citim numarul actual de spatii in vector
if(n>1000)
cout<<Reporniti programul si introduceti un numar
corespunzator.;//cerem repornirea in cazul numar>1000
else
{cout<<Introduceti numerele: ;
for(i=0;i<n;i++)
cin>>v[i];//citim fiecare numar de la tastatura si le memoram in vector
for(i=0;i<n;i++)//apoi il parcurgem
{
for(j=i+1;j<n;j++)//si pentru urmatoarea valoare din urmatoarea
pozitie,
if(v[i]<v[j]) //comparam valoarea initiala cu cea de pe urmatoarea
pozitie, dar in cazul ordonarii descrescatoare, v[i] trebuie sa fie mai mare
decat v[i+1]
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
cout<<Ordinea descrescatoare a numerelor introduse este: ;
for(i=0;i<n;i++)
cout<<v[i]<< ; ;//afisam fiecare numar din vector, in ordinea corecta
}
{
cout<<endl;
cout<<Doriti sa reporniti programul?(DA=1/NU=0) ;
cin>>d;
}while(d==1);//aici cerem utilizatorului permisiunea de a repeta
programul, dupa cum v-am explicat in posturile anterioare
return 0;
}

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