Informatiile acestui spatiu sunt gratuite. Observatii si sugestii pot fi trimise pe adresa de contact sau pe forum.

     Structuri de control in C++

Probleme rezolvate

In functie de cerintele si complexitatea problemelor, algoritmul impune utilizarea anumitor structuri de control. O structura de control reprezinta un mod in care este abordata rezolvarea unei probleme. In functie de acestea, putem intalni urmatoarele structuri:

O structura linara este utilizata in cazul problemelor simple, cand instructiunile se executa secvential (una dupa alta).Structura liniara este suficienta de exemplu pentru afisarea (neconditionata) unui text sau calcularea unei expresii. Pe masura ce complexitatea algoritmului creste, se impune utilizarea structurilor decizionale, cu ajutorul carora se poate conditiona executia uneia sau mai multor instructiuni, in functie de valorile de adevar ale anumitor expresii. In cazul in care o anumita secventa de instructiuni se repeta pe parcursul programului, se impune utilizarea unei structuri repetitive.

     Structura liniara

In cazul structurii liniare, toate instructiunile se executa secvential (una dupa alta), in ordinea in care acestea sunt scrise in cadrul programului.

Exemplu: Sa se calculeze suma a doua numere naturale oarecare, introduse de la tastatura.
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
   int a,b,s;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   s=a+b;
   cout<<"Suma celor 2 numere este: "<<s;
   return 0;
}
Introduceti primul numar: a=2
Introduceti al doilea numar: b=3
Suma celor 2 numere este: 5










Observam ca in acest caz nu avem nevoie sa testam valorile care se introduc, deci fiecare nstructiune se va executa pe masura ce este intalnita pe parcursul programului.

     Structura decizionala

Este utilizata atunci cand pe percursul unui program avem nevoie sa testam valorile anumitor variabile, iar in functie de valoarea de adevar a rezultatului sa se execute un set sau altul de instructiuni.

Instructiunea IF

Forma generala:

  if (expresie)
    {
      instructiune i_1 ;
      instructiune i_2 ;
      ...
      instructiune i_n
    }
  else
    {
      instructiune j_1
      instructiune j_2
      ...
      instructiune j_n
    }

Interpretare:

  • Daca expresia este satistacuta (are valoarea de adevar 1) atunci se executa primul set de intructiuni (instructiune i_1... instructiune i_n)
  • Daca expresia nu este satisfacuta (are valoarea de adevar 0) atunci se executa al doilea set de instructiuni (instructiune j_1...instructiune j_n)
Observatie: Ramura else este optionala, aceasta putand fi omisa in cazul in care nu se doreste executarea nuci unei instructiuni atunci cand conditia nu este indeplinita (expresia este falsa).

Exemplu: Sa se gaseasca solutia ecuatiei de gradul I de forma : a*x+b=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
   float a,b,x;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   if (a!=0)
    {
      x=-b/a;
      cout<<"x="<<x;
    }
   else
      cout<<"Ecuatia nu are solutii";
   return 0;
}
Introduceti primul numar: a=2
Introduceti al doilea numar: b=3
x=-1.5
















Instructiunea switch

In unele cazuri este necesara testarea unei variabile in raport cu mai multe valori, iar, in fuctie de valoarea care se afla in variabila respectiva sa se execute un anumit set de instruciuni. Acest lucru se poate implementa fie printr-o inlantuire de mai multe structuri decizionale simple (if) fie prin intermediul structurii decizionale multiple SWITCH.

Forma generala:

switch (expresie)
  {
    case valoare 1 : instructiune 1 [break]
    case valoare 2 : instructiune 2 [break]
    ...
    case valoare n-1 : instructiune n-1 [break]
    [default instructiune n]
  }

Interpretare:

  • se evalueaza expresia, urmand ca valoarea acesteia sa fie comparata cu valorile date in fiecare caz in parte.
  • in cazul in care rezultatul expresiei este egal cu una din cvlaorile date, atunci se executa instructiunea sau setul de instructiuni corespunzatoare valorii potrivite.
  • daca se intalneste instructiunea break, atunci restul valorilor ramase nu mai sunt evaluate.
  • In cazul in care rezultatul expresiei nu se gaseste printre valorile date, atunci se executa instructiunile din ramura implicita (default). Daca aceasta lipseste, atunci nu se executa nici una din instructiunile prevazute in cazul structurii de control.

Exemplu: Se dau doua numere naturale a si b. Sa se introduca unul dintre caracterele: +, -, *, iar, in fuctie de caracterul introdus, sa se efectueze operatia corespunzatoare. In cazul in care caracterul introdus nu este unul din cele trei mentionate, sa se afiseze mesajul "Operatie necunoscuta".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
   int a,b;
   char c;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   cout<<"Introduceti caracterul: c=";
   cin>>c;
   switch (c)
    {
      case '+': cout<<a+b;break;
      case '-': cout<<a-b;break;
      case '*': cout<<a*b;break;
      default: cout<<"Operatie necunoscuta";
    }
}
Introduceti primul numar: a=2
Introduceti al doilea numar: b=3
Introduceti caracterul: c=/
Operatie necunoscuta















     Structura repetitiva

In foarte multe dintre cazuri este nevoie sa se repete una sau mai multe instructiuni. Pentru aceste cazuri se folosesc structurile repetitive. Acestea permit reluarea executiei instructiunilor in functie de valoarea de adevar a unei conditii. Cand conditia nu mai este adevarata, se iese din blucla respectiva si programul continua cu executia intructiunii imediat urmatoare structurii repetitive.

