From 57d32b2fc0ee96d9683185dc1fc94db2d74f98d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandru=20Tof=C4=83nel?= <237447640+talexbo@users.noreply.github.com> Date: Tue, 9 Dec 2025 10:50:26 +0200 Subject: [PATCH] =?UTF-8?q?Temele=201=20=C8=99i=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 17.cpp | 54 ++++++++++++++++ 19_final.cpp | 57 +++++++++++++++++ 20.cpp | 37 +++++++++++ det3.cpp | 125 +++++++++++++++++++++++++++++++++++++ suma_zonelor_cardinale.cpp | 40 ++++++++++++ zigzag4.cpp | 94 ++++++++++++++++++++++++++++ 6 files changed, 407 insertions(+) create mode 100644 17.cpp create mode 100644 19_final.cpp create mode 100644 20.cpp create mode 100644 det3.cpp create mode 100644 suma_zonelor_cardinale.cpp create mode 100644 zigzag4.cpp diff --git a/17.cpp b/17.cpp new file mode 100644 index 0000000..d31055d --- /dev/null +++ b/17.cpp @@ -0,0 +1,54 @@ +#include + +int putere (int b, int e){ + if (e==0){ + return 1; + } + else { + if(e % 2 == 0){ + return putere(b, e/2)*putere(b, e/2); + } + else { + return b*putere(b, e/2)*putere(b, e/2); + } + + } +} + +int main(){ + int n; + std::cout << "numarul ales este "; + std::cin >> n; + if (n<1){ + std::cout << "numarul ales nu este un numar natural\n"; + return 0; + } + if (n>2147483646){ + std::cout << "numarul natural ales este prea mare pt. int de 32 bit \n"; + return 0; + } + int n2=n; + int nFinal=0; + int lungime=0; + while (n2 != 0) { + n2 /= 10; + lungime++; + } + for(int i = 0; i +void divDoiCinci(int nrEl){ + int nrDivDoi=0, nrDivCinci=0, nrZero=0; + bool zeroPrezent = false, nrNegativ=false; + for (int i = 0; inrDivCinci){nrZero=nrDivCinci;} + else {nrZero=nrDivDoi;} + std::cout<<"produsul numerelor se sfarseste cu "<< nrZero; + std::cout << " zero(uri). \n"; + } + else { + std::cout << "produsul numerelor este 0, deci se termină într-un 0. \n"; + } +} +int main(){ + int nrEl; + std::cout << "nr de factori = "; + std::cin >> nrEl; + divDoiCinci(nrEl); + return 0; +} \ No newline at end of file diff --git a/20.cpp b/20.cpp new file mode 100644 index 0000000..5ceab34 --- /dev/null +++ b/20.cpp @@ -0,0 +1,37 @@ +#include +#include + +int main (){ + int max1=INT_MIN+1; + int max2=INT_MIN; + bool continua=true; + int i = 0; + while(continua){ + int n; + std::cout << "urmatorul numar este "; + std::cin >> n; + if(n>max1) + { + max2=max1; + max1=n; + } + else if (n>max2){ + max2=n; + } + i++; + std::cout << "Mai aveti numere? (1=da, 0=nu)" << std::endl; + //aici daca inputul pentru continuare nu e bool se strica + //dar nu stiu sa verific tipul variabilei ca sa ii cer + //utilizatorului un input valid + std::cin >> continua; + } + if(i==1) + { + std::cout << "nu ati inserat decat un singur numar, acesta este "<< max1; + std::cout << std::endl; + } + else{ + std::cout << "primele doua maxime sunt " << max1; + std::cout << " respectiv " << max2 << std::endl; + } +} \ No newline at end of file diff --git a/det3.cpp b/det3.cpp new file mode 100644 index 0000000..6dc7bfb --- /dev/null +++ b/det3.cpp @@ -0,0 +1,125 @@ +#include + +void dDealoc(double** mat, int n) { + for (int i = 0; i < n; i++) { + delete[] mat[i]; + } + delete[] mat; +} + +void dAfisareMatrice(double** mat, int n) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + std::cout << mat[i][j] << " "; + } + std::cout << std::endl; + } +} + +double** minor(double** mat, int n, int xMin, int yMin) { + + double **minor = new double*[n-1]; + for (int i = 0; i < n-1; i++) { + minor[i] = new double[n-1]; + } + + int linMinor = 0; + for (int i = 0; i < n; i++) { + if (i != xMin) { + int colMinor = 0; + for (int j = 0; j < n; j++) { + if (j != yMin) { + minor[linMinor][colMinor] = mat[i][j]; + colMinor++; + } + } + linMinor++; + } + } + return minor; +} + +double detDoi(double** mat) { + return mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]; +} + +double determinant(double** mat, int n) { + + double det = 0; + + if (n == 1) { + std::cout << "1x1 nu e o dimensiune pentru care ai nevoie de un program"; + return mat[0][0]; + } + if (n == 2) { + return detDoi(mat); + } + + for (int j = 0; j < n; j++) { + double** min = minor(mat, n, 0, j); + int signatura; + if (j % 2 == 0) { + signatura = 1; + } + else { + signatura = -1; + } + + double deltaMinor = determinant(min, n - 1); + + det += signatura * mat[0][j] * deltaMinor; + dDealoc(min, n - 1); // dealoca minorul + } + + return det; +} + +void minoriRecursivi(double** mat,int n){ + // functie de verificare care imi scrie minorii cu min[0][j] si signatura + // unii sub altii ca sa pot sa fac calculul de mana mai repede. + + if (n == 1 || n==2) { + return; + } + + for (int j = 0; j < n; j++) { + double** min = minor(mat, n, 0, j); + + int signatura; + if (j % 2 == 0) { + signatura = 1; + } + else { + signatura = -1; + } + + std::cout << signatura << " * " << mat[0][j] << std::endl; + dAfisareMatrice(min, n - 1); + std::cout << std::endl; + + dDealoc(min, n - 1); + } +} + +int main() { + int n; + std::cout << "n = "; + std::cin >> n; + + double** a = new double*[n]; + for (int i = 0; i < n; i++) { + a[i] = new double[n]; + for (int j = 0; j < n; j++) { + std::cin >> a[i][j]; + } + } + + //minoriRecursivi(a, n); + + std::cout << "A=\n"; + dAfisareMatrice(a, n); + std::cout << "det(A) = " << determinant(a, n) << std::endl; + + dDealoc(a, n); + return 0; +} diff --git a/suma_zonelor_cardinale.cpp b/suma_zonelor_cardinale.cpp new file mode 100644 index 0000000..18d7bd4 --- /dev/null +++ b/suma_zonelor_cardinale.cpp @@ -0,0 +1,40 @@ +#include +int main(){ + int n, sNord=0, sSud=0, sVest=0, sEast=0; + std::cout<<"n="; std::cin >> n; + int** a = new int*[n]; + for (int i = 0; i> a[i][j]; + } + } + for (int i = 0; ij && i+jj && i+j>n-1){ + sSud=sSud+a[i][j]; + } + if(in-1){ + sEast=sEast+a[i][j]; + } + } + } + + for (int i = 0; i < n; ++i){ + delete [] a[i]; + } + delete [] a; + + std::cout << "suma elementelor din zona cardinală N este " << sNord << std::endl; + std::cout << "suma elementelor din zona cardinală S este " << sSud << std::endl; + std::cout << "suma elementelor din zona cardinală V este " << sVest << std::endl; + std::cout << "suma elementelor din zona cardinală E este " << sEast << std::endl; + + return 0; +} \ No newline at end of file diff --git a/zigzag4.cpp b/zigzag4.cpp new file mode 100644 index 0000000..b39a894 --- /dev/null +++ b/zigzag4.cpp @@ -0,0 +1,94 @@ +#include +#include + +std::queue coadaSarpelui; + +void citireMatricePatratica(int** mat, int n){ + for (int i = 0; i < n; i++) { + mat[i] = new int[n]; + for (int j = 0; j> mat[i][j]; + } + } +} +void afisareMatrice(int** mat, int n) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + std::cout << mat[i][j] << " "; + } + std::cout << std::endl; + } +} +void taieAltDiag(int** mat, int n) { + for (int diagSecIter = 0; diagSecIter < 2 * n - 1; diagSecIter++) { + // Loop cu diagonale SV-NE, care sunt 2n-1 la numar + + bool invers = (diagSecIter % 2 == 1); + + // invers == false schimba direcția de la cea initiala, + // SV-NE pt diagonala 1 formata din elementul a_11 la + // directia specifica paritatii diagonalei + + int latime = 0; + + //i+j pe diagonale au val 0 1 2 ... max ... 2 1 0 + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (i + j == diagSecIter) { + latime++; + // parcurge matricea si creste dimensiunea + // vectorului care stocheaza temporar matricile + // sau latimea diagonalei in iteratia respectiva. + } + } + } + + int* diagonalaTmp = new int[latime]; + + int ordine = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (i + j == diagSecIter) { + diagonalaTmp[ordine] = mat[i][j]; + ordine++; + } + } + } + + // Push în coadă a elementelor in ordinea corecta + // in functie de ordinea din vector + if (invers) { + // ordine spre SV + for (int i = 0; i < latime; i++) { + coadaSarpelui.push(diagonalaTmp[i]); + } + } else { + // ordine spre NE + for (int i = latime - 1; i >= 0; i--) { + coadaSarpelui.push(diagonalaTmp[i]); + } + } + delete[] diagonalaTmp; + } +} +int main() { + int n; + std::cout << "n = "; + std::cin >> n; + int** mat = new int*[n]; + std::cout << "scrie matricea:\n"; + citireMatricePatratica(mat, n); + std::cout << std::endl; + taieAltDiag(mat, n); + while (!coadaSarpelui.empty()) { + std::cout << coadaSarpelui.front() << " "; + coadaSarpelui.pop(); + } + for (int i = 0; i < n; ++i) { + delete[] mat[i]; + } + delete[] mat; + std::cout << std::endl; + + return 0; +} \ No newline at end of file