You are on page 1of 41
40 Torut pespre C/C++ 10) Dezvoutares PRogRaMuLuI ‘Atundl cand creayl programe, executati de obicel aceias pay La Inceput, vet uuliza un editor pentru a crea figerul Sursi, Dupa aceea, veti compila progeamul. Dac programul confine erori sintactice, tebuie si edita figeral sursi si si corectatt erorle. Dupa ce progeamul este compilat cu succes, veti incerca si rulayi programul. Daci programul se fexecutd cu succes gl reaizeazi ceea ce era previzut, Inseam ch aj terminat de realizat progeamul, Pe de alti parte, daci prograrmul nu lucteazi cum v-ai fi asteptat, tebuie si Verifical linie cu linie codul sursa pentru a localiza eroarea logicl (asa cum am vizut tn sectiunea 9). Dup& ce corectal eroarea, ebule si compilayi din now codul sursi penisu 8 ‘rea un nov Risier executabil, Apot pute testa noul program pent a vi asigura ci el rea- Jizeazi sarcina aga cum ayi dori. Figura 10 ilustreazi procesul de dezvoltare a programulu FA] moe Taio ze oc, nu Figura 10 Procesul de deavoliare a programului 1100 Tieurne ve risiene ‘Atunel cind creajl un program tn C, vi plasay insuctiunlle taurun figler sursi care are fextensia C, Daci programul se compileaga cu succes, compilatorul va erea un figier ‘executabil, cu extensia EAE. Aga cum af cit in Sectunea 3, multe programe uullzeaza hgiere ‘antet (cu extensia H), care Contin instrucjiuni utllzate ‘in mod curent. Dac examina continutul directorului dumneavoastri dupa ce ati compilat un program, veti gist unul sau ‘mai multe fisiere cu extensia OB). Acestefisiere, denumitefigire obiec, conn Insirucjiun| sub form de sinuri de 0 $11, pe cate e injelege calculatorul. Totus, nu puteti executa aceste fisiere obiect, deoarece conginutul lor nu este chiar complet. Complitoral de C pune Is dspoae rune (cut a prin, cae realize opera frecent uilzate reduc nominal de lnncun pe cae ele le inode rogram, Dupi ce complatonleximinea sak program el creazl un Exe bie Fetal prosramalul print; complatra vaca un fier oblet denuml pmb. up sce, un program denim edo de eur lca program exeaab ph Coubinsres Inutugiunlor progsms! infer! cblect i fungile pe cae te deine emplatorl (cum ar pring. De cele mal multe of atin cod pel omypond peri a vi cram ira su, acest va pela nto automat earl de eg dak Programa sa compiat cu suces igura 11 dueeszi proce de compliare derealares Fephtor ona propa Prasteue NofIUNIDEC 41 Saas uate ea oi canoe, OY, pa POE on has rareine | >< oy puna a a ta Epirorut De LesaTuR! In secjiunea 11, afi invajat ci atunci cdnd compilati un program in C, un al doilea program, denumit editor de lege, combina insrvepunile programs domnesvoastl cd rtnele predefnite (pe care le Serine compiator, pent convert files obit ntoun program executable fl ain cazul proces de compare, n cursl cima se po detec ero de Sintaxa,procesal de eitare&legiturtor post, de asemenea, si inincase ero. Silvan de exeinplu urmatorl program, nu_printe, cae floseste, tn mod eronat, print in loc de Prin Winclude “void main (void) eee Regaturitor’) d 2 Pentru ci programul n4_print.cau incalci nici o reguld de sintaxd a limbajului C, programul va fi compilat cu succes, rezultind un fisier de tip OJ. Tous, din cana incinaeianit print nedefinite, editorul de legitusi Turbo C+ Lite va afiga urmatorul mesaj de eroare: Exror: Function ‘print’ should have a prototype in function main() Deoarece compilatonil de C nu define nici o functie denumitl print, editorul de legitual nu poate crea programul 2xecutabil nu_printexe, insi va afiga miesajul de eroate de mai sus, Pentru a corecta eroarea, edita figerul inlocuind print cu prin si recompilayi program, Figineve anteT Op eies Fiecaze program prezentat In cadmul acestei Cini foloseste una sau mai multe insruetiuni include penisu a cere compilatorului de C si foloseasca insirucyiunile incluse inesun fisier 4antet. Un fsier antet este un fisier ASCH, al cArui continut if puteti imprima sau afiga pe ecranul dumneavoast, Dacd examinati director eare contine compilatorul dumneavasti (Girectorul cite tn cazul compilatorului Turbo Cr+ Lio al femet Borland), vet intalni un subditector denumit include, Subdirectorul include conjine figierele antet ale compila- 42 Torut puspre C/C++ torului, Faceté-vi timp acum pent a localiza figierele antet ale compiltonulul dumnea- ‘vous, Poate i arfibine chiar si tipi conjinutul unui iter des uizat, cum a fh sidio.b Tn interiral acestal fiir, vet intl insteuytun in limbajul C. Cand compilaonulTalnete oinstruciune *includein program, cl compileaza codul din fiserl anet ca gi cura a cts ‘continatul fier antet in Bier sues Fgierele antet contin defini frecvent utlzate si fumizeazi compilatorulutinformati relesitoare la funcile sale, cam ar fi prinif Decca | data, probabil Gh vet infelege mai greu continutol unui fijer antet, Pe misuri ce vl vel | experiments in C $i C+4, va recomandim $4 tipi o copie aflecrulfsier ante pe cate i | folosit $1 si] examina. Fslerele antet contin infcemapi preioase gl vi furnlzeaz® tehnic de | programare caze Va vor face si devenit un programator mai bun | 14 Locatizarea FigieRELOR ANTET I {In secjunea 13, a invatat cf atuncicind compllatorul de C intdlneste o directv #hnchude, adaugi conjinutul fiserului antet la progeamul dumneavoasiri ca si cum Lay fl seis th | interior figierul sur. In funcyie de complatorul cu care Jucrap, parame dumnes- voastri de media trebuie s contin o intrare INCLUDE care sf indice compilatorulut numele Subdifectorului cu fsterele antet. Daci, atunei cind compila! un program, compilatoral aligeazl un mesa) de eroare,averizand cl nu poate deschide un anumitfigeranet, verficai ‘mal inti subdirectorl care contin fgiteleantet ale compilatoruti dumneavoase, pent 2 vi asigura cl ace! figer exist. Dac itn sir, daji comanda SET Ia promptul DOS, aga cum Se vede mal jos ¢:\>SET (COMSPEC=C: \DOS \COMMAND . COM. ‘Daci parametsi dumneavoastri de mediu au contin o intrare INCLUDE, verificati documen- tajia care insoteste compilatorul dumneavoastrA pentru a determina daci este necesara o astfel de intrare. De obicei, in procesul de instalare a compilatorulul, va fi introdusd tn fisieral auscexec.bat 0 comand’ SET care asociazi variabilel INCLUDE subdirectorul care confine figierele antet, ca mai jos SET INCLUDE=C: \BORLANDC\INCLUDE fn cazul in care compilatorul dumneavoasted foloseste vatiabila INCLUDE si fisierul autoexec.bat nu defineste aceasta intrare, putefi si o creati dumneavoastri, plasind-o fislerul autoexec.bat Observatie: Programul Turbo Cr+ Lite va cuta fisirele antet numat in interiorut Subdinectoruls!sattnclude, 15 9 Maries virezei ve compiare (Tes ‘Atunci ctnd compilaji un fiser sursi, compilatorul de C ereew2 unul sau mai multe fisiere temporare care exist numai cit timp lucreaz3 compilatorul si editorul de legituri. In functie de compilator, puteyi utliza variabila de media TEMP pentni a indica local unde $8 fie plasate aceste isle temporaze, Daci folositi un calculator cu mai multe hard- Iuportanya PaGiNLOR Pe misuri ce vet) parcurge sectiunile acestel clini, veti tntllni vartabile si funcii al ciror ‘nume incepe cu un caracter de subliniere (), cum ar fi _dos_getdrive sau _cbmod, De obicei, vefi utiliza asemenea variabile si functii numal in mediul DOS, Daci scrieti programe care se vor executa sub DOS, Windows, Macintosh, UNIX sau alte sisteme de operare, at trebui si aveti guj cind folosti aceste funcil, deoarece este posibil ca ele si nu fie disponibile in celealte sisteme. De aceea, pentru a muta programele din DOS in alt sistem de operare, va nevole si mai lucraf la program, Unele funcgii pot avea dou’ implementiris luna care incepe cu in caracter de subliniere (_comod), lar una fara Ccomod), Ca rexel, folosijfunctia sau variabila care nu utlizeazi caracterul de sublinieze (in acest caz, chmod). 22 = Caracrerut Puncr $i vIRGULA Exeminand diferite programe scrise in C, veji vedea ci este folosit foarte mult caracterul puunct gi virguld (). Acestearacter are o impostanfl deosebitd in cadrullimbajului C. Asa eum St, ua program este o lish de instructuni pe care dori si le execute calculator, Cand Speciicati aceste instructiuni in C, folosi caracterul punct si virgula pentru a separa 0 instructune de ata, Pe mAsur8 ce programele vor deveni mai complexe, veti vedea cf sunt situa in care 0 instruefiune nu incape pe o singuri linie, Arunci cand compilatorul ‘exainineazi programul, el uilizex2’ puncnul si virgula pentru a distinge o Insirucjiune de ‘urmitoarea, Sintaxa limbajulul C stabileste utlizarea caracterului punct si virgula. Dack omieti acest caracter, va aplirea o eroare de sintaxi gi programul nu se va compila cu succes. Prastete NOPUNIDE CAT PREZENTAREA VAPIABILELOR Pentns a realiza lucrurl foositoae, programele trebuie si stocheze informatia, cum ar un document pe care l edits in mai multe sesiuni de hucru cu calculatorul, inun fiser in memoria intern, Dups cum sti, de fecare dati cand nulaj un program, sistemul de operare incared instruciunile programulul ia memoria calculatorulul. Pe masuri ce programul reazi, el stocheaza valet in locafii de memorle, De exemplu, si presupunem ci avefi un program care tipdreste un document, De fiecare dati cAnd rulajt programul, el va afi un mnesa) care vi cere numec fisierului gi numarul de copli pe care dott si le tipasit. Cand. Serie aceaste informatit, programul pistreaz’ valorile pe care levayl introdus in anumite locayii de memorie. Penta a ajuta programul sX giseasci locajia de memorie unde au fost plasate datele, flecare locate de memorie are o adresd unicl, cum ar fi locaia 0, 1, 2,3 saga fhai departe, Deoarece pot fi milioane de asemenea adrese, inerea evidenjei flecrel loca poate deveni foarte diel, Pentru a simplifica stocarea informatiei, programele definese bariabile, Acestea sunt rigte nume pe care programul le asociazi cu anumite locatil din mmemorie, Asa cum indicz $1 cuvantul variabili, valoarea pe care programul o pisteazi in aceste locaii se poate modifica ln cursul execuiei prograrmulu, Fiecare variabili este de un anumit sip, cate prezinti calculatorulul cat de multi memorie necesiti datele pe care variabila le pistreazd gi ce operatii poate indeplini programul cu aceste date. in exemple! anterior, programul care tipdreste un document ar tebui si uilizeze 0 variabila denumiti nume_fister (care pistrexzi numele figirului pe care dont Sil tipasigd gi una denumité rr_copi (care pistresri numirul de copil pe care dori si le tiparigD, In intesiorul proaramului, vi vet refer [a variable dup numele lor. De accea, ar tuebui si dati nume sermnificaive flecirei variabile. In interioral programelor in C, vet deciara de obicei variabilele imediat dup main, iain de instrucjunile programulu, ca ral jos - locul variabilelor prints ("Totul despre C/C++") Fay EATS Unmatorul program va arata cum ar tebul si decluraj wet vasibile Inteegt (variabite ease pistrezaii numere intregi, cum ar 1, 2st 3) // Varsta utilizatorului in ani int greutate: // Greutatea utilizatorului in kg int inaltime; // Inaltimea utilizatorului in cn // Bite instrvctiuni vor fi scrise aici ) Fiecare variabilé este de un anumit Up, care defineste canttatea de memorie de care aro nevoie vatiabila, ca si operate pe care programul le poate indeplinl cu aceste date, Pentru a declara 6 variabilaIntreaga, programele n C utlizea24 ipul int. Dupa ce declarai o variabilt (coea ce inseamn’ si indicayi programului numele variabilei gi ipul eD, putey s auibuit acestei variabile 0 valoave (eu alte cuvinte, puteti sl stocajlinformayie tn ea). int varsta; 48 Torut pssprs C/C#+ 24 = Arrisuinca DE VALOR! VARIABILELOR © variabili este un nume pe care programul dumneavoaste’ il asoc c ‘memorie, Dupl ce declaajto variabili intr-un program, Ti putetiatrbut o valoare. in C se atribuie o valoare unei variable utiizand semnul egal (=), denumit operator de atribuire. Unmitorul program deciark tei varibile de tipul int si apoi atribuie fiecirei variabile 0 int verste; // Varata utilizatorului in ani i // Greutatea utilizatorului in kg // inaltines utilizatoreius sn cn | yarsta = 41; // Atstbuirea varstei utitizatorului greurate = 75; // Atribuirea greutatii utilizatorulut “inaltine = 180; // Atribuirea inaltinii utilizatorului 7] site Anateustiuni ale’ programs 25 Tipurite variasiLecon Ce ‘Atunci cind declarai varabile int-un program, tebule si indica compilatorulul numele gi tupul vasiabilel, Un up defineste mullimea de valosi pe care variabila poate si fe pistteze, ca si setul de opera pe care programul poate si le realizeze cu aceste date. Limbajul C accept patru tipuri de bazi, Fiecare dintre ele apare in tabelul 25 Numele tipulul _Caracteristici char isieai un singurcaace cin wh ele de RAE int Peal muere nse, cum 1,243, psn name nepte at Pissed mumere el in omat cium nn prec a cum ar fi 3,14 sau ~54,1343, doube seek mumere ele noma il i a db rete (care este mult mai exact decitformatul cu simpla precile). Ve tiliza double penina numere foarte mati sa foarte mic Tabelut 25 Cele patra tipunt de bazd accepiate de limbajul €. Pe parcursul cil, aceste tpuri sunt examinate fa deta, Cele mat multe dint secyiunle ‘aj vor liza una sau mai multe varabile din acest tpl de bazi CG A DE ACELASI TIP ‘Asa cum afi invita in secjiunea 24, atunci cind dectarat o varidbilt nt-un program, trebuie ‘4 indicat compilatorulul numele si tipul varabile Urmatoarele instrucjiuni dectara wei variable de pul int 26 = DEcLARAREAMAIMULTOR VARIABILE | (int vaste Prustexe NopUNTDEC 48 int varstay z ARES int greutate; | int dnaltine; Atuncl clnd declarati vaiabile de acelas tip, imbaul C vi a Sb, lina Cv pene sf nin nunele "ainllo: pe ast mat mule lid vig ca epstote suelo ea intivarsta, greu-ate," inaltine! es eyed float salariu, ‘taxe; ee COMENTAREA VAPABILELOR LA DECLARARE In programele nC, coment ape ex cae cet neeagh mal bine program Aint ind alge aumele variate, cebuie Sve gen seesea ek deo ey pe eat ova psa varabla De exenpl conden omaionns Seren ink vateta, (greutate,) inaltine; ant x,y, 2 Ambele decaraicreeaz& uel variable de tpul int In prima declarale, vi pus 2 pul tnt. fn prima declare, v8 pute! face o idee at vriabila prin simpla examinare & numelu en alsa de uizaren plasind despre cum este uti ‘nul nume semnificaiv, putep, de asemnent toducet expl r pute, 12, 81 introduceti expla suplimentar un comentariv in vecinitateafiecirel declaraii de varibll, ca mal os 7) Wareta’ wtiiizatoruiad in’ anil? // Greutatea utilizatorului in kg + // Inaltinea utilizatorului in cm int greutate; [int inaltine; ATRIBUIREA DE VALOR! LA DECLARAREA VARIABILELOR Dup& ce declarati o variabilé inten program, puteyiutliza operatorul de atribudire al imbajului C (semrysl egaD pentru a avibul o valoare variabile, Limbajul © vA penmite sd strbuiti o valoace vasialilet chiar in cadrul declarajie. Procesul prin cate. se ‘ariabilei prima sa valoaze este numnt de programstoniinifializarea variabllel, Ur lasirictiuni, de exemplu, deciari si inializeaza trei variable de ipul int Fiae\varsta = 41} “0077 Varstatiiizatoraiul “Gn ani! [ABE greutate = 75: // Greutates utilizatorulul in kg pint inaltine = 180; // Tnaltimea utilizatorului in om IiTALIZAREA MAI MULTOR VARIABILE IN CURSUL DECLARATIE! Corer Ia secunea 26, a invatat i Limbajul Cv petite declary doud sau ms le variable ‘pe aceeasi linie, ca mai jas: . = bie (Ene vane Ge ates i} | | 80 Torut Despre C/C++ Peanece nomunr De C_ 81 [Atunci cénd declaratimai multe variable pe aceeas! lite, limbajul C vi permite sinalizat tana sau mal mule dint ele Variasicece De vip Int © vant exe un mune pe cae complain! de Ci ascent ca una a mai mute lem de memorie, tunel cred Jesh vb nun pogam webue at ser tfeagriea sume pul ne! vale pets gel de vais pe ce vata pot ees & Seu de opera pe caepogramulle pete excsa supa dae, Complsten aac ook le biel 16 bi ocr) pena 4 pss valor de tpul tm Vase de oo tase ak tne valon tn inrvl cn: 3276 9767, Fgura 3 aes crs Ca ene "alae ip umd faseg in raj Seen {in acest exemplu, se vor inijaliza variabilele varstast inal, iar varabila greutaterimine neinigalzad 30 = Aecerza uNor NUME SEMNIFICATIVE DE VARIABILE ‘Auundl clind daciarat vale in programal damneavoast’, rebule si alegeyi nume semnificative, ‘are deseriu modul de uilzae al variabil Put utliza 0 combina de litte mar st mick. Aga cunt ‘a viz in secunca 8, compilatoeul de C face deosebire irre liesele man si cele mic. De aceea, acd lege un nume de vasabialcinuit din ltere mt gi mic, rebuie sf folosi ntoleauna Acceasi combinate, Penis inceput, probabil ci vi vef limita la folosvea lierelor mic, peniu cX in acest mod reduce posbltateaeratioe provenite din felasrea unui amestec de litere mari smi, Trebuie si-i daji un mume unic flecirei variable pe care o declaratitntun program. fn general, putei utiliza un numae nelimitat de caractere in numele unei variable, Numnele variabilelor pot confine © combinatie de litere, numere sau caractere de subliniere C), dat ‘numele trebule si inceap’ numai cu o liter’ sau un caracter de subliniere (). Unniitorl fragment de cod prezintd elteva nume valide de variabile 2 ——_ Hi Bit do sem 15 biti de date Figura 32 Reprezentarea in Ca unes valor init Valorie de tip int sunt cumere intregi. He nu au o parte frac\ionarl, aga eum au numerele feale Geprezentate in viegulé mobili). Dact dati o valoare reali une variable de tip int, , Pur si simplu vor ignora partea fracjionari, Dac fi daqi unel atunci va aparea © multe compilatoare de ¢, vatabile de tip into valoare in afara intervalului dintce ~32768 y intervalulul dintee 31 32767, siuatie de depasire (overflow), iar valoarea atribuiti va fi eronatd i 7/ Nunele inceput cu cazacter de E| VaRABILELe DE TP CHAR O variables un nme Limbajul C are citeva cuvime cheie predefinite, care au 0 semnificaie special’ pent compilatc Un cuviintchete este un cuvant care are Injles penizu compilator, fk ca dumneavoasira si dat acest ingeles. De exemplu, float, st $6 char sant cuvine cheie. Numele de variable na pa} utliza aceste cwvinte cheie, Seciunea 31 prezintl cuvintele chee ale limbajutal C 310 Conrete cere acecimensucurC Limbajul de programare C defineste clteva euvinte chele cate au un injeles special pent ‘compilator, Cand alegeti numele variabilelor (Sau creati proprile dumneavoastra functi, uuiizayl aceste cuvinte chele, Tabelul 31 listeazi cuvintele chee ale limbajului C. pe te compo de Hascalca Una sa a ite oe dermal cn: detrs ovat intra poyam,webre peaieng wet ‘nei eT! vatablespecice ger te vals pee vrais Boone pes © fl de open po care prota le pose exec aces dae unbahe Gg loa chorpent api valon de tip crates Compl de cces ie soe pang a sed pent a pista vance ip char © val de ap cbarpone rks cee Sats cpiteinae a8 1. Hg an con ses th Coes 1 octet chy Cuvintele chee ale imbajulul ¢ ‘auto default ‘float regisier” suet volatile ii): break do per return, switch bile case double goto short typedef 7 bit de date char else Y signed union Bitde sem const ‘enum int sizeof vnsigned | Figura 33 Reprezentarec in Ca unei valori de ipebar. continue __extern on satic void Tabelul 31 Lista cuvintelor cheie ale linbajului C. $2 Torut Despre C/C++ s2_Torupssmee C/C++ oa cele dou modalay 1 auibulovaloae une vase dep charini-una din el a aoe Fecal, Pina modal contin acodes Valo ASH coresp Groare carat, De exempt, lira Aare valoarea ASCU 65: ES eee ae ‘A doua modaltate este cea in care programul folseyeo constant dip cracer care apate fhure dou sposroud ©: “Sirurlles 34 Variaswete ve TP FLOAT ee aed ‘cme Aunescand dec oui rn fore, eb est % oat iru a past lori reale in vitgulé mobili (numere negative i poritive care wales reeceiperpeos cate at a iro 52. Arpieuinea cHiLimeLeLon $i Wal AALTOR CARACTERE ind luca variable de tip char sau cu sn de caractere, pot spitea statin cave webuie St _urbull nei vatabie valourea de glimele sau de aposrof, De exempi, cn sae famsas C+ Programmer’ Bible, webuie i oli de dou’ ei aposwofl in sl de cascore, in asemenca cain rebuie si plas inainea caracerlut apost caracienl backslash (\),c2 mals “char apoatro® = 1\''; nie : cchas ghilinede = '\" = “ae in afari de caracterul aposvof, putet uta in programul damneavoastra gl alte caractere speciale, prezentate in tabelul 52. Pentru a face aceasta, plasatisimbolul caracteruluiimediat ‘dupa caracterul backslash, fn toate aceste cazuri vebule si folosiy lterele miei pentru a reprezenta caracterul special Carncter Semaificatie \a Caracter ASCH de atenjionare w Backspace v ‘Avans hale \w Linie nous \ Retur de car ‘ Primete nopiunt pe C63 caracter Semaificatie Ve “Tabulator orlzontal w ‘Tatulator vertical w Badkslash V Apostof ww Ghilimele v Semmulintebii wan Valoare ASCI in octal xnnn \Valoare ASCII in hexazecimal _lxnnn__Valoare ASGU in hexazecimal Tabetut 52 Caracierde escape definite in C. PREZENTAREA FUNCTIEI PRINTF Mai multe dine sectunile acestel cisyi au folosit funcyia prinif pentru a afiga mesaje pe feeran, Cind program. dumneavoastra foloseste print, datele pe care viet si le aligati reptezints parameirit sau argumentele funcjel printf. Usmitoarea instruciiune foloseste functia prinyf pentru ¢ afiga pe ecran mesajul Totul despre C/Ce*: BHinte (onotul, despee c/cH4") In acest caz, ginal de caractere (lterele care apar intre cele dou ghilimele) constinuie Singurul argument al functiet pringf CAnd programul dumneavoastri incepe si lucreze cu vatiable, poate ca vep dot si foloshi printf penteu aafisa valoarea flecicei variabile, Funcila Dru aceepti mai malji paramete, Primul parame trebuie si ie intotdeauna un git de Caractere. Parametti care urmeaz primulus gir de caractere pot i numere, variabile, expresil (cade exemplu 315) sau chiar ate scusi de caractere. Atunci cand dori ca prinifsi afigeze © valoare sau 0 varicbild, tebuie si includet informatia despre tipul variable to primul parametru, Pe lng’ caracere, in primul parametra putetl si introduceti speificatori de Jormat, cave aratl furctei prinifcum si afgeze cellalji paramets. Un specificator de Format ‘ste reprezentat prin semnul de procent (96) urmat de o liter’, De exemplu, pentra a afiza 0 Valoare Inireagd, vei fulusi %ad Gl specifics valorile zecimale), De asemenes, pentr’ a tipi ‘0 valoate in virguld mobili, putejlfolosi 9f Unndtoarele instuciiuni ilustreaza uitilzarea specifcatorlor de formar in cadrul funcyel pringh printt("varste utilizatorului este #d\n", varsta); peinté ("Impozitul pe vanzari este d\n", pret * 0.07): Print? ("Varsta utilizatorului: td greutate: Sd inaltime: d\n", vareta, grestate, inaltine fs ob Dupi cum vee, puefi sf introduce in cadrul peimulu parametr al hui prinyfunul sau mat ‘ulti specificator de format, Observal ci a weia instruciiune continua pe randul urmitor. Chad instuciiunea dumneavoasted nu Incape pe 0 singurd line, incercai 88 gasii un }oc bun pentru a rupe tindul (cum ar fi imediat dup virgula) sl indentayi Cragett spre interiorul pagini) linia urmatoare. Scopul indentirli este imbundtatrea aspectulul vizval al programa- Riidumncavoastd, astelincat cel care va citeste programul si deduca mai usor c8 respectiva linle 0 continua pe cea de mal sus. Mai multe dintre capitolele urmatoare explici in detalit dlferit specificatori de format al functtel pring 64 Toru pespre C/C++ 54 Arisanca vALORILOR DE TIP INT FOLOSIND FUNCTIA PRINTF Funcia prinf pemnite uilzarea unor specieatori de format care furnizeaz’ informa despre dpusle pacamechor (cum arf nt loa, char 9 aga mal depart). Pent a aja saree de tip tat eu pring se folosete speciiatrul de format Sed. Uratorul program, Tout eloeqe specilcatorl de format Sd penta a aga val vasablle de tip Int ef (PValoatea| zecinal “valoare, veloare); eibdeladenea! 2 eee ae ae eee oi SELSEEg stetats 285 este 277, ootan Valoarea zecimala ie imala 255 este FF in hexa; AFISAREA vALor Is RILOR DE TIP UNS FOLOSIND FUNCT PRIVTE NT ‘Atunci cind compilayt si executayt programul inioutc, pe ecran se afigeazi urmaton rezultat: Varsta utilizatorulul: 41 greutate: 75 inaltime: 160 i plus 2 egal 3 c:\> | Observatte: Multe compilatoare tratcazd specificatorul de format%t ca find tdentic cud. acid vrei sd creapi un program nou, ulizats totus speciftcatont Xd, pentru ci specifica | tonul%t este wn specificator moslentt teste posibil ca viitoarele compilatoare nu fl accept, 55 TipArinea uel VALOR INTREG! OCTALE j SAU HEXAZECIMALE Truncjia prin permite uilizarea unor spacificater de Format care farnizeatinformapi espre dpurile parameuillr (cam ar fi in, float, cBar si apa mal depavte), In funcie de propramul dumneavoastr, poate, la un moment dt, vet dri si ais o valoaretnteagh Scud Gn baza 8) sau hexazecimala in buza 16) Caraceral % (itera 0, nu cifa 0) ee Specifcatorl care Indl fundjel prin si aigeze valoaea in format octal, [atin mo Sra, speciicators ox gi HX indlckfunciet prin sk aligeze valoare in format hexaze Gal Diferenjaintre fox gi 4X este i cel din um afigeazA valoarea hexazecimall cd tnajuscule, Unaitorul program, oct betc, usireazd utlizarea speciicatollr de format 9 9% #042000 ca unsigned su 42000, cn ine eave ‘unei end com raul Afiseaza 42000 ca uw “Miseaza 42000 ca ps Ln 66 _Torut pespre C/C++ Pree nopum pe C_ 67 Pretul este 525.750000 Inpozitul pe vanzari este 31.544999 o> Dupi cum puteti vedea. in mod prestabilit, specificatorul de format #fnu ofer% decit 0 formatare simpli a iesii. Mai multe secjluni din acest capitol vor prezenta insi diferte modaliiti de a formata fesirea utlizand functia primi. 57 AriganeA VALORILOR DE TIP LONG INT FOLOSIND FUNCTIA PRINTF Se ee eee tara wer ssa de tra ox at si ef Pa a i spa AFISAREA VALORILOR DE TIP CHAR FOLOSIND FUNCTIA PRINTF ‘Asa. cum ati tovifat, furctia prim permite utlizarea unor specificatori de format care furnizeazi informayii despre tipurile parameuilor (cum ar fi tnt, float, char si aga mal ‘departe). Pentru a alga valorile de tip chareu Fancia printf trebuie sk folosii specifiatocul format he Umit program, har ou flee spcintorl deforma peta pe ecran litera A: sce $a\n", un_mition); a\a", uh_mition) : ‘Atuncé cine vel compila gi executa programul long_int.¢ pe ecranul dummneavoasta va aligat urmatoral rezultat: Un milion este 1000000 Un milion este 16960 Dupa cum vedet, progremul chay_out.c va afiya itera A utllzand constanta de tip caracter ‘a'sivaloarea ASCII 65, tune’ cind vet compla sl exectta programul ebaroue, pe ecran cl dumpeavoastra va fi afigat urmatorul rezultat: | Litera este a 58 —Arisanca vALORILOR DE TIP FLOAT | itera aes A e FOLOSIND FUNCTIA PRINTF \> ga cum atti, Fanci prinyf pee uzares nr spect de format ere fe cam a i, ac rl i a Sr eae eee cgay faut one pu bul los peter Serr re ee eo feat lege Special da fret pn St le ie Vs wb ‘Wnclude/Zstdio n> AFISAREA VALORILOR IN VIRGULA MOBILA IN FORMAT EXPCNENTIAL ‘Asa cum ati invajat, functia pringf permite utlizarea unor specificatori de format care fumizeaza informayll despre tipurle parametilor (eum ar fi int, float, char si aga mal depart), In sectiunea 5, att invijat cé putegi alga valor in virgula mobild prin utlizarea speciicatorului de format 4 In funcyie de cerinjele progeaaautu, este posibil saga valor: folosind formatul exponenjia. Pentru 2 alga valor\ in visgula mobilaint-un format exponential, folosit specfcatonul de format 9e sau %E. Diferenta dintre Me si of este ch specticatonil de format 92 indici functiei printf si foloseasca majuscula E in desire Urmitorul program, expout.c foloseste ambi specificator! de format exponential pentn a alla pe ecran valor in vzgul mobili 4 4 oe ae oad Ne 4 ‘Acunct cand veri compila gi executa programul long into, pe ecranul dumneavoastrd va afisat urmatorul rezultat 68 Torun pespre C/C++ Prowete noprunt DEC _ 69 Winclide ” sid main (void) aS, ‘ " char titiu[255] SiR (RSHa GEOG wats AeA PARE Rae) © Eiele (rasta corcuie: gore We\e", 2 SpE + raze sonal cand vet compa gi execata programul expo pe eeranul dumneavoasrl va f alisat urmatonul rezultat: Aria corcului este 1.2585840+01 hria corcului este 1,2585845+01 c:\> ad Zam vedey, tn mod presabit,specficatorde format se si WE mi fer 2 & Du co opll a tesa. ai multe sceuni din acest capital vor prezenta Insi dente todaltag de a formata lesrea wtlzaind functia printf 61 Arisanea vALORILOR IN VIRGULA MOBILA Tn sen 5, a Tat, olesind spectintna de format Wf pate nda func te ent eae avg mobld ty format ena De averenes In secures 60 9 Prin ols pecieatnt el penis «aga Val in igus mobil in fom ta fe mod say, func pra accept speticator de forma 9 6, ud Seen elicatot gg HG, pif alee Formal sau Oe asi oct lf Cina folost spe Tar tal convenabla, Urnatorl progam, rg.mobc, Hasuesth ulzarea specfcatoruli de Format 48 2 "Totul despre C/Ct+"; print€ ("umole acestei carti este s\n", tith f is Aun! ind comps. exeeu progam sou pe eon va Baya umaton Numele acestei cirti este Tot despre c/ct+ AriganeA POINTERILOR FOLOSIND FUNCTIA PRINTF KGIAG: Aga cum a Sava, functia prin perme ulzares unorspecicator d thuscrs hues canes Apurle araeer (eam ar ft, lows oar aya mal Sp) tins de ees, ck aaa ceo age pe tafe progam dinner Coast o-asoclat ‘une loa de memore, PE mlsiHt Ce COmpIEMTates progr Sees va cee ee po cy nee de mene unite potutor), Cind hence, poe apres necator cde eon Pei aa aceastt adres cu func prin folost spectictorl de format. U ogra, re ‘ MET ES 234 este afisat in formatul, « es 1234) 7 a caro ea tativalo ‘ te afisat in formatul ¢g\n" prints (*adresa valorii variabilei este sp\n’, évaloare) ; 1 0,00001234 Anne cn comply excel propnmul poe eral unneavous af at sAruneh end compa ql exeoutat progremul org_wb< pe ecran va f fig urmiton eau: Mumarul 0.1234 este afisat in formatul 0.1234 Nunary 9,0000i234 este aficat in formatul 1,2340-05 c:\> Mirena valorii variabilei este FFr¢ ‘nei eind uulizal specficatorl de format 9p, valoarea pointerului gi formatul utiliza mat %p, valoarea pointerul 51 formatul wulizat de ‘rin diferi de la un sistem de operare la atul, Capitolul Pointe” va explica in detaliu 62 — Arisarea uNuI SiR DE CARACTERE FOLOSIND FUNCTIA PRINTF Un gir de caracere ese 0 secventi cae conte zero sau fal multe vac, Capital ‘Srvsle! a oferd mai multe amanunte ta legit eu acest subiect) na Sn cele mi amie opera execute In programe este afgares girls de caractere, Age Su Rrra cous prin permite utlizare unr specicaton de formar care furnizcaa He revit lesore purl prametor (um ar int, loa, char aya ma dopa) ecw aan girde earacere eu foncfa pring tzebue Si flosit specificatorul de format és, Urmiton rogaine. ublizes2s specicatora de format %s peri aalisan fir e-caracee | UriLizaREA SEMNJLU! PLUS SAU MINUS INAINTEA UNE! VALORI ‘Asa cum afi favijat, functia pringf permite utilizar Gif pe care o plasayi dup % precizea2i numirul minim de caractere pe care prinifil foloseste pentru a afisa ovaloare intreagi. Dacd, de exemplu, speciicati 45d sl valoarea pe care vrej si o afizati este 10, printfva intcoduce tei spari libere insite de valoare, Rejineti i valoarea precizeaz numirul minim de caractere pe care il va avea iestea. Dact valoatea pe care dort so afisagi are mai multe caractere decit ati precizat, prini/va folosi numul de caractere necesar pens afisarea corecti a valori AFISAREA NUMERELOR INTREGI PRECEDATE DE ZERO LOM OEM NE Inseciunea 65, invita cum s formato vatoareineag plstnd mum de lr rk imeiat dupi Sein specifeatorl de formate Duck valarea tinea pe care © agesod ‘ring/n are nevore de numaral de caractere pe care e-al special, va intoduce Un tuna Corespunztor de spat Lbereinanten valor, fn funcie de scopul progamulss demnea. Yeast, poute ci vet dod ca rink inttoducl zeous raiten vals In le de spat es af onli lage ec esa eon eda ip speciicatorul de fom nse de rural de cre do, Unto program, ere ped dosteszd acest procedeu pees “void main (void) [Ant vaicare = 5; | printe (*so1a\n", vatoare) | Prince Choza\n, valoare)) | prince (Hoaa\n, valeurs) i printf ("S04d\n", valoare) ; ) [Munci cind compilai si executayi programul zero_padl.c, pe ectan vor aplirea urmitoarele: 5 05 005. ‘005, o> AFISAREA UNUI PREFIX INAINTEA VALORILOR OCTALE $1 HEXAZECIMALE (CLG 67. In secjunea 85, a fvigat cum se foloseytespectcatoml de format so penn a fia valk foctale i specificatorul de ‘ormat #9 6X pentns a afiga Valorie hexazecimale, Atunci cdnd programul dumneavoastrare la ieyre asfel de valor, poate cA vel dor ea valorile octal si fie precedate de zero (de exemplu 0777), iar cele hexazecimale de Ox (de exemple OXF, 72_Toru pape Cr Pruwets nope C_73 entra indica func prinyfst adauge prefitul pov unet valor ocale sau bexazecimale, plsaicaacteral #imediat dupa #in speciicatorul de format. Uematon program, oc_ bes FonWaTAREA UNEIIESIRI EXPONENTALE Co a a Pca in peta de ona nei Pa In seeyiunea 68, sti valoare in virgula moti Sh afigeze valorile in vig formatarea a cum sf ols specieatonl de format entra formata o Folosind ohne sm defrmae, pec nc! pny 08 mobil, i format exponengia. Urmiverl program, Sp pn nel ijl exponent Roen ee. Frc Pisieiide: ste $#x in hexazecinal\n", sl execu propramul exp fine, ecramsl domneavonset va aya Valoarea ecimala 255 este 0377 in octal Valocrea Zecimala 255 este Oxff in hexezecimal Valeerea secimala 255 este OxtF in hexazecinal ene 68 — Formaranca vaconiorin vincuta mosua KQRORES in sequea 65, a tovtat cum sk formats o valor inteagdplasind mumirul dort de ce dnt dup sn specsorl Ge format at Poosind otic sila, feta prinfek emit sf formata i valose in vingld mobil, tunel cind formato vaoaze fa vigil rE, prelza doua valor. Prima valoare indict Funct prinsf mumarul minim de Caractere pe cate vies le alia A dav valoae comunic func printfnunel de ce fe cate dont sf le ageze la dceapta punctlul zecimal, Urmston program, ere ft ilustzeazd modul de formatace a valorilor in virgula mobil folosind prinyf ALINIEREA LA STANGA A IESIRI Atunci cand afigati un text utiliz’ind formatar a ds Specticatorul de format. Uematorul program, alin_sig¢ llustreaz enw a alinia la stdnga un text “Swilisea enna [Pisitde 74 Torus pespre C/C++ 71 Uruizarca comainara a ‘SPECIFICATORILOR DE FORMAT Multe dintre capitolele acestei secjiuni au prezentat diferij specificatori de format, Vor aparea gi staat in care vett dor si folosi avantajele a doi sau mai mul specificatos De fexemplu, pute si donii si afigay o valoare hexazeckmla aliniati la stinga, precedatd de caracteri in acest ca, pur imply plas cae specfcator init dp vemnul (or speeificatori de format ‘unc! cind vet compil gi vet executa programul fot fn, ecranul va aia Aliniere stanga ou sen +5 ee 72 = TrecereA unul sin DE CARACTERE PE LINIA URMATOARE cand programul dumneavoasr floseste func prin poate apirea stain care ung Ge catacere nu Incape pe ua singut Hind, In asemenes ocazi, pur 9 simply plas un Caracer backslash CO la fit line, clea ce va face ca texul sh contoue pe lina Cunitore, cum se ara ml jos: ae (JAGR Cane este! foarte Lung si pentzs ca sate ROR jain esiSnespeipecestogisaiaints 3 bservate: Dac tec teil pe nia urmatoar, mu include sai la fnceputl ink nk ‘aeons compllatoral eo include acess tierra utc 73 > Arisanea SIRURILOR NEAR $1 FAR CCapitolul ,Memoria* explicd in detaliu pointert naar gi far. Pe scurt, pointeli near si far repreaintd acresele vasiablelor in interiorul zonel de memorie alocate programulul. Progr: ‘mele care ruleaza in cadrul sistemelor de operare mai vechi, cum ar fi MS-DOS, folosest pointeii far pentrs a mari zona de memorie in care programul poate si pastreze informata, ‘Atunci cénd programul foloseste pointer! far pentru seferizea vatlabilelor de tp sir, poate fapizea situja in care veil dori sé afisayiconfinural srululfolosind pring insi, aga cum veh ‘avija In capitolul .Fungille", compilatorul va genera o eroare dac& transmiteti un pointe: ‘fare foneyi care asteapti o adresi near, Dacl dons afigti unui gr far (al cinui incepy. ‘ste indicat de un pointer a) folosind functia prin trebule 81 anunjatifunctia cd folosiq ux pointer far. Pentru a face aceasta, plasaio majuseuld F (pentru far) imediat dupa % is Specificatorul de format, cum se aratd in continuare: Pramete nopium DE C_78 inte ("EE S\i Pent el speiicatorl Ws nc pinay un pine far, apelarea fun ete core In od sda, put plas o maja Vin speatcaorl de fooat pe nda fancier ch easly gna, Dar cata anc rin pep tn md presi at near species de forma 59 cal esa feu, Unto progr 8. ne fe, idusiteazd uulizarea specticatonor #HF3 gt 4Nsin cadrul funcyel pringf " espre c/cttts otul despre Observatte: Visual Cor nu face disinciiaintre pointeriifar simear. Daca incercaf sd compilat programulnear fare subViswal Crs, compilatonil ta retuna ¢ eroare, Pentne 4 actualiza automat programul dumneavoastd acfel inedt sa ruleze sub Visual Cre includet itera ante windef.b in program. ‘ CARACTERELE ESCAPE ALE FUNCTIEI PRINTE Clin sr cu gust decractr, pte liza cazctere specie cum a Bebo tl, reur de cits arans de ffnd € deine nal multe caraeoeencape (enseee precede snl exape bac) pont a fcla ncledere caso specu a vol sruon, be exp mle de propane resent Ses cae jot erate ine nov (i) pent ca ei da ee anceps pe na urnatoaee cum se poate vedea mai jos: i ele ‘ones Tabelul 74 prezind lists caracterelor escape pe care le puteyi utliza in eadrul siruilor de caraccete (si dect in ieitle create eu functia pring). fe Casectey och De NENe #eixalilcs{le] INH Noll MBB AHI BBEAINESUn nM enrISae Na ‘Caracter ASGIT de atenjionare w Backspace v ‘vans hate \w nie now Remus de ear v Tabulator orizontal w ‘Tabulator verical, (cominuare) renee Pk 76_ Toru pespre C/C++ PRIMELE NOTTUNIDE C77 mn (Giinetias cos aS Caracter escape. jemuificatte | yeld main(voig) v Bacilash Pressiaata( . Apestot v Ghitmele v Senne Mn Valoa ASCII in octal ann Valoare ASCH ia henszecinal Tabelul 74 Caracterele scape definite tn C. it umneavoastri poate sa Uruizarea oniveRuLul o€ oisroziriv ANSI ez Hite doe sete prezenatede-a ungl acest lr sau eet pe larga mache tel prod a fonnaa rez la apace. In aah spectentontor eos ek Sica nun de ie as att eit incl eo hearse saa soul gas hep ea n/n unseat a specRceat ey ty wl ofe special de format cae Ay aducl eased tae a ei load Reg cul sa alere ince lsh niches scene oe el los pute sre acest peri floind veloc enn Sa ee 75 Dererminarca nuMaRULU!I OE CARACTERE AFISATE DE PRINTF “st ul dumneavoase execut farmate sfisiat, apts in are vet do su nual de carat pe cele aa une brnih ‘ia cin cco fe format % ‘va atribui unei variabile (in urma unui transfer prin pointer) suma total ttenacrdr cafe loa abet Und progam, mcr, send lara specie tort de format a 7 fare DOS, instalajidhiverul ANSI prin plasatea ‘ne init in fislerul ony (vezt exemplul de mal os), apol reincheny seca i Dupi ce af instalat deiverul ANSI, programul poste sctie secver cH BGR ar gv oY fe escape folosind pringf cert, Deed pe eleatonl cu care vl compa pregramele raat Windows 9, sdigarea avers ANSI isterlconfigsys sca interfer cperaie ds Windoos 9s Uruizarea orivenucut ANSI PENTAUA ELDENA ECRaNUL [er] Gh dine cele mai obismite opera pe care le va efectua un program la TInceputul Eg cate oy te SH elbereze ecraru. Din picate, biblioteca run-ume C ns congo feniru a face aceasta, utlizai driver ANSI, cum 3-2 $f apoi invocari urm’toarea secventa escapes sanul va alga urmatoarele: ‘Atunci cand vejl compila s{ executa programul nr_ert.c, eeranul va alia urmit ‘Totul despre c/c++ Prima suma 5 A doua suna 35 c:\> 76 == Unuizarea vatoni RETURNATE Son pent & determint In sess 75 af iat cums felosee specifica! de format on penta determin mor canter partes Sin Fost pata ena ne tn de moda pn ceva pe nga nc Prine aa one ria Jn ps, hd pri eit excrete rum tal de ict pe seh acl pride o een, va ena conga EOF (cre a8 ct fv inci’ srl iierulu, Urmtorul program, pri c foloseye valoa 4 se asgura cl functa prini/s-aexecuat cu Succes: 78 Torut pespre C/C++ 79 Unuzarca riverutur ANSI penrau C/C+ AAFISA CULORI PE ECRAN In multe dint capitolele'acestel cna fost flosittfreevent functia printf pentru a alga 0 ieste. Des fancta prinffofers speciicat de format puterici, na va ofera si mifoacele de 2 afi iefiea in Calon, Dacd ins folosit drverul ANSI, prezentat in secfhunes 77, pute fotos secventele escape prezentate fa tabelil 79 pent 2 aia isiea in culo Secventiiescape __Culloare sc{30m ‘Negra ~ culoare de prim-plan sein Rogu ~ culoare de primplan Bscf32 ‘Verde ~ culoare de prim-plan Bscl33m Portocaliu ~ evloare de prim-plan Albstns~ culoare de prim-plan Cian ~ culoare de prim-plan Alb ~culosre de prim-plan sel 40m [Negru ~ culoare de fundal Bsctstm Rog ~ culoste de fundal sd2m Verde ~ culoare de fundal Bsel43m Portals ~ euloare de fundal scfm Albasiru ~ culoare de fundal BcldSm ‘Magenta ~ culoare de fundal Bscl46ms Glan - culoare de funda Bsc 7m Alb ~ culoate de fundal Tabelul 79 Secvonjele escape ANSI pentru stabilirea culorilor de ecran. LUrmitoarca insirucjune prinffealecteasi culoarea de fond sllstnw peinee O Cae {in mod similar, urmitoacea instruciune printf selecteazil un text rogu pe un fundal alb prints @\033 (47a\033(3in") 7 eee fn exempll precedent, prinif sate dovt secvenje escape. Driverul ANSI permite spect catea culonilor de ecran prin separarea cu punc i vggul(), ca mai jos prince (A033 (a7a/3im') Prumene nopunt De C_79 Uruzanea opvenucur ANSI perau = POZITIONAREA CURSORULU! ESS Aga cur aj Tnvatat, driverul ANSI acceptd secvenje escape care permit stergerea ecranului 1 afigarea textului in cuori {a plus, driverul ANSI dispune de secvente escape care p. plasarea cursoralui la o pozitie specified pe rind gi coloana, asfel cl putet alia iesizea numiti locate de pe ecran, Tabelul 80 aratl secventele escape ale driverulus ANSI pent poritionarea cursoruli Scoventi escape _Functie empl clay Posijoneazi cursoral la rindul x gieoloana y —_-Hsc{10.2557 scl ‘Mut cursor eu x rinduri mal sus E14 Esch ‘Muti cursorul cu x rind nai jos Bf 2B BC ‘Muti corsorul y coloane la dreapta Bsf106 sly Mut cursor y coloane la sings Bsf10D Boel Stocheaz’ pozia curent a cursorulu BS E(u pozija curenti a cursorulu sel Bscl2) Is mut cursor Iz pola home Bxe/2} fs Storge pind la sfiesitullinie curente Esl. Tabelut 80 Secvenjele escape ale drivenului ANSI pentru pozifionarea Cursorul Chiar si in cele mai simple programe, vei efectua operat aritmetice cum ar fi adunarea, sciderea, inmultiea siu impirtirea. Pentru a realiza aceste oper folasit operatorit desist in tabelul 8. REALIZAREA OPERATIILOR MATEMATICE DE BAZA INC Operator Functie + Adunare - seldere : fnmaiee L impatie Tabelul 81 Operajile matomatice de baxd in 6 UUrmitorul program, math.c,ilustreaza utilizarea operatorlor de baz din C: ‘include ‘ void main (void) ( Ant secunde_pe_ora; float media; ‘secunde pe ora = 60 * 60; media = (5+ 10+ 15 + 20) / 4; so. Tonnomnm c/ces Pease nomunt De C_ 81 acd limbalul C ae efeetua rezultatulexpresiel ar 21 erate de la stnga la dreapta (adunarea inaintea inmultci), De hae Ee 0 Daca C ar efectua mai 7 nt inmulirea, eezultanal arf ‘Atunci cind compilayi si executai programul matb.¢, pe ecranul durmnevoastrl va aflgat ‘urmatoarea iesire: Mumarul de secunde intr-o ora es Media nunerelor 5, 10, 15 si 20 Numarul de secunde in‘48 minute este 2880 c:\> 3600 Pentru a evita problemele cat ce i jh a af < =p recedentacperatorior Precedents operworioe decane ae ‘nti, Tabelul 85 slustreazt precedenfa operatorilor in ¢ Precedenta operatoriior (in online descrescatoare) (Oma = Siena eee aan 82 Orcnaronut moouo ta seclunea , af TnvBjat 8 C folosesteearacterl slash () ca operator penira impirie. fn Uncle aplicai, probabil cl etl avea nevoie de restl unei impisgii de numere integl. In asemenca cazvti, folositl opratorul modulo rest). Urnitorul program, modulo. lustreazi HH kay rmodil in care se utlizeaz’ acest operator: as & . 1 8k ae tein feel eo ce = ee Tabetut 83 Procedenja cperaiorilor in G aligatd urmatoarea iesire: 10 impartit 1a 3 egal 3 rest 1 c:\> 83> Precevena siASOCIATIVITATEA OPERATORILOA? In sectiunea 81, a inviat ci limbajl Cfoloseste urmatoni operator: semnul plus penis nate, emo minus) pene eter, aes ) per inmate eater! da © penins impisjre, auincl cind programul dumneavoastr folosese aceqi operator ia interionul unot expres artmetice, este necesar si injelegetprecedenja operatorilor in G, Care specfchordinea in cae se efecuea24 operailearismetice, De exempl, i considera vamaoarea expres Forzarea onDIn OPERA TILOR Gereg ‘5c ale in sectnea 83, C efectoeaad in C eteteazl open dint expresiebizinduse pe bsceden flea operator in interior expresi In mule sasua; meen a ee ‘abil limbajul C nu este cea pe care o dori care 0 e exemplu, 5H considerim urmatoar @prese~ scopul ei ind calcularea medieia tel valor” COMER 7 OSs as oe ER 82__Torur pespre C/C++ ‘ack media valoilr 5, 105115 ar fi calcul corect,rezutatul ar tebul si fle 10. Dar dart Maen Insbajol C38 evalueze exprsia precedent, el va atibui varibllel media valoarea 20, cca mal os media 's/5/410 415.7 37 “=5 410+ 5; ae 15+ 5; = 20; ‘ 4 cat tpn seine 63, Ye ack examina abel de precede operation, pe cate peeing st Deck examina a Deal nbey © 0) af o recede sa mare = vee or a Pin umat, sep neie de o mallee pein cis ore tek epee sp cn ve expres, os fs SE pain neon paanczelrinanes att opera, DAC "ode oo re nse sna lv cel ia ere, (ee uo Has) 713: 8 fs = (a5 35) / 3: % = (30) 735 i030) ‘ media Limba! ¢ execu opened neronpratzcor bane pe rene prec timbahl ¢ eeron ack expres conine mai mile expres cal multe seul de ee et ¢ excel int peri din paantzee eae ninco ale Exempt de mat os: (B+ 3)! #2) - 7a) #2) = 3 sozui tat 85. OperaroRut DE INCREMENTARE cementren at ne open efecat cl mal Heeveit t programe ote 2 ala Ua a ope emp uaa ste ree alae Ya vara wariebila + 1; eae omoce operate de incementare sun. it de ecvent, inal C ofet 0 nate Decree opr, ren vail din poe, Seria ear de ee pesca pe ten lovee opertoe deincrentare pea a Tamer variable oray LUnnatorul program, 0.la_100., uilizeazi operatorul de incrementare pent & Up valorie de la Ola 100: Prawete oyun De C_ 83 Haneiude : t void main void) 2 pe (i “int val = 0; while (val <= 100) ¢ ‘ printe("sd\n", val); si vats a ) Lnbajul ¢ prevede dou forme peru operator de inrementare: forma peg forma ‘pasf, Ambele instrucjuni care trmeaz’ incrementeaz’ variabila fotal ca 1 Dbotales 4 “Htotal; Prima instuiune folosete opertorul de incromentare posi, iat a dova instaciune, person de incromertare prefix. Nu trbule st confundah cei dt operat, decarecs lbsjl Ci rtened in nod diet, Atm cn wiles: operstonsl de inerementare post, Imbel va utiliza matin valoarea variables apo va efecua operaia de incrementare incella car, cindwilzaj operator de icrementare pret, mba Gva Increment ma intl valoaea variable! apot va liz vanabl, Pent ntelege mai bine diferent dntre operatorl de incremeniae preix 9 cel posts, cbservai alent Uemator program, repost, cae vilizeara aml operator ‘Winlude Dyed main(void) ee ey int val = 1; Printé("Utilizarea postfix 4d\n", val++) ; Printé("Valoarea dupa increnentare 44\n", val); ivabin Ly oN ee prints ("Ucilizarea prefix td\n", t+val); Printé("Valoarea dupa incrementare 4d\n", val); lati si executati programul pre post. pe ecranul dumnevoastrl va fish urmatoarea iesie Utitizarea postfix 1 Valoarea dupa incrementare 2 Utilizarea prefix 2 Valoarea dupa incromentare 2 Dupl cum vedet, cin se utlizeazt operator poss, limbajul C uilzeazd mai tnt ‘alarea variable, tlgindvaloarea 1, apolinerementesi vanabila, objinné 2, Aton cin Usizateperatora profi, linbajl C icrementeaaX mai init vacabla, obindnd 2, apok sByeazhvaloarea inerementat ej. 94 Torun Despre C/C++ 86 Opcratorut DE DECREMENTARE Gen ‘Aga cumn de multe rivet dorsi incremental valoaea unel variable, la el de frecvent vet Gait sd decrementati cu 1 valoarea curenti a unei variable, e& sal jos: (Wana varieniial eoarece operaile de decrementare sunt atat de frecvente, mbajel C oferd o note preset pentru acest opera, demuitdaperator de decrementare, Urmitoares fSt\c- fone folosete operatorl Ge decrementare pentnt a scidea 1 dia valoarea variable: Prumete Noprunt DE C85 Dip cm ved, cnt se wane pet poss ai 6 eh lin cs ta naw po lin an lla operator rei, imbafl C decrementeazA ma inl varabla, obndnd 0, apoi afiseaza valoarea decrementata deja. a ee ee OPeRATIA SAU PE BIT! Pe maur ce complensteaprogramelor d a lor dumnesvoase va cree vei observa cl put ‘nil peformaniele nol program su seduce consul de memos ulzand epee {eb Opel pest operat arse apt una mal mob dma vere fot cette sno vac cub ue eo avant otra (pe (1) al linbahik €. Opersiorl SaU pe bt esaminesa heared do valor S obine o aula valor cx rezlat De exemp presen ei do varie tao 3 4 al cor ba sunt respowt 0000001 Toate vieate 7, yam adtam malas poms SAU Bebe ca 91 in cazul operatorulvi de ineremeniare, limbajul © prevede dowd forme ents Spetatorul de decfementar: forma prefs forma posix, Ambe instruction care urteaek ddecrementeaza variabila total cu 1: oe 3 o0g00022, ‘ 4 0000100 ions > - Prima instruitune foloseste operator de decrementare prsiix, iar a doua folosese 0000111, ar elds decreetare pref. Nu webuie si confunda cei dot operstos, deoaree See i watered tn mod died. Atuneicind vilizss operator de decrementae ree aaj C va ullea ma ini valorea variable! si apoi va festa opeala de ‘Gecrementare. in al doilea caz, cand utilizayi operatorul de decrementare prefix, limbajul C dere ee atin valonrea variable apo va vilza vara, Pen a inelege ma Tine Gtfeene dine operator de decrementare prefix gi cel postfix, studi urmatord, program, post pre, ce vtlizeazd abil operator SS HERETO Se In valoarea 3, bipli 0 si 1 ik k i i bil 09.1 valores um ro cela bi au valoarea eo, val binul 2 are valoarea Unu, iar ceilalji, zero, Rezultatul aplicirii col va sek a ea, al spliloperailSaU pe bia avea lores unde cae dat cd apare unt nt-na de cele Coos vlen al nace Gi relat ate aloare in pnt bil, 19.2, Union prewar ‘modul de utilizare a operatorului SAU pe biti: eae “Lasse sa\nry 2.12) aiasea nator, 1 12) Peinte('dze | 127 este sd\n", 120 | an; Adizarea prefix $a\n ‘Atuncl cdnd compilayi $. executati programul bit sau. aes Geiee supa decreneatare ©a\9" plat $ executai programul bit sau.c, pe ecranul monitors dumnea- Yeasirl se va ais oval): ‘Atunel cand compila st executati programal post pre.c, pe ecranul dumnevoastl afiga urmatorul rezultat Utilizarea postfix 1 Valoarea dupa decrenentare 0 Utilizarea prefix 0 Valoarea dupa decrenentare 0 86 Toru pespre C/C++ Pruaete Nopiun DEC _ BT x 88 Opcraziasiresiq! ; x Rezulat yu cum am mai pus tn secunea 87, ve vedes ck putin performaniele nul prosram Fg ° ° Ae a area Gonsumul’de merore uilizind operat pe bit. Operajile pe bit sont 1 se eee pled uma sav mal multor bi nwo valore. Atuoe cind webuie FP 0 i aaa cee bic bi, pte foes avantjeleoperatondu [pe bial inbajulus © 1 : : {(@), Operatocal $e bi examinea2i fiecare bit din doua valor gi obtine o a weia valoare ca fezulter, De exemplu, s8 presupunem ch dow variabile au valorile 5 417, ai crot bit sunt fespectiv 00000101 4100000111. Operatonal fpe bifireturnea2a valoarea 5, aya cum se vede smal joss Tabetut 89 Bitul rezultat prin operajia SAU exchustv pe bift. 8% prespunem ck do varie au valor 57, coo a varie au vali 57, al eltor bi sunt outottt Opera a0 exclu pe bi ened valor aga csc voce ool 5 90000101, 5 oo00201, 7 ooo00111 7 oooo331 5 00000201 2 00000010 Unmatonul program, bit.saux.g, iustreax3 utlizates operatorului SAU exclusiv pe bip Winctude ‘Daci ambii biti din cei dof rermeni au valoarea 1, atunci aplicarea operatorulu $1 pe bift va puibul valoarea 1 bitull corespunedtor al rezultatului. Dack cel puyin unul dintte cei dol ail values 1D evespncor al eh Oo a vacaen © bad fp pllRetes : Ca a ee Tea cues naai me ed [| Yd main wos 5 ey cccepuniton arena In mito popem Bis Peet ae rez va eine operant pe SUE ue ae eS ai Gaicr ear RRSP OTe n Printe(\0 +1 este #d\n", 02); ‘i Hepside aealeite : Sen pe male. MSU eee : : Bopanna sac ee ee a £0); Bans Nai 2828 dee ay Ns ‘ : ee eu! : Ac cong sees gama sauce _ printf("1 & 2 este ’d\n", 1 @ 2); afisa urmiitorul rezultat: : 127 este td\n", 15/6 12717 0+ 0 este o O* 1 ester 1+ 1 este o 1* 2 este 3 15 9127 este 132 cp, print£("15 Ve ‘Avunci cand compilay yi executayi prograrmul bf s.¢, pe eeranul monitonutui dumneavoesti Se va afisa urmvitorul reaulta Oreraqia DE COMPLEMENTARE PE BITI Dep a ns, ope pe sant ope csp usa a me | ool nd weboe oman vlc Best, pel peat _ escenario cnptnenerpnin) slime Opes copia iin nro es Gp “opener pe il ates ira om veel Yaonea wn celor care comin zero, De exemplh, si presapunem cio valabls le tree var 5 Ops eomonennepe ia aa, pcm oh 350013 Ho 22ic0d0 89 Openagia sau Exclusiv PE BIT! e Dupii cum aiinvijat deja, operate pe bi suns opera care se apc uruia sat mai mul biffdinuo valoare. Atund cind tebule si manipulaio valoare bit cu bit, pot aparea sit ncare tebuie si apelati la avantajele operarorulul SAU exclusive bist (*), care analizet bigi'a dowd valod si stabilese bij rezultarolui conform tabelet de adevar prezentae tabelul 89. 98 _Torur pespre C/C++ Primete NOTIUNI DEC 89 Dupa cum vedef, bit care contineau unu in valoarea iniiald devin zero, iar cei care ccontineau 2er0 devin unt in valoazea rezultatA. Urmitoral program, bit inv.c, dustreaz ‘modul de utilizare a operatorului complementare pe bi ees Hey 2 Peng male seman colo oe mtn : ced Pa len xaete mons oi ae Sa et eg i re a a valoarea este mai mici decit 60, instructiunea atribuie vasi eoeel o , inswuctiunea atribuie variabilel calficatio valosrea R, “Atunci cind compilai si executati programul bit_énv.c, pe ectanul dumneavoast’ se va afia ‘urmitoarea lesire: EF complementat este FFOO > Inseucunea ete smd umatoareninstucane fale Heguneeay S83) peter, line " Unnitoareainstrucune printf aigeazt tests! puncajul: B= ‘Punctaj td /Rezuitat’¥s\n" 91 = Apticarea unor operat VALORILOR DE VARIABILE rune cn efecsuy opera arimetceintr-un progam, ve} vedea ch adesea abu une ‘ufabve serukanl une expres eave include valowea cireath a varablet respective, aja {um se ponte vedea in instructive urmitoae: ul un rezultat conditional unet cadeul programulu, Operarorut sizeor AL umBAsuLul C (Corer) Ging propramal deciar8o vriabli,compiatorl de C lock memorie pen stocara Valo Tatabll, Gnd sere! programe care execu opera de intrareesire cu fete sa alock tmemorie pent liste daamic, vei gsi convenabil i afta canttatea de memrie alocatt _é program pentns o snumiti variabild. Operatorul C sizeof retumeazi numarul de bit i unel variablle sau unui tip, Uri i tool un! arab t tip, Urmitoral program, sizeofic, exemplifich folosirea une end fos oferatorul condional condijonal penta aati ‘labile, pute reduce url insncunor ete ain Pena eazule In cate opera de atrbulre acialzea2S o varlabill eu sezulatl une pera asupra valor curencea variable, imbajl C dpune de o nota prescurtali penty a ret opera Pe sco se plaeati operat ih fia person de abue ‘Ubpatoaele lesrucfunl sont echivalente cu cele rel de mai sus Dupi cum vei invita, instruciunea ‘false din C examineazi o condive gi executa un set de ‘operat dach este adeviratl lun alt set de operati daci este fals. In mod similar, mba ne la dispoziie operatoral condivonal, care examineaza o condiie gi returneazi o valoare acd este adevizath gala dacl este falsi,Formarul operatonulul condijional este urmitoru! he 90 Torun Despre C/C* Prustene NopUN DEC 91 ‘illzt g de sistrmul hardware, esrea cezital la execunared fn fonce de compilatorl “Pea —= printe(*sulljunsigned) depiasst ia dzeapta de 2 ori este! ¢u\n" nee como fara: Dac fol eomplaconl Turbo Co Le, wa Naa ea ‘wuval, w yal > 2); aE aero Varisbila de tip int foloseste 2 octet! peeaee (Ad stupa) ‘aeplnant. Un’ ctenen te Zor! sete SE / VarHIPHit do, ip Eloat foleseste 4 octets watcval S624 5 ai ee! Vaiabile de tip double foloseste 8 octet! printé("Ad (otgned) deplasat 1a dreapta de 2 ori este s4\n", Varidbila de tip unsigned foloseste 2 octeti gee vals val >>\2) 7 eS z saa Variabila de tip long folose c:\> Q4 — Execuranea DePLASARiI PE BIT! wes Cana lucrai ca valor la vel de bit, vei enecuta de bce! deplaset pe bil Bs a Onno can a nal senna i, fe Ia singe (Spr ce sal semnity Ws) Pore (ana Staten depastior pb, bal C oft dot operator de nls PoP Ba a plooera i rcapia >) ul care depasea bil an) Un operate a june flosesteoperatorl de deplasrela stings pentru a depass valerie wasabllel flag doud pou spre s ExecuTanea UNE! ROTATI PE BIT! inezcune 94 a nvjat um sil operat Cd de a iy Cin hc pre ede sgh ¢ roduc vrou fh il ee the pec incapacity cep dee Techn naman ct cin nae lope ne si doriti pur si simplu 58 rotiyi biji in loc si deplasati la stinga sau la dreapta. Ci: ra Sinica tsa aa oa a put seen tp ee capnaes a ponte spe sang Choa isp dept, el a flag = flag << 27 Spee ie a pre sings, compllatrulC serie zeus in poi bia eeu ma ca baie. In scm, cand pls vase spre dren yslouren Fs OS Ct Buti er patel ma somalia depind de pul varblel Dac as on ee 1 et plae la rept. nd, ack vara este dep signed ae cone opera ea variablt unsigned, © floss valoarea 1 dack valonrea ete oR) ne at declare pov Cranatonl roy, dir. utreazs mel de willed Sratitor de deplasaze la dreapta gia stanga pe bit include ‘> 2)? 3 “guvall = 655357, | STIR Telete (cnsigned) deplasat 1a, stanga de 2 ori eats © Paa\nn, w yal, oval <<.2)) ind deplasativaloile 5 : Vaclabila contor speaficl numnul de rotapi pe cate le efectucaak valoarea. Urriton program, roi, iluswez2% utlizarea functor rots rom (isdiade , ; void main (void) | ve unsigned val = 1) prince tau rotit Ln dreapta,o data eate tala", v _eotr(val, 1))7 Se weleds Pringe(*tu rotit la dreapea de doua ort Peeves 20) val = 655347 PEinig(vsu Cott la stange de_doua ort este #u\n roti (val, 2))i sy fe tu\n", val, { a val, 92 Torutpespre C/C++ ‘Atunct cind compilayi si executayl programul rotitc, pe ecran se vor afiga urmitoarete 1 rotit 1a dreapta o data este 32768 5 rotit 1a dreapta de doua ori este 16385 65534 rotit 1a stanga de doua ori este 65531 cp Observatie: multe compilatoare de C furnizeazs si functile_Irotl $i_Irotr, care rotesc la tanga sau la dreapta valort fniregi de tpl unsigned long. 96 — Opcraroni conpiTiONAL! ‘Toate programele prezentate pn acum in aceasti carte au inceput executia cu prima instrucfiane din matn $i apoi au continuat in ordine, cu instruciunile urmatoare. Pe masuri ce programele devin mai complexe, pot apirca situa in care programul si necesite efectuarea unul anumit set de instrucjiuni dack o condipe este adevarat jar daci nu este adevarati, probabil, executarea altor instrucioni, De exemplu, sar putea ca programul ‘dunmneavoastti si necesite executarea unorinstructiuni diferte pentru flecare din zleie sip- timanil, Cand un program executi (sau nu) anumite instrucjuni in funcile de © anumita conde, se sptine c& programul realizeaz’ 0 procesare conditional. Pentru a realiza 0 pprocesare condjional, programul evaluea2i o conditie returnand un rezultat adevarat sau fals. De exemplu, conditia Asidat este lunt este oni adevarati, oft falsi. Pentru a ajuta pro- sramele si efectueze procesarea conditional, limbajul C dispune de instruciunile f sfelse 5 switch, Cateva dine capitolele care urmeazi vor analiza aceste insiruciiuni in detali, 97 — Procesarea reraTivA ‘Toate programele prezentate pint acum tn aceastl carte giau executatinstruciunile doar 0 singurl dati, Uneori, este necesar ca programele si execute sau nu un set de instrueiunt ia functie de rezultatul unei condi, Pe misuri ce programele dumneavoastri devin mai ‘complexe, pot aplrea situa in care un program si repete acelasi set de instructiuni de un lanumit nui de oft sau pani cind se indeplineste o anumita condijie. De exemplu, dack sctieti un program care caleuleaA calificatvele studenglor, programul trebuie si urmeze seclagi pegl pentru ficeare student din grup, In mod similar, dack un program afigex2% conti paral unui fists, programul va cht gl vaafig fecare line a fgierulu pana cdnd programel va ‘ntl simbolul de sfacgit de fisier. Atoncl cind programele repetd una sau mai multe ins- truetiuni pan’ cind este indepliaitl o condiie dat, se spune c& programul execu o proce- sare ierativd. O teocere @ programulus prin insructiunile care se repeti se numeste ierafie Pentru a vi ajuta s& realizafio procesare iterativa,limbajul C dispune de instruc funile or, twhilesi do-wbile. Unele capitole din aceasti carte vor analiza acesteinstructunt in deta 98 ReprezentaREA VALORILOR ADEVARAT $I FALS CCiteva dintre secilunile prezentate tn acest capitol au analizat sructurile conditionale § iterative ale limbajuluiC, care executl un set de insiructuni daca o condiie ete adevarat ji, eventual, alt set de instrucuni daci acea condijie este falsi. Cind iucraji cu structur condifionale i trative, este Imporant $4 inelegeti cum reprezint limbajul C valorie fals 9 adevarat, Limbajul C interpreteaza orice valoare diferii de 0 ca adevatat, iar valoatea 0 ca fils, De aces, urmatoarea condive va fl invotdeauna evaluati ca adevaraté Prosexe nopunrpe C_ 93 Multi programatori neexperimentai fg sciu condiile de test aga (G8 (okpesaie = RT Fv eeaN aR ‘acl cand dort tesa! duct o condi exe adevra, sce, pr mpl, expres Inst re paraes cama ys nn SHS A0eHa sop se Cind expresia este evaluati Ia 0 valoare dlferid de 0 (adevira), atunci fadevarat), atunci C execu instrucjunile care urmecza imediat dupd conditie, Cand expresia este evaluatd ca 0 fas), C ‘nu va executa instruciiunile care urmeazi imediat dupa concitie. Operatenl care hucreazd ca valor adeviat gi fls se numesc operatori booleent, Rezultatul une! expresii booleene este fntotdeauna adevirat sau fls TESTAREA UNE! CONDITI CU IF Pemasurd ce programele dumneavoastri vor deve le r ni mal complexe, ele vor efectua adesea un ‘anumit set de instructiunatunci cind o conde este adevirata si un alt sez de instnacioni ‘tunel cind acea condite este falsi. Cand programul damneavoasta trebule Si execute 0 afl de procesare concljonsla, vet! uuliza intructiunea ff Formatul acestel instuctunl este: (iE (eondi ties Soe instructiune; : condita pe ao cvaluee insist parse par 2 stadia, su fas Ane cnd coma exe areal, t's tae aaa at ece imei ip ove De ext unites nstecane eee te ‘la nave ee mse eat cr Da emia ese soe earns ecw cnr contacts pga encase rin va ona ncaa ner pra ine cre wea ed Srsochoes ears vate oe ins et ene [eee Saas Dee ore are oe es Analtine = 195; oe IsTRUCTIUNILE SIMPLE $/ CELE COMPUSE Cand programul dumnexvoastrd efectueaza o procesare concliional, uneosi se inimpli ca rogramul si execute una sat: mai multe instruciuinl daca 0 conde este adevsret eventual, alte insuetiun’ dae este fls8. De asemenea, tunel cind progratmul dumnex voasta efecrueazl o procesare teratvl, uneod el va repeta 0 singurd insrueiane, alter el 2 tepeta citeva instruct, In cadrul procesisilor iterative sat: condijionale, limbajl © consent istractnie cs find simple su compuse, O ftnciune spi exe o sng uciune, Cum ar fi aceea prin care se atribuie o valoare nel variable sau se apeleaz 94 _Torutpespre C/C++ Sancta pringf Urmatoarea insirciune ifapeleszi o instruciune simp (Prins) tune! clind condita este adevirat 4£” (conditie) " printe(‘conditia Pe de alth pare, 0 instructiune compusd este alctuitk din dova sau mai multe instruction ndluse inte acolade, Unmatorul exemplu de utlizare a instruct (feontine o instruciune 9 adevarata\n"): Seo BUEN (Cand propramul dumneavoast®i ebuie si efectueze mai multe lnstructiuni porn de la 0 Snumfei conditie sau atunci cind webuie Si repete citeva insructiunl, ve utiliza © Fnstzuciune compasi, plasind aceste Insruciuni tote acoade, 101 | Tesranea une eGauiTart pe musurl ce programele dumneavoasti vor deveni mal complexe, va apltea necestates ae eee Gas baluaten Une! varabe cao antmité conde penis a stabil ce instructs oe cor in connate. Acese decal pot 6 inplemenate cy instucinile {fst Wich Aes cum a) inva in seepunea 9, format une instruc este ‘anstructiuney — ae canada Cele mai mule instuciuni ffvor testa dack valoarea unel variable ese egal cu anus ‘Salone speeitcats De exemplu, urmatoaeainscjune estar dac vanilla varasse saloarea 21 Se vazeeel 2) ABRUEBSE UNS feb Pentru a testa o egalitte, imbajl C wilzesz8 semnul egal dublu (==), Atundi elnd troducelin program o ase de textare, uz semacl egal dubs Ceo) fe Joc de seul are suarlu (oy ne eae limbaul i utlizeazA pent operaia de atibuie, ga eum vel Gia secjunea 112, doc ilaas eperatord de ature (=) fn leul semnalul ep {bla compllatorl va considera conciva ea find corect din punt de vedere saci, dat din picate, nu va testa daca variabila are acea valoare. ‘in schimb, va atribui acea valoare varie, COlbservatie: fn func de nivel de avertizare stabi pnins compilatoral duonneavoasr, Sessa h ifea on mesa) cares senmaleserealizarea wie obeats de atrouie ileal tests condi. ‘Asa com programele dumacavoasr rebuie si testeze uneoro conde de egalat, tot at SE armed cateodaad sf testeze 0 anumil negate. Limbajl C utllzea28sibotl Prantete NoTUNT DE C95 pentru a testa o inegalitate, Usmitoarea instruetune testeaz dict vari siferiti de 21 une testeaz dict varabila varsta este if (wareta i= 21) © Anstructiune ‘amitorl program ep. inegcuilizeazd teste deegaltate (=~) si cele de Inala (+ | Hinciude ‘ a void main (void) ; int varsta 75, . 18 (varste == 21) "prints (varete utiiizatorulul este 22\n") SE (vareta {= 21) [eee trates veil daatoniler aulosee’g1\04) Sf Gnaitine == 75) Prince "Gnaltinen wtilizatoruins este 75\n! Af (Analtime != 75) ti . “printé("Inaltinea utilizatorului nu este 75\n’ ) reeneaecom ‘tunel cd compilat si executai acest program, pe monitor va apirea urmitorul rezultat: Varsta utilizatorului este 21 Inaltimea utilizatorului este 75 a> Fenin a Injelege modul de utizare 2 opertontor de egaliate side ingalta, prea. nodiend valde variable inant wares nt Excouranea reeTe.on neLaqionaLe Fe misuri ce progranele dumneavousts vor deveni mai complexe, vei ave 1 teal da ovalosrexte mal mate, ich ta mare sau eal se acd teal mid sea al vaste Pentu a aja eazy aceasta bsp come un Se operator: toma Tabs 102 pein la operator lajona sibel Operator Functie ‘Operatoral mai mare decar Operatonul mai mic decat Operatorul mat mare sau egal ex e Operatonul mat mic sau egal cx Tabelut 102 Operator relational ai imbajulut C, 96 Torur pespre C/C++ Prumeir noprunt pe C_97 Urmitoarea instructune (futlizeax’ operatorul © mai mare sau egal cu =) pentru a tests acd vatiabila varsta este mai mare decat 20: Uslizatoral are un caine sau dacd utlizatonal are un calculator, In eazuile cénd vies testa dc una dintre cele dou condi este adevirati (od daci sunt adevarate amdndoua), puteyi i folositi operatorul SAU iogic. Limbajul C reprezint’ operatonil SAU logic prin dua hare verteale (11D, asa cum se vede mai jos 4 ((utilizatorul_are_caine) || (utilizatorui_are_calculator)) ( ) / Instructiuni 103 9 Uruizarca oreratorutui siLocic Ges PENTRU TESTAREA A DOUA CONDITI sees 39 ari con suit sche piso conde ran sere al gene Sant ver deel camps ea op ty Eccl nna ernie ee ad a er cee camara cane nce a ey siti on pet gil Tags don case, com vo (Gain == /dainatien)) > nd compilatonl de ¢ intlneste o instructiune ifeare uilizeazd operatorul SAU ogic (I), eralueaza cele dous conciti de la stinga spre dreapsa, Dac examinati parantezele, veqi observa cd instniciunea ifde mal sus are forma urmatoate: Lf (conaitie) s in acest exemplu particular, este compusi de fapt din dout condi conectate cu operator SAU gi: (utidteatora! 02a caine) (i) Gtlidzatoruillaze eulater) Pentcu afi adevirat ccondiia relizaté cu operatonul SAU fogic, webule ca numai una dintre condi si fie evaluati ca adeviraté. Daci vreuna dintee ele este adeviratd (sau amindoul sunt adevirate), condifa rezultatd este evaluat ca adeviratl. Dacd ambele conditt sunt evaluate ca false, tune. condiiarezultatl este fals. Eeseapaent Gre enesese nee oe Cin mo an re palaces ok spl dnt co eh a re Mule seciuni prezentte in aceasta carte uilzeaz’ operatorul SAU iogle (I 1). De fecare kta, condyle vor fi plasate inte paranteze pentru a se asigura evaluarea exptesilor a 0 precedent’ corecti a operatorilor. rea RCRD Observatte: 53 mu confimdajioperatorul SAU logte (1) cu operaiorul SAU pe bit (1) | Operatorul SAU logte eatueaza coud express booleene (car pot avea valoarea adevintt {au fal) penira a produce un rezulat adewrat sau fate. fn sebimb, operatoralSAU pe bit, nanipuleaza bil (care au valoarea 1 sa 0). Execuranca ovenapiei Nu LoGtc OREE108) ind programut dumneavoastel ulizeaz’ insteuctiunea if pentru a executa o procesare sondiional, insiruciunea fevalueazio expreste cae va produce un rezultat adeviet sat fs In fanetie de necestale programulus dumneavoastes, pot apicea situa in cae st ait execuria unul set de instrciunicind condita este evaluat ca falsi. De exemplu, ot presupunem ci dori ca program si testeze dack uliatorlaze un cine. Dacd utzon p28 are un cline, progrumul trebuie $4 afgeze un mesaj case Hspune utzon sq fmpere un dalmajian, Dac utilizatdrul are un eine, programul nu trebule st facd ite Joonci cid dosti ca programml si execute una sau mai multe istucjun! th eazul Unel adi evaluate ca fas, veg utiliza operator NU foie pe care Cl reprezin’ folosind ‘enol exclanvs (D, Si aalizim urmatoarea inatucine if ey q in eT Pena 8 adevin con a Pee a coma ecules cli sh ae cen rt rae ie era ae fals) pentru a produce un rezultat adevarat sau. fais, in schimb, operatorul $1 pe bij, i ee 104 = Unuzarea oreraTorutui sau Loaic PENTRU TESTAREA A DOUA CONDITI E tn scunea 9, iva cum se llaezt insctines peri es cone at opram, Pe misuri ce programele dumneavoasti vor deveni mai complexe, poate cv Pecrrnulte condi. De excmplu, poste vel dori ca insrucinea if sf tsteze did if (I utilizatomul are caine) printf ("Trebuie Sa cumparati un dalmatian\n") ; 98 Torun pespre C/C++ DEcLARAREA VARIABILELOR IN CADRUL INSTRUCTIUNILOR COMPUSE In secyunea 100, ai vizut care este diferena dine insirictunile simple gi cele compuse [Asa cum aj inva, ostrucine compusd este alcula din una sau mai multe instractiuni incadrate de acolade (1). Urmvitorul exemplu de buctt wbile (care va ci linile dintun filer sie va afiga cu majuscle) conjine o instructiune compusi: Condile are contin operatoral NU lgte spun in ese ct stuncicind o contite nu este Sevan (eu alte euvinte, condita este evalua ca fal, rebuie si se execute insiruchit Tile on inseuctunileeompuse), In multe dinue seciunle prezentate fn aceast carte spar ‘condi care contin operator NU logic 106 = Armisuines nezutraruLut evaLuAR UNE! CONDIT! itera seus din aces cpl vau preset dete cond cue unt erate

You might also like