Sunteți pe pagina 1din 10

structura unui program:

declaratii de biblioteci
using namespace std;
declaratii variabile globale
int main()
{ declaratii variabile locale
instructiuni
return 0;
}
In cadrul unui program C++ se utilizeaza constante si variabile. Acestea se
identifica prin intermediul unui identificator de date pe care il pot memora.Un
identificator poate sa contina:
a...z , A...Z, 0...9 , _
Dar nu pot sa inceapa cu o cifra!
OBS! Limbajul C++ face distinctie intre literele mari si mici ale alfabetului.
ex: a, A
int Main()
Un program C++ poate sa contina una sau mai multe functii, dar in mod
obligatoriu acesta trebuie sa contina functia main care se mai numeste si
functia principala a programului.

Teorie
Tipuri de instructiuni:
1. Instructiunea compusa
2. Instructiunea de atribuire
3. Instructiunea de citire
4. Intructiunea de scriere
5. Instructiunea de decizie
6. Instructiunea de selectie
7. Instructiunea repetitiva cu nr. cunoscut de pasi
8. Instructiunea repetitiva cu test initial
9. Instructiunea repetitiva cu test final
1. Instructiunea compusa
{
    instr 1;
    instr 2;
    .......
    instr n;
}

Unde instr 1, instr 2, ..., instr n pot fi oricare dintre instructiunile limbajului de programare.

2. Instructiunea de atribuire
var=expresie

Unde "=" se numeste operator de atribuire.

Modul de executie:
- se evalueaza expresia aflata la dreapta semnului de atribuire si rezultatul obtinut este memorat in variabila
aflata la stanga semnului de atribuire.

OBS!
Variabila si expresia utilizata in cadrul unei instructiuni de atribuire trebuie sa aibe acelasi tip de date sau sa fie
de tipuri compatibile de date.

Ex::
int x,y;
float m,n;
x=2;                                 x=2
y=x+2;                             y=4
m=x/y;                             m=0
n=m*2+x-5;                    n=-3
x=y+12;                          y=16
x=(m>n);                         x=1

In limbajul C++ exista si urmatorii operatori de atribuire:

+=, -=, /=, *=, %=

Ex: 
int x=6,y=3;
x+=12 <=> x=x+12(18)
y/=5 <=> y=y/5(0)
x%=y <=> x=x%y(0)
y*=2 <=> y=y*2(0)

3. Instructiunea de citire

OBS!
Functiile pentru citirea si afisare datelor se afla in biblioteca iostream.

Atunci cand un program utilizeaza cel putin o instructiune de citire sau afisare programul trebuie sa contina in
mod obligatoriu in sectiunea de declarare biblioteci linia:

#include <iostream>

Forma generala a instructiunii de citire este urmatoarea:

cin>>var1[>>var2>>...>>varn];

Instructiunea de citire se efectueaza astfel:


- se intrerupe executia programului si se asteapta introducerea unui nr de valori "=" cu numarul variabilelor
aflate in cadrul instructiunii cin.
- valorile introduse sunt memorate pe rand in variabila din linia de instr. 

OBS!
Valorile introduse trebuie sa fie de acelasi tip de date ca si tipurile de date aflate in cadrul instructiunii de citire.

Ex:
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;        // <=> cin>>a; cin>>b;
return 0;
}

4. Instructiunea de scriere
cout<<exp1[<<exp2<<...<<expn];

Modul de executie:
-se evalueaza expresiile care apar in cadrul liniei de instr. si valorile obtinute se afiseaza pe ecran.

In cadrul unei instrucituni cout se pot afisa si caractere sau siruri de caractere. In limbajul C++ se reprezinta
incadrate intre apostrofuri, iar sirurile de caractere se reprezinta intre ghilimele.

Ex: Se citesc de la tastatura 2 nr intregi a si b. Scrieti un program care afiseaza suma si produsul celor 2 nr.

