Sunteți pe pagina 1din 33

Introducere in Limbajul de Programare C++.

Notiuni de
baza. PARTEA 1
1:39:00 p.m. Dominiq Bitza
Limbajul de programare : C++
Mediul de dezvoltare recomandat : Dev C++

Nu aveti de ce sa va temeti de programare in C++. Serios! Ca toate limbajele de programare, nu


este altceva decat o modalitate de a da unui calculator indicatii precise din punct de vedere logic.
C++ poate fi oricat de complicat doriti, dar cel mai simplu mod de a incepe sa-l invatati este de a-l
folosi pentru rezolvarea unor probleme de programare fundamentale.
Programarea nu prea seamana cu nici o alta activitate pe care ati desfasurat-o. In esenta, nu faceti
decat sa dati instructiuni, dar intr-o maniera logica, sistematica.
Calculatoarele nu fac decat ceea ce li se spune
Calculatoarele nu fac decat ceea ce li se spune. Este cea mai importanta regula , mai ales daca
sunteti incepator in programare. Folosind un limbaj de programare precum C++, dati unui calculator
o lista cu lucruri de facut ; aceasta reprezinta programul.
Un calculator are, desigur, nevoie de informatii ; aceastea sunt datele programului. Dar sistemul
trebuie sa stie si cum sa manipuleze datele respective. Instructiunile care arata calculatorului ce are
de facut ( din motive despre care vom discuta ulterior ) poarte numele de cod de program.
Definitii tehnice
Aplicatie
In esenta, inseamna acelasi lucru cu program, dar din punctul de vedere al utilizatorului. O aplicatie
este un program pe care il ruleaza un utilizator pentru a efectua o operatie.
Cod

Este un alt sinonim pentru program, dar privit din perspectiva programatorului. "Codul" reprezinta
seria de instructiuni si sintaxa aferenta care compun un program ; aceasta poate face referire
la codul masina sau lacodul sursa.
Cod masina
Este limbajul nativ al microprocesorului, in care fiecare instructiune de calculator consta dintr-o
combinatie ( cod ) unica formata din 1 si 0.
Cod sursa
Este un program scris intr-un limbaj de nivel inalt, precum C++. Codul sursa este compus din
instructiunile C++ care formeaza programul. Codul sursa trebuie convertit in cod masina inainte de a
putea fi rulat efectiv pe un calculator.
Codul masina, este compus din 1 si 0, dar este, de regula, reprezentat in cod hexazecimal ( baza 16 )
. Astfel, codul masina se prezinta , de obicei, astfel:

08 A7 C 3 9 E 58 6C 77 90

Nu e prea clar ce anume face,nu-i asa? Daca nu cautati toate codurile de instructiuni, un asemenea
program este de neinteles - ceea ce reprezinta motivul pentru care foarte putini programatori
folosesc, in prezent, codul masina pentru a scrie programe. Print contrast, codul sursa C++ arata
astfel :

if ( salariu < 0 )
afiseaza_mesaj_eroare ( ) ;

Compilator
Este convertorul de limbaj care preia instructiunile C++ ( Codul sursa C++ ) ca date de intrare si
genereaza programul sub forma de cod masina. Acest fapt este necesar intrucat calculatorul in sine unitatea sa centrala de prelucrare ( CPU ) - intelege numai codul masina.

Date
Sunt informatiile stocate de un program, in vederea manipularii sau afisarii. La nivel elementar,
informatiile sunt alcatuite din cuvinte si/sau numere.
Instructiune
De regula, este o linie dintr-un program C++. In linii mari, o instructiune in C++ corespunde unei
propozitii scrise intr-o limba vorbita, de exemplu in engleza. C++ mai accepta si structuri complexe,
alcatuite dintr-una sau din mai multe instructiuni mai mici ;
Program

Reprezinta o serie de instructiuni care urmeaza a fi duse la indeplinire de un calculator, folosind


datele initiale. Asa cum am mentionat anterior, un program poate necesita timp pentru a fi scris, dar
de obicei se executa cu viteza fulgerului si poate fi folosit la nesfarsit.
Utilizator
Este persoana care ruleaza un program, adica persoana care foloseste calculator pentru a face o
operatie utila, ca de exemplu editarea unui fisier de text, citirea mesajelor de posta electronica,
explorarea Internetului sau scrierea unui cec. Numele oficial al utilizatorului este utilizator final.

Constructia unui program in C++


Scrierea unui program reprezinta, de fapt, primul pas in crearea unei aplicatii.
Introducerea instructiunilor programului
Pentru a scrie un program in C++ , aveti nevoie de o modalitate de a introduce instructiunile
programului. De exemplu, puteti introduce text intr-un mediu integrat de dezvoltare ( IDE ). Un
mediu de dezvoltare este un editor de texte combinat cu alte instrumente utile de programare : Dev
C++, Microsoft Visual Studio.
Dupa ce ati introdus instructiunile programului, puteti trece la constructia propriu-zisa a programului.

Constructia programului ( compilarea si legarea )

Constructia programului reprezinta procesul de conversie a codului sursa ( instructiuni C++ ) intr-o
aplicatia care poate fi utilizata. Figura urmatoare rezuma modul de functionare a procesului de
contructie. Nu uitati ca, daca folositi un mediu de dezvoltare integrat, aceste etape se vor executa
automat ; este suficient sa apasati o tasta functionala.

Testarea programului
Dupa ce ati reusit sa construiti un program, trebuie sa-l rulat de cateva ori pentru a va convinge ca
face exact ceea ce doriti.
Revizuirea dupa necesitati
Daca programul se executa corect, ati terminat. Dar, daca prezinta erori de logica de program,
trebuie sa determinati sursa erorii, sa reveniti si sa operati modificarile in codul sursa C++, dupa
care sa reconstruiti programul.

Exemplu cod sursa


1.Deschideti Dev C++ ( sau un alt IDE ) si creati un fisier nou.
2.Inainte de a introduce orice linii de cod C++, stergeti tot codul care il vedeti in fisierul nou creat.
3. Introduceti urmatoarele :

#include < iostream >


using namespace std ;
int main ( )
{
cout << " Bla bla bla, bla bla bla " ;

return 0 ;
}

Pentru a construi programul, este suficient sa apasati tasta IDE-ului asociata cu compilarea.

Credeti sau nu, acest program simplu contine o singura instructiune reala. Sintaxa de mai jos
prezinta elementele standard, obligatorii. Pentru moment, nu va intereseaza de ce sunt necesare ;
folositi-le si atat. Intre acolade ( {} ) inserati liniile efective de program - care, in acest caz, este
alcatuit dintr-o singura instructiune.