Structurile repetitive sunt de trei tipuri:


  1. Structura repetitiva cu numar definit de pasi: bucla FOR
  2. Se foloseste atunci cand se cunoaste exact de cate ori se repeta o anumita parte a unui program si are urmatoarea forma generala:

         for (<initializare_contor>;<conditie>;<incrementare_contor>)
              {
                   instructiune 1;
                   ...
                   instructiune n;
              }


    Exemplu: Sa se calculeze suma unui sir de n numere naturale oarecare, introduse de la tastatura.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <iostream>
    using namespace std;
    int main()
    {
       int i, n, a, suma;
       cout<<"Cate numere sunt in sir? n=";
       cin>>n;
       suma=0;
       cout<<"Introduceti numerele:"<<endl;
       for (i=0;i<n;i++)
          {
          cout<<"a=";cin>>a;
          suma=suma+a;
          }
       cout<<"Suma celor "<<n<<" numere este: "<<suma;
    }
    Cate numere sunt in sir? n=3
    Introduceti numerele:
    a=2
    a=3
    a=4
    Suma celor 3 numere este: 9












  3. Structura repetitiva cu test initial: bucla WHILE
  4. Se foloseste atunci cand se doreste repetarea executiei anumitor instructiuni cat timp conditia de intrare in bucla este adevarata si are urmatoarea forma generala:

         while (<conditie>)
              {
                   instructiune 1;
                   ...
                   instructiune n;
              }

    Atentie: In cadrul structurii repetitive while (spre deosebire de structura repetitiva do...while) setul de instructiuni cuprins intre acolade nu se va executa decat atunci cand conditia este adevarata.

    Exemplu: Sa se calculeze suma unui sir de n numere naturale oarecare, introduse de la tastatura.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <iostream>
    using namespace std;
    int main()
    {
       int i, n, a, suma;
       cout<<"Cate numere sunt in sir? n=";
       cin>>n;
       i=0;
       suma=0;
       cout<<"Introduceti numerele:"<<endl;
       while (i<n)
          {
             cout<<"a=";cin>>a;
             suma=suma+a;
             i=i+1;
          }
       cout<<"Suma celor "<<n<<" numere este: "<<suma;
    }
    Cate numere sunt in sir? n=3
    Introduceti numerele:
    a=2
    a=3
    a=4
    Suma celor 3 numere este: 9














  5. Structura repetitiva cu test final: bucla DO ... WHILE
  6. Se foloseste (ca si structura cu test initial while) atunci cand se doreste repetarea executiei anumitor instructiuni cat timp conditia de intrare in bucla este adevarata si are urmatoarea forma generala:

         do
              {
                   instructiune 1;
                   ...
                   instructiune n;
              }
         while (<conditie>)

    Atentie: In cadrul structurii repetitive do...while (spre deosebire de structura repetitiva while) setul de instructiuni cuprins intre acolade se va executa cel putin o data.

    Exemplu: Sa se calculeze suma unui sir de n numere naturale oarecare, introduse de la tastatura.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    using namespace std;
    int main()
    {
       int i, n, a, suma;
       cout<<"Cate numere sunt in sir? n=";
       cin>>n;
       i=0;
       suma=0;
       cout<<"Introduceti numerele:"<<endl;
       do
          {
             cout<<"a=";cin>>a;
             suma=suma+a;
             i=i+1;
          }
       while (i<n);
       cout<<"Suma celor "<<n<<" numere este: "<<suma;
    }
    Cate numere sunt in sir? n=3
    Introduceti numerele:
    a=2
    a=3
    a=4
    Suma celor 3 numere este: 9














Probleme rezolvate

Structura liniara/decizionala

1. Sa se calculeze suma a 2 numere naturale.       Solutie
2. Sa se calculeze media aritmetica a 2 numere naturale.       Solutie
3. Doua variabile - a si b - retin valorile pentru doua numere intregi citite de la tastatura. Sa se interschimbe valorile celor doua numere.       Solutie
4. Se dau 2 numere naturale a si b. Sa se calculeze suma dintre a si b daca a<b si diferenta dintre a si b daca a>b.       Solutie
5. Sa se determine daca un numar este sau nu par.       Solutie
6. Sa se determine cel mai mare numar natural dintre 3 numere citite de la tastatura.       Solutie
7. Scrieti un program care citeste de la tastatura trei valori numerice a, b, c si apoi afiseaza pe ecran cea mai mare diferenta dintre oricare doua valori date. Ex. a=100, b=15, c=105. Se va afisa 90.       Solutie
8. Intr-un parc se joaca 3 copii care au greutatile a,b,c. Sa se stabileasca daca se pot aseza pe un balansoar astfel incat acesta sa stea in echilibru.       Solutie
9. Cunoscand cele 4 note obtinute de un elev la informatica pe parcursul unui semestru si nota de la teza scrieti un algoritm care sa afiseze media lui.       Solutie
10. Sa se calculeze aria si perimetrul unui:
  • patrat, cunoscand lungimea laturii
  • dreptunghi, cunoscand lungimile celor doua laturi
  • triunghi, cunoscand cele 3 laturi
  • trapez, cunoscand lungimile bazelor si inaltimea
  • cerc, cunoscand raza
      Solutie
11. Sa se afle radacinile ecuatiei de gradul I cu coeficientii a,b.       Solutie
12. Sa se afle radacinile ecuatiei de gradul 2. cu coeficientii a,b,c.       Solutie
13. Ana a ramas singura acasa si vrea sa faca placinte. Pentru aceasta are nevoie de x grame faina, y grame zahar, z ml lapte, p oua, m kg mere. Stiind ca pretul unui kg de faina este px, al unui kg de zahar este py, litrul de lapte costa pz, kilogramul de mere costa pm si ouale sunt pp lei/buc, sa se afle pretul placintei Anei.       Solutie
14. Sa se determine ultima cifra a sumei x+y, unde x si y sunt date de la tastatura.       Solutie
15. Sa se determine ultimele doua cifre ale produsului a*b.       Solutie
16. O persoana are initial la banca o suma de bani S. In primele 6 luni ale anului, dobanda a fost p%, iar in urmatoarele 6 luni a fost q% din suma la care s-a adaugat si dobanda pe lunile anterioare, sa se determine suma pe care o va avea persoana la sfarsitul anului.       Solutie
17. Sa se verifice daca 3 numere a,b,c sunt pitagorice (patratul unuia poate fi scris ca suma patratelor celorlalte doua).       Solutie
18. Se citesc de la tastatura 3 numere reale. Sa se scrie un algoritm care verifica daca acestea pot constitui lungimile laturilor unui triunghi. In caz afirmativ se va afisa tipul triunghiului (oarecare, isoscel sau echilateral).       Solutie
19. Se citesc de la tastatura coordonatele extremitatilor a doua segmente. Sa se afiseze lungimea segmentului mai mare.       Solutie
20. Sa se verifice daca o fractie a/b se poate simplifica prin k       Solutie
21. Se citesc de la tastatura 2 numere reale a si b si un operator op. Sa se calculeze expresia a op b, unde op poate fi: ‘+’, ‘-‘, ‘/’, ‘%       Solutie
22. Sa se introduca de la tastatura un numar n si sa se specifice daca acesta apartine intervalului [a,b], unde a si b sunt numere introduse de la tastatura.       Solutie