#include <iostream>
using namespace std;
int main()
{
int a,b;
cout<<"Introduceti valoarea lui a "; cin>>a;
cout<<"Introduceti valoarea lui b "; cin>>b;
cout<<a+b<<" "<<a*b;
return 0;
}

In cadrul instructiunii cout pot sa apara endl care realizeaza saltul la linie noua a cursorului.

Endl <=> '\n'

Ex:
cout<<a+b<<endl;
cout<<a*b;

Pentru afisare datelor intregi sau reale se pot utiliza din biblioteca iomanip.

setw(nr) = nr care precizeaza pozitiile pe care va fi afisata valoare intreaga sau reala. Daca acest nr este mai
mic decat nr. pozitiilor necesare afisarii unei date atunci acesta va fi ignorat.

setprecision(nr) = specifica nr de zecimale care vor fi utilizate pentru afisarea datelor reale. In cazul in care data
reala nu are zecimala sau un numar de nr zecimale aceasta va fi ignorata.

Pentru afisarea tuturor datelor reale cu un nr exact de zecimale se utilizeaza cuvantul fixed care se afla in
aceeasi biblioteca iomanip.

Ex: Se citesc 2 nr reale x si y. Sa se afiseze cele 2 nr cu cel mult 3 zecimale.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float x,y;
cout<<"x= "; cin>>x;
cout<<"y= "; cin>>y;
cout<<setprecision(3)<<x<<" "<<y;
return 0;
}

OBS!
Pentru afisarea nr cu exact 3 zecimale, la afisare vom folosi urmatoarea structura:

cout<<fixed<<setprecision(3)<<x<<" "<<y;

5. Instructiunea de decizie
a) if(expresie)
         instr1;
else
         instr2;

b) if(expresie)
         instr1;

Modul de executie:
- se evalueaza expresia si daca aceasta este diferita de 0 se efectueaza instructiunea 1.
- in cazul in care valoarea expresiei este egala cu 0 atunci:

a) daca instructiunea if este in forma a) se efectueaza instructiunea 2.


b) daca instructiunea if este in forma b) atunci se executa instructiunea care urmeaza in cadrul algoritmului
dupa instructiunea de decizie.

Ex: Se citesc 2 nr intrgi a si b. Scriei un program C++ care afiseaza valoarea maxima dintre cele 2 nr citite.

#include <iostream>
using namespace std;
int main()
{int a,b;
cout<<"Introduceti a= "; cin>>a;
cout<<"Introduceti b= "; cin>>b;
if(a>b)
         cout<<a<<" este mai mare ca "<<b;
else
         cout<<b;
return 0;
}

NOTA
if(a!=0) <=> if(a)
if(a==0) <=> if(!a)

6. Instructiunea de selectie(switch)
swith(expresie)
{
case exp1: instructiuni; break;
case exp2: instructiuni; break;
............................................
case expn: instructiuni; break;
[default: instructiuni]
}

- unde exp1, exp2,..., expn pot fi constante variabile sau expresii de acelasi tip simplu de date.

Modul de executie:
- se efectueaza instructiunea pentru care expresia este egala cu una dintre expresiile exp1, exp2,..., expn.
- in cazul in care expresia nu este egala cu niciuna dintre cele n expresii atunci se efectueaza instructiunile care
urmeaza dupa default, in cazul in care aceasta clauza este prezenta in cadrul instructiunii switch, si daca
aceasta nu mai apare in cadrul insructiunii switch, atunci se termina de efectuat instructiunea switch si se
efectueaza instructiunea urmatoare in cadrul programului instructiunii switch.

OBS!
O problema care se rezolva cu ajutorul instructiunii switch se poate rezolva si utilizand instructiuunea if.

Ex:
Se citesc de la tastatura 2 nr intregi a si b si unul dintre operatorii matematici: +, /, -, *. Scrieti un program care
afiseaza:
"a+b" daca +
"a-b" daca -
"a*b" daca *
"a/b" daca / (catul real)