#include < iostream >


using namespace std ;
int main ( ) {
Introduceti_instructiunile_aici!
return 0 ;
}

Acest program are o singura instructiune reala ( pe care o inserati in a cincea linie a programului de
mai sus ) .

cout

<<

" Bla bla bla, bla bla bla " ;

Ce este cout ? Este un obiect - concept despre care vom discuta mult mai mult in tutorialele
urmatoare. Intre timp, tot ceea ce trebuie sa stiti este:
cout este prescurtarea de la "console output" ( iesire la consola ) . Cu alte cuvinte, reprezinta
ecranul calculatorului. Cand scrieti ceva pentru ecran, textul se afiseaza exact asa cum va asteptati !
In C++, datele de iesire se afiseaza folosind cout si un operator de "flux" orientat spre stanga ( << )
, care indica trecerea datelor de la o valoare la consola. Nu veti folosi niciodata cout gresit daca il
vizualizati in acest mod.

Nu uitati caracterul punct si virgula ( ; ). Fiecare instructiune C++ trebuie sa se incheie cu punct si
virgula, cu putine exceptii.
Din motive tehnice, cout trebuie sa apara intotdeauna in partea stanga ori de cate ori este folosit. In
acest caz, datele se scurg spre stanga. Folositi "sagetile" orientate spre stanga, care reprezinta, de
fapt, doua semne "mai mic" ( << ) combinate.

Trecerea la urmatoarea linie de afisare

In C++, textul trimis pe ecran nu trece in mod automat la urmatoarea linie fizica.Trebuie sa afisati un
caracter linie noua ( newline ) pentru aceasta. Daca nu afisati un caracter linie noua ,intregul text
este afisat pe aceeasi linie fizica.
Exceptie : daca nu afisati un caracter linie noua, textul poate trece in mod automat pe randul
urmator atunci cand linia fizica se umple,dar aceasta poate duce la rezultate inestetice.
O modalitate de afisare a unui caracter linie noua consta in folosirea constantei predefinite endl. Ca
si cout, endl face parte din spatiul de nume std :

std: :cout <<

" Ana are mere. " << std : : endl ;

Dar,atata vreme cat plasati aceasta instructiune la inceputul programului :

using namespace std ;

nu trebuie sa justificati fiecare utilizare a lui cout si endl.In consecinta,puteti scrie instructiunea de
afisare astfel :

cout

<<

" Ana are mere. " << endl ;

Observatie : Numele "endl" este prescurtarea de la "end line" ( sfarsitul randului ) si se citeste
"end-el".
O alta modalitate de a insera un caracter linie noua consta in inserarea caraterelor \n.Aceasta este o
secventa escape, pe care C++ o interpreteaza ca avand o semnificatie speciala, in loc sa o citeasca
literal. Instructiunea urmatoare are acelasi efect ca si exemplul de mai sus:

cout

<<

" Ana are mere.\n "

Programul din acest tutorial ( exemplul de mai jos ) afiseaza mesaje pe mai multe linii. Daca
introduceti manual programele , nu uitati sa folositi majuscule si minuscule exact asa cum se vede in
aceste tutoriale - ( desi este posibila si modificarea marimii literelor incluse intre ghilimele, fara a
afecta programul ).

#include <iostream>
using namespace std ;
int main ( ) {
cout << "Bun venit pe Linkmania! " << endl ;
cout << "Nu abuzati de sondaje, de imagini in posturi, sau de
termeni de genul "lol" " << endl ;
cout << "Nu utilizati semnaturi prea mari, atat pe latime cat mai
ales pe inaltime. " << endl ;
return 0 ;
}

Salvati programul sub numele afisare2.cpp ,iar apoi compilati-l si rulati-l.

Conceptual,imaginea urmatoare prezinta modul de functionare a instructiunilor din program :

In acest mod, puteti afisa orice numar de articole separate, desi, din nou, acestea nu vor trece pe
urmatoarea linie fizica fara un caracter
linie noua ( endl ) .Puteti trimite mai multe elemente la consola cu o singura instructiune :

cout << "Bun venit" << "pe" << "Linkmania !" ;

Cand este executata, instructiunea afiseaza urmatoarele :

Sau puteti ingloba un caracter linie noua, astfel :

cout

<<

"Bun venit pe" << endl << "Linkmania ! " ;

care are ca rezultat:

Acest exemplu ca si celalalt,returneaza o valoare. " Returnarea unei valori " este procesul de
trimitere inapoi a unui semnal - in acest caz, catre sistemul de operare sau mediul de dezvoltare.O
valoare se returneaza folosind instructiunea return sub forma :

return 0 ;

Valoarea returnata de functia main este un cod trimis sistemului de operare prin care 0 indica
reusita. Toate exemplele din aceste tutoriale returneaza valoarea 0.
Observatie : Valorile returnate sunt mai utile pentru alte categorii de functii, despre care veti invata
in tutorialele urmatoare. Returnarea unei valori din functia main est unul dintre acele lucruri
agasante care nu par utile la prima vedere, dar care, pur si simplu, trebuie sa le faceti. ( Retineti :
unele programe opteaza pentru a returna valori diferite de 0, pentru a indica existenta anumitor
probleme ). Pentru moment, returnarea valorii 0 din functia main este unul din acele lucruri care
trebuie puse in program pentru a va asigura ca este corect.

Pentru cei interesati - Ce este un sir?


De la inceput, am folosit texte intre ghilimele , ca in instructiunea:

cout << "Bun venit pe Linkmania !" ;

Tot ce se afla in afara ghilimelelor face parte din sintaxa C++. In interiorul ghilimelelor se
gasesc date.De fapt,toate datele stocate intr-un calculator sunt, in esenta, numerice.Dar, in functie
de modul de utilizare, acestea pot fi interpretate sub forma unui sir de caractere tiparibile.Ceea ce se
intampla si in cazul nostru.