Structuri repetitive (for / while / do...while)


1. Sa se calculeze suma primelor n numere consecutive: S=1+2+3+…+n       Solutie
2. Sa se calculeze suma primelor n numere oarecare.       Solutie
3. Sa se determine cate cifre are un numar natural.       Solutie
4. Sa se determine suma cifrelor unui numar natural       Solutie
5. Sa se determine cifra cea mai mare a unui numar natural.       Solutie
6. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor pozitive. Numarul 0 nu se ia in calcul.       Solutie
7. Se citeste un numar natural oarecare. Sa se determine de cate ori se gaseste o cifra (introdusa de la tastatura) in scrierea lui.       Solutie
8. Sa se calculeze suma k+(k+1)+…+ (k+n).       Solutie
9. Se citeste un numar n de cel putin 3 cifre. Sa se afiseze de cate ori se poate imparti numarul n la numarul m (introdus de la tastatura).       Solutie
10. Sa se determine cel mai mare divizor comun a doua numere naturale a si b citite.       Solutie
11. Sa se calculeze valoarea lui N factorial, unde N este un numar citit de la tastatura.       Solutie
12. Sa se numere si afiseze divizorii unui numar.       Solutie
13. Sa se verifice daca un numar natural este prim.       Solutie
14. Sa se afiseze si sa se contorizeze toate numerele prime din intervalul [a,b].       Solutie
15. Sa se afiseze triunghiul:
            1
            1 2
            1 2 3
            1 2 3 4
            ………………
            1 2 3…………n
pentru un n citit de la tastatura.
      Solutie
16. Sa se afiseze triunghiul :
            *
            **
            ***
            …
            ****….* - de n ori
pentru n citit de la tastatura.
      Solutie
17. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor pozitive. Numarul 0 nu se ia in calcul.       Solutie
18. Un numar natural se numeste perfect daca el este egal cu suma divizorilor sai mai mici decat el.De ex 28 este un numar perfect pentru ca 28=1+2+4+7+14.Sa se determine toate numerele perfecte mai mici decat un numar dat (10000).       Solutie
19. Fie un numar format din trei cifre. Sa se afiseze cifrele sale incepand cu cifra unitatilor.       Solutie
20. Sa se afle daca un numar N introdus de la tastatura este sau nu palindrom. Palindromul este un numar al carui rasturnat este identic cu numarul initial. Ex : 12321, 2536352, 356653       Solutie
21. Fie a un numar natural format din 5 cifre. Scrieti un algoritm care sa determine si sa afiseze numarul format din prima, a treia si a cincea cifra din a.       Solutie
22. Fie 2 numere cu 4 cifre. Sa se afiseze acela care are suma cifrelor mai mare.       Solutie
23. Fiind dat un numar de 4 cifre, sa se construiasca inversul acestuia si sa se faca media aritmetica a cifrelor sale.       Solutie
24. Sa se verifice daca cifrele unui numar sunt ordonate crescator.       Solutie
25. Numar deal       Solutie
26. Sa se creeze un program care sa realizeze descompunerea in factori primi a unui numar natural n si sa afiseze fiecare factor prim si puterea corespunzatoare.       Solutie

Rezolvari

Structura liniara/decizionala

1. Sa se calculeze suma a 2 numere naturale.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
   int a,b,s;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   s=a+b;
   cout<<"Suma celor 2 numere este: "<<s;
   return 0;
}

2. Sa se calculeze media aritmetica a 2 numere naturale.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main()
{
   int a,b;
   float med;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   med=(float)(a+b)/2;
   cout<<"Media celor 2 numere este: "<<med;
   return 0;
}

3. Doua variabile - a si b - retin valorile pentru doua numere intregi citite de la tastatura. Sa se interschimbe valorile celor doua numere.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
   int a,b,temp;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   temp=a;
   a=b;
   b=temp;
   cout<<"Dupa interschimbare: "<<endl<<"a="<<a<<endl<<"b="<<b;
   return 0;
}

4. Se dau 2 numere naturale a si b. Sa se calculeze suma dintre a si b daca a<b si diferenta dintre a si b daca a>b.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main()
{
   int a,b,s,d;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   if (a<b)
      {
         s=a+b;
         cout<<"s="<<s;
      }
   else
      {
         d=a-b;
         cout<<"d="<<d;
      }
   return 0;
}

5. Sa se determine daca un numar este sau nu par.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
   int a;
   cout<<"Introduceti numarul: a=";
   cin>>a;
   if (a%2==0)
      cout<<"Numarul "<<a<<" este par";
   else
      cout<<"Numarul "<<a<<" este impar";
   return 0;
}

6. Sa se determine cel mai mare numar natural dintre 3 numere citite de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
   int a,b,c,maxim;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   cout<<"Introduceti al treilea numar: c=";
   cin>>c;
   if (a>=b && a>=c)
      maxim=a;
   if (b>=a && b>=c)
      maxim=b;
   if (c>=b && c>=a)
      maxim=c;
   cout<<"Cel mai mare numar este: "<<maxim;
   return 0;
}

