Académique Documents
Professionnel Documents
Culture Documents
n programele scrise pn acum am folosit doar date simple: numere ntregi, numere reale, caractere.
Date simple pot pstra o singur valoare la un moment dat.
O structur de date reprezint un ansamblu de date (o colecie) organizate dup anumite reguli
i asupra crora pot fi efectuate anumite prelucrri, care depind de tipul de structur.
Pentru orice tip structurat se precizeaz:
- un nume comun pentru structur ;
- o metod de acces la valoarea unui element ;
- operaii specifice structurii.
Un exemplu de tip structurat este tabloul unidimensional, definit ca o structur care cuprinde
un numr de componente de acelasi tip, memorate ntr-o zon de memorie contigu. Tablourile
unidimensionale se numesc vectori. Un tablou unidimensional se declar prin:
tip id[dim]
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
1. int a[101],i,n;
2. cin>>n;
3. for(i=0;i<n;i++)
4.
cin>>a[i];
a[9]
1. int a[101],i,n;
2. for(i=0;i<n;i++)
3.
cout<<a[i]<< ;
1. int a[101],i,n;
2. for(i=1;i<=n;i++)
3.
cout<<a[i]<<\n;
1. int a[101],i,n;
2. for(i=0;i<n;i++)
3.
cout<<a[i]<<\n;
int a[101],i,n,ok=1;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n && ok;i++)
if(a[i]%2!=0) ok=0;
if(ok==1) cout<<"toate numerele sunt pare";
else cout<<"exista numere impare";
b) Se consider un vector cu n elemente numere naturale (n100). S se verifice dac exist n vector
un numr negativ.
Vom folosi o variabil ntreag numit gasit, creia i vom atribui valoarea iniial 0 (adic
presupunem c toate elementele sunt pozitive). Parcurgem vectorul si dac gsim un element negativ,
vom atribui variabilei gasit valoarea 1. n acel moment se iese din structura repetitiv for.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int a[101],i,n,gasit=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n && !gasit;i++)
if(a[i]<0)gasit=1;
if(gasit==1) cout<<"primul nr negativ "<<a[i];
else cout<<"exista numere negative";
c) Se consider un vector cu n elemente numere naturale (n100). S se afieze ultimul numr par din
vector.
Vom folosi o variabil ntreag numit gasit, creia i vom atribui valoarea iniial 0 (adic
presupunem c toate elementele sunt pozitive). Parcurgem vectorul a de la ultimul element, cu
indicele n, pn la primul element, cu indicele 1, i dac gsim un element par, vom atribui variabilei
gasit valoarea 1. n acel moment se iese din structura repetitiv for.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int a[101],i,n,gasit=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=n;i>0 && !gasit;i++)
if(a[i]%2==0)gasit=1;
if(gasit==1) cout<<"ultimul nr par "<<a[i];
else cout<<"nu exista numere pare";
Aplicaii:
1. Se consider un vector cu n elemente numere naturale (n100).
a) Afiai valoarea elementului maxim ;
b) Afiai numrul elementelor egale cu maximul ;
c) Afiai indicele primului element de valoare maxim ;
d) Afiai indicele ultimului element de valoare maxim.
2. Se consider un vector cu n elemente numere naturale (n100).
a) Afiai toate elementele care sunt numere prime;
b) Afiai cel mai mic numr prim din vector;
c) Afiai cel mai mare numr prim din vector.
5. Sortarea elementelor unui vector
Algoritmul sortrii elementelor unui vector este unul dintre cei mai importani algoritmi. Exist
multe variante ale algoritmilor de sortare, care difer prin performane i complexitate.
Problema sortrii: Se citesc cele n elemente ale unui vector din fiierul vector.in. Scriei n
fiierul vector.out elementele vectorului n ordine cresctoare.
Una din metodele de sortare cele mai folosite este sortar ea prin metoda bulelor (BubbleSort). Paii algoritmului Bubble-Sort sunt urmtorii:
P1. Presupunem c elementele vectorului sunt n ordine cresctoare, ok=1.
P2. Parcurgem toate elementele pn la penultimul element (cu indicele n-1) i comparm
perechile de elemente consecutive: x[i] i x[i+1]. Dac acestea nu sunt n ordine cresctoare,
adic x[i] > x[i+1], atunci le interschimbm valorile i schimbm valoarea variabilei ok, ok=0.
Pentru sortarea elementelor sunt necesare mai multe parcurgeri ale vectorului x.
P3. Dup fiecare parcurgere a vectorului, dac ok==0, elementele vectorului nu sunt sortate, i
revenim la pasul P1. Dac ajungem ca variabila ok==1, elementele sunt sortate cresctor.
La fiecare pas P2 elementele cu valoarea cea mai mare se deplaseaz spre dreapta vectorului,
ajungnd pe poziiile lor finale din vectorul sortat.
De exemplu, pentru n=7 i elementele x=(63 23 45 12 58 74 18) se va obine:
Pasul Vectorul
P1.
ok=1
P2.
i=1
63 > 23 45 12 58 74 18 23 63 45 12 58 74 18 ; ok=0;
i=2
23 63 > 45 12 58 74 18 23 45 63 12 58 74 18 ; ok=0;
i=3
23 45 63 > 12 58 74 18 23 45 12 63 58 74 18 ; ok=0;
i=4
23 45 12 63 > 58 74 18 23 45 12 58 63 74 18 ; ok=0;
i=5
23 45 12 58 63 < 74 18
i=6
23 45 12 58 63 74 > 18 23 45 12 58 63 18 74 ; ok=0;
P3.
iniial
1.
2.
3.
4.
5.
6.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
ok==0
ok=1; 63 23 45 12 58 74 18 ok=0;
ok=1; 23 45 12 58 63 18 74 ok=0;
ok=1; 23 12 45 58 18 63 74 ok=0;
ok=1; 12 23 45 18 58 63 74 ok=0;
ok=1; 12 23 18 45 58 63 74 ok=0;
ok=1; 12 18 23 45 58 63 74 ok=0;
ok=1; 12 18 23 45 58 63 74 ok=1;
#include <fstream>
using namespace std;
ifstream fin("vector.in");
ofstream fout("vector.out");
int main()
{
int x[101],i,n,aux,ok;
//citirea elementelor
fin>>n;
for(i=1;i<=n;i++)
fin>>x[i];
//sortare cu algoritmul BubbleSort
do{
ok=1;
for(i=1;i<n;i++)
if(x[i]>x[i+1])
{ aux=x[i];
x[i]=x[i+1];
x[i+1]=aux;
ok=0;
}
}while (ok==0);
//scrierea elementelor
for(i=1;i<=n;i++)
fout<<x[i]<<' ';
fin.close();
fout.close();
return 0;
}
int n,a[101],x;
int s, d, m, gasit=0;
//citirea vectorului
while (!gasit && s<=d)
{ m=(s+d)/2;
if (x==a[m]) gasit=1;
else
if (x>a[m]) s=m+1;
else d=m-1;}
if (gasit)cout<<m;
else cout<<-1;
}
//scrierea elementelor