Sei sulla pagina 1di 27
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 ser 16.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 27 16.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 47 16.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 27 16.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 siz 16.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 iar 16.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 snier 16.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 1327 16.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 s4izr 16.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 1527 16.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 1627 16.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 aver 16.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 4927 16.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 2sier 16.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 2si27 16.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 2aer 16.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-

Potrebbero piacerti anche