7. Scrieti un program care citeste de la tastatura trei valori numerice a, b, c si apoi afiseaza pe ecran cea mai mare diferenta dintre oricare doua valori date. Ex. a=100, b=15, c=105. Se va afisa 90.

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
#include <iostream>
using namespace std;
int main()
{
   int a,b,c,maxim,minim,difmax;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   cout<<"Introduceti al treilea numar: c=";
   cin>>c;
   if (a>=b && a>=c)
      maxim=a;
   if (b>=a && b>=c)
      maxim=b;
   if (c>=b && c>=a)
      maxim=c;
   cout<<"Cel mai mare numar este: "<<maxim<<endl;
   if (a<=b && a<=c)
      minim=a;
   if (b<=a && b<=c)
      minim=b;
   if (c<=b && c<=a)
      minim=c;
   cout<<"Cel mai mic numar este: "<<minim<<endl;
   difmax=maxim-minim;
   cout<<"Cea mai mare diferenta este: "<<difmax;
   return 0;
}

8. Intr-un parc se joaca 3 copii care au greutatile a,b,c. Sa se stabileasca daca se pot aseza pe un balansoar astfel incat acesta sa stea in echilibru.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   int a,b,c;
   cout<<"Introduceti greutatea primului copil: ";
   cin>>a;
   cout<<"Introduceti greutatea celui de-al doilea copil: ";
   cin>>b;
   cout<<"Introduceti greutatea celui de-al treilea copil: ";
   cin>>c;
   if (a+b==c || a+c==b || b+c==a)
      cout<<"Copiii se pot aseza in balansoar in echilibru!";
   else
      cout<<"Copiii nu se pot aseza in balansoar in echilibru!";
   return 0;
}

9. Cunoscand cele 4 note obtinute de un elev la informatica pe parcursul unui semestru si nota de la teza scrieti un algoritm care sa afiseze media lui.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main()
{
   int n1,n2,n3,n4,t;
   float mo,mf;
   cout<<"Introduceti notele la oral"<<endl;
   cout<<"Nota 1: ";
   cin>>n1;
   cout<<"Nota 2: ";
   cin>>n2;
   cout<<"Nota 3: ";
   cin>>n3;
   cout<<"Nota 4: ";
   cin>>n4;
   mo=(float)(n1+n2+n3+n4)/4;
   cout<<"Introduceti nota obtinuta la teza: ";
   cin>>t;
   cout<<"media notelor este: "<<mo<<endl;
   mf=(mo*3+t)/4;    cout<<"Media finala este: "<<mf<<endl;
}

10. Sa se calculeze perimetrul si aria unui:
  • patrat, cunoscand lungimea laturii
  • dreptunghi, cunoscand lungimile celor doua laturi
  • triunghi, cunoscand cele 3 laturi
  • trapez, cunoscand lungimile laturilor si inaltimea
  • cerc, cunoscand raza


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   int latura, lungime, latime,l1,l2,l3,l4, inaltime, raza;
   float p,a;
   cout<<"Sa se calculeze perimetrul si aria unui patrat"<<endl;
   cout<<"Introduceti lungimea laturii patratului: l=";
   cin>>latura;
   p=4*latura;
   a=latura*latura;
   cout<<"Perimetrul patratului este: p="<<p<<endl;
   cout<<"Aria patratului este: a="<<a<<endl<<endl;
   
   cout<<"Sa se calculeze perimetrul si aria unui dreptunghi"<<endl;
   cout<<"Introduceti lungimea dreptunghiului: L=";
   cin>>lungime;
   cout<<"Introduceti latimea dreptunghiului: l=";
   cin>>latime;
   p=2*lungime+2*latime;
   a=lungime*latime;
   cout<<"Perimetrul dreptunghiului este: p="<<p<<endl;
   cout<<"Aria dreptunghiului este: a="<<a<<endl<<endl;
   
   cout<<"Sa se calculeze perimetrul si aria unui triunghi cunoscand lungimile laturilor"<<endl;
   cout<<"Introduceti lungimea primei laturi: l1=";
   cin>>l1;
   cout<<"Introduceti lungimea celei de-a doua laturi: l2=";
   cin>>l2;
   cout<<"Introduceti lungimea celei de-a treia laturi: l3=";
   cin>>l3;
   p=l1+l2+l3;
   a=sqrt(p*(p-l1)*(p-l2)*(p-l3));//formula lui Heron ;)
   cout<<"Perimetrul triunghiului este: p="<<p<<endl;
   cout<<"Aria triunghiului este: a="<<a<<endl<<endl;
   
   cout<<"Sa se calculeze perimetrul si aria unui trapez cunoscand lungimile laturilor si inaltimea "<<endl;
   cout<<"Introduceti lungimea bazei mari: l1=";
   cin>>l1;
   cout<<"Introduceti lungimea a bazei mici: l2=";
   cin>>l2;
   cout<<"Introduceti lungimea celei de-a 3-a laturi: l3=";
   cin>>l3;
   cout<<"Introduceti lungimea celei de-a 4-a laturi: l4=";
   cin>>l4;
   cout<<"Introduceti lungimea inaltimii: inaltime=";
   cin>>inaltime;
   p=l1+l2+l3+l4;
   a=(l1+l2)*inaltime/2;      //Aria trapezului = (baza mare + baza mica)xinaltimea/2
   cout<<"Perimetrul trapezului este: p="<<p<<endl;
   cout<<"Aria trapezului este: a="<<a<<endl;
   
   cout<<"Sa se calculeze perimetrul si aria unui cerc"<<endl;
   cout<<"Introduceti raza cercului: raza=";
   cin>>raza;
   p=2*3.14*raza;
   a=3.14*raza*raza;
   cout<<"Perimetrul cercului este: p="<<p<<endl;
   cout<<"Aria cercului este: a="<<a<<endl<<endl;
}

11. Sa se afle radacinile ecuatiei de gradul I cu coeficientii a,b.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
   int a, b;
   float x;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   if (a!=0)
   {
      x=float(-b)/float(a);
      cout<<"x="<<x;
   }
   else
      cout<<"Ecuatia nu are solutii.";
}