Poate ati mai auzit de coduri ASCII.Caracterele "N" , "e" , "v" , "e" ,etc. sunt stocate in octeti
individuali reprezentand fiecare un cod numeric care corespunde unui caracter ce se poate afisa.
Vom discuta mult mai multe despre acest tip de date in urmatoarele tutoriale.Ceea ce trebuie retinut
este faptul ca textele incluse intre ghilimele sunt considerate date nu, nu comenzi.Aceasta categorie
de date este considerata a fi un sir ( in limba engleza: string ) de text sau, mai frecvent numit, un sir
Daca ar realiza numai afisarea unor mesaje stupide , C++ n-ar fi foarte util.Ideea este, de regula , sa
se obtina date noi dintr-o sursa - ca de exemplu, date introduse de utilizatorul final - si sa se
manipuleze aceste date intr-o maniera interesanta.
Asemenea operatii necesita variabile : acestea sunt locatii in care puteti plasa datele. Puteti asimila
variabilele unor casete magice in care se gasesc valori. Pe masura evolutiei sale, programul poate
citi, scrie sau modifica aceste casete dupa necesitati. In exemplul urmator , vom folosi variabile
numite ctemp siftemp , in care se vor stoca valori de temperatura Celsius , respectiv Fahrenheit.

Cum ajung valorile sa fie inserate in variabile? O metoda consta in introducerea de la consola . In C+
+ , valorile pot fi introduse folosind obiectul cin , care reprezinta ( suficient de adecvat ) date
introduse de la consola ( console input ).
Alaturi de cin se foloseste un operator de flux, care indica scurgerea datelor spre dreapta ( >> ).

Iata ce se mai intampla ca raspuns la aceasta instructiune. ( Procesul real este ceva mai complicat ,
implicand verificarea unui buffer de intrare , dar ceea ce urmeaza reprezinta esenta procesului intrun program simplu. )

1. Programul isi suspenda executia si asteapta ca utilizatorul sa introduca un numar.


2. Utilizatorul introduce un numar si apasa pe tasta ENTER.
3. Numarul este acceptat si pasat in variabila ctemp ( in acest caz ) .
4.Programul isi reia executia.
Deci, daca va ganditi, se intampla o multime de lucruri ca raspuns la instructiunea :

cin >> ctemp ;

Dar, inainte de a putea folosi o variabila in C++, trebuie sa o declarati. Aceasta este o regula
imperativa si diferentiaza C++ de limbajul Basic, care este neglijent in aceasta privinta si nu
necesita o declarare. ( Generatii intregi de programatori in Basic s-au dat cu capul de calculator
descoperind erori derivate din lejeritatea pe care o dovedeste limbajul in ceea ce priveste variabilele.
)
Este un aspect suficient de important pentru a fi enuntat din nou, deci il vom transforma in regula de
baza :

* In C++, este obligatorie declararea unei variabile inainte de


utilizarea acesteia.
Pentru a declara o variabila, trebuie mai intai sa stiti ce tip de date sa folositi.Acesta este un concept
esential atat in C++ , cat si in majoritatea celorlalte limbaje.
O variabila este ceva care poate fi considerat o "cutie magica " in care puteti plasa informatii - sau
mai degraba date.Dar ce fel de date?
Toate datele dintr-un calculator sunt , in ultima instanta, numerice, dar sunt organizate intr-unul
dintre cele trei formate elementare : intreg, in virgula mobila si sir de text.

Exista numeroase diferente intre formatul in virgula mobila si cel intreg.Dar, pentru programele de
inceput, regula este simpla:

* Daca trebuie sa stocati numere cu parti fractionare, folositi o


variabila in virgula mobila, in caz contrar, folositi tipul intreg.
Principalul tip de date in virgula mobila in C++ este double.Pare un nume ciudat ; este prescurtarea
de la "double-precision floating point " ( virgula mobila cu dubla precizie ). Mai exista si un tip cu
simpla precizie ( float ), dar se utilizeaza rareori. Cand aveti nevoie de capacitatea de a retine
portiuni fractionare, veti obtine rezultate mai bune - si mai putine mesaje de eroare - daca
folositi double.
O declaratie double are sintaxa urmatoare. Retineti ca aceasta instructiune se incheie cu punct si
virgula ( ; ), la fel ca majoritatea categoriilor de instructiuni.

double nume_variabila ;

Se mai poate folosi o asemenea declaratie si pentru a crea o serie de variabile.

double nume_variabila1 , nume_variabila2 , ... ;

De exemplu aceasta instructiune creeaza o variabila double numita oDubla:

double oDubla ;

Aceasta instructiune creeaza o variabila de tip double.

Instructiunea urmatoare , care foloseste sintaxa mai complexa, declara patru variabile double
numite b, c,d, si amount :

double b, c, d, amount ;

Efectul acestei instructiuni este similar cu urmatorul :

double
double
double
double

b ;
c ;
d ;
amount ;

Rezultatul acestor declaratii consta in crearea a patru variabile de tipul double.

De ce dubla si nu simpla precizie?


Dubla precizie este asemanatoare cu simpla precizie, numai ca este mai buna decat aceasta. Dubla
precizie accepta o gama mai larga de valori, cu o mai mare precizie. (Da, este posibila pierderea de
precizie in cazul variabilelor in virgula mobila ; acesta este un subiect la care vom reveni in
tutorialele urmatoare. )
Deoarece dubla precizie este mai exacta, tipul de date in virgula mobila este preferat in C++ ;
inainte de a executa calcule in virgula mobila C++ converteste toate valorile in formatul dubla
precizie, daca acestea nu se gasesc deja in acest format. De asemenea , C++ stocheaza constante
in virgula mobila in format in dubla precizie, daca nu se specifica altceva ( de exemplu, folosind
notatia 12.5F in loc de 12.5 ).
Dubla precizie prezinta insa un dezavantaj : are nevoie de un volum mai mare de spatiu - mai
concret, de opt octeti in loc de patru (in mediile de tip PC). Acesta nu este un factor destabilizator
nici macar pentru programele simple, deoarece coprocesoarele matematice accepta, in mod direct,
operatiile pe opt octeti.
Aspectul trebuie avut in vedere numai cand pe disc trebuie stocate cantitati mari de valori in virgula
mobila. Atunci si numai atunci se va lua in considerare utilizarea tipului cu simpla precizie float.
Conversia temperaturilor
Iata formula de conversie. Cand este utilizat la combinarea a doua valori, asteriscul ( * ) inseamna
"inmultit cu".
Fahrenheit = ( Celsius * 1,8 ) + 32
Acum, un program util nu calculeaza o singura valoare de temperatura si atata tot. Daca am fi avut
nevoie numai de aceasta am fi folosit aplicatia "Calculator" din Windows ! Nu, un program cu
adevarat util preiaorice valoare introdusa ca temperatura in grade Celsius si o converteste. Pentru
aceasta este nevoie de unele caracteristici noi, cum ar fi :
- preluarea datelor introduse de utilizator ;
- stocarea valorii introduse intr-o variabila ;
Iata programul complet. Deschideti un fisier sursa nou, introduceti codul de mai jos si salvati-l sub
numele convert . cpp. Apoi compilati-l si executati-l.

