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;
}