12. Sa se afle radacinile ecuatiei de gradul 2. cu coeficientii a,b,c.

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
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   int a, b, c, d;
   float x,x1,x2;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   cout<<"c=";
   cin>>c;
   if (a!=0)
   {
      d=pow(b,2)-4*a*c;
      cout<<"Delta="<<d<<endl;
      if (d>=0)
      {
         x1=float(-b+sqrt(d))/(2*a);
         x2=float(-b-sqrt(d))/(2*a);
         cout<<"x1="<<x1<<endl;
         cout<<"x2="<<x2<<endl;
      }
      else
         cout<<"Ecuatia are solutii complexe.";
   }
   else
   {
      cout<<"Coeficientul lui x2 este zero => ecuatie de gradul I:"<<endl;
      if (b!=0)
      {
         x=float(-c)/float(b);
         cout<<"x="<<x;
      }
      else
         cout<<"Ecuatia nu are solutii.";
   }
}

13. Ana a ramas singura acasa si vrea sa faca placinte. Pentru aceasta are nevoie de x grame faina, y grame zahar, z ml lapte, p oua, m kg mere. Stiind ca pretul unui kg de faina este px, al unui kg de zahar este py, litrul de lapte costa pz, kilogramul de mere costa pm si ouale sunt pp lei/buc, sa se afle pretul placintei Anei.

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
31
32
33
34
35
36
37
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   int x,y,z,p,m;
   int px,py,pz,pp,pm;
   int pf;
   cout<<"Cantitati de ingrediente necesare pentru placinta:"<<endl<<endl;
   
   cout<<"Cate grame de faina sunt necesare? x=";
   cin>>x;
   cout<<"Cate grame de zahar sunt necesare? y=";
   cin>>y;
   cout<<"Cati ml de lapre sunt necesari? z=";
   cin>>z;
   cout<<"Cate oua sunt necesare? p=";
   cin>>p;
   cout<<"Cate kilograme de mere sunt necesare? m=";
   cin>>m;
   
   cout<<endl<<"Preturi ingrediente:"<<endl<<endl;
   
   cout<<"Faina:";
   cin>>px;
   cout<<"Zahar:";
   cin>>py;
   cout<<"Lapte:";
   cin>>pz;
   cout<<"Oua:";
   cin>>pp;
   cout<<"Mere:";
   cin>>pm;
   
   pf=x*px/1000+y*py/1000+z*pz/1000+p*pp+m*pm;
   cout<<endl<<"Pretul final al placintei este:"<<pf;
}

14. Sa se determine ultima cifra a sumei x+y, unde x si y sunt date de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
   int x,y,s,r;
   cout<<"x=";
   cin>>x;
   cout<<"y=";
   cin>>y;
   s=x+y;
   r=s%10;
   cout<<"Ultima cifra a numarului "<<s<<" rezultat din suma numerelor "<<x<<" si "<<y<<" este: "<<r;
}

15. Sa se determine ultimele doua cifre ale produsului a*b.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
   int a,b,p,p1,r1,r2;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   p=a*b;
   r1=p%10;
   p1=p/10;
   r2=p1%10;
   cout<<"Ultima cifra a numarului "<<p<<" rezultat din produsul numerelor "<<a<<" si "<<b<<" este: "<<r1<<endl;
   cout<<"Penultima cifra a numarului "<<p<<" rezultat din produsul numerelor "<<a<<" si "<<b<<" este: "<<r2;
}

16. O persoana are initial la banca o suma de bani S. In primele 6 luni ale anului, dobanda a fost p%, iar in urmatoarele 6 luni a fost q% din suma la care s-a adaugat si dobanda pe lunile anterioare, sa se determine suma pe care o va avea persoana la sfarsitul anului.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
   float s,s1,sf,p,pl,q,ql;
   cout<<"Introduceti suma initiala: S=";
   cin>>s;
   cout<<"Introduceti dobanda pe primele 6 luni ale anului: p=";
   cin>>p;
   cout<<"Introduceti dobanda pe ultimele 6 luni ale anului: q=";
   cin>>q;
   pl=p/12;
   s1=s+s*pl/100*6;
   cout<<"Suma din cont dupa primele 6 luni este: s1="<<s1<<endl;
   ql=q/12;
   sf=s1+s1*ql/100*6;
   cout<<"Suma din cont dupa ultimele 6 luni este: sf="<<sf<<endl;
}

17. Sa se verifice daca 3 numere a,b,c sunt pitagorice (patratul unuia poate fi scris ca suma patratelor celorlalte doua).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
   double a,b,c;
   cout<<"Introduceti primul numar: a=";
   cin>>a;
   cout<<"Introduceti al doilea numar: b=";
   cin>>b;
   cout<<"Introduceti al treilea numar: c=";
   cin>>c;
   if ((a*a+b*b==c*c) || (a*a+c*c==b*b) || (b*b+c*c==a*a))
      cout<<"Numerele sunt pitagorice!";
   else
      cout<<"Numerele nu sunt pitagorice!";
}

18. Se citesc de la tastatura 3 numere reale. Sa se scrie un algoritm care verifica daca acestea pot constitui lungimile laturilor unui triunghi. In caz afirmativ se va afisa tipul triunghiului (oarecare, isoscel sau echilateral).

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
#include <iostream>
using namespace std;
int main()
{
   int a,b,c;
   cout<<"Introduceti lungimea primei laturi: a=";
   cin>>a;
   cout<<"Introduceti lungimea celei de-a doua laturi: b=";
   cin>>b;
   cout<<"Introduceti lungimea celei de-a treia laturi: c=";
   cin>>c;
   if (a+b>c && a+c>b && b+c>a)
      cout<<"Cele trei laturi pot forma un triunghi"<<endl;
   else
      cout<<"Cele trei laturi nu pot forma un triunghi:"<<endl;
   if (a==b && a==c && b==c)
      cout<<"- echilateral!"<<endl;
   else
      if (a==b || a==c || b==c)
         cout<<"- isoscel!"<<endl;
      else
         if ((a*a+b*b==c*c) || (a*a+c*c==b*b) || (b*b+c*c==a*a))
            cout<<"- dreptunghic!"<<endl;
         else
            cout<<"- oarecare!"<<endl;
}