#include <iostream>
using namespace std ;
int main ( )
{
double ctemp, ftemp ;
cout << " Introduceti o

temperatura in grade Celsius si apasati ENTER :

" ;
cin >> ctemp ;
ftemp = ( ctemp * 1.8 ) + 32 ;
cout << "Temperatura in grade Fahrenheit este : " << ftemp ;
return 0 ;
}

Programele sunt mai usor de urmarit daca se adauga comentarii, care in C++ se noteaza prin
perechi de caractere slash ( // ). Comentariile sunt ignorate de compilatorul de C++ ( adica nu au
nici un efect asupra comportarii programului ) , dar sunt utile pentru utilizatori. Iata versiunea
"comentata" :

#include <iostream>
using namespace std ;
int main ( )

// Declararea variabilelor in virgula mobila.


double ctemp, ftemp ;
// Solicitarea si introducerea valorii lui ctemp ( temperatura in grade
Celsius).
cout << " Introduceti o temperatura in grade Celsius si apasati ENTER :
" ;
cin >> ctemp ;
// Calculeaza ftemp ( temperatura in grade Fahrenheit ) si o afiseaza.
ftemp = ( ctemp * 1.8 ) + 32 ;
cout << "Temperatura in grade Fahrenheit este : " << ftemp ;
return 0 ;
}

Aceasta versiune comentata, desi este mai usor de citit pentru om, necesita mai multa munca la
introducere. Parcurgand exemplele din aceste tutoriale, puteti omite intotdeauna comentariile sau
puteti opta pentru a le adauga ulterior. Nu uitati urmatoarea regula de baza pentru comentarii:

* Liniile de program C++ care incep cu o pereche de caractere slash

( // ) sunt comentarii si sunt ignorate de catre compilatorul de C++


pana la sfarsitul liniei.
Adaugarea comentariilor este intotdeauna optionala, dar este o idee buna. Mai ales daca vreo fiinta
umana (inclusiv dumneavoastra ) isi va arunca vreodata privirea pe respectivul program C++.

Prima instructiune din cadrul functiei main declara variabilele ctemp si ftemp (ambele de
tipul double ). Aceste variabile stocheaza temperaturile exprimate in grade Celsius, respectiv
Fahrenheit.

double ctemp , ftemp

Astfel, avem doua locatii unde putem stoca numere. Deoarece ele sunt de tipul double , pot contine
parti fractionare. Nu uitati ca double simbolizeaza "valori in virgula mobila si dubla precizie ".

Urmatoarele doua instrutiuni solicita utilizatorului sa introduca datele de intrare si apoi le stocheaza
in variabila ctemp. Sa presupunem ca utilizatorul introduce "10". Apoi, valoarea numerica 10.0 este
introdusa in ctemp.

In general, puteti folosi instructiuni similare in propriile dumneavoastra programe pentru a afisa un
mesaj de solicitare si apoi pentru a stoca datele introduse. Mesajul de solicitare este uti, deoarece
astfel utilizatorul s-ar putea sa nu stie ca are ceva de facut.
Observatie : Desi numarul introdus in acest caz a fost "10" , este stocat sub forma 10.0. Din punct
de vedere pur matematic, 10 si 10.0 sunt valori echivalente, dar in C++ notatia "10.0" indica faptul
ca valoarea este stocata in formatul in virgula mobila, nu in formatul intreg. Se va vedea ca acest
fapt are consecinte importante , asa cum vom explica in tutorialele urmatoare.
Instructiunea care urmeaza executa conversia efectiva, folosind valoarea stocata in ctemp pentru a
calcula valoarea variabilei ftemp :

ftemp = ( ctemp * 1.8 ) + 32

Aceasta instructiune contine o atribuire ; valoarea din partea dreapta a semnului egal ( = ) este
evaluata si apoi copiata in variabila din partea stanga. Aceasta este una dintre cele mai comune
categorii de instructiuni C++.
Din nou, presupunand ca valoarea "10" a fost introdusa de utilizator, diagrama urmatoare indica
modul de trecere a datelor prin program :

In final, programul afiseaza rezultatul - in cazul nostru, 50 :

Daca examinati cu atentie ultimul exemplu, va puteti pune intrebarea daca este cu adevarat necesar
sa declarati doua variabile in loc de una.
De fapt, nu este necesar. Bine ati venit in lumea optimizarii. Versiunea urmatoare imbunatateste
prima versiune a programuului, debarasandu-se de ftemp si combinand etapele de conversie si
afisare a datelor de iesire. Procedeul nu este intotdeauna functional - intr-un program mai
complex s-ar putea sa fie necesara memorarea valorii Fahrenheit - dar aici este numai
bun.

#include <iostream>
using namespace std ;
int main ( ) {

// Declararea ctemp ca variabila in virgula mobila.


double ctemp ;
// Solicita si introduce valoarea lui ctemp (temperatura in grade
Celsius ) .
cout << "Introduce o temperatura in grade Celsius si apasa ENTER : " ;
cin >> ctemp ;
//Converteste ctemp si afiseaza rezultatele.
cout <<
) +32 ;

" Temperatura in grade Fahrenheit este :

"

<<

( ctemp

1.8

return 0 ;
}

Sesizati deja un model care se repeta? In cele mai simple programe, modelul este urmatorul :
1. Declararea variabilelor.
2. Preluarea datelor de intrare de la utilizator ( dupa afisarea unui mesaj de solicitare )
3. Efectuarea calculelor si afisarea rezultatelor

De exemplu, programul urmator efectueaza o alta operatie, dar ar trebui sa va fie familiar. Programul
cere un numar si apoi afiseaza patratul acestuia ( numarul inmultit cu el insusi ). Instructiunile sunt
asemanatoare celor din exemplul precedent ; singurele aspecte care difera sunt numele variabilei ( n
) si forumula de calcul folosita ( n* n ).

#include <iostream>
using namespace std ;
int main ( ) {
// Declararea lui n ca variabila in virgula mobila.
double n ;
//Solicita si introduce valoarea lui n.
cout <<
cin >> n

"Introduceti un numar si apasati ENTER : " ;


;

// Calculeaza si afiseaza valoarea patratului.


cout

<<

" Patratul este: "

<<

n * n ;

return 0 ;
}

Nume de variabile si cuvintele-cheie


