Subjects

Knowunity AI

Open the App

Subjects

Informatică și TICInformatică și TIC108 views·Updated Jun 17, 2026·6 pages

Algoritmi Fundamentali pentru Clasa a XI-a

I
Ioana Cuciurean@ioanacuciurean

Iată un ghid concis despre algoritmi fundamentali în C++. Vei...

1
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Algoritmi fundamentali de bază

Să începem cu funcții care procesează cifrele unui număr. Aceste funcții sunt esențiale pentru rezolvarea multor probleme de algoritmi.

Funcția suma_cif() calculează suma cifrelor unui număr. Aceasta folosește operația %10 pentru a extrage ultima cifră și /10 pentru a elimina cifra respectivă:

int suma_cif(int x) {
    int S = 0;
    while(x > 0) {
        S = S + x % 10;
        x = x / 10;
    }
    return S;
}

Funcția prod_cif_pare() calculează produsul cifrelor pare ale unui număr. Observă cum verificăm dacă cifra este pară cu condiția ifnn%10%2==0:

int prod_cif_pare(int n) {
    int p = 1;
    if(n == 0) p = 0;
    while(n > 0) {
        if(n%10%2 == 0)
            p = p*(n%10);
        n = n/10;
    }
    return p;
}

💡 Sfat util: Pentru a verifica dacă un număr este par, folosește operatorul modulo: numar % 2 == 0. Acest operator va fi esențial în multe algoritmi!

De asemenea, un algoritm fundamental este interschimbarea valorilor a două variabile. Pentru aceasta, avem nevoie de o variabilă auxiliară:

void interschimbare(int &x, int &y) {
    int aux;
    aux = x;
    x = y;
    y = aux;
}
2
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Oglindirea unui număr și operații cu cifre

Când avem nevoie să inversăm cifrele unui număr, folosim algoritmul de oglindire. Este un algoritm util pentru verificarea palindroamelor sau pentru transformări numerice.

Iată algoritmul pentru a obține oglinditul unui număr:

long ogl_numar(long a) {
    long ogl = 0;
    while(a > 0) {
        ogl = ogl * 10 + (a % 10);
        a = a / 10;
    }
    return ogl;
}

Pentru a găsi cifra minimă dintr-un număr, parcurgem toate cifrele și păstrăm valoarea minimă întâlnită:

long cif_mini(long x) {
    long mini = x % 10;
    while(x > 0) {
        if((x % 10) < mini)
            mini = x % 10;
        x = x / 10;
    }
    return mini;
}

Un algoritm interesant este eliminarea cifrelor pare dintr-un număr. Construim un nou număr care conține doar cifrele impare din numărul original:

int eliminare(int n) {
    int p = 1, m = 0;
    while(n > 0) {
        if(n % 2 == 1) {  // dacă ultima cifră e impară
            m = m + (n % 10) * p;
            p = p * 10;
        }
        n = n / 10;
    }
    return m;
}

💡 Reține: Când construiești un număr din cifre individuale, folosești formula numar = numar * 10 + cifra pentru a adăuga cifre la dreapta, sau numar = cifra * putere + numar cuputere=10,100,etc.cu putere = 10, 100, etc. pentru a adăuga la stânga.

3
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Transformări numerice și algoritmi matematici

Dublarea cifrelor pare este un algoritm util care construiește un nou număr dublând apariția cifrelor pare din numărul original:

long dublare(long n) {
    long p = 1;
    long nr = 0;
    while(n > 0) {
        if(n % 10 % 2 == 0) {  // dacă cifra e pară
            nr = nr + (n % 10) * p;
            p = p * 10;
        }
        nr = nr + (n % 10) * p;
        p = p * 10;
        n = n / 10;
    }
    return nr;
}

Conversia unui număr în baza 2 (binar) este un algoritm fundamental în informatică:

long baza2(long n) {
    long p = 1, nr = 0;
    while(n != 0) {
        nr = nr + (n % 2) * p;
        p = p * 10;
        n = n / 2;
    }
    return nr;
}

Calculul celui mai mare divizor comun (CMMDC) folosind algoritmul lui Euclid poate fi implementat în două moduri:

  1. Prin scăderi repetate:
void cmmdc(int a, int b) {
    while(a != b) {
        if(a > b)
            a = a - b;
        else 
            b = b - a;
    }
    cout << a;  // a este CMMDC-ul
}
  1. Prin împărțiri repetate (mai eficient):