19. Se citesc de la tastatura coordonatele extremitatilor a doua segmente. Sa se afiseze lungimea segmentului mai mare.

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
31
32
33
34
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   float x,x1, y1, x2,y2,x3,y3,x4,y4,l1,l2;
   cout<<"Introduceti coordonatele primului segment:"<<endl;
   cout<<"x1=";
   cin>>x1;
   cout<<"y1=";
   cin>>y1;
   cout<<"x2=";
   cin>>x2;
   cout<<"y2=";
   cin>>y2;
   cout<<"Introduceti coordonatele celui de-al doilea segment:"<<endl;
   cout<<"x3=";
   cin>>x3;
   cout<<"y3=";
   cin>>y3;
   cout<<"x4=";
   cin>>x4;
   cout<<"y4=";
   cin>>y4;
   l1=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
   l2=sqrt(pow((x3-x4),2)+pow((y3-y4),2));
   if (l1==l2)
      cout<<"Lungimile celor doua segmente sunt egale";
   else
      if (l1>l2)
         cout<<"Lungimea mai mare este l1="<<l1;
      else
         cout<<"Lungimea mai mare este l2="<<l2;
}

20. Sa se verifice daca o fractie a/b se poate simplifica prin k

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   int a,b,k;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   cout<<"k=";
   cin>>k;
   if (a%k==0 && b%k==0)
      cout<<"Fractia "<<a<<"/"<<b<<" se poate simplifica prin "<<k<<endl;
   else
      cout<<"Fractia "<<a<<"/"<<b<<" nu se poate simplifica prin "<<k<<endl;
}

21. Se citesc de la tastatura 2 numere reale a si b si un operator op. Sa se calculeze expresia a op b, unde op poate fi: ‘+’, ‘-‘, ‘/’, ‘%

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
31
32
33
34
35
36
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   float a,b,rez;
   char op;
   int test=1;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   cout<<"op=";
   cin>>op;
   if (op=='+')
      rez=a+b;
   else
      if (op=='-')
         rez=a-b;
      else
         if (op=='*')
            rez=a*b;
         else
            if (op=='/')
               rez=a/b;
            else
               if (op=='%')
                  int(rez)=int(a)%int(b);
               else
                  {
                     cout<<"operatie nedefinita"<<endl;
                     test=0;
                  }
   if (test==1)
    cout<<"Rezultatul operatiei "<<op<<" este: "<<rez;
}

22. Sa se introduca de la tastatura un numar n si sa se specifice daca acesta apartine intervalului [a,b], unde a si b sunt numere introduse de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   int n,a,b;
   cout<<"Introduceti numarul cautat: n=";
   cin>>n;
   cout<<"Introduceti intervalul"<<endl;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   if (n>=a && n<=b)
      cout<<"Numarul "<<n<<" este cuprins in intervalul ["<<a<<","<<b<<"]"<<endl;
   else
      cout<<"Numarul "<<n<<" nu este cuprins in intervalul ["<<a<<","<<b<<"]"<<endl;
}



Structuri repetitive (for / while / do...while)


1. Sa se calculeze suma primelor n numere consecutive: S=1+2+3+…+n.

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
   int n,i,s=0;
   cout<<"Introduceti valoarea lui n:";
   cin>>n;
   for (i=0;i<=n;i++)
      s=s+i;
   cout<<"s="<<s;
}

2. Sa se calculeze suma primelor n numere oarecare.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
   int n,a,i,s=0;
   cout<<"Introduceti valoarea lui n:";
   cin>>n;
   cout<<"Introduceti cele "<<n<<" numere de adunat "<<endl;
   for (i=0;i<n;i++)
   {
      cout<<"a=";
      cin>>a;
      s=s+a;
   }
   cout<<"s="<<s;
}

3. Sa se determine cate cifre are un numar natural.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
   int n,m,i=0;
   cout<<"Introduceti numarul n: ";
   cin>>n;
   m=n;
   while (n!=0)
   {
      n=n/10;
      i++;
   }
   cout<<"Numarul "<<m<<" are "<<i<<" cifre!";
}

4. Sa se determine suma cifrelor unui numar natural

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
   int n,m,r,s=0;
   cout<<"Introduceti numarul n: ";
   cin>>n;
   m=n;
   while (n!=0)
   {
      r=n%10;
      n=n/10;
      s=s+r;
   }
   cout<<"Suma cifrelor numarului "<<m<<" este "<<s;
}

5. Sa se determine cifra cea mai mare a unui numar natural.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   int n,m,r,max=0;
   cout<<"Introduceti numarul n: ";
   cin>>n;
   m=n;
   while (n!=0)
   {
      r=n%10;
      n=n/10;
      if (r>max)
         max=r;
   }
   cout<<"Cea mai mare cifra a numarului "<<m<<" este "<<max;
}

6. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor pozitive. Numarul 0 nu se ia in calcul.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main()
{
   int n,s=0,p=1;
   cout<<"n=";
   cin>>n;
   while (n!=0)
   {
      if (n>0)
         p=p*n;
      else
         s=s+n;
      cout<<"n=";
      cin>>n;
   }
   cout<<"s="<<s<<endl;
   cout<<"p="<<p<<endl;
}

7. Se citeste un numar natural oarecare. Sa se determine de cate ori se gaseste o cifra (introdusa de la tastatura) in scrierea lui.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main()
{
   int n,m,r,cifra, i=0;
   cout<<"Introduceti numarul n: ";
   cin>>n;
   m=n;
   cout<<"Introduceti cifra de cautat in numarul "<<n<<": ";
   cin>>cifra;
   while (n!=0)
   {
      r=n%10;
      n=n/10;
      if (r==cifra)
         i++;
   }
   cout<<"Cifra "<<cifra<<" se gaseste in numarul "<<m<<" de "<<i<<" ori!";
}

8. Sa se calculeze suma k+(k+1)+…+ (k+n).

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
   int n,k,i,s=0;
   cout<<"Introduceti valoarea lui n:";
   cin>>n;
   cout<<"Introduceti valoarea constantei k:";
   cin>>k;
   for (i=0;i<=n;i++)
      s=s+(k+i);
   cout<<"s="<<s;
}

