0% found this document useful (0 votes)
15 views14 pages

Examen Programare

Uploaded by

xxejeyexx
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views14 pages

Examen Programare

Uploaded by

xxejeyexx
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 14

Recursivitate

1.max min
int Maxim(int n, int* v, int max)
{
if (n <0)
{
return max;
}
else if (v[n] > max)
{
max = v[n];

}
Maxim(n - 1, v, max);
}
int Minim(int n, int* v, int min)
{
if (n <0)
{
return min;
}
else if (v[n] < min)
{
min = v[n];
}
Minim(n - 1, v, min);
}
Cautari
2.Cautarea binara
int cautarebinara(int* v, int inf, int sup, int k)
{
int m = (inf + sup) / 2;
if (v[m] == k)
{
return m;
}
if (v[m] < k)65
{
inf = m + 1;
}
else if (v[m] > k)
{
sup = m - 1;
}
else
{
cout << "Elementul nu a fost gasit";
}
cautarebinara(v, inf, sup, k);
}
3.Cautarea secventiala
int CautSecv(int* v, int incep, int fin, int cheie)
{
if (v[incep] == cheie)
{
return incep;
}
else
return CautSecv(v, incep + 1, fin, cheie);
}
4.Euclid
int AlgoritmEuclid(int a, int b)
{
if (b == 0)
{
return a;
}
return AlgoritmEuclid(b, a % b);
}

!
5.Combinari
int combinari(int a, int b)
{
if (a == 0 || a == b) {
return 1;
}
else {
return combinari(b - 1, a - 1) + combinari(b - 1, a);
}
}
!

6.Inversul unui numar


int invers(int a, int n)
{
if (a == 0)
{
return n;
}
invers(a / 10, n * 10 + a % 10);
}

7.Inversul unui cuvant


void inv_cuv(char* cuv, char* inv, int n)
{
if (n == -1) {
cout<<inv;
return;
}
int poz = strlen(inv);//strlen masoara lungimea vectorului doar la siruri de
caractere
inv[poz] = cuv[n];
inv[poz + 1] = '\0';
inv_cuv(cuv, inv, n - 1);
}
int main()
{
char s[] = "avemexamen";
char invers[] = "";
inv_cuv(s, invers, strlen(s) - 1);
}
8.Afisarea unui vector recursiv
void afisare(int* v, int n)
{
if (n == -1)return;
afisare(v, n - 1);
cout << v[n];
}
int main()
{
int v[] = {1, 2, 3, 4};
afisare(v, 3);
}
!
9.Suma a 2 vectori
int Suma(int* v1, int n, int* v2, int m, int sum, int aux)
{
if (n < 0 || m < 0)
{
return sum;
}
sum = (v1[n] + v2[m]);
if ((v1[n] + v2[m]) > 10)
{
if (sum / 10 == 1)
{
aux = sum / 10;
sum = sum % 10 + aux;

}
}
else
sum = v1[n] + v2[m] + aux;
cout << sum;
Suma(v1, n - 1, v2, m - 1, sum, aux);
}
!

Dei
Sortarile
10.MergeShort
void Interclasare(int inf,int mij, int sup,int*v)
{
i = inf;
j = mij;
k = 0;
while (i < mij && j <= sup)
{
if (v[i] < v[j])
{
temp[k] = v[i];
k = k + 1;
i = i + 1;
}
else
{
temp[k] = v[j];
k = k + 1;
j = j + 1;
}
}
while (i <= mij)
{
temp[k] = v[i];
k = k + 1;
i = i + 1;
}
while (j < sup)
{
temp[k] = v[j];
k = k + 1;
j = j + 1;
}
for (i = inf;i <= sup;i++)
{
v[i] = temp[i - inf];
}
}

int mij;
void MergeSort(int inf, int sup, int* v)
{
if (inf >= sup) return;
else
{
mij = (inf + sup) / 2;
MergeSort(inf, mij, v);
MergeSort(mij+1,sup,v);
Interclasare(inf, mij, sup, v);
}
}
10.QuikSort
void interschimba(int i, int j)
{
aux = i;
i = j;
j = aux;
}

int pozpivot;
int* poz;
int P;
int Partitionare(int inf, int sup,int* v)
{
P = v[inf];
i = inf + 1;
j = sup;
while (i <= j)
{
while (i < j && v[i] <= P)
{
i = i + 1;
}
while (i <= j && v[j] >= P)
{
j = j - 1;
}
if (i < j)
{
interschimba(v[i], v[j]);
}
}
interschimba(v[inf], v[j]);
return j;
}
void QuikSort(int inf, int sup, int* v)
{
if (inf < sup)
{
pozpivot = Partitionare(inf, sup, v);
QuikSort(inf, pozpivot - 1,v);
QuikSort(pozpivot - 1,sup,v);
}
}
Cautarea Binara Recursiva
11.int cautareBinaraRec(int* v, int inf, int sup, int k)
{
int mij;
if (inf > sup) return -1;
else
{
mij = (inf + sup) / 2;
if (v[mij] == k)return mij;
else
{
if (v[mij] > k)
{
cautareBinaraRec(v, inf, mij - 1, k);
}
else
{
cautareBinaraRec(v, mij + 1, sup, k);
}

}
}
Matrice la putere
Suma de vectori daca nr sunt in binar
Backtracking
12.Combinari
bool solutie(int k)
{
if (k == m)
{
return true;
}
else
return false;
}

bool e_valid(int k)
{
for (int i = 0; i < k; i++)
{
if (v[i] == v[k])
{
return false;

}
if (v[k] < v[k - 1])
{
return false;
}
}
return true;
}

void tiparire(int k)
{
for (int i = 0; i < k; i++)
{
cout << v[i];
}
cout << endl;
}

void back(int k)
{
if (solutie(k))
{
tiparire(k);
}
else
for (int i = 1; i <= n; i++)
{
v[k] = i;

if (e_valid(k))
{
back(k + 1);
}
}

int main()
{
cout << "Dati numarul total de elemente : ";
cin >> n;
cout << endl;

cout << "Dati cate elemente vor fi luate in combinare : ";


cin >> m;
cout << endl;

v = new int[m]();

back(0);

delete[]v;
}
13.Permutari
void init()
{
v[k] = 0;
}

bool am_succesor()
{
if (v[k] < n)
{
v[k]++;
return true;
}
else return false;
}

bool solutie()
{
if (k == n - 1)
return true;
else
return false;
}

void tipar()
{
for (int i = 0;i <= k;++i)
{
cout << v[i] << " ";
}
cout << endl;
}

bool e_valid()
{
for (int i = 0;i < k;i++)
{
if (v[i] == v[k])
{
return false;
}
}
return true;
}

void back()
{
k = 0;
init();
bool AS;
while (k >= 0)
{
do {} while ((AS = am_succesor()) && !e_valid());
if (AS)
{
if (solutie()) tipar();
else { k++; init(); }
}
else k--;
}

}
int main()
{
cout << "Dati n,nr de elemente dintrun vector: "; cin >> n;
v = new int[n];
cout << endl<<"Permutarile sunt:"<<endl;
back();
return 0;
}
14.Aranjamente
bool solutie(int k)
{
if (k == m)
{
return true;
}
else
return false;
}

bool e_valid(int k)
{
for (int i = 0; i < k; i++)
{
if (v[i] ==v[k])
{
return false;
}

}
return true;
}

void tiparire(int k)
{
for (int i = 0; i <k; i++)
{
cout << v[i] ;
}
cout << endl;
}

void back(int k)
{
if (solutie(k))
{
tiparire(k);
}
else
for (int i = 1; i <=n; i++)
{
v[k] = i;
if (e_valid(k))
{
back(k + 1);
}
}
}

int main()
{
cout << "Dati numarul total de elemente : ";
cin >> n;
cout << endl;

cout << "Dati cate elemente vor fi luate in aranjare : ";


cin >> m;
cout << endl;

v = new int[m]();

back(0);

delete[]v;
}

15.Problema Damelor
void init()
{
v[k] = -1;
}

bool am_succesor()
{
if (v[k] < n-1)
{
v[k]++;
return true;
}
else return false;
}

bool solutie()
{
if (k == n - 1)
return true;
else
return false;
}

void tipar()
{
for (int i = 0;i < k;++i)
{
cout << v[i] << " ";
}
cout << endl;
}
bool e_valid()
{
for (int i = 0;i < k;i++)
{
if (v[i] == v[k])
{
return false;
}
else if (abs(v[i] - v[k]) == abs(i - k))
{
return false;
}
}
return true;
}

void back()
{
k = 0;
init();
bool AS;
while (k >= 0)
{
do {} while ((AS = am_succesor()) && !e_valid());
if (AS)
{
if (solutie()) tipar();
else { k++; init(); }
}
else k--;
}

}
int main()
{
cout << "Dati nr de dame n: "; cin >> n;
v = new int[n];
cout << "Solutile de aranjare a damelor:" << endl;
back();
return 0;
}
16.Submultimi
bool solutie(int k)
{
if (k ==n)
{
return true;
}
else
return false;
}

bool e_valid(int k)
{
/*
if (k > n)
{
return false;
}*/

if (k==1) //v[i]==v[k]
{
return true;
}

if (v[k] > v[k - 1])


{
return true;
}

return false;
}

void tiparire(int k)
{
for (int i = 1; i <= k; i++)
{
cout << v[i];
}
cout << endl;
}

void back(int k)
{

for (int i = 1; i <= n; i++)


{
v[k] = i;

if (e_valid(k))
{
//if(solutie(k))
tiparire(k);

back(k + 1);
}
}
}

int main()
{
cout << "Dati numarul total de elemente : ";
cin >> n;
cout << endl;

/*
cout << "Dati cate elemente vor fi luate in aranjare : ";
cin >> m;
cout << endl;
*/

v = new int[n]();
//v[0] = 1;
back(1);

//delete[]v;
}
17.Structuri
#include<iostream>
#include<fstream>

using namespace std;

struct Persoana
{
char nume[30];
char prenume[30];
int varsta;
};
Persoana vpers[100];

//MAX RECURSIV

int maxim1 = 0;

int maxim(Persoana v[30], int n)


{

if (n < 0)
{
return maxim1;
}

else if (v[n].varsta > maxim1)


{
maxim1 = v[n].varsta;

}
maxim(v, n - 1);
}

//MERGE RECURSIV

void Interclasare(int incep,int mijl, int sf, Persoana v[])


{
int i = incep;
int j = mijl + 1;
int k = 0;
Persoana temp[100];
while (i <= mijl && j <= sf)
{
if (v[i].varsta < v[j].varsta)
{
temp[k++] = v[i++];
}
else
temp[k++] = v[j++];
}

while (i <= mijl)


{
temp[k++] = v[i++];
}
while (j <= sf)
{
temp[k++] = v[j++];
}

for (int i = incep; i <= sf; i++)


{
v[i] = temp[i - incep];
}
//delete[] temp;
}

void Merge_Sort(int incep, int sf, Persoana v[])


{
if (incep < sf)
{
int mijl = (incep + sf) / 2;
Merge_Sort(incep, mijl, v);
Merge_Sort(mijl + 1, sf, v);
Interclasare(incep, mijl, sf, v);
}
}

int main()
{
ifstream in("Intrare.txt");

if (!in)
{
cout << "Fisierul nu a fost gasit";
}

ofstream out("Iesire.txt");

if (!out)
{
cout << "Fisierul nu a fost gasit";
}

int n;

in >> n;
cout << "Numarul de persoane introduse este: "<<n;

//Extragerea datelor
for (int i = 0; i < n; i++)
{
in >> vpers[i].nume >> vpers[i].prenume >> vpers[i].varsta;
}

for (int i = 0; i < n; i++)


{
out << vpers[i].nume<<" " << vpers[i].prenume<<" " <<
vpers[i].varsta<<endl;
}

Merge_Sort(0, n - 1, vpers);
cout << endl << endl;

for (int i = 0; i < n; i++)


{
cout << vpers[i].nume<<" " <<vpers[i].prenume<<" "<< vpers[i].varsta <<
endl;
}

//MAX RECURSIV

cout << endl << endl;

int maximul= maxim(vpers, n);

cout << "Varsta maxima este: "<<maximul;

You might also like