Documente Academic
Documente Profesional
Documente Cultură
Alecsandri, Galai
VECTORI I MATRICI
VECTORII
DECLARAREA UNUI VECTOR
Acest vector are de exemplu: v [0]=5, v [1] = 11, .a.m.d. De fapt, vectorii sunt
asemntori unei funcii, cu legea de coresponden definit de utilizator
pentru fiecare valoare a lui f: f(0)=5, f(1)=11, etc. n 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 spaii n memorie, de tip
ntreg (int).
//Ordonare
#include <iostream.h>
void main ()
{
double long n, i, j, a, aux, d;//am declarat variabilele folosite: n pentru nr actual de spatii in vector, i
pentru pozitia fiecarei valori 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 CRESCTOARE<<endl;
cout<<2.ORDONARE DESCRESCTOARE<<endl;
cin>>a;//cerem de la tastatura tipul de ordonare
if (a==1)//daca am ales ordonarea crescatoare, atunci >>
{
cout<<Ati ales ordonarea cresctoare.<<endl;
cout<<Cte numere introduceti? (MAX=1000) ;
cin>>n;//aici citim numarul de spatii disponibile in vector
if (n>1000) //acesta nu trebuie sa fie mai mare de 1000
cout<<Reporniti programul si introduceti un numr corespunztor.;//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++)//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 [j]=aux;
}
}
CUTAREA BINAR
Aceasta metoda functioneaza doar pentru un vector deja ordonat (crescator sau
descrescator).
1.Mai intai verificam daca numarul cautat nu este chiar la jumatatea vectorului,
iar daca nu, comparam valorile vecinilor lui.
2.Daca x-ul cautat este mai mare decat valoarea de la mijloc, atunci continuam
cautarea doar spre dreapta.
3.Daca x-ul cautat este mai mic decat valoarea de la mijloc, atunci pornim spre
stanga.
Cum scriem in C++? Foarte usor. Folosim nistevariabile auxiliare, si
anumelst(limita stanga), initiala0,ldr(limita dreapta, initialan-1, si
unamij(mijlocul vectorului), care va fi egala cu(lst+ldr)/2.
Incepem cautarea: dupa ce am citit vectorul, il parcurgem, si vedem daca este
egal cu mijlocul, adica verificam conditiax=v[mij]. Altfel, dacaxeste mai mic
decatv[mij], pornim spre stanga, adicaldr=mij-1. Procesul se repeta, panaxeste
gasit. Altfel, dacaxeste mai mare decatv[mij], pornim cautarea spre dreapta,
adicalst=mij+1. In schimb mai avem nevoie de o variabila care ne indica daca
elementulxa fost gasit, si anumegasit, initial0
#include <iostream.h>
void main ()
{
int v[10], x, gasit, i, lst, ldr, mij, n;//v este vectorul, x este elementul cautat, gasit este variabila
care ne va indica daca x este gasit, i=pozitia viecarui v[i], lst=limita stanga, ldr=limita dreapta,
mij=pozitia de mijloc, n=lungimea actuala a vectorului
cout<<Cate numere introduceti?;
cin>>n;//citim lungimea vectorului
cout<<Introduceti numerele din vector: ;
for (i=0; i<n; i++)
cin>>v[i];//citim elementele vectorului
gasit=0;//gasit este initial 0, adica fals
lst=0;//limita stanga este pe pozitia 0
ldr=n-1;//limita dreapta este pozitia n-1
cout<<Introduceti elementul x cautat: ;
cin>>x;//citim elementul cautat
for (i=0; i<n && !gasit && lst<=ldr; i++)//parcurgem vectorul, conditia fiind ca variabila gasit sa
nu devina 1, deoarece daca am gasit elementul, repetitia trebuie a se opreasca. Iar la sfarsit, limita
stanga trebuie sa fie cel putin egala cu cea dreapta, altfel repetitia va fi la nesfarsit.
{
mij=(lst+ldr)/2;
{
if (x==v[mij]) gasit=1;//daca x este egal cu nr. din pozitia mij, atunci l-am gasit pe x.
else if (x<v[mij]) ldr=mij-1;//daca x este mai mic decat nr. din pozitia mij, atunci parcurgem
vectorul doar inspre stanga, deci limita dreapta va deveni mij-1, pentru ca mij a fost deja testat
else lst=mij+1;//daca x este mai mare decat nr. din pozitia mij, parcurgem vectorul inspre dreapta,
adica limita stanga va deveni mij+1
}
}
if (!gasit) cout<<x<<nu este in vector.;
else cout<<x<< este pe pozitia <<mij<<.;//la sfarsit afisam rezultatul cautarii, iar daca x a
fost gasit, putem afisa si pozitia acestuia, adica mij.
}
MATRICI
Tabloul
bidimensional,
numit si MATRICE,
este caracterizat,
dupa cum ii spune
si numele, de
numarul de linii si
de coloane.
Fiecare element
din matrice este
bine determinat
de o linie si de o
coloana.
Iata o
matrice careia iam atribuit
cateva numere in
mod aleator: