Examen Programare
Examen Programare
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);
}
}
!
}
}
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;
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;
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;
}
return false;
}
void tiparire(int k)
{
for (int i = 1; i <= k; i++)
{
cout << v[i];
}
cout << endl;
}
void back(int k)
{
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>
struct Persoana
{
char nume[30];
char prenume[30];
int varsta;
};
Persoana vpers[100];
//MAX RECURSIV
int maxim1 = 0;
if (n < 0)
{
return maxim1;
}
}
maxim(v, n - 1);
}
//MERGE RECURSIV
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;
}
Merge_Sort(0, n - 1, vpers);
cout << endl << endl;
//MAX RECURSIV