Baza C++
Baza C++
Comentarii
Un comentariu, în limbajul C++, începe cu semnul //comentariu - pentru a scrie un comentariu
pe o singură linie – sau cu semnul /* comentariu */ - pentru a scrie un comentariu pe mai multe
linii. Comentariile nu au niciun efect asupra comportamentului programului. Programatorul poate
să le folosească pentru a include explicaţii scurte sau observaţii asupra codului sursă.
§ unsigned char: caracter fara semn, ocupa 8 biti si ia valori intre [0,255]
§ char: caracter, ocupa 8 biti, [-128,127]
§ unsigned int: intreg fara semn, 16 biti, [0,65535]
§ short int: intreg scurt, 16 biti, [-32768,32767]
§ int : intreg, ocupa de regule 16 biti (nr lor difera de la o implemantare la alta) [-32767,
32767]
§ unsigned long: intreg lung fara semn, 32 biti, [0,4 294 967 295]
§ long : intreg lung cu semn, 32 biti, [-2 147 483 648, 2 147 483 647]
Modificatorii de tip. Limbajul C++ oferă pe lîngă cele 5 tipuri de bază prezentate mai sus, un set
de modificatori de tip:unsigned(fără semn), long(lung), signed(cu semn), register(registru),
short(scurt). Un modificator de tip schimbă domeniul valorilor pe care o variabilă le poate păstra,
sau modul în care compilatorul păstrează o variabilă. Pentru a se modifica un tip de data, se va
plasa modificatorul în faţa tipului respectiv.
2. Constante
Sunt date a căror valoare nu poate fi modificată în timpul execuţiei programului. Ele reprezintă
un tip şi o valoare şi astfel pot fi de mai multe tipuri:
§ constantă întreagă - se reprezintă sub forma unei înşiruiri de cifre: 6,456,1234.
§ constantă flotantă - 6.023e-23 = 6.023*10-23
§ constantă caracter este de fapt un caracter între apostrofuri. Se reprezintă pe 8 biţi, fiind
chiar reprezentarea în codul ASCII a caracterului respectiv.
Exemplu: ‘A’ reprezentare internă - 65 (codul ASCII a caracterului ‘A’), ‘a’
reprezentare internă - 97 (codul ASCII a caracterului ‘a’)
§ constanta şir sau şir de caractere - acest tip de constantă apare ca o succesiune
de caractere scrise între ghilimele. Exemplu:”program”,”CalculaTor”.
3. Variabile
Pentru a putea utiliza informaţiile ce pot fi prelucrate prin intermediul programelor, trebuie să
folosim denumiri (identificatori), care să fie compuşi din – litere, cifre şi liniuţa de subliniere
(caracterul underscore) - maxim 31 caractere.
Numim variabilă o denumire (identificator) pe care compilatorul o asociază cu o anumită zonă de
memorie. Când se declară o variabilă, trebuie specificat numele ei cât şi tipul de date asociat.
Exemple:
Limbajul C++ este case sensitive, adică face diferenţa dintre literele mici şi mari, astfel încât, două
denumiri de variabile sau de funcţii, care sunt identice dar sunt scrise o dată cu litere mici iar
apoi cu litere mari, se consideră ca fiind două denumiri de variabile sau de funcţii diferite.
Variabilele pot fi:
Expresia este alcătuită dintr-unul sau mai mulţi operanzi legaţi între ei prin operatori pentru a
efectua anumite operații (calcule, atribuiri, apelări de funcții, etc.). Limbajul C++ conține un set
puternic de operatori. Cei mai importanți operatori ai limbajului C++ sunt:
§ Operatorii aritmetici
§ Operatorii relaționali
• Operatorii de incrementare și decrementare
• prefixați
• postfixați
§ Operatorii logici
§ Operatorii de asignare(atribuire)
§ Operatorul conditional
§ Operatorul de conversie explicită
§ Operatorul dimensiune sizeof
a) Operatori aritmetici
Nr. crt. Operator Semnificaţie Tipul datelor Exemplu
1. + adunare numeric z = y + x;
2. - scădere numeric z = y – x;
3. * înmulţire numeric z = y * x;
4. / împărţire numeric z = y / x;
5. % modulo întreg z = y % x;
Operatorii +, -, /, * pot fi utilizaţi cu orice tip de dată, pe când operatorul modulo poate fi
folosit doar cu datele de tip întreg. Operatorul modulo reţine restul unei împărţiri întregi.
b) Operatori relaționali
Rezultatul unui operator relaţional nu poate fi decât true (sau 1), respectiv false (sau 0).
Prefixaţi Postfixaţi
++ operand operand --
-- operand operand ++
Diferenţa dintre operatorii postfixaţi şi operatorii prefixaţi este aceea că dacă operandul
este postfixat atunci mai întâi se foloseşte valoarea lui nemodificată, iar apoi se aplică operatorul
respectiv. Dacă operandul este prefixat atunci mai întâi se aplică operatorul respectiv şi abia apoi
se foloseşte valoarea lui.
d) Operatori logici
Rezultatul unui operator logic nu poate fi decât true (sau 1), respectiv false (sau 0). Tabelul de
adevăr este prezentat mai jos:
unde exp1, exp2, exp3 sunt expresii. Dacă valoarea expresiei exp1 este adevărată atunci valoarea şi
tipul expresiei va fi exp2; altfel valoarea şi tipul va fi exp3.
? : sunt operatorii condiţionali şi trebuie să fie folosiţi împreună.
unde: tip este unul dintre tipurile de date admise în limbajul C++(int, float, char, etc.).
Acesta returnează lungimea în octeţi a unei date. Data poate fi numele unei variabile simple, al
unui tablou, al unei structuri, al unui tip sau referirea la elementul unui tablou sau structură.
Ex :
#include <iostream> //directiva preprocesor
using namespace std; //declararea spațiului de nume
int main() //antetul funcției principale
{ //începutul blocului
//parte declarativă
cout<< “Un exemplu ”; //partea procedurală care conține instrucțiuni ce descriu pașii
//algoritmului
cout<<”foarte simplu” ;
return 0;
} //sfârșitul blocului
Instrucțiunile unui program C++ sunt grupate în niște entități numite funcții. Orice program trebuie
să conțină cel puțin o funcție, cu numele main, numită funcție principală. Ea se execută automat
atunci când lansăm în execuție programul. Pe lângă funcția principală, un program poate să conțină
oricâte alte funcții, numite funcții definite de utilizator.
Parametrii formali sunt niste identificatori de variabile pe care le foloseste functia cand se executa.
Daca functia are parametri formali, atunci la apel trebuie sa-i dam valori concrete ale acestora,
valori numite parametri actuali (efectivi). O functie poate sa returneze o anumita valoare, de un
anumit tip. Daca o functie nu returneaza nicio valoare, atunci spunem ca tipul valorii returnate este
void(nimic).
Daca nu exista parametri se vor scrie numai parantezele, sau cuvantul void intre paranteze. Daca
tipul valorii returnate este void, el poate sa lipseasca.
Putem folosi si alte forme ale antetului, ca de exemplu: main(), void main(void), main(void).
Totalitatea instructiunilor unei functii alcatuiesc corpul functiei. Acesta trebuie cuprins intre acolada
deschisa si acolada inchisa, chiar daca nu contine nicio instructiune.
Directive preprocesor
Orice mediu de programare in C++ dispune de un set important de functii predefinite. Ele au
fost scrise de autorii limbajului, fac parte din intriseca din limbaj si le putem folosi oriunde in
program.
Toate functiile predefinite, isi au prototipul (definitia) in niste fisiere cu extensia .h, numite
header-e. pentru a folosi o functie predefinita, trebuie sa scriem la inceputul programului o asa-
numita directiva preprocesor, adica biblioteca din care face parte functia respectiva.
#include <nume_header>
Ex:
#include <math.h> - sunt incluse functiile matematice
#include <iostream> - permite efectuarea citirilor/afisarilor
Instrucţiunea vidă
Se reduce la punct şi virgulă (;). Ea nu are nici un efect. Instrucţiunea vidă se utilizează
în construcţii care cer prezenţa unei instrucţiuni, dar nu trebuie să se execute nimic în punctul
respectiv. Astfel de situaţii apar frecvent în cadr ul structurii alternative şi repetitive, aşa cum se va
vedea în continuare.
Instrucţiunea expresie
Se obţine scriind punct şi virgulă după o expresie. Deci, instrucţiunea expresie are sintaxa :
expresie ;
În cazul în care expresia din compunerea unei instrucţiuni expresie este o expresie de atribuire, se
spune că instrucţiunea respectivă este o instrucţiune de atribuire. Un alt caz frecvent utilizat
este acela când expresia este un operand ce reprezintă apelul unei funcţii. În acest caz,
instrucţiunea expresie este o instrucţiune de apel a funcţiei respective.
Observaţie : Nu orice expresie urmată de punct şi virgulă formează o instrucţiune expresie
efectivă. De exemplu construcţia a; deşi este o instrucţiune expresie, ea nu are nici un efect.
Instrucţiunea compusă
Instrucţiunea if
Instrucţiunea while
Instrucţiunea for
Instrucţiunea for, ca şi instrucţiunea while, se utilizează pentru a realiza o structură
repetitivă condiţionată anterior. Are sintaxa :
for (exp1 ; exp2 ; exp3) /* antet */
instrucţiune; /* corpul ciclului*/
Expresia exp1 se numeşte partea de iniţializare a ciclului for, iar exp3 este partea de
reiniţializare a lui. Expresia exp2 este condiţia de terminare a ciclului for şi ea joacă acelaşi rol
cu expresia din ciclul while. Instrucţiunea for se execută astfel :
· Se execută secvenţa de iniţializare definită de exp1
· Se evaluează exp2. Dacă are o valoare diferită de 0 (este true), atunci se execută instrucţiunea
care formează corpul ciclului. Altfel, (expresia are valoarea 0 adică false) se termină execuţia
instrucţiunii for şi se trece la instrucţiunea următoare.
· După executarea corpului ciclului se execută secvenţa de reiniţializare definită de exp3. Apoi
se reia execuţia de la
pasul 2 .
Ca şi în cazul instrucţiunii while, instrucţiunea din corpul ciclului for nu se execută
niciodată dacă exp2 are valoarea 0 chiar de la început. Expresiile din antetul lui for pot fi şi
vide. Caracterele punct şi virgulă vor fi întotdeauna prezente. În general, instrucţiunea for poate
fi scrisă cu ajutorul unei secvenţe în care se utilizează instrucţiunea while
astfel :
exp1;
while(exp2)
{ instrucţiune;
exp3;
}
Această echivalare nu are loc într-un singur caz şi anume atunci când, în corpul instrucţiunii se
utilizează instrucţiunea continue. Reciproc, orice instrucţiune while poate fi scrisă cu ajutorul
unei instrucţiuni for în care exp1 şi exp3 sunt vide. Astfel, instrucţiunea while (exp)
instrucţiune; este echivalentă cu instrucţiunea for (; exp ;) instrucţiune; .
O instrucţiune for de forma for (; ;) instrucţiune; este validă şi este echivalentă cu
instrucţiunea : while(1) instrucţiune;. Un astfel de ciclu se poate termina prin alte mijloace
decât cel obişnuit, cum ar fi instrucţiunea de revenire dintr-o funcţie, un salt la o etichetă etc.
Din cele de mai sus rezultă echivalenţa celor două cicluri while şi for. Se recomandă
folosirea instrucţiunii for în ciclurile în care sunt prezente părţile de iniţializare şi reiniţializare,
aşa numitele cicluri cu pas.
Instrucţiunea do-while
Instrucţiunea continue
Această instrucţiune se poate utiliza numai în corpul unui ciclu. Ea permite abandonarea iteraţiei
curente. Sintaxa ei este : continue;. Efectul instrucţiunii este următorul :
a) În corpul instrucţiunilor while şi do-while
La întâlnirea instrucţiunii continue se abandonează iteraţia curentă şi se trece la
evaluarea expresiei care stabileşte continuarea sau terminarea ciclului respectiv (expresia inclusă
între paranteze rotunde şi care urmează după cuvântul cheie while).
b) În corpul instrucţiunii for
La întâlnirea instrucţiunii continue se abandonează iteraţia curentă şi se trece la
execuţia pasului de reiniţializare.
Instrucţiunea continue nu este obligatorie. Prezenţa ei măreşte flexibilitatea în scrierea
programelor C. Ea conduce adesea la diminuarea nivelurilor de imbricare ale instrucţiunilor if
utilizate în corpul ciclurilor.
Instrucţiunea continue este folosită rareori, nu pentru că folosirea ei nu ar fi o practică bună, ci
pentru că aplicaţiile în care ar putea fi utilizată sunt mai rare.
Instrucţiunea break
Instrucţiunea switch
Permite realizarea structurii selective. Aceasta este o generalizare a structurii alternative şi a fost
introdusă de Hoare. Ea poate fi realizată prin instrucţiuni if imbricate. Utilizarea instrucţiunii
switch face ca programul să fie mai clar decât dacă se utilizează varianta cu instrucţiuni if
imbricate. Structura selectivă, în forma în care a fost ea acceptată de către adepţii programării
structurate, se realizează în limbajul C cu ajutorul următorui format al instrucţiunii switch :
switch(expresie)
{
case c1: sir_1 break;
case c2: sir_2 break;
……….
case cn: sir_n break;
default: sir }
unde :
c1,c2,…,cn sunt constante integrale
sir_1,sir_2,…..sir_n,sir sunt succesiuni de instrucţiuni