Puteti folosi orice nume doriti, cu conditia sa respectati urmatoarele reguli:
1. Primul caracter trebuie sa fie o litera - nu poate fi numar. Tehnic vorbind , primul caracter poate fi
si o liniuta de subliniere( _ ), dar biblioteca C++ foloseste intern aceasta conventie de nume, deci cel
mai bine este sa evitati sa folositi un nume astfel.
2. Restul numelui poate fi format din litere, numere sau liniute de subliniere ( _ ).
3. Trebuie sa evitati cuvinte care au deja o semnificatie predefinita speciala in C++.
Cuvintele cu semnificatie speciala in C++ se numesc "cuvinte-cheie". Un asemenea cuvant
este main. Printre alte cuvinte-cheie se numara tipurile de date C++ standard,
precum int , flow si double. Alte cuvinte-cheie sunt if, else , while , do, switch si class.
Nu este necesar sa memorati toate cuvintele-cheie din C++, desi multe carti de programare va
sugereaza sa procedati astfel ! Nu trebuie decat sa stiti ca, daca incercati sa folositi un nume care
intra in conflict cu unul dintre cuvintele-cheie din C++, compilatorul va va raspunde cu un mesaj
care se refera la un conflict cu un cuvant-cheie sau la o eroare de sintaxa. In acest caz , incercati un
alt nume.

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 2
1:40:00 p.m. Dominiq Bitza
Cateva cuvinte despre tipurile de date
Inainte de a examina modul in care calculatoarele iau decizii, este important sa intelegem notiunea
de date. La urma urmelor, toate informatiile stocate intr-un calculator se reduc la o serie formata din
1 si 0. Ceea ce da sens informatiilor rezulta din capacitatea de organizare a acesteia in componente
semnificative, numitetipuri de date.
Cand ati invatat matematica, nu trebuia sa va preocupati de tipuri. Un numar este un numar si nimic
altceva. Toate aceste expresii sunt identice din punct de vedere matematic:

3.0

trei

2+1

Dar limbajele de calculator si sistemele sunt altceva decat matematica pura. Nu este suficient sa
aveti o valoare ; trebuie sa aveti si un mod de a o stoca. In tutorialele anterioare ne-am referit la
variabila ca la o "caseta magica" , dar este mai corect sa spunem ca o variabila este un cos care

poate contine date. Dar, ca toate cosurile, nu este infinita. Nu poate stoca decat o cantitate limitata
de informatii.
Spre deosebire de lumea matematicii pure, lumea calculatoarelor este una in care datele reprezinta,
deseori, o resursa pretioasa.
Dincola de suprafata, formatul intre si cel in virgula mobila nu sunt deloc asemanatoare. In
majoritatea cazurilor, diferentele sunt invizibile pentru utilizator ; este suficient sa folositi tipul de
care aveti nevoie si lasati detaliile in seama programului C++. Uneori, insa, compilatorul va va
avertiza cu privire la "conversii" sau "pierderi de date" , cazuri in care este util sa stiti la ce se refera.
Iata modul de stocare a unei valori, in speta 150, in format intreg si in virgula mobila. ( Am facut
cateva presupuneri simplificatoare. De fapt, formatele in virgula mobila folosesc o reprezentare
binara, nu zecimala. )

Bitul de semn s indica daca numarul este pozitiv sau negativ, valoarea 0 indicand un numar
nenegativ.
Campul exponent este cel care face diferenta intre formatul in virgula mobila si cel intreg,
determinand si plusul de flexibilitate al primului format. Sa consideram problema stocarii valorii 10 la
puterea 18. Iata cum arata numarul :

000

000

000

000

000

000

Aceasta valoarea nu poate fi stocata intr-o variabila intreaga. Nu exista suficient spatiu. Dar o
variabila in virgula mobila poate stoca usor o asemenea valoare ; totul se reduce la utilizarea unui
camp exponent suficient de mare. ( Exponentul va fi 18 in cazul in care calculatorul foloseste
formatul zecimal. In formatul binar, adica acela folosit in realitate de catre calculator, valoarea
exponentului este de cateva ori bune mai mare decat aceasta ) . Iata un mod concis de reprezentare
a acestui numar in C++ :
1e18
Ideea este ca trebuie sa folositi tipul corect de date pentru fiecare aplicatie in parte. Pentru a stoca
un numar fara virgula, puteti folosi, daca doriti, stocarea in format virgula mobila ( ca si numarul 150
din exemplul de mai sus ) . Dar acest format necesita mai mult spatiu si este mai complex decat
formatul intreg. Practic, calculatorul este pus la o treaba mai grea decat trebuie. Este mai bine sa

folositi formatul intreg atunci cand lucrati numai cu numere fara virgula, cu conditia ca acestea sa se
gaseasca in intervalul standard al numerelor intregi ( aproximativ doua miliarde, adica doua mii de
milioane ).
In unele situatii rare, un camp in format virgula mobila nu poate stoca un intreg cu precizie. Aceasta
se intampla numai la valori intregi foarte mari. Iata un alt motiv pentru a evita utilizarea formatului in
virgula mobila atunci cand lucrati numai cu numere fara virgula.
O variabila de tip intreg se declara folosind o sintaxa asemanatoare cele utilizate la declararea unei
variabile de tip double. Tipul int este o valoare intreaga standard (care ocupa patru octeti pe
aproape orice calculator actual).

int nume_variabila ;

Valorile constante sunt, de asemenea, stocate in format intreg sau in virgula mobila. Prezenta unui
punct zecimal ( virgula ) determina stocarea automata a valorii in format virgula mobila. Un numar
precum 1. 141592 necesita, evident, formatul in virgula mobila si, ca atare, este stocat in
forma double. Dar, intrucat contine un punct zecimal, numarul 3.0 este, de asemenea, stocat in
format double. Daca se foloseste notatia 3, va fi stocat in format int.
Si acest lucru este important, deoarece C++ va fi "amabil" si va efectua conversiile de date fara
reclamatii, insa numai daca poate proceda astfel fara potentiale pierderi de date. De exemplu, o
constanta int trebuie convertita in virgula mobila inainte de a fi salvata in format double.

double x ;
x = 3 ;

// OK: converteste din int.

In acest caz, compilatorul C++ nu protesteaza, deoarece formatul double poate stoca orice valoare
care poate fi stocata in formatul int.
Dar , in exemplul urmator, o valoare in virgula mobila ( 3.7 ) trebuie convertita intr-un intreg.
Compilatorul executa conversia dorita, dar emite un mesaj de avertizare in care se spune ca este
posibila pierderea de date.