#include <iostream>
using namespace std;
int main()
{int a,b; char c;
cin>>a>>b;
cin>>c;
switch(c)
{
case '+': cout<<a+b; break;
case '-': cout<<a-b; break;
case '*': cout<<a*b; break;
case '/': cout<<a/b; break;
default: cout<<"Operator gresit";
}
return 0;
}

Instructiuni repetitive
1. Instructiunea repetitiva cu nr cunoscut de pasi(for)
for(expresie_initializare; exp_test; exp_incrementare/decrementare)
         instructiune;

Modul de executie:
- se efectueaza expresia de initializare si se valueaza expresia de test. Dca rezultatul expresiei de test este
diferit de 0(adica este adevarata) se efectueaza instructiunea subordonata instructiunii for.
- dupa efectuarea instructiunii subordonate se efectueaza expresia de incrementare sau de decrementare, si se
evalueaza din nou expresia de test. Daca valoarea acesteia este diferita de 0 se efectueaza din nou
instructiunea subordonata secventii for si se efectueaza expresia de incrementare sau de decrementare.
- algoritmul se continua pana cand valoarea expresiei de test este egala cu 0(este falsa)

OBS!
Instructiunea subordonata secventei for poate fi instructiune simpla sau compusa.

Ex: Se citeste n nr nat. Scrieti un prgram care calculeaza suma primelor n nr naturale.

S=1+2+3+...+n, n∈N

#include <iostream>
using namespace std;
int main()
{int n,S,i;
cin>>n;
S=0;
for(i=1;i<=n;i++)
         S=S+i;
cout<<S;
return 0;
}

2. Instructiunea repetitiva cu test initial(while)


while(expresie)
         instructiune;

Modul de executie:
- se evalueaza expresia si daca aceasta este diferita de 0 se efectueaza instructiunea subordonata. Dupa
efectuarea instructiunii se evalueaza din nou expresia si daca aceasta este diferita de 0 se efectueaza din nou
instructiunea subordonata. Algoritmul se reia cat timp valoarea expresiei este diferita de 0.
- in cazul in care valoarea expresiei este egala cu 0, se termina de efectuat instructiunea while si se efectueaza
instructiunea care urmeaza in cadrul programului dupa instructiunea while.

Ex:

n∈N
S=1+2+...+n.

#include <iostream>
using namespace std;
int main()
{int n,i,S=0;
cin>>n;
i=1;
while(i<=n)
{
         S=S+i;
         i++;
}
cout<<S;
return 0;
}

3. Instructiunea repetitiva cu test final(do-while)


do
     instructiune;
while(expresie);

Modul de executie:
- se efectueaza instructiunea subordonata si apoi se evalueaza expresia, daca expresia este diferita de 0 atunci
se efectueaza din nou instructiunea subordonata.
- dupa efectuarea instructiunii se evalueaza din nou expresia, algoritmul reluandu-se cat timp expresia este
diferita de 0.
- in cazul in care valoarea expresiei este egala cu 0 se termina de efectuat instructiunea do-while si se executa
instructiunea care urmeaza in cadrul programului dupa aceasta.

Ex:
n∈N
S=1+2+...+n;

#include <iostream>
using namespace std;
int main()
{int n,i,S=0;
cin>>n;
i=1;
do
{
     S+=i;
     i++;
}
while(i<=n);
cout<<S;
return 0;
}

Probleme
I. Probleme rezolvate

1. Scrieti un program C++ care calculeaza valoarea expresiei: S=1+1/2+1/3+..+1/n, n∈N.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{int n,i;
float S=0;
cin>>n;
for(i=1;i<=n;i++)
S=S+(float)1/i;
cout<<S;
return 0;
}

2. Se citeste n nr natural. Si apoi se citesc n nr cu cel putin 9 cifre fiecare. Scrieti un program C++ care
afiseaza nr care are cea mai mare suma a cifrelor.

