Tipul boolean
Tipul boolean sau tipul de dată logic este tipul ce are două valori: true
şi false
.
Acest tip este folosit în contextele booleene, acolo unde expresia este evaluată* la true
sau false
. De exemplu, în condiţia de la if
sau while
.
O variabilă de tip bool
se declară normal, ca orice variabilă:
bool x = true;În contextele booleene din C/C++, valorile pozitive sunt evaluate la
true
, iar ZERO este evaluat la false
. De exemplu:
if (1) cout << "TRUE";Se va afişa mesajul
TRUE
deoarece 1 este interpretat ca fiind true
.
Operatorii care returnează un rezultat booleean sunt operatorii relaţionali şi operatorii logici.
Operatorii relaţionali sunt:
< // Mai mic <= // Mai mic sau egal == // Egal != // Diferit > // Mai mare >= // Mai mare sau eaglÎn general sunt folosiţi cu numere (întregi, reali), dar veţi vedea că pot fi definiţi şi pentru alte tipuri.
Opeatorii logici sunt:
&& // AND - SI LOGIC || // OR - SAU LOGIC ! // NOT - NEGATIE LOGICAOperatorul AND returnează
true
dacă ambii operanzi sunt true
. Operatorul OR returnează
true
dacă cel puţin unul dintre operanzi este true
.Operatorul NOT inversează valoarea booleană a expresiei, variabilei, etc.
C++ foloseşte evaluarea scurtă.
Pentru AND: Dacă primul operand este
false
atunci întreaga expresie este false
; nu se mai evaluează operandul al doilea. Pentru OR: Dacă primul operand este
true
atunci întreaga expresie este true
; nu se mai evaluează operandul al doilea. Dintre aceşti operatori, NOT are prioritatea cea mai mare, urmat de operatorii relaţionali, apoi (în această ordine) AND şi OR.
Tabelul cu precedenţa operatorilor.
Structuri decizionale
Instrucţiunea if
permite execuţia unei porţiuni de cod* doar dacă o anumită condiţie este îndeplinită. Condiţia este dată de programator.
#include <iostream> using namespace std; int main() { int a = 4; if (a >= 4) { cout << "Hi!"; } else { cout << "Bye!"; } return 0; }Se va afişa
if
deoarece variabila a memorează 4, iar 4 este mai mare sau egal cu 4. Ramura
else
este executată atunci când condiţia de la if
nu este îndeplinită. Dacă if
se execută atunci programul ignoră ramura else
. În cazul unei singure instrucţiuni (valabil pentru toate structurile de control) acoladele pot lipsi.
După
else
poate urma un alt if
, şi un altul, până când cascada de if else
se termină în else
sau nu se termină în nimic, deoarece else
este opţional.
#include <iostream> using namespace std; int main() { double nr; cin >> nr; if (nr >= 2) { cout << "Ai introdus un numar mai mare sau egal cu 2."; } else if (nr < 0) { cout << "Ai introdus un numar negativ"; } else { cout << "Ai introdus un numar din intervalul [0, 2)"; } return 0; }Aici, ultimul
else
este executat numai dacă ramurile superioare nu sunt executate.
Condiţia de la if
(ca şi la celelalte structuri) poate fi orice: constantă, variabile, expresie, orice se poate evalua la true
sau false
.Mod de funcţionare
if
:
- Se evaluează condiţia. Dacă este
true
se trece la pasul următor; dacă estefalse
se trece la pasul 3. - Se execută codul din blocul
if
(dintre acolade) şi se trece la pasul 4. - Se execută ramura
else
şi se trece la pasul 4. - Se iese din
if
şi se continuă execuţia programului.
Instrucţiunea switch
este, într-un fel, similară cu if
. Permite execuţia anumitor instrucţiuni în funcţie de rezultatul unei expresii, variabile, etc.
#include <iostream> using namespace std; int main() { int nr; cin >> nr; switch(nr) { case 1: cout << "Ai introdus 1"; break; case 2: cout << "Ai introdus 2"; break; default: cout << "Ai introdus un numar diferit de 1 si 2"; break; } return 0; }Instrucţiunea
switch
compară rezultatul expresiei dintre paranteze (aici este variabila nr) cu fiecare caz şi-l execută atunci când găseşte o potrivire. Expresiile de la
case
trebuie să fie constante. Fără
break
, switch
ar evalua în continuare celelalte cazuri chiar dacă l-ar găsi pe cel potrivit. Omiterea instrucţiunii
break
nu generează o eroare, deoarece este opţional. Ultimul caz,
default
(implicit), se execută atunci când nu există potriviri cu celelalte cazuri.Un exemplu care arată cum puteţi valorifica lipsa
break
-ului:
#include <iostream> using namespace std; int main() { int nr; cin >> nr; switch(nr) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: cout << "Ai introdus ziua a " << nr << "-a"; break; default: cout << "Te rog sa introduci numarul valid al unei zile"; } return 0; }Să zicem că nr este 2. Se execută cazul 2, apoi, deoarece nu există
break
, se trece la 3, apoi la 4, ... până la 7 unde există break
şi se iese din switch
.
Structuri iterative - Bucle - Loop-uri
Instrucţiunea while
repetă o porţiune de cod până când condiţia devine falsă. Dacă condiţia nu devine falsă la un moment dat, while
va continua să ruleze (până când programul este oprit forţat de programator / user).
#include <iostream> using namespace std; int main() { int nr; cout << "Ca sa inchizi programul scrie 0.\n"; cin >> nr; while (nr != 0) { // Cat timp nr nu este 0 cout << nr * 2 << '\n'; cin >> nr; } return 0; }Condiţia de la
while
, în acest exemplu, este nr != 0
. Atunci când folosim loopuri trebuie să ne asigurăm că aceste condiţii vor deveni false în cele din urmă, ca să evităm repetiţiile infinite.
În exemplul meu, decizia de a opri programul (care în fond înseamnă oprirea iteraţiei) îi aparţine utilizatorului, prin acel
cin >> nr;
din while
. Mod de funcţionare
while
:
- Se evaluează condiţia. Dacă este
true
se trece la pasul următor. Dacă estefalse
se trece la pasul 4. - Se execută codul din blocul
while
(dintre acolade). - Se trece la pasul 1.
- Se iese din
while
şi se continuă execuţia programului.
O variaţie a structurii while
este do { } while(conditie);
Spre deosebire de while
, codul în do while
este executat cel puţin o dată indiferent de condiţie.
#include <iostream> using namespace std; int main() { bool conditie = false; do { cout << "In while :)"; } while (conditie); return 0; }Se va afişa
In while :)
deoarece evaluarea se face la final.Observaţi
;
după while
. Este obligatoriu.
Instrucţiunea for
repetă de un anumit număr de ori o porţiune de cod.
#include <iostream> using namespace std; int main() { for (int i = 1; i <= 10; i++) { cout << i << ' '; } return 0; }Se va afişa:
1 2 3 4 5 6 7 8 9 10
. for (initializare; conditie; incrementare)Instrucţiunea
for
are trei părţi:
- La iniţializare se declară (şi se iniţializează) variabila (sau variabilele) contor (folosită la numărat).
- La conditie avem o expresie de terminare a iteraţiei.
- La incrementare (sau decrementare) variabila contor este modificată astfel încât condiţia să poată deveni la un moment dat falsă.
for
, deşi dacă o declaraţi acolo, ea va fi vizibilă numai în blocul for
.
#include <iostream> using namespace std; int main() { for (int i = 10; i > 0; i-=2) { cout << i << ' '; } return 0; }Se va afişa:
10 8 6 4 2
.
Mod de funcţionare:
- Se iniţializează variabilele (Această parte se execută o singură dată).
- Se evaluează condiţia. Dacă este
true
se trece pasul următor. Dacă estefalse
se trece la pasul 5. - Se execută codul din blocul
for
. - Se execută instrucţiunea de la incrementare.
- Se iese din
for
şi se continuă execuţia programului.
Prin cod se înţelege o instrucţiune sau grup de instrucţiuni.
A evalua este echivalent cu a executa.
Niciun comentariu:
Trimiteți un comentariu
Rețineți: Numai membrii acestui blog pot posta comentarii.