int n ;
n = 3.7

// Atentie: conversie din double in int.

Aici, rezultatul este ca portiunea fractionara 0.7 se pierde, iar valoarea 3 este stocata in variabila n.
Mai putin evident este faptul ca instructiunea urmatoare - care pare foarte nevinovata - are ca
rezultat acelasi avertisment, deoarece portiunea "0" are semnificatia unui format in virgula mobila.
Pentru compilatorul de C++, orice conversie din formatul in virgula mobila in cel intreg este
considerata automat ca suspecta.

n = 3.0 ;

// Atentie: conversie din double in int

In ciuda avertismentului, programul continua sa functioneze corect in acest caz, deoarece 3.0 este

echivalent din punct de vedere matematic cu 3. Insa majoritatea programatorilor prefera sa se


debaraseze de avertismentele din partea compilatorului. Sunt agasante si dau impresia persistenta
ca ceva este in neregula.
In acest caz, modalitatea de a scapa de avertismente consta in a specifica o conversie fortata, care
cere compilatorului sa converteasca in tipul int. Intrucat, in acest caz, conversia se executa
deliberat, compilatorul presupune ca stiti ce faceti si nu emite avertismentul.

n = static_cast<int> ( 3.0 ) ;

Sau , mai bine, puteti transforma constanta intr-un intreg, nu intr-un numar in virgula mobila ; atunci
nu este nici o problema, deoarece nu faceti decat sa atribuiti o constanta in format int unei variabile
de acelasi format.

Ca veni vorba, forma generala a operatorului static_cast este urmatoarea :

static_cast<tip>( expresie )

Operatorul static_cast preia expresia specificata si returneaza o expresie noua, cu aceeasi valoare
matematica, dar de tipul indicat.
Exista numerosi operatori de conversie fortata acceptati de versiunile standard de C++ . Operatorul
static_cast este cel mai comun dintre acestia ; utilizarea sa este simpla. Ceilalti au utilizari mai
specializate.

Luarea deciziilor intr-un program

Luarea deciziilor intr-un program are un caracter limitat. Un calculator poate sa execute numai
instructiuni care sunt perfect clare si precise.
Intr-un fel, este un lucru bun ; din alte puncte de vedere, este o provocare. Vestea buna este ca un
calculator va face intotdeauna exact ce i se spune. Vestea proasta este ca un calculator va face
intotdeauna ce i se spune, indiferent cat de stupid este. Din nou, aceasta este una dintre regulile
capitale ale programarii - poate cea mai importanta :

* Un calculator poate executa numai instructiuni perfect clare.


In cazul proceselor decizionale, aceasta inseamna ca un calculator nu cunoaste conceptele de
judecata sau discernamant. Calculatorul nu poate decat sa execute reguli precise din punct de
vedere matematic - de exemplu, sa compare doua valori pentru a vedea daca sunt egale.
Singurul domeniu in care specialistii in calculatoare sugereaza ca un calculator poate dispune de
ceea ce se poate numi discernamant este acela al inteligentei artificiale ( IA ). Dar aceasta este
exceptia care confirma regula. Un program sofisticat de luare a deciziilor este alcatuit din mii sau

poate chiar milioane de instructiuni individuale, fiecare dintre acestea fiind simpla, precisa si clara.
If si if-else
Cea mai simpla metoda de a programa o comportare este sa spui : " Daca A este adevarat, atunci
executa B." Acesta este efectul instructiunii if din C++. Iata forma simpla a sintaxei instructiunii if :

if

( conditie )
instructiune

Exista si forme mai complexe ale acestei instructiuni, despre care vom discuta imediat. Dar, pentru
inceput, sa consideram o instructiune if care compara doua variabile x si y. ( Vom presupune ca
aceste variabile au fost declarate anterior, conform necesitatilor. )

if

( x == y )
cout << "x este egal cu y. " ;

Ciudat. Aici sunt doua semne egal ( == ) in loc de unul singur ( = ) . Nu este nici o greseala. In
aceasta situatie, C++ are doi operatori diferiti : un semn egal indica atribuirea, care copiaza valori
intr-o variabila, in timp ce doua semne egal indica verificarea egalitatii.
Observatie : Pe masura ce faceti progrese, veti descoperi ca utilizarea atribuirii ( = ) acolo unde se
dorea, de fapt, testarea egalitatii ( == ) reprezinta una dintre cele mai comune erori. Problema este
ca se permite folosirea atribuirii ( = ) in interiorul unei conditii, dar atribuirea nu executa o actiune
corecta.
Si daca,in loc de a executa o singura instructiune ca raspund la o conditie, doriti sa executati o serie
intreaga de operatii? Raspunsul consta in utilizarea unei instructiuni compuse ( cunoscuta si sub
numele de "bloc de instructiuni " ) :

if

( x == y ) {
cout << " x este egal cu y. " << endl ;
cout << " Nu-i asa ca-i dragut? " ;
ele_sunt_egale = true ;

Semnificatia acestei sintaxe este ca fie executa toate aceste instructiuni, fie nu se executa nici una.
In situatia in care conditia ( x egal cu y, in acest caz ) nu este adevarata, controlul programului
executa un salt dincolo de sfarsitul instructiunii compuse - cu alte cuvinte, la prima instructiune de
dupa acolada de inchidere ( } ) .
Acoladele de deschidere, respectiv de inchidere ( { } ) determina inceputul, respectiv sfarsitul
instructiunii compuse. Aceasta instructiune se poate include in sintaxa instructiunii if datorita unei
alte reguli cardinale :

* O instructiune compusa se poate folosi oriunde se utilizeaza o


instructiune scrisa in sintaxa C++.

Din punct de vedere tehnic, o instructiune compusa nu este decat o instructiune ca oricare alta.
Observati ca instructiunea compusa nu se incheie cu punct si virgula ( ; ) . Numai instructiunile care
o compun se termina astfel. Aceasta este una dintre exceptiile de la regula caracterului punct si
virgula, despre care am vorbit in tutorialul anterior.
Iata din nou sintaxa instructiunii if :

if

( conditie )
instructiune

Aplicand regula de baza pe care am enuntat-o anterior, in loc de instructiune putem insera o
instructiune compusa :

if

( conditie )
instructiuni

unde instructiuni poate reprezenta zero sau mai multe instructiuni.


Se mai pot specifica si actiuile care trebuie executate in cazul in care conditia nu este adevarata.
Dupa cum probabil ghiciti, aceasta varianta foloseste cuvantul-cheie else ( altfel ).

