16.10.2014 [ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
inhi aeaig Community > Tenist — Comptes» Ghierl ATorle
PA [C++] Tutoriale
Paved go eer 010-15
Limbajul de programare : C1. (hto://ro wikipedia org/wiki/C2B%28)
Mediu de dezvoltare recomandat = Dey C+ thtp://www bloodshed net/dev/dewepp hum)
‘Nu avet de ce sa va temeti de programare in C++. Serios! Ca toate limhajele de programare, mu estealteeva decat
0 modalitate de ada unui calelator indicat precise din punct de vedere logic. C+ poate foricat de complica,
dori, dar cel mai simplu mod de aincepesa- invatat este de a-folsi pentru rezlvarea unor probleme de
programarefundamentale
a facet decat sa dati
rogramarea nu pres seamana cu nil o alta activtate pe care ati desfasurat-o, In esent
instructuni dar inte-o maniera logic, sistematia
Calculatoarele nu fae decat ceea ce li se spune
Caleulatoerele nu fe doce ees ce Ii se spune, Este ces ml importanta regula, mai ales deca suntet incepator in
prograzate, Folosind vn Hinbaj de programare precum C's, dati unulcaleuator lista eu Tuerue de facut; aceasta
reprezinta program
Un caleulator are, desigur, nevoie de informa; aceastea sunt dateleprogramului. Dat sistemal trebuie s ste si
cam sa manipulezedatele respective. Instructiunile care aratacaleulatorlui ce are de facut din motive despre eare
vom discuta ulterior) poarte numele de cod de program,
Definitiitehnice
Aplicatie
Inesenta nsesmns acelas era cu program, dar din punetul de vedere al utilizatorusi Oaplieatie este un
program pe care i ruleaza un utiizator pentru a efetua o operatic
Cod
Este un al sinonim pentru program, dar prvi din perspectiva programatorul. "Cod" reprerinta seria de
instructunt si sintaxa aferenta care eompun un program ; aeasta poate face referire a codul masina saul col
Cod masina
Bate lmbajol natv al mnleroprocesorull, in care fecare instructiune deealeutatorconsta dist-o combinatie cod)
unica formata din so,
Cod sursa
hp iwwwlinkmania oopit383578-cutoriales ser16.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
ste un program serisintr-un limbs de nivel inalt, preeum C++, Codulsursa este compus din instrutivile C+
care formesza programul. Codul surs trebuie convertit in cod masina inainte de a putes fi rut efecti pe un
ealeulator.
Cdl masina, este compus din 1s o, dar este, de regula, reprezentat in cod hexazecimal (baza 16) Aste, codul
rmasina seprezinta, de obiei, ast:
08 Ay C39 B58 6077 90
[Nue prea clare anume facei-i ast? Daca nu canta toate codurile de instructiuni, un asemenea program este de
neinteles- cea cerepreznta motivul pentru eare foarte putin programatorifloses, in prevent, eodul masina
entra serie programe. Print contrast, codul sursa C++ arta ast
(salaria <0)
sfisaza_mase)_eroare();
Compilator
Este convertrul de limba care preiainstructunile C+ (Codul sursa C++ ) ex date de intrare si genereaza
program sub forma de cod masing. Acet fap este necesar intrucat calcuatorul in sine unitatea sa centrala de
prelucrare (CPU )~intelege numa cod masina,
Date
Sunt informatilestocate de un program, in vederca manipalari sau afsari. La nivel clementar, informatie sunt
sleatuite din euintes/sau numer
Instructione
De regula, este lini dintr-un program C++. In lini mar, o instruct in C++ corespunde unel propor serve
intro limba vorbita, de exempla i engleza. C++ mai aeoepta si structs’ complexe,
sult instructuni ma mii
Jeatite dinte-ana sau din mai
Program
Reprevina o serie de instrutiani care urmeaza af duse la indeplinire de un elealator, olosind datele initial. Asa
‘cam am mentionat anterior, un program poste necesita timp pentru a scris, dar deobice se executa cu vitera
falgerului si poate fi folsit a nesfarst,
Ubiizator
Este persoana care ruletza un program, adica persoana are foloseste calculator pentru a face o operatic utils, ca de
cexempleditarea unui fisier de tet, itirea mesaelorde posta electronics, explorate Inter
ec, Numele oficial al uilizatorul este utiizaton final
tls sererea unui
Constructia unui program in C++
Serierea unui program reprezint, de fap, primul pas in crearea une! aplcati
hp iwwwlinkmania oopit383578-cutoriales 2716.10.2014
LnkMnia Mutigaming Community
Pentru a serie un program in C++, vet nevoie deo modalitate dea introduce instructivnle programa, De
‘exemplu, pute introduee text inte-un mediu integrat de devoltae (IDE). Un mediu de dervoltare este un editor de
texte combinat eu alte instrumente utile de programare : Dev C++, Microsoft Visual Stu
up oe a intradusinstuetinile program
, puel tree la construcia proprit-rssa programul,
‘Constructia programului (compilarea si legarea )
CConstructia programulu reprezinta proces de converse a codull sursa Cinstructiunl Cr+) inte apicatia care
poate futlzata, Figura urmatoare rezuma modu de funetionare a procesului de contructi. Nu uitati ca, daca
folosti un mediu de dezvotare integra, acest etape se vor executa automat ; est sufiient sa apasaiotasta
functionals
‘Testarea programulut
ups ce ai reusit sa construt un program trebuie stl rulat de ateva ori pentra a va convinge ca face exaet ceca ce
dori
Revizuirea dupa necesitati
aca programul se exeeuta core, ati terminat, Dar, daca preintaerori de logiea de program, trebuie sa determinati
sursa ero sa reveniti ssa operati modificaril in codul sursa C++, dupa care sa reconstruti program
Goygits
‘Exemplu cod sursa
1LDeschideti Dev C++ (sau un alt IDE) si creati un sir nou.
sa ntinte de a introduce orice ln de cod C1, stergeti tot codul care vedeti in isieral now cre.
2: Introduce urmatoarele:
f 1
hp iwwwlinkmania oopit98357S-
‘using namespaces;
intmain() (
‘cout <<" Blaba bla, babble";
return 0;
>
Pentru a construiprogramul, este sufcint su apasti taste IDE-ulu asociat cu compilara,
(Cum funetioneazs
CCeedti sau nu, acest program simplucontineosingura instructiune real. Sintaxa de mai jos prezina clemeatele
standard, obligato, Penteu moment, nu va ntereseaa de ee sunt nevesare;flosit-es ata, Ineescolade (4})
inserat line efective de program - cae, in acest ea, est alestutdintr-o singura instruct,
include
tsing namespace td
intmain(){
Introduceti_instructiunile_aei!
return 0;
»
[Aces program are o singurainstructune rala (pe care o inserati in cincea linea programlui de mai sus )
‘out << "Bla blabla bla Ba bla";
Coeste cout? Este un obieet- concept despre care vom discuta mult mai mult in tutoralele urmatoae. Inte timp,
tot coed ce trebuies tit este
cout este prescurtarea dea "console output” (iesre a console ).Cu alte euvite, eprezinta ecramul caleulatorul
Cand seriti cava pentru eeran, texts afiseaza exact asa cum va asteptal
In C++, dateledeiesire se afisearafolosind cout si un operator de "ax" orienta spre stanga (<<) , care indica
‘rocereadatelor de lao valoare la consol. Nu vet folosi niiodata cout gresit dca i vzulizat in acest mod,
hp iwwwlinkmania oopit383578-cutoriales 4716.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
"la blabla blabla bla,"
consola
(sire)
eat cs ‘Bla Baba, ba bia Be
[Nu tei ceracterul pune i vrgula (;). Flesareinstractiune C++ trebuie se ge inchele x punet si vrgula, cu patine
except
in motive tehnice, cout trebuie sa aparaintotdeauna in parteastanga ori de cate ox este folsit. in acest cuz datele
se scurg spre stanga.Folsii“sagetile orientate spe tanga, earerepreznts, de fapt, dou semne “mai mie" (<<)
combine
“Trecerea la urmatoarea linie de afisare
In C+, textl trimis pe eoran mu trece in mod automat la urmatoare lini zieaTrebuie sa aisati un caracter line
noua (newline) pentru aceasta, Daca nu ast un caracter line noua ,ntregul text ese afsat pe sceens line iia
Beceptie : daca nu afisat un caractertnie nou, textul poate tree in mod automat pe randul urmatoratunei cand
linia fica se umple dar aceasta poate duce la rezultaeinestetce.
(O modalitate de afisare a unui aracterlinie nova consa in folosinea constantei predefinite endl. Casi cout , endl
face parte din spatiul de nume std
st :cout cc“ Ana are mere,” << atd: end
Darsatatavreme eat plasat aoeasta insteuetione la inceputol program
‘using namespaces;
nu trebuie se justifies fecae utilizar «lui cout si endl.in consecinta,putetiseieinstructiunea de afsare astfe]
cout << "Anaaremere"<<-endl;
Observatic
jum “endl este prescurtarea dela Yen line” (sfarsitul randulu)s se itest "end-el
(O alta modaltate dea insera un caracter ine nova const
in nserareacaratrelor\n.Aceasta este oseewenta escape,
pe care C++ ointrpreteara ca avand o semnifcatie special, in le sao eiteasea literal. Instructiunea urmatoare are
hp iwwwlinkmania oopit383578-cutoriales 2716.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
accasi efect ca i exernplul de ma sus
cout << "Ana are mere.\a" 5
Programl din aes ttoral(exemplul de mai jos) fiseaza mesa pe mai multe ii Daca introduce manual
programele, nu uitai sa folosti majuscule si minuscule exact asa cum se vede in aceste tutorial (desi este posibila
si modiicareamariiiliterelorinclus ince ghilimele, fara aafecta programal
incude ciostreum>
‘using namespace st;
Sntnain
‘out << "Bun vei pe Linkmat
‘out ce "Nu abuzit de sondaje de iain in postr, su de termeni de genl tel" "<< end;
fut > )
put
= temp,
consola
(intrare )
cig eter
Tata ce se mal intampla ca raspuns la aceasta instructione, (Procesl real este ceva mai compliat, implieand
verificarea unui buffer de intra, dar coea ce urmeaza reprezintaesenta procesulu intr-un program simplu.)
1. Programal is suspenda exeoutas asteapta ea utlzatorul sa introduca un numa,
2. Utliztorul introduce un numar st apasa pe tasta ENTER,
3. Numarul este accepats past in varabii temp (in acest ez)
4-Programul isi rea executia,
Dec, daca va ganditi se intampla 0 multime de lueruri ea raspuns lainstructiunes
ein >> demp;
Dar, inainte dea putes folosio varibila in C++, trie sa odeclarai, Aceasta este o regula imperatva si
Aiferentiaa C++ de Limbajul Basi, care este nlijent in aceasta privinta si nu necesita odeclarare.(Generatl
intrepid programator in Basic s-au dat eu capul decalelatordescoperind erori derivate din ljeritatea pe careo
Alovedeste limbajul in tea ce priveste variille.)
Este un aspect sufcient de important pentru i enuntat din nou, doc il vom transforma in regula de baza
oC, este obientorie delarares une variable insite de uilizres sostein
Pentru a declaa ovavabila, trebuie mai intai sa tit ee tip de date sa flost Acesta este un concept esentil stat in
C++, catsin majortata elorialtelimbaje
(O variabil este cova eare poate f eonsiderato “cutie magia "in care pateti plas informati-sau mai degraba
dae,Dar ce fel de date?
‘Toate date dntr-un calculator sunt, in ultims instanta, numeric dar sunt organizate intr-uul dintre cele tri
formate clementare:intreg, in vrgula mobil sir de text.
hp iwwlinkmania otopit983578.cutorales siz16.10.2014
LnkMnia Mutigaming Community
xista numeroase diferente inte formatol in vigula mobila see intreg.Dar, pentru programele de ineeput, regu
este simpla
Daca trcbuie ou slcatimumere en pri feactiomare, flontowarihila in
‘Solin,
Principal ip de date in virgula mobila in C++ este double Pare un nume cudat; ete prescurtarea dela "double
precision floating point” (irgula mobila ca dba preczie}, Mal exista si un tip eu simpla preczie (float ), dar se
utlizeeza rareori, Cand aveti nevoie de capactatee dea retine portunifractionre, vei obtine rezaltate mai bune - i
‘mal patine mesaje de eroare~ daca folositi double,
O declaratie double are sintaxa urmatoare, Retnel ea aceasta instructune se incheie cu punet si vingula(;), la fl
«a majoritatea categorilor de instruetun
double nume_variabila;
‘Se mai poate flos o asemenea delarati si pentru a crea o serie de varihil
double name varibilat ume sara.
De exemplu aceasta instructiuneerecazao variabila double numita @Dubla:
double oDubla;
Aceasta instructune ereea ovarabila de tip double.
eDubll
Instructiunea urmatoace, care foloseste sintaxa mai complexa,declara patu variable double numiteb, eds
double, ¢ 4 amount;
fect acest! instructiun’ este similar cu urmatorsl
doubled
double e
doubled;
double amount;
hp iwwwlinkmania oopict983578-cutoriales
iar16.10.2014
LnkMnia Mutigaming Community
Rezultatul acestordeclaraticonsta in ereares a pat variable de tipul double.
B e a amount
De ce dubla si nu simpla precizie?
Dubla precise este asemanatoare cu simple preszie, numa ca este mat buna decst aceasta, Dubla preciieaccepta 0
‘gama mai larga de valor, eu o mai mare preciie. (Da, este posbila plerderea de preszie in eazulvarabilelor
virgula mobila; cesta este un subiect la care vr reven in tutorialele umatoare.)
Deoarece dubla preci este mai exacta,tipul de date in virgula mobila este preferat in C++; inainte de executa
caleule in vingula mobile C++ coavertest tate valoile in formatul dubla preci, daca acestea nu se gasese deja in
ces format. De agemenea, C++ stacheaza constante in vngula mobila i format in dubla precizie, dae
specifica alteva (de exemplu, folosindnotatia 12.5¥ in loe de 125.
ula precize prezinta insa un dezavanta : are nevoie de un volum mal mare de spatin- mai oneret, de opt octet in
loc de patra (in medile de tip PC). Acesta mu este un factor destabilizator nici macar pentru programele simple,
Aeoarececoprocesoarele matematice accept, in mod dice, operaile pe opt octet
Aspect tebuie avutin vedere numai cand pe disetrebuie stocate catiati mari de valor in virgula mobila. Atunci si
‘umaiatunci se valu in considera uilizarea tipi cu simp preczie float.
Conversia temperaturilor
{ata formula de conversie, Cand este utiliza la combinarea a dova Valor, asteriscul (*) inseamna “iam eu"
Fahrenheit = (Celsius *1,8) +32
Acum, un program util nu caleuleazso singuravaloae de temperatura i atata tot. Daca am fi avut nevoie numai de
sceasta am ffolositaplicatia "Caleulator” din Windows ! Nu, un program ev adevarat util preia orice valoare
introdusa ea temperatura in grade Celsius si o convertese, Pentru aceasta este nevoie de unee caracteristi! noi, eum
efi:
+ preluarea datelor introduse de utilizator ;
+ stocarea valoriiintroduse intr-o variabila ;
{ata programul complet, Deschdeti un ser sursa nou introduceti codul de mai jos si salvat- sub numele convert
«pp. Apo compilati si exeeutti.
include ciostrenm>
using namespace sd;
intmain()
double temp, fem;
‘out << “Tntrogoceto temperatura in grade Celsius pasa ENTER”
cin>> dem:
emp = (etemp * 1.8) +32;
‘out << "Temperatrain grade Fahronbit este: "<< femp ;
hp iwwwlinkmania oopit98357S-
‘ising namespace std
intmain()
1/ Declapareavaribielr in vrgula mobil
double ctemp, emp
//Solicitareasintroducsrea voor ha ctemp (temperatura in gre Celi)
‘out Introducel temperatura in grade Celsius a pasa ENTER"
cin>> temp;
//Calesleaza flemp (temperatura in grade Fahrenheit) afsca,
‘emp =(etemp 18) +22;
‘out << “Temperatrain grade Fahrenheit este" << temp
return 05
‘Aceasta versiune comentats desi este mai usor de citit pentru om, necesita mai multa muna ta introducere
Percurgand exemplele din seeste tutorial, putet omiteintotdeauna comentarile sau pute opta pentru ale adavge
lterioe. Nu ultati urmatoarea regula de baza pentru comentari
Adavgarea comentarilor este intotdeauna optionals, da este o dee buna, Mal ales daca reo finta umnana Gnclusiy
ddumseavoastra isi va arunca vrcodate privirea pe respecivul program C+
Cum functioneaza ?
Prima instructiune din cadrul functiei main declaravarabilele comp sftemp (ambele de tipul double ). Aceste
‘variabile stocheaza temperatuile exprimate in grade Celsius, respectv Fahrenheit
double temp, emp
Astfl, vem dous locati unde putem stoca numete. Dearece ele sunt de tipul double, pot contine part
fractionare, Nu ite ca double simboizetza "valor in virgula mobil sidubla preciie
hp iwwwlinkmania oopit383578-cutoriales snier16.10.2014 LinkMania Mutigaming Community
Urmatoarele dous instrutins solicit utiizatorulu sa introduea datele de intrare si apoiTestochesza in vasabila
«temp. Sa presupunem ca utlizatorul introduce "10". Apo, valoarea numerica 10.0 este ntrodusain temp,
<—_ [Hina ener nie Gorda TE
sss)
—
Ey
tema
si
eae)
In general, patet folosi
soliitare si apo pentruastocadatele inttoduse, Mesaja de soliitareeste wi, deoarece stl utiizatorul sar putea
sa museca are ceva de facut
struetiunt similar in propre dumnesvoastra programe pentr a afse un mesaj de
‘Observatie : Desi numarul introdus in acest caz a fst “10" este toca sub forma 10.0 Din punet de vedere pur
‘matematic, 10 si 10.0 sunt valor echivalente, darn C¥-+ notata "10.0" indica faptl ca vloarea este stocata in
formatul in virgo mobil, nin formatalintreg. Seva vedea ca acest fap are consecint importante, asa cum vom
‘eplica in tutoralle urmatoare
Instructiunea care urmeaza execute conversi efective,folosind valoares stoceta in ctemp pent calcula valoarea
varebilei temp
‘emp =(etemp*18) +32
Aceasta instructiune eontineo atribuire;valoarea din parteadreapte a semnului egal (=) este evaluata si apoi
copiat in variabila din partes stanga, Aceasta este una dintre cele mai comune etegori de instractiuni C+
_Din nou, presupunand ca vloarea "10" fost ntroduss deutlizator, diagrama urmatoare indica modul de trecerea
‘sing namespaces;
int main (){
// Declorarea ctemp ca vorabie i virgule mobi
double temp;
1 Solicit sintrotucevaloarea ui temp (temperatura in grade Celis)
‘out << "Introduce o temperatura in grade Celsius sapasa ENTER";
sin>> comp:
(Converts ctemp sofiseaza rezulitele
cout << "Tomperstrain grade Fahrenheit este: " << (etemp * 18) +325
>
Sesiati deja un model care se repeta? In cele mai simple programe, modelul este wrmatorul
hp iwwwlinkmania oopit383578-cutoriales 132716.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
4. Declararea varabileor.
2. Preluarea datelor de itrare de a utilizator (dupa afisares unui mesaj de solictare )
28. Bfetuareaealeuleor si afisarea rezultatelor
De exemplu,programul urmatorefeetueaza o alta operate, dar ar trebul sava familiar. Programul eee un numar
'apotafseaza patratl acestui (numarul inmultt ewe nsus). nstructiunie sunt asemanstoare celor din
cxempol precedent; singurcle aspect care difera sunt numele variable (ns formula de calulfolosita (n* n).
incude
‘using namespace st;
tnt main (04
/Belarare nea. varibia in vigula mobil
Aoubten;
pba snroduc alorea bin
‘et << "Tetroducet wn numa pasa ENTER";
din>>n;
1 Caleueazasiafseaca valoarea patratu
cout << "Patratuleate:” << mn;
return 0;
2
Nume de variabile si cuvintele-cheie
tet folosi orice sume dort, ex condita sa respect urmatoacee regu:
4. Primal caractertrebuie safe litera -nu poate fi numar. Tehnie vorbind ,primul earacter poate fi sio linuta de
iblioteea C++ foloseste int
folositi un mume asf
aceasta conventie de nume, dec el mai bine este sa evita sa
2. Restul numelui poate fi format din iter, numere sau niute de subliniere _)
23. Trebuie sa evita cuvinte care au deja osemnificaie predefinita speiala in C++,
CCuvintle cu semnifiatie specila in C++ se numese "euvinte-chee", Un asemenea cuvant este main, Pinte alte
cavinte-cheie se numara tipurle de date C++ standard, precum int, flow si double. Alte cuvinte-chele sunt if, else
‘while, do, switch si lass
[Nueste necesr sa memorai toate cuvintele-cheie din C=, desi multe cari de programare va sugereaza sa procedati
fel! Nu trebuie deca s tit ca, daca incereat sa folositi un nume case train confit ex wna dintre euvintele-
hele din C++, compiatorul va va raspunde cu un mesa care se refers Ja un confit cu un euvantcheie sa lt 0
eroare de sinttna In acest car, incercati un alt ume,
Goygits
hp iwwwlinkmania oopit383578-cutoriales s4izr16.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
Cateva cuvinte despre tipurile de date
Tnainte des examina modul in care calelatonreleiau deci, este important sa ntelegem notiunen de date. La ueme
turmelor, toate informatie stocate intr-un calculator se reduc lao serie formate din sso, Coea ce da sens
informatio reruta din eapacitatea de organizare a aestein in componente semnitiative, numite tipuri de date
(Cand ati invatat matematica, nu trebua sa va preocupai de ipur. Un numar este un numar si
sceste expresi sunt dentice din pune de vedere matematic:
iene altcovs, Toate
3 30 tei an
Darlimbajee de caleulator si sistemele sunt altoevadecat matematica pura, Nu este suficent sa aveiovaloare;
‘bite st aveti si un mod de ao toca In tutoralleanterioarene-am refer la variable ca Ja o“easeta magica”, dar
este mal eoret sa spunem cao variabila este un eos eare poate cantine dat, Dar ca toate cosule, nu este infin
Nu poste stocadocatocantitst limitata de informati
Spre deosebire de lames matematiei pure, lamea calulatoaelor este una in care dete reprezint, deseori, 0
resursa prions,
Dincola de suprefata, format inte sel in virgula mobila mu sunt deloc semanatoare. In majorittea cazurlor,
Aiferentele sunt nviibile pentru uiizator ; este sufieient a olosititipul de care ave nevoieslasati detail in
seama programlui C+, Uneori ns, eompilatorl va va avertia cu privie la “conversi” sau *pierderi de date”,
czar in care eat uti sa stil ce se refer,
Ita modul de stocare a unei valor, in speta 150, in format introg si in virgula mobil, (Am fact eateva presupuner
sSmplifiatoare, De fapt, formatee in virgulamobiafoloseseo reprezentare binara, nu zecimala,)
Fomatianes D 150
Fomatiavssla mobile 5 50000000
s exponent mantisa
Bitul de semn s indica daca numarul este port sau negaty,valoarea 0 indicand un numar nenegatiy.
CCampul exponent est cel care face diferenta inte formats in vrgula mobila scl intreg,determinand si plusul de
Aexibltae sl primulul format. 8 consideram problema stocari valor x0 la pterea 18. fata eum arata numarul
Aceastavaloares nv poate fi stocata ints-ovarabila intreaga. Nu exsta suficentspatu. Darovarabila in virgula
‘mobila poate stoca wor o atemeneavaloare; atu se reduce la tlizarea unl camp exponent sufiient de mare. (
Exponentul va 38 in eazul in care ealelatorl foloseste formatul zeimal. In formatul nar, edie aelaflosit in
realitate de cate calculator, valoares exponentalui este de cateva oi bune mai mare deca aceasta). Inta un mod
concis de repreventare a aestui numaria C+
se
hp iwwwlinkmania oopit383578-cutoriales 152716.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
{dea este ca trebuie sa folosit ipl corect de date pentru fecae eplicti in parte, Pentru a stoca un numar fara
virgula, pute felosi, daca dori, stocarea in format vrgula mobila (ca si numarul 150 din exempll de mai sus)
Dar acest format necesita mai mult spain si este mai complex deca formatul inte. Prac, caeulatrul este pus la
tresba mai grea deca sebuie, ste mai bine et folositiformatulintreg aun cane Inerat numa ca numere fers
rwula u condita ca acesta sa se gaseasca in interval standard al namerelor tre aproximativ dou miliarde,
adien doua mii de milioane)
Tmvunclesituati rare, un eamp in format virgula mobila nu poate stoca un intreg cu preciaie. Aceasta se intampla
‘numa la valor intregi foarte mari. lata un alt motv pentra evita utilizarea formatului in virgula mobilaatunc cand
Tuerat numa eu numere fara vega,
CO variabila de tip intreg se decara flosind o sintaxa asemanatoare ecle uiliate la delararea une! varabile de tip
double. Tipal int este ovaloare intreaga standard (care ocups patru ott pe aproape ore calculator aetuaD.
int nume_variabila;
‘Valorile constant sunt, de asemenes, stocate in format intreg sau in virgula mobil. Prezenca unui punetzecimal(
‘ingula) determina stocares automata a valri i format virgula mobila, Un numar preeum 1, 141592 necesita,
evident, format in virgola mobila si, ca atare, este stocat informa double. Dar, intrucatcontine un pune zecimal,
uma 3.0 este, de asemenea, stocat in format double, Daca se folosestenotata 3, va fi stocat in format int.
Si acest lucru est important, deoarece C++ vai Yamabil” si va efectuaconversile de dat fara reclamati, insa numai
«aca poate prceda astfel fara potential pierderide date, De exemple, o constanta int tebuie convertita in ving
‘mobilainainte de a fi salvata in format double.
aouble x;
X=35 | //OK:eonvertste din int
In acest ez, compilatorol C++ nu protesteaza, deoarece formatul double poate stoca orice valoareeare poate fi
stocatainformatul int
Dar, in exemplal urmator, o valoare in vingula mobi (3.7) trebuie convert
conversia dorita, dar emite un mesaj de averizare in care se spune ca este posibilapierderee de date
a int-un intreg, Compilatoral exoeata
2375 //Aente:conversi din double init
recaltatl este ca portiunea frationara 0.7 se pierde, iar valoare geste stocata in varabila
“Mai putin evident est faptulcainstructiunea urmatoare - care par foarte nevinovata areca rezutataclast
avertsment, deoarece portiunea "o" are semnifcatia unui format in vrgula mobils. Pentrs compilatorul de C++,
orice converse din formatul in vrgula mobila in cel intreg este consderata automat ca suspects,
n=205.//Atente:conversiedin double in int
lent din
In ciuda aversiamentuli,programul continua ss functionere corect in acest ez, deoareve 3.0 este ech
net de vedere matematic cu 3. Insa majortatea programatorilorprefera sa se debaraseze de avertismentele din
partes compilatorului, Sunt agasante si dau impress persistent ca cova est in neregsl,
hp iwwwlinkmania oopit383578-cutoriales 162716.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
In acest eax, modalitatea de a seapa de avertismente eonsta in a specifica o converse fortata, care cere eompilatorulut
sa converteasca in tpl int. Intruct, in acest ear, conversa se execttadeliberat,compilatorul presupune ea stit ce
facet si au emite avertismental,
n= statie_eastciat> (3.0);
Sau , mai ine, pote transforma const
problems, deoarece nu facet deat saa
a nte-un ines, nu inte-un numar in iegula mobila;atunei mu este niet o
uit oconstanta in format int nei varibile de acelasi format
meas
ca von vorba, forma generela a operatoruluistatie_cast este urmatoarea
‘stathe_castatip>(expresie)
Operatorulstatie_east preia expresiaspecicata sl returncaza o expres no
de tip indict
‘x aceasivaloare matematia, da
xista numerosioperatoi de converse fortata accept de vrsiunile standard de C++ ,Operatorl statie_east este
cel mai comun dintre acesti ; utlizarea s este simpla, Ceilalt au utilizar mai spectalizte
Luarea deciziilor intr-un program
LLsateadeciilor intr-un program are un caracter limita Un calculator poate sa execute numa instructiuni care sunt
perfect canes precise
Tntrun fl, este un Tueru bun; din alte puncte de vedere, este o provocare, Vestea buna este ea un ealeutator va face
intotdeauns exact cise spun. Vesta proasta este ca un caltlator va fae ntotdeauma cei se spune, iniferent cat
de stupid este. Din nou, aceasta este una dine epulle capitale ale programarit- poate eea ma importanta
‘*Vnealeulator poate executa numalinstructiun pefest clare,
In cazul proceselor deszionale, aceasta inseamna ce un calculator nu cunoaste conceptele do judecata sau
Aiscernarnant, Caeulatorol nu poate deat sa execute regli precise din punet de vedere matematie~ deexempl, 8
compare doua valori pentru a vedea daca sunt egale.
Singur domeniu in care spectalisti in ealeulatoare sugercazs ca un calculator poate dispune de ea ce se poate
‘numidiscernamant este acc al ineligente artficiale (TA). Dar aceasta est excepia care confirma regula. Un
rogram soft
fecare ditreacesta find simpla, precisa si clara,
‘de luare a deinior este aeatut din mi sau poate ear milloane de instretintindviduale,
Its
se
‘Cea mai simple metoda de. programa o comportare estes spui:” Daca A este adevarat,atunci executa B."Acesta
este efectlinstructuni if din C4, Tata forma simple a sntaxe instruction if
1 Cconditie)
hp iwwwlinkmania oopit383578-cutoriales aver16.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
Exist si forme mai complexe al aestelinstructini, despre care vom discutaimediat. Dar, pentru incepta
consideram oinstructiune if care compara doua varabilex si. ( Vom presupune a aceste variable au fst dedlarate
anterior, conform necesiatilor.)
ite
steeply
Ciudat.Aic sunt doua seme egal (== in le de unul sigur (=). Nu este nil ogreseala. In aceasta situatie, C++
are dol operator difri: un semn egal indica atibuirea, care copiaa valor into variabil, in imp ce doua seme
gal indica verficarenegalitai.
Observatie : Pe masura ce facet progrese, vei deseoperi ca utlizarea atebuiri (=) aolo unde se dovea, de fap,
‘estaceaegaltati (~~ )reprezinta una dintre ele mai comune erori, Problema este case permite foloire atriburi
(in interiorul une! condi, dar atibuirea nu exeeutaosetune coreta
Si dacain Loe de a exeeuta o singurainstructiune ca raspund lao conte, dort su executat o serie intreaga de
‘operat? Respansul consta in utilizarea une instruciuni eompuse ( eunoseuta si sub numele de "bloc de instructiuni
“
toe *4
out << "este egal uy.” <« endl;
tout <¢ "Noni asn ca dragat?"s
Semificatia acestesintaxe ete cafe executa toate acesteinstructvni He nu se executa nici una. To sitatia in care
condita (x egal euy in acest car) nu este adevarata controll programuluiexecuts un salt dincolo de sfasita
instructiunilcompuse- eu alte cuvinte, la prima instruetiune de dupa acolada de inchidere (})
Acoladele de deshidere,respetiv de inchidere({}) determina incepotul, respectivsfarsitl i
‘Aceasainstrutiune se poate include in sintaxa instructiuni if datorita unei alte regulicardinale
‘Toate line de program euprine inte- sintaxa if sau Helse pt fserise in acest mod, motiv penteu care acoladele
spar intotdeauna chiar daa blocurile de instructiunirezltantecuprind fieareeate osingurainstrutiune. Personal
nu flosese aceasta metoda, nda necesita munca suplimentara, chiar daca nil programatorio reomanda
caldutos
Avantajul metodeiprezentate (care floseste mereuinstructiunicompuse in sintaxa if) este aca ca se poate reveni
siadaugeo insructiune sau doua intr acolade, faa ca prin aceasta programul sa devina incorect. De regula, eu
audaug acoladele dupa necesita, dar poate preferti aceasta abordare mal preeauta,
De ce doi operatori
InCsiC++, progeamul urmsator este permis fara probleme. Cu toate acstes,aproape intotdeavna determina 0
comportae incoreet
//ORBSIT Atibuire!
Ce face acest exerplu? Aleibue lui x valoareaIuiy si folosestevaloarearespectiva cao coiled test. Daca aceasta
loa
est dferita de zero, este considerata adevarata”. In consecina, daca y ia orice valoare aka decat zero,
hp iwwwlinkmania oopit383578-cutoriales 492716.10.2014
[ G++ Tutoriale - Ghigur gi Tutoriale LinkMania Muligaming Community
«condita de mai sus est intotdeauna considerata adevarata i instructiunea se executaintotdeauna |
Iata versiunea corecta, care va exceuta ce dort
ity) I CORBET: Testareaegaitatit
cout << "xslysunt eae";
este o operate care verfcaegalitatea si eturneaza “true” (adevarat ) sa false” (fas), dupa cea
Important de retinut este feptul ca nu trebuie sa facem confuie fare verfcaresegalitati si atribuire (x~y) cae
copiaza datee in variabilax si returnenza "rue" pent orice valoare diferita de zero
In particular, aproape fecare expres din C+ returneuzaovaloar, fapt valabil si pentraatribuire (= ), care este
considerata"expresie cu feet de margine". Asadar, pute initia tei variable simian procedand astfel
xeyerso; —— //Atrituieuturor variatilelr valoarea 0
Ceca ce est echivalent ea
ee(y=(220))5 1/ Ate taturorvarabilelor valores 0
Ficcare instructiune,incepand eu cea din dreapta (z= 0), returneazavaloara cae a fost atribuita (0), are apoi
‘ete foosita in urmatonrenatribuire(y = 0). Cu alte cuvinte, o est transmis de te oti, de ecare data une alte
varibile
Inconsecinta, C++ ratenza "x =y" ea pe oexpresieabianita, care returneaza ovaloarea, ea orie alta expresic,
Siasta inca nar nimie, daca n-ar existao alta regula mostenta de C+ rice valoare poate futilzatadrept
‘conditie, Ca stare, compialtorl na va va opt sa screti ceva de gent
W(x-y)
Ww
In consecint, fit foarte atenti cand folosit un singur semn egal
respeetv dous asemenea semne
sau Impar?
Aces este un exemplu simpla, aproape banal, dar introduce un operator now (% ) i prezinta sintaxa if-else in
setiune,
Acest program preia un numar dela tatatora si indica da
outilzare simpla a instretivni
este par sau impar. ste o operatic nals, darilustresza
incude ciostream>
wRnamespace sd;
hp iwwwlinkmania oopit98357S-
Cum funetioneaza ?
Prima instructiune din program defineste doua variable intel si rest.
taxa treble sa va fie eunoseuta
{In continuare, pograrmul pre un numar sii stocheaza in vribilan. Deja
‘out <é * Introducett un numars apasati ENTER,
‘Acum,totl se reduce aa efectua un test asupra Iu m pentru a vedea daca este par sau impar. Cum procedati?
espns: se imparte numarula 2s se examinedza restul, Daca resul este , numarul este par (diviibil eu 2). In
cer contrat, este impar
ste exact cum se procedesza in continuare. Urmatontes instructine imparte numarul la 2s citesterestul, Aceasta
se cheama impartire modulo seu cu rest. REultatl este stocat intro variabila numa rest
rest=n% 2;
Simbe
cateva exemple de rer
jul procentula (6 si pier semnifcaiaobisnuita in C+, simbolizand, i sehimb, impartiea eu rst Lata
hp iwwwlinkmania oopit383578-cutoriales 2sier16.10.2014
[G++ Tutoriale - Ghiour gi Tutoriale LinkMania Muligaming Community
32 maar
3557 Tost
092 Par
2555. Divi eS
135) Tedivnbi eos
ups impartirea li a2 si obtinerea restuhi, vom obtine rultatal o (par) sau 1 (mpar). Instructiunea if
compara restl ou os afiseaza mesa adecvat,
‘ovt < "Numarl ese par";
else
‘out
else (
‘out << * Namal este imper.”
>
Optimizarea programului
‘Versiunea programului de determinare a partai pe eae tocmai am prezentat-o nu ese ata de eficenta pe cat ar
‘tebui. Varabila rest nu este, de fapt, necesara. Aceasta versiune este cova mei buna
Pine isteam>
‘sing namespace sd;
nt main 4
ints
(/7 brian nnar deta tostatura.
‘out << " Introduce un numa apasa ENTER
(/f Caleueagarestul impart a
1/ ica restal este 0, mamaral intros este par.
it(n%2==0)
out << " Numarueste par."
se
hp iwwwlinkmania oopit98357S-
Aceasta versiune exeeutaimpastires modulo in interiorul condite comparand apoirezltatl exo.
Poa Nevnine 010158
Introducere in cicluri
‘Unul dntre cele ma puternice concept din orice limba de programare este acla al ilurlr.
Cand un program segaseste intr-un cel, exocuta in mod reptato operatic stata timp cat ocondite este adevarats,
Forma cca ma simpla este instructiunca while clasica
‘while (condtie)
Cassia instrutiunes if, pated inloeu nstrutiune cv ofastructiune compusa,eare permit insertia in ciel a unui
umar nelimitatdeinstractini
‘white (conte)
Casi in cena instruction if, instrctiunea while evaliesza condita spot execu instructiunea in carl in are
condita este adevarata Diferenta este ca while repel operaia Ja nesfarsit, pana cand condita devine fsa,
Mai coneret,programul evalueaza condita dupa fiecare executic a instruct. In situatia in care condita continua
sa ie adevarata nstructiunea seexecuta din now
Tata cum se poate reprezenta ons
dicta anumitalocatie din program. )
Gooppis
tune while flosind instruetvns Hf i goto, (0 instructunes goto este ns
ees interment mat apropiat de limba vorbita
1. Testeaza conta. Daca este adevarta,exeeuta pas 2s g. (Tn ca contrar, am termina; trecila prima
instrutiune care urmeuzacicllui)
2. Execute instruct
3. Revino la etapa
hp iwwwlinkmania oopit383578-cutoriales 2si2716.10.2014
LnkMnia Mutigaming Community
Printre cele mai simple exemple de instructiuni while este un cicla care afiseara numerelecuprinse inte 1 iN,
unde N este wn numarintrods dea tastatra, Vor examina mal ints acest progracn informa sersa in pseudoood,
e2ea ce inseamna ca etapele sunt serse in limba orbit,
Prin convente, programatori in Csi C++ foloseste nume de variaila cu litre mic; astel se oloseste “a”, de
cexemplo, in loc de°N". Limbajul in sine au impune aceasta conventie ;puet folosioricate majuscue dort
{La inceputul unui program, tebuie sa declarat variabilele. Sa presupunem ea [SiN (pe care ulterior le vom inloeut
‘cu si" ) sunt docarate ca introg. Presupanerea este logics, findea acest variable nu vor contineniciodata 0
parte factionara,
Ita cum se afiseaza numerele euprinse intr iN
4. Preia un mumar de tastatura sii stocheaza in.
2. Atribuie ui valoatea
‘3. Atattimp eat [este mai mic sau egal eu N,
A Serie Ila consola
8 Adauga 11a
Primele dua etape initlizeaza vaiabileleintegi I iN. I primeste direct valoarea , ar valoarea ll Neste accea. a
‘numaruluiintrodus de a tastatur. Sa presupunem ea tilizstorl introduce
== N
=
{intrare)
1
1
‘hapa geste interesanta Programulestimeaza mai intel daca I (ear este eyal cu 1) este mat me sau egal uN (care
‘este 2), Deosrece I este mai mic decatN, programl executa pasi gA si gB. Mal inti afseazavalosres >
hp iwwwlinkmania oopit383578-cutoriales 2aer16.10.2014
LnkMnia Mutigaming Community
3 Cattimp | estemal mic sau egal cuN,
> 2A ntcessa!
38 Adauga 11a!
‘onsola
(lesire)
tp iwwwinkmania rotopict983578-c-tutorale!
Apoi se mareste valoarea lui I cuo unitate (cea ce se sumeste incrementare)
"
1
Dp ce a exceutat aoeste operat, program exeeuta din nos comparati, Deoarece aceasta este o nstructisne
‘while si nu if, program continua sa execute etapele-24 si gB pana cand condita nu mal este adevarata
3 cattimp| este maimiceauegeleuN,
Sa Afsana!
> swAdauga tia!
CCondiva continua sa fie adevarata (deoarecevalorile sunt egale) , asfel ea programa isi continua exeeuta
3 Cattimp| este maimiesauegaleuN,
> aaaficesza!
38 Adauga tla!
—16.10.2014
LnkMnia Mutigaming Community
ups afsarea noi valor alt T, programm inerementeaza din nou pe T
‘3Cattimp este maimiesauegaleuN,
ak Afizeazs!
> seadaugets!
rograml executa din nou testul. Deoarece Teste acum mai mare decatN, condita (este mai mie deat N'?) nu
smal este adevarata,Programal se incheie, iar cfra 3 nu mai este afisata, In acest cz, rezltatul programulu ete
eoarece utilizatorl a introdus 2, cet s-a executat de dua or. Dar pentru un N de valoare mare (sa zicem, 1024 )
cell va continua de mult mai multe or,
Uitati un program de eateva tape care poate in functie de valoarea introdusa pentru N ) sa afiseze milioane de
rnumere | Valoarea teoreticaaIuiN au are limita, eu exoeptia cel regi admise. Cel mai mare
‘numar care poate i toca nto variabila int este de aproximativ2miliarde
mai mari valor
In situa extreme, mitarile capacitati de stocare a datelor pot influenta posbitatie de utiizare a instretunior
while
Rulares cielului la infinit
tet stabil o conditie de rulareacilul astfel inca
Jntampla? Raspunsol este
ceasta fie ntatdeauna adevarata? lar daca da ce se
4) Da, esteo eroare comuna de programare
(2) Cita va rola pana cand caleultoralincepe sa piarda curent, componentele hardware ceeara, se produce 0
intrerupere de program sau ~ daca nu se intampl nie unul dintre acest lucruri-va ula panaints-o buna cand,
peste milla dean, Soareeseva transform intro supernova svadistrage Pamantul.Acesta se hema "il
infiniti nu este deloe simatic,
Pentru a evita cctrile infinite, trebule sa procedat eu atentie cu while seu alte ateporidecichuri.Asigurat-va cx
ati stabiit condita, instructionea de rulare a ciluls si parametri inital astflinat cell saab, in cole din urme,
un sfarsit
hp iwww linkmania otopit983578-