#include <iostream>
using namespace std;
int main()
{int n,i,S,max=0;
long x;
cin>>n;
for(i=1;i<n;i++)
{
cin>>x;
aux=x;
S=0;
while(x!=0)
{
S=S+x%10;
x=x/10;
}
if(S>max)
{
m=aux;
max=S;
}
}
cout<<n;
return 0;
}
3. Se citeste n nr natural. Si apoi se citesc n nr intregi. Scrieti un program care afiseaza nr cifrelor egale
cu 1 care apar in scrierea fiecarui nr in baza 2.

#include <iostream>
using namespace std;
int main()
{int n,x,nr,i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
nr=0;
while(x!=0)
{
if(x%2==1)
nr++;
x=x/2;
}
cout<<nr<<" ";
}
return 0;
}

4. Se considera un numar n citit de la tastatura. Sa se realizeze un program care afiseaza pe ecran


cifrele pare ale acestuia in ordinea inversa aparitiei, separate prin cate o virgula.

#include <iostream>
using namespace std;
int main()
{long n;
int x=0;
cin>>n;
while(n)
{
x=n%10;
if(x%2==0)
cout<<x<<", ";
n=n/10;
}
return 0;
}

5. Se considera un nr natural n. Sa se formeze doua noi numere, unul format din cifrele pare ale lui n,
celalalt format din cifrele impare.

#include <iostream>
using namespace std;
int main()
{long n,a,b;
int x; cin>>n;
a=0;
b=0;
while(n)
{
x=n%10;
if(x%2==0)
a=a*10+x;
else
b=b*10+x;
n=n/10;
}
cout<<a<<" "<<b;
return 0;
}

6. Se citesc nr intregi pana la intalnirea valorii 0. Scrieti un program care afiseaza nr de valori prime
citite.

#include <cmath>
#include <iostream>
using namespace std;
int main()
{int x,i,p,nr=0;
cin>>x;
while(x!=0)
{
p=1;
for(i=2;i<=sqrtf(x);i++)
if(x%i==0)
p=0;
if(p!=0)
nr++;
cin>>x;
}
cout<<nr;
return 0;
}

7. Se citeste n nr natural, si apoi se citesc n numere cu cel putin 9 cifre fiecare. Scrieti un program care
pentru fiecare cele n nr citite determina cea mai mare cifra care apare in scrierea nr.

#include <iostream>
using namespace std;
int main()
{int n,i,max;
long x;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
max=0;
while(x!=0)
{
if(x%10>max)
max=x%10;
x=x/10;
}
cout<<max;
}
return 0;
}

II. Probleme propuse

1. Se considera un numar natural n (n>1000). Sa se afiseze cele doua numere formate prin
"injumatatirea" scrierii zecimale a lui n.
Exemplu: Pentru 12345 se va afisa 12 si 345. Pentru n=182345 se va afisa 182 si 345.

2. Se considera un nr natural n (n>100). Sa se afiseze cifrele situate pe pozitii impare incepand cu cifra
unitatilor.
Exemplu: Pentru n=12345 se va afisa 52

3. Se considera un nr natural n (n>100). Sa se afiseze suma primelor doua cifre ale lui n.
Exemplu: Pentru n=1235 se va afisa 3

4. Se considera un nr natural n. Sa se afiseze cel mai mic multiplu par al numarului format din prima si
ultima cifra a acestuia.
Exemplu: Pentru n=1235 se va afisa 30

5. Se considera un nr natural n (n>1000). Sa se afiseze numarul format din cifrele pare ale lui n situate
pe pozitii impare incepand cu prima cifra a sa.
Exemplu: Pentru n=724582 se va afisa 48

6. Se considera un numar natural n (n>1000). Sa se afiseze numarul de aparitii a cifrei unitatilor in


scrierea lui n.
Exemplu: Pentru n=15535 se va afisa 3 (5 apare de 3 ori)

7. Se considera un numar natural n (n>1000). Sa se afiseze cea mai mare cifra care apare in scrierea lui
n si numarul de aparitii al ei.
Exemplu: Pentru n=19539 se va afisa "9 apare de 2 ori"

S-ar putea să vă placă și