if

( conditie )
instructiune1

else
instructiune2

Ca de obicei, instructiune1, instructiune2 sau ambele pot fi instructiuni compuse. Acum avem
sintaxa completa a instructiunii if.
Iata un scurt exemplu.

if ( x == y )
cout << " x este egal cu y " ;
else
cout << " x NU este egal cu y "

Acest program poate fi rescris astfel incat sa utilizeze instructiuni compuse, chiar daca acest lucru nu
este absolut necesar :

if

( x == y )
cout << "
} else {
cout << "

{
x este egal cu y

" ;

x NU este egal cu y

" ;

Toate liniile de program cuprinse intr-o sintaxa if sau if-else pot fi scrise in acest mod, motiv pentru
care acoladele apar intotdeauna, chiar daca blocurile de instructiuni rezultante cuprind fiecare cate o
singura instructiune. Personal nu folosesc aceasta metoda , fiindca necesita munca suplimentara,
chiar daca unii programatori o recomanda calduros.
Avantajul metodei prezentate ( care foloseste mereu instructiuni compuse in sintaxa if ) este acela
ca se poate reveni si adauga o instructiune sau doua intre acolade, fara ca prin aceasta programul sa
devina incorect. De regula, eu adaug acoladele dupa necesitati, dar poate preferati aceasta abordare
mai precauta.

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 3
1:40:00 p.m. Dominiq Bitza
De ce doi operatori ( = si == ) ?
In C si C++, programul urmator este permis fara probleme. Cu toate acestea, aproape intotdeauna
determina o comportare incorecta :

if ( x = y )
Atribuire !
cout
<<

// GRESIT !
" x si y sunt egale " ;

Ce face acest exemplu ? Atribuie lui x valoarea lui y si foloseste valoarea respectiva ca o conditie de
test. Daca aceasta valoare este diferita de zero, este considerata "adevarata". In consecinta, daca y
ia orice valoare alta decat zero, conditia de mai sus este intotdeauna considerata adevarata si
instructiunea se executa intotdeauna !
Iata versiunea corecta, care va executa ce doriti :

if ( x == y )
Testarea egalitatii.
cout
<< " x si y sunt egale " ;

//

CORECT :

Aici, x == y este o operatie care verifica egalitatea si returneaza "true" ( adevarat ) sau "false"
( fals ) , dupa caz. Important de retinut este faptul ca nu trebuie sa facem confuzie intre verificarea
egalitatii si atribuire ( x = y ) , care copiaza datele in variabila x si returneaza "true" pentru orice
valoare diferita de zero.
In particular, aproape fiecare expresie din C++ returneaza o valoare, fapt valabil si pentru atribuire
( = ) , care este considerata "expresie cu efect de margine". Asadar, puteti initializa trei variabile
simultan procedand astfel :

x = y = z = 0 ;

// Atribuie tuturor variabilelor valoarea 0.

Ceea ce este echivalent cu :

x = ( y = ( z = 0 ) ) ;
valoarea 0.

// Atribuie tuturor variabilelor

Fiecare instructiune, incepand cu cea din dreapta ( z = o ), returneaza valoarea care a fost atribuita
( 0 ), care apoi este folosita in urmatoarea atribuire ( y = 0 ) . Cu alte cuvinte, 0 este transmis de trei
ori, de fiecare data unei alte variabile.
In consecinta, C++ trateaza "x = y " ca pe o expresie obisnuita, care returneaza o valoarea, ca orice
alta expresie.
Si asta inca n-ar fi nimic, daca n-ar exista o alta regula mostenita de C++ : orice valoare poate fi
utilizata drept conditie. Ca atare, compialtorul nu va va opri sa scrieti ceva de genul :

if ( x = y )
// . . .

In consecinta, fiti foarte atenti cand folositi un singur semn egal ( = ) , respectiv doua asemenea
semne ( == ) .

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 4
1:40:00 p.m. Dominiq Bitza
Par sau Impar ?
Acesta este un exemplu simplu, aproape banal, dar introduce un operator nou ( % ) si prezinta
sintaxa if-else in actiune.
Acest program preia un numar de la tastatura si indica daca este par sau impar. Este o operatie
banala, dar ilustreaza o utilizare simpla a instructiunii if .

#include <iostream>
using namespace std ;
int main () {
int n, rest ;
// Preia un numar de la tastatura.
cout

<<

"

Introduce un numar si apasa ENTER :

" ;

cin

>>

n ;

// Calculeaza restul impartirii la 2.


rest = n % 2 ;
// Daca restul este 0, numarul introdus este par.
if ( rest == 0 )
cout << " Numarul este par. " ;
else
cout << " Numarul este impar. " ;
return 0 ;
}

Prima instructiune din program defineste doua variabile intregi, n si rest .


In continuare, programul preia un numar si il stocheaza in variabila n. Deja sintaxa trebuie sa va fie
cunoscuta :

cout << " Introduceti un numar si apasati ENTER : " ;


cin >> n ;

Acum, totul se reduce la a efectua un test asupra lui n , pentru a vedea daca este par sau impar.
Cum procedati ? Raspuns : se imparte numarul la 2 si se examineaza restul. Daca restul este 0,
numarul este par ( divizibil cu 2 ). In caz contrat, este impar.

Este exact cum se procedeaza in continuare. Urmatoarea instructiune imparte numarul la 2 si citeste
restul. Aceasta se cheama impartire modulo sau cu rest . REzultatul este stocat intr-o variabila
numita rest .

rest = n % 2 ;

Simbolul procentului ( % ) isi pierde semnificatia obisnuita in C++, simbolizand, in schimb, impartirea
cu rest. Iata cateva exemple de rezultate :

Dupa impartirea lui n la 2 si obtinerea restului, vom obtine rezultatul 0 ( par ) sau 1 ( impar ) .
Instructiunea if compara restul cu 0 si afiseaza mesajul adecvat.

if ( rest == 0 )
cout << " Numarul este par. " ;
else
cout << " Numarul este impar. " ;

Observati perechile de semne egal ( == ) folosite in acest program. Asa cum am mai aratat,
verificarea egalitatii necesita perechi de semne egal, deoarece un singur semn egal ( = ) indica
atribuirea.
Intamplator, iata acelasi program scris folosind instructiuni compuse, pe care unii programatori le
prefera din principiu :

if ( rest == 0 ) {
cout << " Numarul este par. " ;
}
else {
cout
}

<<

" Numarul este impar. " ;

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 5
1:40:00 p.m. Dominiq Bitza
Optimizarea programului
Versiunea programului de determinare a paritatii pe care tocmai am prezentat-o nu este atat de
eficienta pe cat ar trebui. Variabila rest nu este, de fapt, necesara. Aceasta versiune este ceva mai
buna.

#include <iostream>
using namespace std ;
int main () {

int n ;
// Preia un numar de la tastatura.
cout << " Introduce un numar si apasa ENTER :
cin >> n ;

" ;

// Calculeaza restul impartirii la 2.


// Daca restul este 0, numarul introdus este par.
if ( n % 2 == 0 )
cout << " Numarul este par. " ;
else
cout << " Numarul este impar. " ;
return 0 ;
}

Aceasta versiune executa impartirea modulo in interiorul conditiei, comparand apoi rezultatul cu 0.

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 6
1:41:00 p.m. Dominiq Bitza
Introducere in cicluri
Unul dintre cele mai puternice concepte din orice limbaj de programare este acela al ciclurilor.
Cand un program se gaseste intr-un ciclu, executa in mod repetat o operatie atata timp cat o
conditie este adevarata. Forma cea mai simpla este instructiunea while clasica :

while

( conditie )
instructiune

Ca si la instructiunea if, puteti inlocui instructiune cu o instructiune compusa, care permite insertia in
ciclu a unui numar nelimitat de instructiuni.

while

( conditie ) {
instructiune

Ca si in cazul instructiunii if, instructiunea while evalueaza conditia si apoi executa instructiunea in
cazul in care conditia este adevarata. Diferenta este ca while repeta operatia la nesfarsit, pana cand

conditia devine falsa.


Mai concret, programul evalueaza conditia dupa fiecare executie a instructiunii . In situatia in care
conditia continua sa fie adevarata, instructiunea se executa din nou .
Iata cum se poate reprezenta o instructiune while folosind instructiuni if si goto. ( O
instructiunea gotoeste un salt direct la o anumita locatie din program. )

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 7
1:41:00 p.m. Dominiq Bitza
Ideea in termeni mai apropiati de limba vorbita :
1. Testeaza conditia . Daca este adevarata, executa pasii 2 si 3. ( In caz contrar, am terminat ; treci
la prima instructiune care urmeaza ciclului . )
2. Executa instructiunea.
3. Revino la etapa 1.

Printre cele mai simple exemple de instructiuni while este un ciclu care afiseaza numerele cuprinse
intre 1 si N, unde N este un numar introdus de la tastatura. Vom examina mai intai acest program in
forma scrisa in pseudocod , ceea ce inseamna ca etapele sunt scrise in limba vorbita.
Prin conventie, programatorii in C si C++ foloseste nume de variabila cu litere mici ; astfel se
foloseste "n" , de exemplu, in loc de "N". Limbajul in sine nu impune aceasta conventie ; puteti folosi
oricate majuscule doriti.
La inceputul unui program, trebuie sa declarati variabilele. Sa presupunem ca I si N ( pe care ulterior
le vom inlocui cu "i" si "n" ) sunt declarate ca intregi. Presupunerea este logica, fiindca aceste
variable nu vor contine niciodata o parte fractionara.
Iata cum se afiseaza numerele cuprinse intre 1 si N :
1. Preia un numar de la tastatura si il stocheaza in N.
2. Atribuie lui I valoarea 1.
3. Atat timp cat I este mai mic sau egal cu N,
____ 3A Scrie I la consola.
____ 3B Adauga 1 la I.
Primele doua etape initializeaza variabilele intregi I si N. I primeste direct valoarea 1, iar valoarea lui
N este aceea a numarului introdus de la tastatura. Sa presupunem ca utilizatorul introduce "2".

Etapa 3 este interesanta. Programul estimeaza mai intai daca I ( care este egal cu 1 ) este mai mic
sau egal cu N ( care este 2 ). Deoarece I este mai mic decat N, programul executa pasii 3A si 3B. Mai
intai, afiseaza valoarea 1 .

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 8

1:41:00 p.m. Dominiq Bitza


Apoi se mareste valoarea lui I cu o unitate ( ceea ce se numeste incrementare ) .

Dupa ce a executat aceste operatii, programul executa din nou comparatia. Deoarece aceasta este o
instructiune while si nu if, programul continua sa execute etapele 3A si 3B pana cand conditia nu
mai este adevarata.
Conditia continua sa fie adevarata ( deoarece valorile sunt egale ) , astfel ca programul isi continua
executia.

Dupa afisarea noii valori a lui I, programul incrementeaza din nou pe I .

Programul executa din nou testul. Deoarece I este acum mai mare decat N, conditia ( este I mai mic
decat N ? ) nu mai este adevarata. Programul se incheie, iar cifra 3 nu mai este afisata. In acest caz,
rezultatul programului este :

Quote
12

Deoarece utilizatorul a introdus 2, ciclul s-a executat de doua ori. Dar pentru un N de valoare mare
( sa zicem, 1024 ) , ciclul va continua de mult mai multe ori.
Uitati un program de cateva etape care poate ( in functie de valoarea introdusa pentru N ) sa afiseze
milioane de numere ! Valoarea teoretica a lui N nu are limita, cu exceptia celei mai mari valori intregi
admise. Cel mai mare numar care poate fi stocat intr-o variabila int este de aproximativ 2 miliarde .
In situatii extreme, limitarile capacitatii de stocare a datelor pot influenta posibilitatile de utilizare a
instructiunilor while .

Introducere in Limbajul de Programare C++. Notiuni de


baza. PARTEA 9
1:41:00 p.m. Dominiq Bitza
Rularea ciclului la infinit
Puteti stabili o conditie de rulare a ciclului astfel incat aceasta sa fie intotdeauna adevarata ? Iar
daca da, ce se intampla ? Raspunsul este :

(1) Da, este o eroare comuna de programare


(2) Ciclul va rula pana cand calculatorul incepe sa piarda curent, componentele hardware cedeaza,
se produce o intrerupere de program sau - daca nu se intampla nici unul dintre aceste lucruri - va
rula pana intr-o buna zi,cand, peste miliarde de ani, Soarele se va transforma intr-o supernova si va
distruge Pamantul. Acesta se chema "ciclu infinit" si nu este deloc simpatic.
Pentru a evita ciclurile infinite, trebuie sa procedati cu atentie cu while si cu alte categorii de cicluri.
Asigurati-va ca ati stabilit conditia, instructiunea de rulare a ciclului si parametrii initiali astfel incat
ciclul sa aiba, in cele din urma, un sfarsit.

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