long cmmdc(long a, long b) {
    long r;
    while(b != 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

💡 Important: Metoda cu împărțiri repetate este mult mai eficientă decât cea cu scăderi, mai ales pentru numere mari. Încearcă să o folosești de fiecare dată când calculezi CMMDC!

4
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Calculul CMMMC și algoritmi pentru divizori

Cel mai mic multiplu comun (CMMMC) poate fi calculat folosind relația cu CMMDC:

void cmmmc(long a, long b) {
    long p = a * b;
    while(a != b) {
        if(a > b)
            a = a - b;
        else 
            b = b - a;
    }
    p = p / a;  // p / CMMDC(a,b)
    cout << p;
}

Pentru a calcula numărul de divizori ai unui număr, putem folosi o metodă directă:

long nr_div(long a) {
    long nr = 0;
    for(long i = 1; i <= a; i++)
        if(a % i == 0)
            nr++;
    return nr;
}

Un algoritm mai eficient pentru numere mari este calculul numărului de divizori folosind descompunerea în factori primi:

void nr_div(long a, long &nr) {
    nr = 1;
    int p = 0, d = 2;
    while(a != 1) {
        if(a % d == 0) {
            p = 0;
            while(a % d == 0) {
                p++;
                a = a / d;
            }
            nr = nr * (p + 1);
        }
        d++;
        if(d * d > a)
            d = a;
    }
}

Suma divizorilor primi ai unui număr se poate calcula astfel:

int suma_div(int n) {
    int d = 2;
    int s = 0;
    while(n != 1) {
        if(n % d == 0) {
            s = s + d;
            while(n % d == 0)
                n = n / d;
        }
        d++;
        if(d * d > n)
            d = n;
    }
    return s;
}

💡 Optimizare: Condiția ifdd>nd * d > n este o optimizare importantă pentru algoritmi care lucrează cu factori primi. Aceasta îți permite să sari direct la ultimul factor prim dacă acesta există.

5
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Descompuneri, verificări și șiruri speciale

Descompunerea în factori primi este fundamentală în teoria numerelor:

void desc(int n) {
    int p, i;
    for(i = 2; i <= n; i++) {
        if(n % i == 0) {
            p = 0;
            while(n % i == 0) {
                n = n / i;
                p++;
            }
            cout << i << "^" << p << endl;
        }
    }
}

Pentru verificarea unui număr prim, folosim definiția: un număr este prim dacă are exact 2 divizori (1 și el însuși):

long nrprim(long n) {
    long nr = 0, i;
    for(i = 1; i <= n; i++)
        if(n % i == 0)
            nr++;
    if(nr == 2 && n >= 2)
        return 1;
    else
        return 0;
}

O metodă eficientă pentru a afișa factorii primi cu putere pară ai unui număr:

void fac_primi(long n) {
    long p = 0, i;
    for(i = 2; i <= n; i++) {
        p = 0;
        while(n % i == 0) {
            n = n / i;
            p++;
        }
        if(p % 2 == 0 && p > 0)
            cout << i << endl;
    }
}

Generarea șirului Fibonacci este un algoritm clasic și util:

void fib(long n) {
    long a = 1, b = 1, c;
    cout << a << " " << b << " ";
    for(int i = 3; i <= n; i++) {
        c = a + b;
        cout << c << " ";
        a = b;
        b = c;
    }
}

💡 Aplicații practice: Algoritmii de verificare a primalității și descompunerile în factori primi sunt esențiali în criptografie și securitatea informatică. Șirul Fibonacci apare în numeroase fenomene naturale și probleme de optimizare!

6
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Tehnici avansate și implementări alternative

Când lucrezi cu funcții în C++, există trei moduri principale de a returna valori:

  1. Prin returnare directă - folosind return:
int suma_cif(int x) {
    // calcul...
    return S;
}
  1. Prin afișare - funcția afișează direct rezultatul:
void suma_cif(int x) {
    // calcul...
    cout << S;
}
  1. Prin parametru de ieșire - folosind referințe (&):
void suma_cif(int x, int &S) {
    S = 0;
    // calcul...
}

Optimizarea algoritmilor este esențială pentru eficiență. De exemplu, pentru verificarea primalității, o versiune optimizată ar fi:

bool estePrim(long n) {
    if(n < 2) return false;
    if(n == 2) return true;
    if(n % 2 == 0) return false;
    
    for(long i = 3; i*i <= n; i += 2)
        if(n % i == 0)
            return false;
    return true;
}

Când implementezi algoritmi recursivi, fii atent la condițiile de bază. De exemplu, Fibonacci recursiv:

long fibonacci(long n) {
    if(n <= 2) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

💡 Sfat de optimizare: Recursivitatea este elegantă, dar poate duce la probleme de performanță pentru valori mari. Pentru algoritmi precum Fibonacci, implementările iterative sunt de obicei mai eficiente.

Experimentează cu acești algoritmi fundamentali - ei formează baza pentru rezolvarea problemelor mai complexe în informatică!

We thought you’d never ask...

What is the Knowunity AI companion?

Our AI companion is specifically built for the needs of students. Based on the millions of content pieces we have on the platform we can provide truly meaningful and relevant answers to students. But its not only about answers, the companion is even more about guiding students through their daily learning challenges, with personalised study plans, quizzes or content pieces in the chat and 100% personalisation based on the students skills and developments.

Where can I download the Knowunity app?

You can download the app in the Google Play Store and in the Apple App Store.

Is Knowunity really free of charge?

That's right! Enjoy free access to study content, connect with fellow students, and get instant help – all at your fingertips.

Most popular content: Integer

2

Most popular content in Informatică și TIC

9

Most popular content

9

Can't find what you're looking for? Explore other subjects.

Students love us — and so will you.

4.6/5App Store
4.7/5Google Play

The app is very easy to use and well designed. I have found everything I was looking for so far and have been able to learn a lot from the presentations! I will definitely use the app for a class assignment! And of course it also helps a lot as an inspiration.

Stefan SiOS user

This app is really great. There are so many study notes and help [...]. My problem subject is French, for example, and the app has so many options for help. Thanks to this app, I have improved my French. I would recommend it to anyone.

Samantha KlichAndroid user

Wow, I am really amazed. I just tried the app because I've seen it advertised many times and was absolutely stunned. This app is THE HELP you want for school and above all, it offers so many things, such as workouts and fact sheets, which have been VERY helpful to me personally.

AnnaiOS user

Informatică și TICInformatică și TIC108 views·Updated Jun 17, 2026·6 pages

Algoritmi Fundamentali pentru Clasa a XI-a

I
Ioana Cuciurean@ioanacuciurean

Iată un ghid concis despre algoritmi fundamentali în C++. Vei învăța cum să implementezi diverse funcții pentru manipularea numerelor: calcularea sumelor, verificarea proprietăților și algoritmi de bază pe care îi vei folosi frecvent în problemele de informatică.

1
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Sign up to see the content. It's free!

  • Access to all documents
  • Improve your grades
  • Join milions of students

Algoritmi fundamentali de bază

Să începem cu funcții care procesează cifrele unui număr. Aceste funcții sunt esențiale pentru rezolvarea multor probleme de algoritmi.

Funcția suma_cif() calculează suma cifrelor unui număr. Aceasta folosește operația %10 pentru a extrage ultima cifră și /10 pentru a elimina cifra respectivă:

int suma_cif(int x) {
    int S = 0;
    while(x > 0) {
        S = S + x % 10;
        x = x / 10;
    }
    return S;
}

Funcția prod_cif_pare() calculează produsul cifrelor pare ale unui număr. Observă cum verificăm dacă cifra este pară cu condiția ifnn%10%2==0:

int prod_cif_pare(int n) {
    int p = 1;
    if(n == 0) p = 0;
    while(n > 0) {
        if(n%10%2 == 0)
            p = p*(n%10);
        n = n/10;
    }
    return p;
}

💡 Sfat util: Pentru a verifica dacă un număr este par, folosește operatorul modulo: numar % 2 == 0. Acest operator va fi esențial în multe algoritmi!

De asemenea, un algoritm fundamental este interschimbarea valorilor a două variabile. Pentru aceasta, avem nevoie de o variabilă auxiliară:

void interschimbare(int &x, int &y) {
    int aux;
    aux = x;
    x = y;
    y = aux;
}
2
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Sign up to see the content. It's free!

  • Access to all documents
  • Improve your grades
  • Join milions of students

Oglindirea unui număr și operații cu cifre

Când avem nevoie să inversăm cifrele unui număr, folosim algoritmul de oglindire. Este un algoritm util pentru verificarea palindroamelor sau pentru transformări numerice.

Iată algoritmul pentru a obține oglinditul unui număr:

long ogl_numar(long a) {
    long ogl = 0;
    while(a > 0) {
        ogl = ogl * 10 + (a % 10);
        a = a / 10;
    }
    return ogl;
}

Pentru a găsi cifra minimă dintr-un număr, parcurgem toate cifrele și păstrăm valoarea minimă întâlnită:

long cif_mini(long x) {
    long mini = x % 10;
    while(x > 0) {
        if((x % 10) < mini)
            mini = x % 10;
        x = x / 10;
    }
    return mini;
}

Un algoritm interesant este eliminarea cifrelor pare dintr-un număr. Construim un nou număr care conține doar cifrele impare din numărul original:

int eliminare(int n) {
    int p = 1, m = 0;
    while(n > 0) {
        if(n % 2 == 1) {  // dacă ultima cifră e impară
            m = m + (n % 10) * p;
            p = p * 10;
        }
        n = n / 10;
    }
    return m;
}

💡 Reține: Când construiești un număr din cifre individuale, folosești formula numar = numar * 10 + cifra pentru a adăuga cifre la dreapta, sau numar = cifra * putere + numar cuputere=10,100,etc.cu putere = 10, 100, etc. pentru a adăuga la stânga.

3
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Sign up to see the content. It's free!

  • Access to all documents
  • Improve your grades
  • Join milions of students

Transformări numerice și algoritmi matematici

Dublarea cifrelor pare este un algoritm util care construiește un nou număr dublând apariția cifrelor pare din numărul original:

long dublare(long n) {
    long p = 1;
    long nr = 0;
    while(n > 0) {
        if(n % 10 % 2 == 0) {  // dacă cifra e pară
            nr = nr + (n % 10) * p;
            p = p * 10;
        }
        nr = nr + (n % 10) * p;
        p = p * 10;
        n = n / 10;
    }
    return nr;
}

Conversia unui număr în baza 2 (binar) este un algoritm fundamental în informatică:

long baza2(long n) {
    long p = 1, nr = 0;
    while(n != 0) {
        nr = nr + (n % 2) * p;
        p = p * 10;
        n = n / 2;
    }
    return nr;
}

Calculul celui mai mare divizor comun (CMMDC) folosind algoritmul lui Euclid poate fi implementat în două moduri:

  1. Prin scăderi repetate:
void cmmdc(int a, int b) {
    while(a != b) {
        if(a > b)
            a = a - b;
        else 
            b = b - a;
    }
    cout << a;  // a este CMMDC-ul
}
  1. Prin împărțiri repetate (mai eficient):
long cmmdc(long a, long b) {
    long r;
    while(b != 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

💡 Important: Metoda cu împărțiri repetate este mult mai eficientă decât cea cu scăderi, mai ales pentru numere mari. Încearcă să o folosești de fiecare dată când calculezi CMMDC!

4
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Sign up to see the content. It's free!

  • Access to all documents
  • Improve your grades
  • Join milions of students

Calculul CMMMC și algoritmi pentru divizori

Cel mai mic multiplu comun (CMMMC) poate fi calculat folosind relația cu CMMDC:

void cmmmc(long a, long b) {
    long p = a * b;
    while(a != b) {
        if(a > b)
            a = a - b;
        else 
            b = b - a;
    }
    p = p / a;  // p / CMMDC(a,b)
    cout << p;
}

Pentru a calcula numărul de divizori ai unui număr, putem folosi o metodă directă:

long nr_div(long a) {
    long nr = 0;
    for(long i = 1; i <= a; i++)
        if(a % i == 0)
            nr++;
    return nr;
}

Un algoritm mai eficient pentru numere mari este calculul numărului de divizori folosind descompunerea în factori primi:

void nr_div(long a, long &nr) {
    nr = 1;
    int p = 0, d = 2;
    while(a != 1) {
        if(a % d == 0) {
            p = 0;
            while(a % d == 0) {
                p++;
                a = a / d;
            }
            nr = nr * (p + 1);
        }
        d++;
        if(d * d > a)
            d = a;
    }
}

Suma divizorilor primi ai unui număr se poate calcula astfel:

int suma_div(int n) {
    int d = 2;
    int s = 0;
    while(n != 1) {
        if(n % d == 0) {
            s = s + d;
            while(n % d == 0)
                n = n / d;
        }
        d++;
        if(d * d > n)
            d = n;
    }
    return s;
}

💡 Optimizare: Condiția ifdd>nd * d > n este o optimizare importantă pentru algoritmi care lucrează cu factori primi. Aceasta îți permite să sari direct la ultimul factor prim dacă acesta există.

5
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Sign up to see the content. It's free!

  • Access to all documents
  • Improve your grades
  • Join milions of students

Descompuneri, verificări și șiruri speciale

Descompunerea în factori primi este fundamentală în teoria numerelor:

void desc(int n) {
    int p, i;
    for(i = 2; i <= n; i++) {
        if(n % i == 0) {
            p = 0;
            while(n % i == 0) {
                n = n / i;
                p++;
            }
            cout << i << "^" << p << endl;
        }
    }
}

Pentru verificarea unui număr prim, folosim definiția: un număr este prim dacă are exact 2 divizori (1 și el însuși):

long nrprim(long n) {
    long nr = 0, i;
    for(i = 1; i <= n; i++)
        if(n % i == 0)
            nr++;
    if(nr == 2 && n >= 2)
        return 1;
    else
        return 0;
}

O metodă eficientă pentru a afișa factorii primi cu putere pară ai unui număr:

void fac_primi(long n) {
    long p = 0, i;
    for(i = 2; i <= n; i++) {
        p = 0;
        while(n % i == 0) {
            n = n / i;
            p++;
        }
        if(p % 2 == 0 && p > 0)
            cout << i << endl;
    }
}

Generarea șirului Fibonacci este un algoritm clasic și util:

void fib(long n) {
    long a = 1, b = 1, c;
    cout << a << " " << b << " ";
    for(int i = 3; i <= n; i++) {
        c = a + b;
        cout << c << " ";
        a = b;
        b = c;
    }
}

💡 Aplicații practice: Algoritmii de verificare a primalității și descompunerile în factori primi sunt esențiali în criptografie și securitatea informatică. Șirul Fibonacci apare în numeroase fenomene naturale și probleme de optimizare!

6
of 6
Algoritmi fundamentali

1.returnare

2.afisare

#include<iostream>
using namespace std;
int n;
int suma_cif(int x){
int S;
S=0;
While(x>0){

Sign up to see the content. It's free!

  • Access to all documents
  • Improve your grades
  • Join milions of students

Tehnici avansate și implementări alternative

Când lucrezi cu funcții în C++, există trei moduri principale de a returna valori:

  1. Prin returnare directă - folosind return:
int suma_cif(int x) {
    // calcul...
    return S;
}
  1. Prin afișare - funcția afișează direct rezultatul:
void suma_cif(int x) {
    // calcul...
    cout << S;
}
  1. Prin parametru de ieșire - folosind referințe (&):
void suma_cif(int x, int &S) {
    S = 0;
    // calcul...
}

Optimizarea algoritmilor este esențială pentru eficiență. De exemplu, pentru verificarea primalității, o versiune optimizată ar fi:

bool estePrim(long n) {
    if(n < 2) return false;
    if(n == 2) return true;
    if(n % 2 == 0) return false;
    
    for(long i = 3; i*i <= n; i += 2)
        if(n % i == 0)
            return false;
    return true;
}

Când implementezi algoritmi recursivi, fii atent la condițiile de bază. De exemplu, Fibonacci recursiv:

long fibonacci(long n) {
    if(n <= 2) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

💡 Sfat de optimizare: Recursivitatea este elegantă, dar poate duce la probleme de performanță pentru valori mari. Pentru algoritmi precum Fibonacci, implementările iterative sunt de obicei mai eficiente.

Experimentează cu acești algoritmi fundamentali - ei formează baza pentru rezolvarea problemelor mai complexe în informatică!

We thought you’d never ask...

What is the Knowunity AI companion?

Our AI companion is specifically built for the needs of students. Based on the millions of content pieces we have on the platform we can provide truly meaningful and relevant answers to students. But its not only about answers, the companion is even more about guiding students through their daily learning challenges, with personalised study plans, quizzes or content pieces in the chat and 100% personalisation based on the students skills and developments.

Where can I download the Knowunity app?

You can download the app in the Google Play Store and in the Apple App Store.

Is Knowunity really free of charge?

That's right! Enjoy free access to study content, connect with fellow students, and get instant help – all at your fingertips.

Most popular content: Integer

2

Most popular content in Informatică și TIC

9

Most popular content

9

Can't find what you're looking for? Explore other subjects.

Students love us — and so will you.

4.6/5App Store
4.7/5Google Play

The app is very easy to use and well designed. I have found everything I was looking for so far and have been able to learn a lot from the presentations! I will definitely use the app for a class assignment! And of course it also helps a lot as an inspiration.

Stefan SiOS user

This app is really great. There are so many study notes and help [...]. My problem subject is French, for example, and the app has so many options for help. Thanks to this app, I have improved my French. I would recommend it to anyone.

Samantha KlichAndroid user

Wow, I am really amazed. I just tried the app because I've seen it advertised many times and was absolutely stunned. This app is THE HELP you want for school and above all, it offers so many things, such as workouts and fact sheets, which have been VERY helpful to me personally.

AnnaiOS user