9. Se citeste un numar n de cel putin 3 cifre. Sa se afiseze de cate ori se poate imparti numarul n la numarul m (introdus de la tastatura).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
   int n,m,i,nr=0;
   do
   {
      cout<<"Introduceti numarul n:";
      cin>>n;
   }
   while (n<100);
   cout<<"Introduceti valoare lui m=";
   cin>>m;
   while(n%m==0)
   {
      nr++;
      n=n/m;
   }
   cout<<"Numarul "<<n<<" se poate imparti la "<<m<<" de "<<nr<<" ori";
}

10. Sa se determine cel mai mare divizor comun a doua numere naturale a si b citite

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
int main()
{
   int x,y,m,n;
   cout<<"x= ";
   cin>>x;
   cout<<"y= ";
   cin>>y;
   m=x;n=y;
   while (x!=y)
      if (x>y)
      {
         x=x-y;
         cout<<"x>y: x="<<x<<" y="<<y<<endl;
      }
      else
      {
         y=y-x;
         cout<<"y>x: x="<<x<<" y="<<y<<endl;
      }
    cout<<"CMMDC("<<m<<","<<n<<")= "<<x;
    return 0;
}

11. Sa se calculeze valoarea lui N factorial, unde N este un numar citit de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main()
{
   int i,n,p;
   cout << "Introducenti valoarea lui n:";
   cin>>n;
   p=1;
   for (i=1;i<=n;i++)
      p=p*i;
   cout<<"N!="<<p;
   return 0;
}

12. Sa se numere si afiseze divizorii unui numar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
   int n,m,r,i,j=0;
   cout<<"Introduceti numarul n: ";
   cin>>n;
   m=n;
   for (i=1;i<=n;i++)
   {
      r=n%i;
      if (r==0)
      {
         j++;
         cout<<"Numarul "<<i<<" este divizor al lui "<<m<<endl;
      }
   }
   cout<<"Numarul "<<m<<" are "<<j<<" divizori!";
   return 0;
}

13. Sa se verifice daca un numar natural este prim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main()
{
   int n,i,test;
   cout<<"n=";
   cin>>n;
   test=0;
   for (i=2;i<=n-1;i++)
      {
         if (n%i==0)
         test=1;
      }
   if (test==0)
   cout<<"numarul "<<n<<" este prim!"<<endl;
   else
   cout<<"numarul "<<n<<" nu este prim!"<<endl;
   return 0;
}

14. Sa se afiseze si sa se contorizeze toate numerele prime din intervalul [a,b].

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
#include <iostream>
using namespace std;
int main()
{
   int a,j,b,i,c=0,test,n;
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   for (j=a;j<=b;j++)
   {
      test=0;
      for (i=2;i<=j-1;i++)
         {
            if (j%i==0)
            test=1;
         }
   if (test==0)
      {
         cout<<"numarul "<<j<<" este prim!"<<endl;
         c++;
      }
   else       cout<<"numarul "<<j<<" nu este prim!"<<endl;
   }
   cout<<endl<<"In intervalul "<<a<<" "<<b<<" avem "<<c<<" numere prime!!!";
   return 0;
}

15. Sa se afiseze triunghiul:
            1
            1 2
            1 2 3
            1 2 3 4
            ………………
            1 2 3…………n
pentru un n citit de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   int n,m,r,i,j=0;

   cout<<"Introduceti numarul n: ";    cin>>n;
   for (i=1;i<=n;i++)
   {
      for(j=1;j<=i;j++)
      {
         cout<<j<<" ";
      }
      cout<<endl;
   }
   return 0;
}

16. Sa se afiseze triunghiul :
            *
            **
            ***
            …
            ****….* - de n ori
pentru n citit de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   int n,m,r,i,j=0;
   cout<<"Introduceti numarul n: ";
   cin>>n;
   for (i=1;i<=n;i++)
   {
      for(j=1;j<=i;j++)
      {
         cout<<"*"<<" ";
      }
      cout<<endl;
   }
   return 0;
}

17. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor pozitive. Numarul 0 nu se ia in calcul.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   int n,s=0,p=1;
   do
   {
      cout<<"n=";
      cin>>n;
      if (n<=0)
         s=s+n;
      else
         p=p*n;
   }
   while (n!=0);
   cout<<"s="<<s<<endl;
   cout<<"p="<<p<<endl;
   return 0;
}

18. Un numar natural se numeste perfect daca el este egal cu suma divizorilor sai mai mici decat el.De ex 28 este un numar perfect pentru ca 28=1+2+4+7+14.Sa se determine toate numerele perfecte mai mici decat un numar dat (10000).

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
#include <iostream>
using namespace std;
int main()
{
   int i, j, k, l, inc, m, n, v[50],s=0;
   cout<<"Introducenti valoarea lui n:";
   cin>>n;
   j=1;
   for (i=1;i<n;i++)
   {
      if (n%i==0)
         {
            v[j]=i;
            j++;
         }
   }
   j--;
   for (i=1;i<=j;i++)
   {
      cout<<v[i]<<" ";
      s=s+v[i];
   }
   if (s==n)
      cout<<endl<<"Numarul "<<n<<" este numar perfect";
   else
      cout<<endl<<"Numarul "<<n<<" nu este numar perfect";
   return 0;
}

19. Fie un numar format din trei cifre. Sa se afiseze cifrele sale incepand cu cifra unitatilor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main()
{
   int n,r;
   do
   {
      cout<<"n=";
      cin>>n;
   }
   while (n<100 || n>999);
   while (n)
   {
      r=n%10;
      cout<<r;
      n=n/10;
   }
   return 0;
}

20. Sa se afle daca un numar N introdus de la tastatura este sau nu palindrom. Palindromul este un numar al carui rasturnat este identic cu numarul initial. Ex : 12321, 2536352, 356653

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
#include <iostream>
using namespace std;
int main()
{
   int n,temp,m=0,r;
   do
   {
      cout<<"n=";
      cin>>n;
   }
   while (n<100);
   temp=n;
   while (temp)
   {
      r=temp%10;
      cout<<r;
      m=m*10+r;
      temp=temp/10;
   }
   cout<<endl<<"n="<<n<<endl;
   cout<<"m="<<m<<endl;
   if (m==n)
      cout<<"Numarul "<<n<<" este palindrom!";
   else
      cout<<"Numarul "<<n<<" nu este palindrom!";
   return 0;
}

21. Fie a un numar natural format din 5 cifre. Scrieti un algoritm care sa determine si sa afiseze numarul format din prima, a treia si a cincea cifra din a.

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
31
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
   int n,i,j,r[10],m;
   do
   {
      cout<<"Introduceti valoarea lui n:";
      cin>>n;
   }
   while (n<10000 || n>99999);
   i=1;
   while (n)
   {
      r[i]=n%10;
      cout<<"r="<<r[i]<<endl;
      n=n/100;
      cout<<"n="<<n<<endl;
      i++;
   }
   i--;
   m=0;
   for (j=i;j>=1;j--)
   {
      cout<<r[j]<<" ";
      m=m+r[j]*(float)pow(10,j-1);
   }
   cout<<endl<<"Numarul format din cifrele 1/3/5 este: "<<m;
   return 0;
}

22. Fie 2 numere cu 4 cifre. Sa se afiseze acela care are suma cifrelor mai mare.

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
31
32
33
34
35
36
37
38
39
#include <iostream>
using namespace std;
int main()
{
   int m,m1,n,n1,i,s1=0,s2=0,inv=0,r;
   do
   {
      cout<<"Introduceti numarul n:";
      cin>>n;
      n1=n;
   }
   while (n<1000 || n>9999);
   while (n>0)
   {
      r=n%10;
      s1=s1+r;
      n=n/10;
   }
   cout<<"Suma cifrelor numarului "<<n1<<" este: s1="<<s1<<endl;
   do
   {
      cout<<"Introduceti numarul m:";
      cin>>m;
      m1=m;
   }
   while (m<1000 || m>9999);
   while (m>0)
   {
      r=m%10;
      s2=s2+r;
      m=m/10;
   }
   cout<<"Suma cifrelor numarului "<<m1<<" este: s2="<<s2<<endl;
   if (s1>=s2)
      cout<<"Numarul cu suma cifrelor mai mare este: "<<n1;
   else
      cout<<"Numarul cu suma cifrelor mai mare este: "<<m1;
   return 0;
}

23. Fiind dat un numar de 4 cifre, sa se construiasca inversul acestuia si sa se faca media aritmetica a cifrelor sale.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main()
{
   int n,i,s=0,inv=0,r;
   do
   {
      cout<<"Introduceti numarul n:";
      cin>>n;
   }
   while (n<1000 || n>9999);
   while (n>0)
   {
      r=n%10;
      s=s+r;
      inv=inv*10+r;
      n=n/10;
   }
   cout<<"Inversul numarului "<<n<<" este: "<<inv<<endl;
   cout<<"Suma cifrelor numarului "<<inv<<" este: s="<<s;
   return 0;
}

24. Sa se verifice daca cifrele unui numar sunt ordonate crescator.

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
31
32
33
34
#include <iostream>
using namespace std;
int main()
{
   int m,n,r,r1,cresc;
   cout<<"Introduceti numarul: n=";
   cin>>n;
   m=n;
   r1=n%10;
   n=n/10;
   cresc=1;
   while (n>0)
   {
      r=n%10;
      n=n/10;
      cout<<"r1="<<r1<<" r="<<r<<endl;
      if (r>r1)
      {
       r1=r;
       cresc=0;
       cout<<"cresc="<<cresc<<endl;
      }
      else
      {
       r1=r;
       cout<<"cresc="<<cresc<<endl;
      }
   }
   if (cresc==1)
    cout<<"Cifrele numarului "<<m<<" sunt ordonate crescator!!!";
   else
    cout<<"Cifrele numarului "<<m<<" nu sunt ordonate crescator!!!";
   return 0;
}

25. Numar deal

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;
int main()
{
   int n, r,r1,i=1,j=1,deal=1;
   cout<<"n=";
   cin>>n;
   r1=n%10;
   n=n/10;
   while (n>0)
   {
      r=n%10;
      n=n/10;
      if ((r==r1))
         deal=0;
      else
         if (r>r1)
         {
            cout<<"r1="<<r1<<" r="<<r<<" ";
            cout<<"cresc"<<endl;
            r1=r;
            i++;
            cout<<"i="<<i<<endl;
            if (j>=2)
               {
               cout<<"nr nu este deal"<<endl;
               deal=0;
               }
            else
               cout<<"nr este deal"<<endl;
         }
      else
      {
         cout<<"r1="<<r1<<" r="<<r<<" ";
         cout<<"descresc"<<endl;
         r1=r;
         j++;
         cout<<"j="<<j<<endl;
      }
   }
      cout<<"Raspuns final:"<<endl;
      if (deal==1)
         cout<<"nr este deal"<<endl;
      else
         cout<<"nr nu este deal"<<endl;
      return 0;
}

26. Sa se creeze un program care sa realizeze descompunerea in factori primi a unui numar natural n si sa afiseze fiecare factor prim si puterea corespunzatoare.

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
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
int main()
{
   int n,fact,putere,f[10],p[10],i=0,j=1;
   cout<<"n=";cin>>n;
   int m=n;
   fact=2;
   while(n>1)
   {
      putere=0;
      cout<<"fact="<<fact<<endl;
      while(n%fact==0)
      {
         putere++;
         cout<<"putere="<<putere<<endl;
         n=n/fact;
         cout<<"n="<<n<<endl;
         cout<<"fact="<<fact<<endl;
      }
      cout<<"p out ="<<putere<<endl;
      if(putere!=0)
      {
         i++;
         cout<<fact<<" la puterea "<<putere<<endl;
         f[i]=fact;
         p[i]=putere;
      }
      else
         cout<<fact<<" nu este factor al lui "<<n<<endl;
      fact++;
   }
   cout<<endl<<m<<" = ";
   while (j<=i)
   {
      cout<<f[j]<<" la puterea "<<p[j];
      if (j<i)
         cout<<" * ";
      j++;
   }
}