<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog despre resurse educaţionale din IT &#187; cpp</title>
	<atom:link href="http://resurse-educationale.uv.ro/?feed=rss2&#038;tag=cpp" rel="self" type="application/rss+xml" />
	<link>http://resurse-educationale.uv.ro</link>
	<description>Cu informatii pentru dezvoltare personala, dar şi pentru studentţi, elevi, profesori, webmasteri, programatori</description>
	<lastBuildDate>Fri, 27 Jan 2012 01:12:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Limbajele C, C++. DATE, OPERATORI ŞI EXPRESII</title>
		<link>http://resurse-educationale.uv.ro/?p=194</link>
		<comments>http://resurse-educationale.uv.ro/?p=194#comments</comments>
		<pubDate>Wed, 14 Sep 2011 13:28:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[expresii]]></category>
		<category><![CDATA[operatori]]></category>

		<guid isPermaLink="false">http://resurse-educationale.uv.ro/?p=194</guid>
		<description><![CDATA[Aşa cum comunicarea dintre două persoane se realizează prin intermediul limbajului natural, comunicarea dintre om şi calculator este mijlocită de un limbaj de programare. Limbajele C şi C++ sunt limbaje de programare de nivel înalt.  Limbajul C a apărut în &#8230; <a href="http://resurse-educationale.uv.ro/?p=194">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div>Aşa cum comunicarea dintre două persoane se realizează prin intermediul limbajului natural, comunicarea dintre om şi calculator este mijlocită de un limbaj de programare. Limbajele C şi C++ sunt limbaje de programare de nivel înalt. <strong><br />
</strong></div>
<div>
<p><strong>Limbajul C</strong> a apărut în anii 1970 şi a fost creat de Dennis Ritchie în laboratoarele AT&amp;T Bell. Limbajul C face parte din familia de limbaje concepute pe principiile programării structurate, la care ideea centrală este ”structurează pentru a stăpâni o aplicaţie”. Popularitatea limbajului a crescut rapid datorită eleganţei şi a multiplelor posibilităţi oferite programatorului (puterea şi flexibilitatea unui limbaj de asamblare); ca urmare, au apărut numeroase alte implementări. De aceea, în anii ’80 se impune necesitatea standardizării acestui limbaj. În perioada 1983-1990, un comitet desemnat de ANSI (American National Standards Institute) a elaborat un compilator ANSI C, care permite scrierea unor programe care pot fi portate fără modificări, pe orice sistem.</p>
<p><strong>Limbajul C++</strong> apare la începutul anilor ’80 şi îl are ca autor pe Bjarne Stroustrup. El este o variantă de limbaj C îmbunătăţit, mai riguroasă şi mai puternică, completată cu construcţiile necesare aplicării principiilor programării orientate pe obiecte (POO). Limbajul C++  păstrează toate elementele limbajului C,  beneficiind de eficienţa şi flexibilitatea acestuia. Limbajul C++ este un superset al limbajului C. Incompatibilităţile sunt minore, de aceea, modulele C pot fi încorporate în proiecte C++ cu un efort minim.</p>
<p>&nbsp;</p>
<p><strong>2.2.</strong><strong>  PROGRAME ÎN LIMBAJUL C/C++</strong></p>
<p>Un <em>program</em> scris în limbajul C (sau C++) este compus din unul sau mai multe <em>fişiere sursă</em>. Un fişier sursă este un fişier text care conţine codul sursă (în limbajul C) al unui program. Fiecare fişier sursă conţine una sau mai multe <em>funcţii</em> şi eventual, referinţe către unul sau mai multe <em>fişiere header</em> (figura 2.1.).</p>
<p>&nbsp;</p>
<p>Funcţia principală a unui program este numită <strong><em>main</em></strong>. Execuţia programului începe cu execuţia acestei funcţii, care poate apela, la rândul ei, alte funcţii. Toate funcţiile folosite în program trebuie descrise în fişierele sursă (cele scrise de către programator), în fişiere header (funcţiile predefinite, existente în limbaj), sau în biblioteci de funcţii.</p>
<p>&nbsp;</p>
<p>Un fişier header este un fişier aflat în sistem sau creat de către programator, care conţine declaraţii şi definiţii de funcţii şi variabile.</p>
<p>&nbsp;</p>
<p>Acţiunile din fiecare funcţie sunt codificate prin <em>instrucţiuni</em> (figura 2.2.a.). Există mai multe tipuri de instrucţiuni, care vor fi discutate în capitolul următor. O instrucţiune este orice expresie validă (de obicei, o asignare sau un apel de funcţie), urmată de simbolul ;. În figura 2.2.b. este dat un exemplu de instrucţiune simplă. Uneori, ca instrucţiune poate apare instrucţiunea nulă (doar <strong>;</strong>), sau instrucţiunea compusă (privită ca o succesiune de instrucţiuni simple, încadrate între acoladele delimitatoare {}.</p>
<table cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="49" height="4"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>Pentru a înţelege mai bine noţiunile prezentate, să considerăm un exemplu foarte simplu. Programul următor afişează pe ecran un mesaj (mesajul <em>Primul meu program</em>). Informaţia de prelucrat (de intrare) este însuşi mesajul (o constantă şir), iar prelucrarea ei constă în afişarea pe ecran.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>#include &lt;iostream.h&gt;   // linia 1</p>
<p>void main()      // linia 2 &#8211; antetul funcţiei main</p>
<p>{                    /* linia 3 &#8211; începutul corpului funcţiei, a unei intrucţiuni</p>
<p align="center">compuse */</p>
<p>cout&lt;&lt;”Primul meu program in limbajul C++\n”;   // linia 5</p>
<p>}                          // linia6-sfârşitul corpului funcţiei</p>
<p>&nbsp;</p>
<p>Prima linie este o <em>directivă preprocesor</em> (indicată de simbolul #) care determină includerea în fişierul sursă a fişierului header cu numele iostream.h. Acest header permite realizarea afişării<em> </em>pe monitor.</p>
<p>Programul conţine o singură funcţie, <em>funcţia principală</em>, numită main<em>, </em>al cărui <em>antet</em> (linia 2) indică:</p>
<p>- tipul valorii returnate de funcţie (void, ceea ce înseamnă că funcţia nu returnează nici o valoare)</p>
<p>- numele funcţiei (main)</p>
<p>- lista argumentelor primite de funcţie, încadrată de cele 2 paranteze rotunde.</p>
<p>Funcţiile comunică între ele prin argumente. Aceste argumente reprezintă datele de intrare ale funcţiei. În cazul nostru, nu avem nici un argument în acea listă, deci puteam să scriem antetul funcţiei şi astfel:</p>
<p>void main(void)</p>
<p>Ceea ce urmează după simbolul //, până la sfărşitul liniei,<em> </em>este un<em> comentariu</em>, care va fi ignorat de către compilator. Comentariul poate conţine un text explicativ; informaţii lămuritoare la anumite aspecte ale problemei sau observaţii. Dacă vrem să folosim un comentariu care cuprinde mai multe linii, vom delimita începutul acestuia indicat prin simbolulurile /*, iar sfârşitul &#8211; prin */ (vezi liniile 3, 4). Introducerea comentariilor în programele sursă uşurează înţelegerea acestora. În general, se recomandă introducerea unor comentarii după antetul unei funcţiei, pentru a preciza prelucrările efectuate în funcţie, anumite limite impuse datelor de intrare, etc.</p>
<p>Începutul şi sfârşitul corpului funcţiei <em>main </em>sunt indicate de cele două acoalade { (linia3) şi }(linia 6). Corpul funcţiei (linia 5) este format dintr-o singură instrucţiune, care implementează o operaţie de scriere. Cuvantul cout este un cuvânt predefinit al limbajului C++ &#8211; <strong>c</strong>onsole <strong>out</strong>put &#8211; care desemnează dispozitivul logic de iesire; simbolul &lt;&lt;<em> </em> este operatorul de transfer a informaţiei. Folosite astfel, se deschide un canal de comunicaţie a datelor către dispozitivul de ieşire, în cazul acesta, monitorul. După operator se specifică informaţiile care vor fi afişate (în acest exemplu, un şir de caractere constant). Faptul că este un şir constant de caractere este indicat de ghilimelele care îl încadrează. Pe ecran va fi afişat fiecare caracter din acest şir, cu excepţia grupului \n<em>. </em>Deşi grupul este format din două caractere, acesta<em> </em>va fi interpretat ca un singur caracter &#8211; numit <em>caracter escape</em> &#8211; care determină poziţionarea cursorului la începutul următoarei linii. O secvenţă escape (cum este \n) furnizează un mecanism general şi extensibil pentru reprezentarea caracterelor invizibile sau greu de obţinut. La sfârşitul instrucţiunii care implementează operaţia de scriere, apare ; .</p>
<p><span id="more-194"></span></p>
<p align="center"><strong>2.3.  PREPROCESORUL</strong></p>
<p>Aşa cum am menţionat în capitolul 1.3., în faza de compilare a fişierului sursă este invocat întâi preprocesorul. Acesta tratează directivele speciale &#8211; numite <em>directive preprocesor </em>- pe care le găseşte în fişierul sursă. Directivele preprocesor sunt identificate prin simbolul #, care trebuie să fie primul caracter, diferit de spaţiu, dintr-o linie. Directivele preprocesor sunt utilizate la includerea fişierelor header, la definirea numelor constantelor simbolice, la definirea macro-urilor, sau la realizarea altor funcţii (de exemplu, compilarea condiţionată), aşa cum ilustrează exemplele următoare:</p>
<p>&nbsp;</p>
<p>q  Includerea fişierelor header în codul sursă:</p>
<h6><strong><em><span style="text-decoration: underline;">Exemplul1:</span></em></strong><strong><em></em></strong></h6>
<h6>#include &lt;stdio.h&gt;</h6>
<p>Când procesorul întâlneşte această linie, datorită simbolului #, o recunoaşte ca fiind o directivă preprocesor, localizează fişierul header indicat (parantezele unghiulare &lt; &gt; indică faptul că este vorba de un <em>fişier header sistem</em>).</p>
<h6><strong><em><span style="text-decoration: underline;">Exemplul 2:   </span></em></strong></h6>
<h6>#include &#8220;headerul_meu.h&#8221;</h6>
<p>Numele fişierului header inclus între ghilimele, indică faptul că headerul_meu.h este un fişier header creat de utilizator. Preprocesorul va căuta să localizeze acest fişier în directorul curent de lucru al utilizatorului. În cazul în care fişierul header nu se află în directorul curent, se va indica şi calea către acesta.</p>
<h6><strong><em><span style="text-decoration: underline;">Exemplul 3:   </span></em></strong></h6>
<h6>#include &#8220;c:\\bc\\head\\headerul_meu.h&#8221;</h6>
<p>În acest exemplu, pentru interpretarea corectă a caracterului backslash \, a fost necesară &#8220;dublarea&#8221;  acestuia, din motive pe care le vom prezenta în paragraful 2.5.2.4.</p>
<p>&nbsp;</p>
<p>q  Asignarea de nume simbolice constantelor:</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>#define TRUE      1</p>
<p>#define FALSE     0</p>
<p>Tratarea acestor directive preprocesor are ca efect asignarea (atribuirea) valorii întregi 1 numelui   (constantei simbolice) TRUE, şi a valorii 0 numelui simbolic FALSE. Ca urmare, înaintea compilării propriu-zise, în programul sursă, apariţiile numelor TRUE şi FALSE vor fi înlocuite cu valorile 1, respectiv 0.</p>
<p>&nbsp;</p>
<p>q  Macrodefiniţii:</p>
<p>Directiva #define este folosită şi în macrodefiniţii. Macrodefiniţiile permit folosirea unor nume simbolice pentru expresiile indicate în directivă.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>#define NEGATIV(x)      -(x)</p>
<p>Între numele macrodefiniţiei şi paranteza stângă (  <em>NEGATIV(</em>…) ) nu sunt permise spaţii albe. La întalnirea în programul sursă a macrodefiniţiei NEGATIV, preprocesorul subtituie argumentul acesteia cu expresia (negativarea argumentului). Macrodefiniţia din exemplu poate fi folosită în programul sursă astfel: NEGATIV(a+b). Când preprocesorul întâlneşte numele expresiei, subtituie literalii din paranteză, a+b, cu argumentul din macrodefiniţie, x, obţinându-se   -(a+b).</p>
<p>Dacă macrodefiniţia ar fi fost de forma:</p>
<p>#define NEGATIV(x)      -x</p>
<p>NEGATIV(a+b) ar fi fost tratată ca -a+b.</p>
<p align="center"><strong> </strong></p>
<p align="center"><strong> </strong></p>
<p align="center"><strong>2.4. ELEMENTE DE BAZĂ ALE LIMBAJULUI</strong></p>
<p><strong> </strong></p>
<p><strong>2.4.1. VOCABULARUL</strong></p>
<p>&nbsp;</p>
<p>În scrierea programelor în limbajul C/C++ pot fi folosite doar anumite simboluri care alcătuiesc <em>alfabetul limbajului. </em>Acesta cuprinde:</p>
<p>q  Literele mari sau mici de la A la Z (a-z);</p>
<p>q  Caracterul subliniere ( _ underscore), folosit, de obicei, ca element de legătura între cuvintele compuse;</p>
<p>q  Cifrele zecimale (0-9);</p>
<p>q  Simboluri speciale:</p>
<p>q  Caractere:</p>
<p>q  operatori (Exemple:  +, *, !=);</p>
<p>q  delimitatori (Exemple:  blank (spaţiu), tab \t, newline \n, cu rolul de a separa cuvintele);</p>
<p>q  Grupuri (perechi de caractere).</p>
<p>&nbsp;</p>
<p>Grupurile de caractere, numire adesea <em>separatori</em>, pot fi:</p>
<p>q  ( )           &#8211; Încadrează lista de argumente ale unei funcţii sau sunt folosite în expresii pentru schimbarea ordinii de efectuare a operaţiilor (în ultimul caz, fiind operator);</p>
<p>q  { }           &#8211; Încadrează instrucţiunile compuse;</p>
<p>q  //              &#8211; Indică începutul unui comentariu care se poate întinde până la sfârşitul liniei;</p>
<p>q  /*   */ &#8211; Indică începutul şi sfârşitul unui comentariu care poate cuprinde mai multe linii;</p>
<p>q  &#8221; &#8220;     &#8211; Încadrează o constantă şir (un şir de caractere);</p>
<p>q  &#8216; &#8216;           &#8211; Încadrează o constantă caracter (un caracter imprimabil sau o secvenţă escape).</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>2.4.2. UNITĂŢILE LEXICALE</strong></p>
<p>&nbsp;</p>
<p>Unităţile lexicale (cuvintele) limbajului C/C++ reprezintă grupuri de caractere cu o semnificaţie de sine stătătoare. Acestea sunt:</p>
<p>q  Identificatori;</p>
<p>q  Cuvinte cheie ale limbajului;</p>
<p><strong> </strong></p>
<p><strong>Identificatorii</strong> reprezintă numele unor date (constante sau variabile), sau ale unor funcţii. Identificatorul este format dintr-un şir de litere, cifre sau caracterul de subliniere (underscore), trebuie să înceapă cu o literă sau cu caracterul de subliniere şi să fie sugestivi.</p>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong>   viteză, greutate_netă, Viteza, Viteza1, GreutateNetă</p>
<p>Identificatorii pot conţine litere mici sau mari, dar limbajul C++ este senzitiv la majuscule şi minuscule (case-sensitive). Astfel, identificatorii viteza şi Viteza sunt diferiţi.</p>
<p>Nu pot fi folosiţi ca identificatori cuvintele cheie. Identificatorii pot fi standard (ca de exemplu numele unor funcţii predefinite: scanf, clear, etc.) sau aleşi de utilizator.</p>
<p><strong> </strong></p>
<p><strong>Cuvintele cheie</strong> sunt cuvinte ale limbajului, împrumutate din limba engleză, cărora programatorul nu le poate da o altă utilizare. Cuvintele cheie se scriu cu litere mici şi pot reprezenta:</p>
<p>q  Tipuri de date (Exemple: int, char, double);</p>
<p>q  Clase de memorare (Exemple: extern, static, register);</p>
<p>q  Instrucţiuni (Exemple: if, for, while);</p>
<p>q  Operatori (Exemplu: sizeof).</p>
<p>Sensul cuvintelor cheie va fi explicat pe masură ce vor fi prezentate construcţiile în care acestea apar.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"><strong>2.5. DATE ÎN LIMBAJUL C/C++</strong></p>
<p>&nbsp;</p>
<p>Aşa cum s-a văzut în capitolul 1, un program realizează o prelucrare de informaţie. Termenul de prelucrare trebuie să fie considerat într-un sens foarte general (de exemplu, în programul prezentat în paragraful 2.2., prelucrarea se referea la un text şi consta în afişarea lui). În program datele apar fie sub forma unor <strong><em>constante</em></strong> (valori cunoscute anticipat, care nu se modifică), fie sub forma de <strong><em>variabile</em></strong>. Constantele şi variabilele sunt obiectele informaţionale de bază manipulate într-un program.</p>
<p>&nbsp;</p>
<p>Fiecare categorie de date este caracterizată de atributele:</p>
<p>q  Nume;</p>
<p>q  Valoare;</p>
<p>q  Tip;</p>
<p>q  Clasa de memorare.</p>
<p>De primele trei tipuri de atribute ne vom ocupa în continuare, urmând ca de atributul clasă de memorare să ne ocupăm în paragraful 6.8.</p>
<p>&nbsp;</p>
<p><strong>Numele unei date</strong></p>
<p>Numele unei date este un identificator şi, ca urmare, trebuie să respecte regulile specifice identificatorilor. Deasemenea, numărul de caractere care intră în compunerea unui identificator este nelimitat, însă, implicit, numai primele 32 de caractere sunt luate în considerare. Aceasta înseamnă că doi identificatori care au primele 32 de caractere identice, diferenţiindu-se prin caracterul 33, vor fi consideraţi identici.</p>
<p>&nbsp;</p>
<p><strong>2.5.1.  TIPURI DE DATE</strong></p>
<p><strong> </strong></p>
<p><strong>Tipul unei date </strong>constă într-o <em>mulţime de valori</em> pentru care s-a adoptat un anumit mod de reprezentare în memoria calculatorului şi o <em>mulţime de operatori</em> care pot fi aplicaţi acestor valori. Tipul unei date determină <em>lungimea zonei de memorie</em> ocupată de acea dată. În general, lungimea zonei de memorare este dependentă de calculatorul pe care s-a implementat compilatorul. Tabelul 2.1. prezintă lungimea zonei de memorie ocupată de fiecare tip de dată pentru compilatoarele sub MS-DOS şi UNIX/LINUX.</p>
<p><strong>Tipurile de bază</strong> sunt:</p>
<p>q  char         un singur octet (1 byte=8 biţi), capabil să conţină codul unui caracter din setul</p>
<p>local de caractere;</p>
<p>q  int           număr întreg, reflectă în mod tipic mărimea naturală din calculatorul utilizat;</p>
<p>q  float       număr real, în virgulă mobilă, simplă precizie;</p>
<p>q  double     număr real, în virgulă mobilă, dublă precizie.</p>
<p>&nbsp;</p>
<p>În completare există un număr de <em>calificatori, </em>care se pot aplica tipurilor de bază char, int, float sau double: short, long, signed şi unsigned. Astfel, se obţin <strong><em>tipurile derivate de date</em></strong>. Short şi long se referă la mărimea diferită a întregilor, iar datele de tip unsigned int sunt întotdeauna pozitive. S-a intenţionat ca short şi long să furnizeze diferite lungimi de întregi, int reflectând mărimea cea mai &#8220;naturală&#8221; pentru un anumit calculator. Fiecare compilator este liber să interpreteze short şi long în mod adecvat propriului hardware; în nici un caz, însă, short nu este mai lung decât long. Toţi aceşti calificatori pot aplicaţi tipului int. Calificatorii signed (cel implicit) şi unsigned se aplică tipului char. Calificatorul long se aplică tipului double. Dacă într-o declaraţie se omite tipul de bază, implicit, acesta va fi int.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="142">Tabelul 2.1.</td>
<td colspan="2" valign="top" width="132"></td>
<td valign="top" width="369"></td>
</tr>
<tr>
<td valign="top" width="142">
<p align="center"><strong>Tip</strong></p>
</td>
<td colspan="2" valign="top" width="132">
<p align="center"><strong>Lungimea zonei de memorie ocupat</strong><strong>e</strong><strong> (în biţi)</strong></p>
</td>
<td valign="top" width="369">
<p align="center"><strong>Descriere</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="142"></td>
<td valign="top" width="66">MS-DOS</td>
<td valign="top" width="66">UNIXLINUX</td>
<td valign="top" width="369"></td>
</tr>
<tr>
<td valign="top" width="142">char</td>
<td valign="top" width="66">
<p align="center">8</p>
</td>
<td valign="top" width="66">
<p align="center">8</p>
</td>
<td valign="top" width="369">Valoarea unui singur caracter; poate fi întâlnit în expresii cu extensie de semn</td>
</tr>
<tr>
<td valign="top" width="142">unsigned char</td>
<td valign="top" width="66">
<p align="center">8</p>
</td>
<td valign="top" width="66">
<p align="center">8</p>
</td>
<td valign="top" width="369">Aceeaşi ca la char, fară extensie de semn</td>
</tr>
<tr>
<td valign="top" width="142">signed char</td>
<td valign="top" width="66">
<p align="center">8</p>
</td>
<td valign="top" width="66">
<p align="center">8</p>
</td>
<td valign="top" width="369">Aceeaşi ca la char, cu extensie de semn obligatorie</td>
</tr>
<tr>
<td valign="top" width="142">int</td>
<td valign="top" width="66">
<p align="center">16</p>
</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="369">Valoare întreagă</td>
</tr>
<tr>
<td valign="top" width="142">long</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="66">
<p align="center">64</p>
</td>
<td valign="top" width="369">Valoare întreagă cu precizie mare</td>
</tr>
<tr>
<td valign="top" width="142">(long int)</td>
<td valign="top" width="66"></td>
<td valign="top" width="66"></td>
<td valign="top" width="369"></td>
</tr>
<tr>
<td valign="top" width="142">long long int</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="66">
<p align="center">64</p>
</td>
<td valign="top" width="369">Valoare întreagă cu precizie mare</td>
</tr>
<tr>
<td valign="top" width="142">short int</td>
<td valign="top" width="66">
<p align="center">16</p>
</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="369">Valoare întreagă cu precizie mică</td>
</tr>
<tr>
<td valign="top" width="142">unsigned int</td>
<td valign="top" width="66">
<p align="center">16</p>
</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="369">Valoare întreagă, fără semn</td>
</tr>
<tr>
<td valign="top" width="142">unsigned long int</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="66">
<p align="center">64</p>
</td>
<td valign="top" width="369">Valoare întreagă, fără semn</td>
</tr>
<tr>
<td valign="top" width="142">float</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="66">
<p align="center">32</p>
</td>
<td valign="top" width="369">Valoare numerică cu zecimale, simplă precizie (6 )</td>
</tr>
<tr>
<td valign="top" width="142">double</td>
<td valign="top" width="66">
<p align="center">64</p>
</td>
<td valign="top" width="66">
<p align="center">64</p>
</td>
<td valign="top" width="369">Valoare numerică cu zecimale, dublă precizie (10 )</td>
</tr>
<tr>
<td valign="top" width="142">long double</td>
<td valign="top" width="66">
<p align="center">80</p>
</td>
<td valign="top" width="66">
<p align="center">128</p>
</td>
<td valign="top" width="369">Valoare numerică cu zecimale, dublă precizie</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Să considerăm, de exmplu, tipul int, folosit pentru date întregi (pozitive sau negative). Evident că mulţimea valorilor pentru acest  tip va fi, de fapt, o <em>submulţime finită</em> de numere întregi. Dacă pentru memorarea unei date de tip int se folosesc 2 octeţi de memorie, atunci valoarea maximă pentru aceasta va fi 2- 1, deci 2- 1 (32767), iar valoarea minimă va fi -2, deci -2 (-32768). Încercarea de a calcula o expresie de tip int a cărei valoare se situează în afara acestui domeniu va conduce la o eroare de execuţie.</p>
<p>Mulţimea valorilor pentru o dată de tip unsigned int (întreg fără semn) va fi formată din numerele întregi situate în intervalul [0, 2- 1].</p>
<p>&nbsp;</p>
<p>În header-ul <strong>&lt;values.h&gt;</strong> sunt definite constantele simbolice (cum ar fi: MAXINT, MAXSHORT, MAXLONG, MINDOUBLE, MINFLOAT, etc.) care au ca valoare limitele inferioară şi superioară ale intervalului de valori pentru tipurile de date enumerate.  (de exemplu MAXINT reprezintă valoarea întregului maxim care se poate memora, etc. )</p>
<p>&nbsp;</p>
<p>Fără a detalia foarte mult modul de reprezentare a datelor reale (de tip float sau double), vom sublinia faptul că, pentru acestea, este importantă şi <em>precizia de reprezentare</em>. Deoarece calculatorul poate reprezenta doar o submulţime finită de valori reale, în anumite cazuri, pot apare erori importante.</p>
<p>Numerele reale pot fi scrise sub forma:                       N = mantisa  baza</p>
<p>unde:baza reprezintă baza sistemului de numeraţie; mantisa (coeficientul) este un număr fracţionar normalizat ( în faţa virgulei se află 0, iar prima cifră de după virgulă este diferită de zero); exponentul este un număr întreg. Deoarece forma internă de reprezentare este binară, baza=2. În memorie vor fi reprezentate doar mantisa şi exponentul. Numărul de cifre de după virgulă determină <em>precizia</em> de exprimare a numărului. Ce alte cuvinte, pe un calculator cu o precizie de 6 cifre semnificative, două valori reale care diferă la a 7-a cifră zecimală, vor avea aceeaşi reprezentare. Pentru datele de tip float, precizia de reprezentare este 6; pentru cele de tip double, precizia este 14, iar pentru cele de tip long double, precizia este 20.</p>
<p>Lungimea zonei de memorie ocupate de o dată de un anumit tip (pe câţi octeţi este memorată data) poate fi aflată cu ajutorul operatorului sizeof.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu: </span></em></strong></p>
<p>cout&lt;&lt;&#8221;Un int este memorat pe &#8220;&lt;&lt;sizeof(int)&lt;&lt;&#8221;octeti.\n&#8221;;</p>
<p>Instrucţiunea are ca efect afişarea pe monitor a mesajului: <em>Un int este memorat pe 2 octeţi.</em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>2.5.2.  CONSTANTE</strong></p>
<p>&nbsp;</p>
<p>O constantă este un <strong>literal</strong> (o formă externă de reprezentare) <em>numeric</em>, <em>caracter</em> sau <em>şir de caractere</em>. Numele şi valoarea unei constante sunt identice. Valoarea unei constante nu poate fi schimbată în timpul execuţiei programului în care a fost utilizată. Tipul şi valoarea ei sunt determinate în mod automat, de către compilator, pe baza caracterelor care compun literalul.</p>
<p>&nbsp;</p>
<p><strong>2.5.2.1.    </strong><strong>Constante întregi</strong></p>
<p><strong> </strong></p>
<p>Constantele întregi sunt literali numerici (compuşi din cifre), fără punct zecimal.</p>
<p>q  Constante <em>întregi în baza 10, 8 sau 16</em></p>
<p>q  Constante <em>întregi în baza 10</em></p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p><em>     </em>45</p>
<p>-78   // constante întregi decimale (în baza 10), tip <strong>int</strong></p>
<p>q  Constante <em>întregi octale</em></p>
<p>Dacă în faţa numărului apare cifra zero (0), acest lucru indică faptul că acea constantă este de tipul int, in baza opt (constantă octală).</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>056</p>
<p>077   // constante întregi octale, tip <strong>int</strong></p>
<p>q  Constante <em>întregi hexagesimale</em></p>
<p>Dacă în faţa numărului apar caracterele zero (0) şi x (sau X), acest lucru indică faptul că acea constantă este de tipul int, în baza 16 (constantă hexagesimală). Amintim că în baza 16 cifrele sunt: 0-9, A (sau a) cu valoare 10, B (sau b) cu valoare 11, C (sau c) cu valoare 12, D (sau d) cu valoare 13, E (sau e) cu valoare 14, F (sau f) cu valoare 15.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>0&#215;45</p>
<p>0x3A</p>
<p>0Xbc  // constante întregi hexagesimale, tip <strong>int</strong></p>
<p>q  Constante <em>întregi, de tipuri derivate</em></p>
<p>q  Dacă secvenţa de cifre este urmată de L sau l, tipul constantei este <strong>long int</strong>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>145677L</p>
<p>897655l     // tip decimal <strong>long int </strong></p>
<p>q  Dacă secvenţa de cifre este urmată de U sau u, tipul constantei este <strong>unsigned int</strong>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>65555u</p>
<p>q  Dacă secvenţa de cifre este urmată de U (u) şi L (l), tipul constantei este <strong>unsigned long int</strong>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong><em>    </em>7899UL     //tip decimal <strong>unsigned long int</strong></p>
<p><strong><em><span style="text-decoration: underline;"> </span></em></strong></p>
<p>&nbsp;</p>
<h2>2.5.2.2.  Constante numerice, reale</h2>
<p>&nbsp;</p>
<p>q  Dacă o constantă numerică conţine punctul zecimal, ea este de tipul <strong>double</strong>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>3.1459           //tip <strong>double</strong></p>
<p>q  Dacă numărul este urmat de F sau f, constante este de tip <strong>float</strong>.</p>
<p>q  Dacă numărul este urmat de L sau l, este de tip <strong>long double.</strong></p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>0.45f      //tip <strong>float</strong></p>
<p>9.788L     //tip <strong>long double</strong></p>
<p>q  Constante reale în format ştiinţific</p>
<p>Numărul poate fi urmat de caracterul e sau E şi de un număr întreg, cu sau fără semn. În acest caz, constanta este în <em>notaţie ştiinţifică</em>. În această formă externă de reprezentare, numărul din faţa literei E reprezintă <em>mantisa</em>, iar numărul întreg care urmează caracterului E reprezintă <em>exponentul</em>. In forma externă de reprezentare, baza de numeraţie este 10, deci valoarea constantei va fi dată de mantisa10.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>1.5e-2     //tip double, în notaţie ştiinţifică, valoare 1.510</p>
<p><strong> </strong></p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &lt;values.h&gt;</p>
<p>#define PI 3.14359</p>
<p>int main()</p>
<p>{</p>
<p>cout&lt;&lt;&#8221;Tipul int memorat pe: &#8220;&lt;&lt;sizeof(int)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul int memorat pe: &#8220;&lt;&lt;sizeof(23)&lt;&lt;&#8221; octeti\n&#8221;; //23-const. zecimala int</p>
<p>cout&lt;&lt;&#8221;Int maxim=&#8221;&lt;&lt;MAXINT&lt;&lt;’\n’;</p>
<p>//const. simbolice MAXINT, MAXLONG, etc. &#8211; definite in &lt;values.h&gt;</p>
<p>cout&lt;&lt;&#8221;Const. octala 077 are val decimala:&#8221;&lt;&lt;077&lt;&lt;’\n;</p>
<p>cout&lt;&lt;&#8221;Const. hexagesimala d3 are val decimala:&#8221;&lt;&lt;0xd3&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;&#8221;Tipul unsigned int memorat pe:&#8221;&lt;&lt;sizeof(unsigned int)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul unsigned int memorat pe: &#8220;&lt;&lt;sizeof(23U)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul unsigned int memorat pe: &#8220;&lt;&lt;sizeof(23u)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul long int memorat pe: &#8220;&lt;&lt;sizeof(long int)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul long int memorat pe: &#8220;&lt;&lt;sizeof(23L)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul long int memorat pe: &#8220;&lt;&lt;sizeof(23l)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>//23L sau 23l-const. decimala long int</p>
<p>cout&lt;&lt;&#8221;Long int maxim=&#8221;&lt;&lt;MAXLONG&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;&#8221;Tipul unsigned long memorat pe:&#8221;;</p>
<p>cout&lt;&lt;sizeof(unsigned long int)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul unsigned long memorat pe: &#8220;&lt;&lt;sizeof(23UL)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul unsigned long memorat pe: &#8220;&lt;&lt;sizeof(23ul)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>//23UL sau 23ul-const. decimala unsigned long int</p>
<p>cout&lt;&lt;&#8221;Tipul long long int memorat pe: &#8220;;</p>
<p>cout&lt;&lt;sizeof(long long int)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul long long int memorat pe: &#8220;&lt;&lt;sizeof(d)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul short int memorat pe: &#8220;&lt;&lt;sizeof(short int)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Short int maxim=&#8221;&lt;&lt;MAXSHORT&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;&#8221;Tipul float memorat pe: &#8220;&lt;&lt;sizeof(float)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul float memorat pe: &#8220;&lt;&lt;sizeof(23.7f)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>//23.7f-const. decimala float</p>
<p>cout&lt;&lt;&#8221;Float maxim=&#8221;&lt;&lt;MAXFLOAT&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;&#8221;Float minim=&#8221;&lt;&lt;MINFLOAT&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;&#8221;Tipul double memorat pe: &#8220;&lt;&lt;sizeof(double)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul double memorat pe: &#8220;&lt;&lt;sizeof(23.7)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>//23.7-const. decimala double</p>
<p>cout&lt;&lt;&#8221;Const. decim. doubla in notatie stiintifica:&#8221;&lt;&lt;23.7e-5&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;”Const. PI este:”&lt;&lt;PI&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;”Constanta PI este memorata pe:”&lt;&lt;sizeof(PI)&lt;&lt;”octeti\n”:</p>
<p>cout&lt;&lt;&#8221;Double maxim=&#8221;&lt;&lt;MAXDOUBLE&lt;&lt;’\n’&lt;&lt;&#8221;Double minim=&#8221;&lt;&lt;MINDOUBLE&lt;&lt;’\n’;</p>
<p>cout&lt;&lt;&#8221;Tipul long double memorat pe: &#8220;&lt;&lt;sizeof(long double)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Tipul long double memorat pe: &#8220;&lt;&lt;sizeof(23.7L)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>//23.7L-const. decimala long double</p>
<p>cout&lt;&lt;&#8221;Cifra A din HEXA are val.:&#8221;&lt;&lt;0xA&lt;&lt;&#8221;\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Cifra B din HEXA are val.:&#8221;&lt;&lt;0XB&lt;&lt;&#8221;\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Cifra C din HEXA are val.:&#8221;&lt;&lt;0xc&lt;&lt;&#8221;\n&#8221;;</p>
<p>cout&lt;&lt;&#8221; Cifra D din HEXA are val.:&#8221;&lt;&lt;0xD&lt;&lt;&#8221;\n&#8221;;</p>
<p>cout&lt;&lt;&#8221; Cifra E din HEXA are val.:&#8221;&lt;&lt;0XE&lt;&lt;&#8221;\n&#8221;;</p>
<p>cout&lt;&lt;&#8221; Cifra F din HEXA are val.:&#8221;&lt;&lt;0xf&lt;&lt;&#8221;\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Val. const. hexa 0x7ac1e este: &#8220;&lt;&lt;0x7ac1e&lt;&lt;&#8217;\n&#8217;;</p>
<p>cout&lt;&lt;&#8221;Val. const. octale 171 este: &#8220;&lt;&lt;0171&lt;&lt;&#8217;\n&#8217;;</p>
<p>cout&lt;&lt;&#8221;O const. octala se memoreaza pe &#8220;&lt;&lt;sizeof(011)&lt;&lt;&#8221; octeti\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;O const.oct.long se mem pe &#8220;;cout&lt;&lt;sizeof(011L)&lt;&lt;&#8221; octeti\n&#8221;;}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>2.5.2.3.  Constante caracter</strong></p>
<p>&nbsp;</p>
<p>Constantele caracter sunt încadrate între apostroafe.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong><strong><em></em></strong></p>
<p>&#8216;a&#8217;        //tip <strong>char</strong></p>
<p>O constantă caracter are ca valoare <strong><em>codul ASCII</em></strong> al caracterului pe care îl reprezintă.</p>
<p>Acest set de caractere are următoarele <em>proprietăţi</em>:</p>
<p>q  Fiecărui caracter îi corespunde o valoare întreagă distinctă (ordinală);</p>
<p>q  Valorile ordinale ale literelor mari sunt ordonate şi consecutive (&#8216;A&#8217; are codul ASCII 65, &#8216;B&#8217; &#8211; codul 66, &#8216;C&#8217; &#8211; codul 67, etc.);</p>
<p>q  Valorile ordinale ale literelor mici sunt ordonate şi consecutive (&#8216;a&#8217; are codul ASCII 97, &#8216;b&#8217; &#8211; codul 98, &#8216;c&#8217; &#8211; codul 99, etc.);</p>
<p>q  Valorile ordinale ale cifrelor sunt ordonate şi consecutive (&#8217;0&#8242; are codul ASCII 48, &#8217;1&#8242; &#8211; codul 49, &#8217;2&#8242; &#8211; codul 50, etc.).</p>
<p>&nbsp;</p>
<p>q  Constante caracter <em>corespunz</em><em>ă</em><em>toare caracterelor imprimabile</em></p>
<p>O constantă caracter corespunzătoare unui caracter imprimabil se reprezintă prin caracterul respectiv inclus între apostroafe.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu</span></em></strong>:</p>
<p>Constantă caracter      Valoare</p>
<p>‘A’               65</p>
<p>‘a’               97</p>
<p>‘0’               48</p>
<p>‘*’               42</p>
<p><strong><em>Excepţii </em></strong>de la regula de mai sus le constituie <em>caracterele imprimabile apostrof</em> (&#8216;) şi backslash (\).</p>
<p>Caracterul <em>backslash</em> se reprezintă:            &#8216;\\&#8217;. Caracterul <em>apostrof </em>se reprezintă:         &#8216;\&#8221;.</p>
<p>&nbsp;</p>
<p>q  Constante caracter <em>corespunz</em><em>ă</em><em>toare caracterelor neimprimabile</em></p>
<p>Pentru caracterele neimprimabile, se folosesc <strong><em>secvenţe escape</em></strong>. O secvenţă escape furnizează un mecanism general şi extensibil pentru  reprezentarea caracterelor invizibile sau greu de obţinut.  În tabelul 2.2. sunt prezentate câteva caractere escape utilizate frecvent.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="104">Tabelul 2.2.</td>
<td valign="top" width="94"></td>
<td valign="top" width="85"></td>
<td valign="top" width="331"></td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">Constantă caracter</p>
</td>
<td valign="top" width="94">
<p align="center">Valoare</p>
<p align="center">(Cod ASCII)</p>
</td>
<td valign="top" width="85">
<p align="center">Denumirea caracterului</p>
</td>
<td valign="top" width="331">
<p align="center">Utilizare</p>
</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">‘\n’</p>
</td>
<td valign="top" width="94">
<p align="center">10</p>
</td>
<td valign="top" width="85">
<p align="center">LF</p>
</td>
<td valign="top" width="331">rând nou (Line Feed)</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">‘\t’</p>
</td>
<td valign="top" width="94">
<p align="center">9</p>
</td>
<td valign="top" width="85">
<p align="center">HT</p>
</td>
<td valign="top" width="331">tabulator orizontal</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">‘\r’</p>
</td>
<td valign="top" width="94">
<p align="center">13</p>
</td>
<td valign="top" width="85">
<p align="center">CR</p>
</td>
<td valign="top" width="331">poziţionează cursorul în coloana 1 din rândul curent</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">‘\f’</p>
</td>
<td valign="top" width="94">
<p align="center">12</p>
</td>
<td valign="top" width="85">
<p align="center">FF</p>
</td>
<td valign="top" width="331">salt de pagină la imprimantă (Form Feed)</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">‘\a’</p>
</td>
<td valign="top" width="94">
<p align="center">7</p>
</td>
<td valign="top" width="85">
<p align="center">BEL</p>
</td>
<td valign="top" width="331">activare sunet</td>
</tr>
</tbody>
</table>
<p>O constantă caracter pentru o secvenţă escape poate apare însă, şi sub o formă în care se indică codul ASCII, în octal, al caracterului dorit:</p>
<p>’\ddd’                       unde d este o cifră octală.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>’\11’ (pentru ’\t’)</p>
<p>reprezintă constanta caracter backspace, cu codul 9 în baza 10, deci codul 11 în baza 8.</p>
<p>’\15’ (pentru ’\r’)</p>
<p>reprezintă constanta caracter CR, cu codul 13 în baza 10, deci codul 11 în baza 8.</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main(void)</p>
<p>{</p>
<p>cout&lt;&lt;&#8221;Un caracter este memorat pe &#8220;&lt;&lt;sizeof(char)&lt;&lt;&#8221; octet\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Caracterul escape \\n este memorat pe &#8220;;</p>
<p>cout&lt;&lt;sizeof(&#8216;\n&#8217;)&lt;&lt;&#8221; octet\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Caracterul escape &#8216;\\n\&#8217; este memorat pe &#8220;&lt;&lt;sizeof(&#8216;\n&#8217;);</p>
<p>cout&lt;&lt;&#8221; octet\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Caracterul &#8217;9&#8242; este memorat pe &#8220;&lt;&lt;sizeof(&#8217;9&#8242;)&lt;&lt;&#8221; octet\n&#8221;;</p>
<p>cout&lt;&lt;&#8217;B';cout&lt;&lt;&#8217; &#8216;;cout&lt;&lt;&#8217;c';cout&lt;&lt;&#8217;\t&#8217;;</p>
<p>cout&lt;&lt;&#8217;\t&#8217;;cout&lt;&lt;&#8217;9&#8242;;cout&lt;&lt;&#8217;\b&#8217;;cout&lt;&lt;&#8217;\a&#8217;;</p>
<p>cout&lt;&lt;&#8217;L';cout&lt;&lt;&#8217;\v&#8217;;cout&lt;&lt;&#8217;L';</p>
<p>cout&lt;&lt;&#8217;\&#8221;;cout&lt;&lt;&#8217;\t&#8217;;cout&lt;&lt;&#8217;\&#8221;&#8216;;cout&lt;&lt;&#8217;\\&#8217;;cout&lt;&lt;&#8217;\n&#8217;;</p>
<p>cout&lt;&lt;&#8217;\a&#8217;;cout&lt;&lt;&#8217;\7&#8242;;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>2.5.2.4.  Constante şir de caractere</h2>
<p>&nbsp;</p>
<p>Constanta şir este o succesiune de zero sau mai multe caractere, încadrate de ghilimele. În componenţa unui şir de caractere, poate intra orice caracter, deci şi caracterele escape. Lungimea unui şir este practic nelimitată. Dacă se doreşte continuarea unui şir pe rândul următor, se foloseşte caracterul backslash.</p>
<p>&nbsp;</p>
<p>Caracterele componente ale unui şir sunt memorate într-o zonă continuă de memorie (la adrese succesive). Pentru fiecare caracter se memorează codul ASCII al acestuia. După ultimul caracter al şirului, compilatorul plasează automat <em>caracterul NULL</em> (\0), caracter care reprezintă <em>marcatorul sfârşitului de şir</em>. Numărul de octeţi pe care este memorat un şir va fi, deci, mai mare cu 1 decât numărul de caractere din şir.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>”Acesta este un şir de caractere”     //constantă şir memorată pe 32 octeţi</p>
<h3>”Şir de caractere continuat\”</h3>
<p>pe rândul următor!”               //constantă şir memorată pe 45 octeţi</p>
<p>”Şir \t cu secvenţe escape\n”      //constantă şir memorată pe 26 octeţi</p>
<p>’\n’                            //constantă caracter memorată pe un octet</p>
<p>”\n”  //constanta şir memorată pe 2 octeţi (codul caracterului escape şi terminatorul de şir)</p>
<p>”a\a4”           /*Şir memorat pe 4 octeţi:</p>
<p>Pe  primul  octet: codul  ASCII al  caracterului a</p>
<p>Pe  al doilea  octet: codul  ASCII al  caracterului escape \a</p>
<p>Pe al treilea octet: codul ASCII al caracterului 4</p>
<p>Pe al  patrulea octet:  terminatorul de şir NULL, cod ASCII 0 */</p>
<p>”\\ASCII\\”      /*Şir memorat pe 8 octeţi:</p>
<p>Pe primul octet: codul  ASCII al  caracterului backslah</p>
<p>Pe  al doilea   octet:  codul   ASCII   al   caracterului A</p>
<p>Pe  al  treilea  octet:  codul  ASCII    al   caracterului S</p>
<p>Pe al   patrulea octet: codul ASCII al caracterului S</p>
<p>Pe al  6-lea  octet:  codul  ASCII  al  caracterului  I</p>
<p>Pe al  7-lea  octet:  codul  ASCII  al  caracterului  I</p>
<p>Pe  al  8-lea  octet:  codul   ASCII   al  caracterului backslah</p>
<p>Pe al 9-ea octet: terminatorul de şir NULL, de cod ASCII 0 */</p>
<p><strong>   </strong>”1\175a”         /*Şir memorat pe 4 octeţi:</p>
<p>Primul octet: Codul ASCII al caracterul 1</p>
<p>Al 2-lea  octet:  codul  ASCII 125 (175 in octal) al caracterului }</p>
<p>Al  3-lea  octet:  codul  ASCII  al caracterului a</p>
<p>Al 4-lea  octet: codul ASCII 0 pentru terminatorul şirului */</p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu:</span></em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{ cout&lt;&lt;&#8221;Şirul \&#8221;Ab9d\&#8221; este memorat pe:&#8221;&lt;&lt;sizeof(&#8220;Ab9d&#8221;)&lt;&lt;&#8221; octeţi\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Şirul \&#8221;Abcd\\t\&#8221; este memorat pe:&#8221;&lt;&lt;sizeof(&#8220;Abcd\t&#8221;)&lt;&lt;&#8221; octeţi\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Şirul \&#8221;\n\&#8221; este memorat pe &#8220;&lt;&lt;sizeof(&#8220;\n&#8221;)&lt;&lt;&#8221; octeţi\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Şirul \&#8221;\\n\&#8221; este memorat pe &#8220;&lt;&lt;sizeof(&#8220;\n&#8221;)&lt;&lt;&#8221; octeţi\n&#8221;;</p>
<p>cout&lt;&lt;&#8221;Şirul \&#8221;ABCDE\&#8221; se memorează pe &#8220;&lt;&lt;sizeof(&#8220;ABCDE&#8221;)&lt;&lt;&#8221; octeţi\n&#8221;;}</p>
<p>&nbsp;</p>
<p><strong> </strong></p>
<p><strong>2.5.3.  VARIABILE</strong></p>
<p>&nbsp;</p>
<p>Spre deosebire de constante, variabilele sunt date (obiecte informaţionale) ale căror valori se pot modifica în timpul execuţiei programului. Şi variabilele sunt caracterizate de atributele <em>nume</em>, <em>tip</em>, <em>valoare </em>şi <em>clasă de memorare</em>. Variabilele sunt <em>nume simbolice</em> utilizate pentru memorarea valorilor introduse pentru datele de intrare sau a rezultatelor. Dacă la o constantă ne puteam referi folosind caracterele componente, la o variabilă ne vom referi prin numele ei. Numele unei variabile ne permite accesul la valoarea ei, sau schimbarea valorii sale, dacă este necesar acest lucru. Numele unei variabile este un identificator ales de programator. Ca urmare, trebuie respectate regulile enumerate în secţiunea identificatori.</p>
<p>&nbsp;</p>
<p>Dacă o dată nu are legături cu alte date (de exemplu, relaţia de ordine), vom spune că este o dată <em>izolată</em>. O dată izolată este o <em>variabilă simplă</em>. Dacă datele se grupează într-un anumit mod (în  tablouri &#8211; vectori, matrici &#8211; sau structuri), variabilele sunt <em>compuse</em> (<em>structurate</em>).</p>
<p>&nbsp;</p>
<p>În cazul constantelor, în funcţie de componenţa literalului, compilatorul stabilea, automat, tipul constantei. În cazul variabilelor este necesară specificarea tipului fiecăreia, la declararea acesteia. Toate variabilele care vor fi folosite în program, trebuie declarate înainte de utilizare.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>2.5.3.1.  Declararea variabilelor</strong></p>
<p>&nbsp;</p>
<p>Modul general de declarare a variabilelor este:</p>
<p>tip_variabile   listă_nume_variabile;</p>
<p>Se specifică tipul variabilei(lor) şi o listă formată din unul sau mai mulţi identificatori ai variabilelor de tipul respectiv. Într-un program în limbajul <strong>C++</strong>, declaraţiile de variabile pot apare în orice loc în programul sursă. La declararea variabilelor, se rezervă în memorie un număr de octeţi corespunzător tipului variabilei, urmând ca ulterior, în acea zonă de memorie, să fie depusă (memorată, înregistrată) o anumită valoare.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>int i, j;/*declararea var. simple <em>i,</em>  <em>j</em>, de tip <em>int</em>. Se rezervă pentru i şi j câte 16 biţi (2octeţi)*/</p>
<p>char c;         /* declararea variabilei simple <em>c</em>, de tip <em>char</em>. Se rezervă un octet. */</p>
<p>float lungime;    /* declararea variabilei simple <em>lungime</em>; se rezervă 4 octeţi */</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>2.5.3.2.  Iniţializarea variabilelor în declaraţii</strong></p>
<p>&nbsp;</p>
<p>În momentul declarării unei variabile, acesteia i se poate da (asigna, atribui) o anumită valoare. În acest caz, în memorie se rezervă numărul de locaţii corespunzător tipului variabilei respective, iar valoarea va fi depusă (memorată) în acele locaţii.</p>
<p>Forma unei declaraţii de variabile cu atribuire este:</p>
<p>tip_variabilă  nume_variabilă=expresie;</p>
<p>Se evaluează expresia, iar rezultatul acesteia este asignat variabilei specificate.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>char backslash=’\\’;    //declararea şi iniţializarea variabilei simple backslash</p>
<p>int a=7*9+2;     /* declararea variabilei simple a, de tip int şi iniţializarea ei cu valoarea 65*/</p>
<p>float radiani, pi=3.14;/*declararea variabilei radiani;declararea şi iniţializarea var. pi*/</p>
<p>short int z=3;              //declararea şi iniţializarea variabilei simple z</p>
<p>char d=’\011’;</p>
<p>char LinieNoua=’\n’;</p>
<p>double x=9.8, y=0;</p>
<p>&nbsp;</p>
<p>Compilatorul C++ furnizează mecanisme care permit programatorului să influenţeze codul generat la compilare, prin aşa-numiţii <strong><em>calificatori</em></strong>.</p>
<p>Aceştia sunt:</p>
<p>q  const;</p>
<p>q  volatile.</p>
<p>&nbsp;</p>
<p>Calificatorul <strong>const</strong> asociat unei variabile, nu va permite modificarea ulterioară a valorii acesteia, prin program (printr-o atribuire). Calificatorul <strong>volatile</strong> (cel implicit) are efect invers calificatorului const. Dacă după calificator nu este specificat tipul datei, acesta este considerat tipul implicit, adică <strong>int</strong>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>const float b=8.8;</p>
<p>volatile char terminator;terminator=’@’;terminator=’*’;    //permis</p>
<p>b=4/5;                                                //nepermisa modificarea valorii variabilei b</p>
<p>const w;    volatile g;      //w, g de tip int, implicit</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>2.5.3.3.  </strong><strong>Opera</strong><strong>ţii de intrare/ieşire</strong></p>
<p>&nbsp;</p>
<p>Limbajele C/C++ nu posedă instrucţiuni de intrare/ieşire, deci de citire/scriere (ca limbajul PASCAL, de exemplu). În limbajul C aceste operaţii se realizează cu ajutorul unor funcţii (de exemplu, printf şi scanf), iar în limbajul C++ prin supraîncărcarea operatorilor (definirea unor noi proprietăţi ale unor operatori existenţi, fără ca proprietăţile anterioare să dispară), mai precis a operatorilor <strong>&gt;&gt;</strong> şi <strong>&lt;&lt;</strong> . Vom folosi în continuare abordarea limbajului C++, fiind, în momentul de faţă, mai simplă. În limbajul C++ sunt predefinite următoarele dispozitive logice de intrare/ieşire:</p>
<p><strong>cin</strong> &#8211; <strong>c</strong>onsole <strong>in</strong>put &#8211; dispozitivul de intrare (tastatura);</p>
<p><strong>cout</strong> &#8211; <strong>c</strong>onsole <strong>ou</strong>tput &#8211; dispozitivul de ieşire (monitorul).</p>
<p>Aşa cum se va vedea în capitolul 9, cin şi cout sunt, de fapt, obiecte (predefinite). Transferul informaţiei se realizează cu <strong>operatorul </strong><strong>&gt;&gt;</strong> pentru intrare şi <strong>operatorul </strong><strong>&lt;&lt;</strong> pentru ieşire. Utilizarea dispozitivelor de intrare/ieşire cu operatorii corespunzători determină deschiderea unui canal de comunicaţie a datelor către dispozitivul respectiv. După operator se specifică informaţiile care vor fi citite sau afişate.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p><strong>cout &lt;&lt; var;</strong>            /* afişează valoarea variabilei var pe monitor*/</p>
<p><strong>cin  &gt;&gt; var;</strong>            /* citeşte valoarea variabilei var de la tasatatură */</p>
<p>&nbsp;</p>
<p>Sunt posibile operarţii multiple, de tipul:</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>cout &lt;&lt; var1 &lt;&lt; var2 &lt;&lt; var3;</p>
<p>cin &gt;&gt; var1 &gt;&gt; var2 &gt;&gt; var3;</p>
<p>În acest caz, se efectuează succesiv, de la stânga la dreapta, scrierea, respectiv citirea valorilor variabilelor var1, var2 şi var3.</p>
<p>&nbsp;</p>
<p>Operatorul <strong>&gt;&gt;</strong> se numeşte <strong><em>operator extractor</em></strong> (extrage valori din fluxul datelor de intrare, conform tipului acestora), iar operatorul <strong>&lt;&lt; </strong>se numeşte <strong><em>operator insertor</em></strong> (inserează valori în fluxul datelor de ieşire, conform tipului acestora). Tipurile de date citite de la tastatură pot fi toate tipurile numerice, caracter sau şir de caractere. Tipurile de date transferate către ieşire pot fi: toate tipurile numerice, caracter sau şir de caractere. Operanzii operatorului extractor (<strong>&gt;&gt;</strong>) pot fi doar nume de variabile. Operanzii operatorului insertor (<strong>&lt;&lt;</strong>) pot fi nume de variabile (caz în care se afişează valoarea variabilei), constante sau expresii. Utilizarea dispozitivelor şi operatorilor de intrare/ieşire în C++ impune includerea fişierului  <strong>iostream.h</strong>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>char c;</p>
<p>cout&lt;&lt;&#8221;Astept un caracter:&#8221;;  //afişarea constantei şir de caractere, deci a mesajului</p>
<p>cin&gt;&gt;c;                       //citirea valorii variabilei c, de tip caracter</p>
<p>int a, b, e; double d;</p>
<p>cin&gt;&gt;a&gt;&gt;b&gt;&gt;e&gt;&gt;d;        //citirea valorilor variabilelor a, b, e, d de tip int, int, int, double</p>
<p>cout&lt;&lt;&#8221;a=&#8221;&lt;&lt;a&lt;&lt;&#8221;Valoarea expresiei a+b este:&#8221;&lt;&lt;a+b&lt;&lt;&#8217;\n&#8217;;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2 align="center">2.6.  OPERATORI ŞI EXPRESII</h2>
<p>&nbsp;</p>
<p>Datele (constante sau variabile) legate prin operatori, formează<strong> expresii </strong>(figura 2.4). Operatorii care pot fi aplicaţi datelor (operanzilor) depind de tipul operanzilor, datorită faptului că tipul unei date constă într-o mulţime de valori pentru care s-a adoptat un anumit mod de reprezentare în memoria calculatorului şi <em>o mulţime de operatori</em> care pot fi aplicaţi acestor valori.</p>
<p>&nbsp;</p>
<p>Operatorii pot fi:</p>
<p>q  unari (necesită un singur operand);</p>
<p>q  binari (necesită doi operanzi);</p>
<p>q  ternari (trei operanzi).</p>
<p>O <strong>expresie </strong>este o combinaţie corectă din punct de vedere sintactic, formată din operanzi şi operatori. Expresiile, ca şi operanzii, au <strong><em>tip</em></strong> şi <strong><em>valoare</em></strong>.</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>2.6.1.  OPERATORI </strong></p>
<p>&nbsp;</p>
<p>q  Operatorul unar <strong><em>adresă</em></strong> <strong>&amp;</strong>, aplicat identificatorului unei variabile, furnizează adresa la care este memorată aceasta. Poate fi aplicat <em>oricărui tip de date</em> şi se mai numeşte <em>operator de referenţiere.</em></p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>int a;</p>
<p>cout&lt;&lt;&#8221;Adresa la care este memorata variabila a este:&#8221;&lt;&lt;<strong><em>&amp;</em></strong>a;</p>
<p>q  Operatorul <strong><em>de atribuire</em></strong><em> (de asignare) </em>este un operator <em>binar</em> care se aplică tuturor tipurilor de variabile. Este folosit sub formele următoare:</p>
<p>nume_variabilă<strong>=</strong>expresie;</p>
<p><em>sau:</em><em>        </em>expresie1<strong>=</strong>expresie2;</p>
<p>Se evaluează expresia din membrul drept, iar valoarea acesteia este atribuită variabilei din membrul stâng. Dacă tipurile membrilor stâng şi drept diferă, se pot realiza anumite conversii, prezentate în paragraful 2.7.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>float x; int a,b; x=9.18;</p>
<p>a=b=10;</p>
<p>int s; s=a+20*5;             //rezultat: s=110</p>
<p>s=x+2;                     //rezultat s=11, deoarece s este int.</p>
<p>&nbsp;</p>
<p>Aşa cum se observă în linia a 2-a din exemplul precedent, operatorul de atribuire poate fi utilizat de mai multe ori în aceeaşi expresie. Asociativitatea operatorului are loc de la dreapta la stânga. Astfel, mai întâi b=10, apoi a=b.</p>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>float x,y=4.25;   char car=’A’; int a,b,c;</p>
<p>cout&lt;&lt;”Val. lui y este:”&lt;&lt;y&lt;&lt;’\n’;             //Afişare: Val. lui y este:4.25</p>
<p>x=y; cout&lt;&lt;”Val. lui x este:”&lt;&lt;x&lt;&lt;’\n’;    //Afişare: Val. lui x este:4.25</p>
<p>a=x;cout&lt;&lt;”Val.lui a este:”&lt;&lt;a&lt;&lt;’\n’; //Afişare:Val. lui a este:4, deoarece a de tip int!!!</p>
<p>c=b=a; cout&lt;&lt;”b=”&lt;&lt;b&lt;&lt;”\tc=”&lt;&lt;c&lt;&lt;’\n’;         //Afişare: b=4      c=4</p>
<p>cout&lt;&lt;”Introduceţi val. lui c:”; cin&gt;&gt;c;       // citire val. pentru c</p>
<p>cout&lt;&lt;”Val. lui c este:”&lt;&lt;c&lt;&lt;’\n’;            //Afişare: Val. lui c este:4</p>
<p>}</p>
<p>&nbsp;</p>
<p>Operatorul poate fi aplicat tipurilor de date întregi, reale, caracter, şi chiar şiruri de caractere, aşa cum vom vedea în capitolele următoare (exemplu: char şir [10]=”a5dfgthklj”).</p>
<p>&nbsp;</p>
<p>q  Operatori <strong><em>aritmetici unari</em></strong>:</p>
<p><strong>Operator         Semnificaţie                                        Exemple</strong></p>
<p><strong>-</strong><strong>                      </strong>Minus unar                                          -a</p>
<p><strong>++</strong><strong>                    </strong>Operator de incrementare                    a++      sau</p>
<p>(adună 1 la valoarea operandului)       ++a</p>
<p><strong>&#8211;</strong><strong>                    </strong>Operator de decrementare                    a&#8211;        sau</p>
<p>(scade 1 din valoarea operandului)      &#8211;a</p>
<p>&nbsp;</p>
<p>q  Operatorul <strong>-</strong><strong> </strong>unar schimbă semnul operandului.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>int a,b;    cout&lt;&lt;”a=”&lt;&lt;-a&lt;&lt;’\n’;   b=-a;</p>
<p>cout&lt;&lt;”b=”&lt;&lt;b&lt;&lt;’\n’;</p>
<p>Operatorul &#8211; unar poate fi aplicat datelor întregi, reale, caracter.</p>
<p>&nbsp;</p>
<p>q  Operatorii de incrementare şi decrementare pot fi aplicaţi<em>  datelor numerice sau caracter</em>.</p>
<p>Ambii operatori pot fi folosiţi în formă <em>prefixată</em>, înaintea operandului, (++a, respectiv &#8211;a) sau <em>postfixată</em>, după operand<em> </em>(a++, respectiv a&#8211;).</p>
<p>Operatorul de decrementare &#8212; care poate fi folosit în formă <em>prefixată</em> (&#8211;a) sau <em>postfixată</em> (a&#8211;).</p>
<p>&nbsp;</p>
<p>Utilizarea acestor operatori în expresii, în formă prefixată sau postfixată, determină evaluarea acestora în moduri diferite, astfel:</p>
<p>&nbsp;</p>
<p>y=++x              este echivalent cu:       x=x+1;</p>
<p>y=x;</p>
<p>y=x++              este echivalent cu:       y=x;</p>
<p>x=x+1;</p>
<p>y=&#8211;x                este echivalent cu:       x=x-1;</p>
<p>y=x;</p>
<p>y=x&#8211;                este echivalent cu:       y=x;</p>
<p>x=x-1;</p>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong>:  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{ int a=9; cout&lt;&lt;”a++=”&lt;&lt;a++&lt;&lt;’\n’; //Afişare: a++=9</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;               //Afişare: a=10</p>
<p>a=9;                             //Revenire in situatia anterioara</p>
<p>cout&lt;&lt;”++a=”&lt;&lt;++a&lt;&lt;’\n’;           //Afişare: ++a=10</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;              //Afişare: a=10</p>
<p>a=9; cout&lt;&lt;”a&#8211;=”&lt;&lt;a&#8211;&lt;&lt;’\n’;      //Afişare: a&#8211;=9</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;              //Afişare: a=8</p>
<p>a=9;                            //Revenire in situaţia anterioara</p>
<p>cout&lt;&lt;”&#8211;a=”&lt;&lt;&#8211;a&lt;&lt;’\n’;           //Afişare: &#8211;a=8</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;              //Afişare: a=8</p>
<p>int z,x=3; z=x++-2;</p>
<p>cout&lt;&lt;”z=”&lt;&lt;z&lt;&lt;’\n’;              //Afişare: z=1</p>
<p>cout&lt;&lt;&#8221;x=”&lt;&lt;x&lt;&lt;’\n’;              //Afişare: x=4</p>
<p>x=3; z=++x-2; cout&lt;&lt;”z=”&lt;&lt;z&lt;&lt;’\n’;  //Afişare: z=2</p>
<p>cout&lt;&lt;&#8221;x=”&lt;&lt;x&lt;&lt;’\n’;              //Afişare: x=4</p>
<p>}</p>
<p>q  Operatori <strong><em>aritmetici binari:</em></strong></p>
<p><strong>Operator                     Semnificaţie                                                    Exemple</strong></p>
<p><strong>+</strong><strong>                      </strong>Adunarea celor doi operanzi<strong>                                        </strong>a+b</p>
<p><strong>-</strong><strong>                      </strong>Scăderea celor doi operanzi                                         a-b</p>
<p><strong>*</strong><strong>                      </strong>Înmulţirea<strong> </strong>celor doi operanzi                                       a*b</p>
<p><strong>/</strong><strong>                      </strong>Împărţirea<strong> </strong>celor doi operanzi                                       a/b</p>
<p><strong>%                    </strong>Operatorul modulo (operatorul rest)                            a%b</p>
<p>(furnizează restul împărţirii operatorului stâng la operatorul drept).</p>
<p>&nbsp;</p>
<p>Operatorul modulo se aplică numai operanzilor întregi (de tip int sau char). Ceilalţi operatori aritmetici binari pot fi aplicaţi datelor întregi sau reale.</p>
<p>Dacă într-o expresie cu 2 operanzi şi un operator binar aritmetic, ambii operanzi sunt întregi, rezultatul expresiei va fi tot un număr întreg. De exemplu, la evaluarea expresiei 9/2, ambii operanzi fiind întregi, rezultatul furnizat este numărul întreg 4.</p>
<p>Operatorii prezentaţi respectă o serie de reguli de precedenţă (prioritate) şi asociativitate, care determină precis modul în care va fi evaluată expresia în care aceştia apar. În tabelul 2.3 sunt prezentaţi operatorii anteriori, în ordinea descrescătoare a priorităţii. Precedenţa operatorilor poate fi schimbată cu ajutorul parantezelor.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="219">Tabelul 2.3.</td>
<td valign="top" width="226"></td>
<td valign="top" width="197"></td>
</tr>
<tr>
<td valign="top" width="219">
<p align="center"><strong>Clasă de operatori</strong></p>
</td>
<td valign="top" width="226">
<p align="center"><strong>Operatori</strong></p>
</td>
<td valign="top" width="197">
<p align="center"><strong>Asociativitate</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="219">Unari</td>
<td valign="top" width="226">
<p align="center">-  (unar)      ++       &#8211;</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="219">Multiplicativi</td>
<td valign="top" width="226">
<p align="center">*     /    %</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Aditivi</td>
<td valign="top" width="226">
<p align="center">+      -</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Atribuire</td>
<td valign="top" width="226">
<p align="center">=</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>int rezult, a=20,b=2,c=25,d=4; rezult=a-b;</p>
<p>cout&lt;&lt;”a-b=”&lt;&lt;rezult&lt;&lt;’\n’;                   // Afişare: a-b=18</p>
<p>rezult=a+b; cout&lt;&lt;”a+b=”&lt;&lt;rezult&lt;&lt;’\n’;        // Afişare: a+b=22</p>
<p>rezult=a*b;cout&lt;&lt;”c*b=”&lt;&lt;rezult&lt;&lt;’\n’;         // Afişare: c*b=50</p>
<p>rezult=a/d; cout&lt;&lt;”a/d=”&lt;&lt;rezult&lt;&lt;’\n’;        // Afişare: a/d=5</p>
<p>rezult=c%b; cout&lt;&lt;”c%b=”&lt;&lt;rezult&lt;&lt;’\n’;               // Afişare: c%b=1</p>
<p>rezult=c/b*d; cout&lt;&lt;”c/b*d=”&lt;&lt;rezult&lt;&lt;’\n’;    // Afişare: c/b*d=48</p>
<p>rezult= -b+a; cout&lt;&lt;”-b+a=”&lt;&lt;rezult&lt;&lt;’\n’;      // Afişare: -b+a=18</p>
<p>rezult= -(b+a); cout&lt;&lt;”-(b+a)=”&lt;&lt;rezult&lt;&lt;’\n’;  // Afişare: -(b+a)=-22</p>
<p>rezult=b+c*d;cout&lt;&lt;”b+c*d=”&lt;&lt;rezult&lt;&lt;’\n’;      // Afişare: b+c*d=102</p>
<p>rezult=(b+c)*d;cout&lt;&lt;”(b+c)*d=”&lt;&lt;rezult&lt;&lt;’\n’;  // Afişare: (b+c)*d=108</p>
<p>}</p>
<p>&nbsp;</p>
<p>q  Operatori <strong><em>aritmetici binari compuşi</em></strong></p>
<p><strong>Operator                     Semnificaţie                Exemple</strong></p>
<p><strong>+=</strong><strong>                                </strong>a=a+b<strong>                           </strong>a+=b</p>
<p><strong>-=</strong><strong>                                </strong>a=a+b                           a-=b</p>
<p><strong>*=</strong><strong>                                </strong>a=a*b                           a*=b</p>
<p><strong>/=</strong><strong>                                </strong>a=a/b                            a/=b</p>
<p><strong>%=                              </strong>a=a%b                         a%=b</p>
<p>Aceşti operatori se obţin prin combinarea operatorilor aritmetici binari cu operatorul de atribuire şi sunt folosiţi sub forma următoare:</p>
<p><em> </em>expresie1  operator= expresie2;</p>
<p>Rezultatul obţinut este acelaşi cu rezultatul obţinut prin:</p>
<p><em>     </em>expresie1 = expresie1  operator  expresie2;</p>
<p>Toţi aceşti operatorii modifică valoarea operandului stâng prin adunarea, scăderea, înmulţirea sau împărţirea  acestuia prin valoarea operandului drept.</p>
<p>Construcţia x+=1 generează acelaşi rezultat ca expresia x=x+1.</p>
<p>Observaţiile referitoare la operatorii aritmetici binari sunt valabile şi pentru operatorii aritmetici binari compuşi. Operatorii aritmetici binari compuşi au aceeaşi prioritate şi asociativitate ca şi operatorul de atribuire.</p>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu:</span></em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>int a,b; float c=9.3; a=3; b=8;</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;              //Afişare  a=3</p>
<p>a+=b; cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;         //Afişare  a=11</p>
<p>a-=b; cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;         //Afişare  a=-5</p>
<p>a*=b; cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;         //Afişare  a=24</p>
<p>a/=b; cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;         //Afişare  a=0</p>
<p>a%=b; cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;         //Afisare  a=3</p>
<p>}</p>
<p>q  Operatori <strong><em>relaţionali binari</em></strong></p>
<p><strong>Operator                     Semnificaţie                            Exemple</strong></p>
<p><strong>==</strong><strong>                                </strong>Egal cu<strong>                                     </strong>a==b</p>
<p><strong>!=</strong><strong>                                </strong>Diferit de                                 a!=b</p>
<p><strong>&lt;</strong><strong>                                  </strong>Mai mic decât                          a&lt;b</p>
<p><strong>&lt;=</strong><strong>                                </strong>Mai mic sau egal                      a&lt;=b</p>
<p><strong>&gt;</strong><strong>                                  </strong>Mai mare decât                                    a&gt;b</p>
<p><strong>&gt;=</strong><strong>                                </strong>Mai mare sau egal                    a&gt;=b</p>
<p>Primii doi operatori mai sunt numiţi <em>operatori de egalitate</em>. Operatorii relaţionali servesc la compararea valorilor celor doi operanzi şi nu modifică valorile operanzilor. Rezultatul unei expresii în care apare unul din operatorii relaţionali binari este întreg şi are valoarea zero (0) dacă relaţia este falsă, sau valoarea unu (1) (sau diferită de 0 în cazul compilatoarelor sub UNIX), dacă relaţia este adevărată. Aceşti operatorii pot fi aplicaţi datelor de tip întreg, real sau char.</p>
<p>Regulile de precedenţă şi asociativitate ale acestor operatori sunt prezentate în tabelul 2.4.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="219">Tabelul 2.4.</td>
<td valign="top" width="226"></td>
<td valign="top" width="197"></td>
</tr>
<tr>
<td valign="top" width="219">
<p align="center"><strong>Clasă de operatori</strong></p>
</td>
<td valign="top" width="226">
<p align="center"><strong>Operatori</strong></p>
</td>
<td valign="top" width="197">
<p align="center"><strong>Asociativitate</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="219">Unari</td>
<td valign="top" width="226">
<p align="center">-  (unar)      ++       &#8211;</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="219">Multiplicativi</td>
<td valign="top" width="226">
<p align="center">*     /    %</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Aditivi</td>
<td valign="top" width="226">
<p align="center">+      -</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Atribuire</td>
<td valign="top" width="226">
<p align="center">=</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="219">Relaţionali</td>
<td valign="top" width="226">
<p align="center">&lt;   &lt;=   &gt;   &gt;=</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">De egalitate</td>
<td valign="top" width="226">
<p align="center">==   !=</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Atribuire şi aritmetici binari</td>
<td valign="top" width="226">
<p align="center">=    *=    /=    %=    +=    -=</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Observaţie: </span></em></strong>Deosebirea dintre operatorii <strong>==</strong> (relaţional, de egalitate) şi <strong>=</strong> (de atribuire) constă în faptul că primul nu modifică valoarea nici unuia dintre operanzii săi, pe când cel de-al doilea modifică valoarea operandului stâng (vezi exemplul următor)</p>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>int a=1, b=20, lim=100; int rezult; rezult=a&lt;b;</p>
<p>cout&lt;&lt;”a&lt;b=”&lt;&lt;rezult&lt;&lt;’\n’;</p>
<p>// Afişare:  a&lt;b=1 (sau o altă valoare diferită de zero pentru alte compilatoare)</p>
<p>rezult=a&lt;=b;</p>
<p>//operatorul realţional &lt;= are prioritate mai mare decât cel de atribuire</p>
<p>cout&lt;&lt;”a&lt;=b=”&lt;&lt;rezult&lt;&lt;’\n’;</p>
<p>// Afisare:  a&lt;b=1 (sau o alta valoare diferită de zero pentru alte compilatoare)</p>
<p>rezult=a&gt;b; cout&lt;&lt;”a&gt;b=”&lt;&lt;rezult&lt;&lt;’\n’;        // Afişare:  a&lt;b=0</p>
<p>rezult=a+10&gt;=lim; cout&lt;&lt;”a+10&gt;=lim=”&lt;&lt;rezult&lt;&lt;’\n’;</p>
<p>/* Operatorul + are prioritate mai mare decât operatorul &gt;= .   Afişare:  a+10&gt;=lim=0 */</p>
<p>rezult=a+(10&gt;=lim);     cout&lt;&lt;”a+(10&gt;=lim)=”&lt;&lt;rezult&lt;&lt;’\n’;</p>
<p>/* Schimbarea prioritatii operatorilor prin folosirea parantezelor;  Afişare:  a+(10&gt;=lim)=1  */</p>
<p>rezult=a==b;</p>
<p>cout&lt;&lt;”a==b=”&lt;&lt;rezult&lt;&lt;’\n’;       // Afişare:  a==b=0</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;              // Afişare:  a=1</p>
<p>cout&lt;&lt;”b=”&lt;&lt;b&lt;&lt;’\n’;              // Afişare:  b=20</p>
<p>rezult=a=b; cout&lt;&lt;”a=b=”&lt;&lt;rezult&lt;&lt;’\n’;   // Afişare:  a=b=20</p>
<p>cout&lt;&lt;”a=”&lt;&lt;a&lt;&lt;’\n’;              // Afişare:  a=20</p>
<p>cout&lt;&lt;”b=”&lt;&lt;b&lt;&lt;’\n’;              // Afişare:  b=20</p>
<p>rezult=5&gt;b&gt;10;cout&lt;&lt;”b=”&lt;&lt;b&lt;&lt;’\n’;  // Afişare:  b=20</p>
<p>cout&lt;&lt;”5&gt;b&gt;10=”&lt;&lt;rezult&lt;&lt;’\n’;     //Echivalent cu (5&gt;b)&gt;10 Afişare:  5&gt;b&gt;10=0</p>
<p>}</p>
<p><strong><em> </em></strong></p>
<p>q  Operatori <strong><em>logici pe cuvânt</em></strong></p>
<p><strong>Operator                     Semnificaţie                                                    Exemple</strong></p>
<p><strong>!</strong><strong>                                  </strong>Not (<strong>negaţie</strong> logică)                                         !(a==b)</p>
<p><strong>&amp;&amp;</strong><strong>                                </strong>And (conjuncţie, <strong>şi</strong> logic)                                 <strong>(</strong>a&gt;b) &amp;&amp; (b&gt;c)</p>
<p><strong>||</strong><strong>                                </strong>Or<strong> (</strong>disjuncţie, <strong>sau</strong> logic)<strong>                                  (</strong>a&gt;b) || (b&gt;c)</p>
<p>Aceşti operatori pot fi aplicaţi datelor de tip întreg, real sau caracter. Evaluarea unei expresii în care intervin operatorii logici se face conform tabelului 2.5.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="142">Tabelul 2.5.</td>
<td valign="top" width="123"></td>
<td valign="top" width="133"></td>
<td valign="top" width="123"></td>
<td valign="top" width="123"></td>
</tr>
<tr>
<td valign="top" width="142">
<p align="center"><strong>x</strong></p>
</td>
<td valign="top" width="123">
<p align="center"><strong>y</strong></p>
</td>
<td valign="top" width="133">
<p align="center"><strong>!x</strong></p>
</td>
<td valign="top" width="123">
<p align="center"><strong>x&amp;&amp;y</strong></p>
</td>
<td valign="top" width="123">
<p align="center"><strong>x||y</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="142">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="123">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="133">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="123">
<p align="center">adevărat (1)</p>
</td>
</tr>
<tr>
<td valign="top" width="142">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="123">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="133">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">adevărat (1)</p>
</td>
</tr>
<tr>
<td valign="top" width="142">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="133">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="123">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">adevărat (1)</p>
</td>
</tr>
<tr>
<td valign="top" width="142">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="133">
<p align="center">adevărat (1)</p>
</td>
<td valign="top" width="123">
<p align="center">fals (0)</p>
</td>
<td valign="top" width="123">
<p align="center">fals (0)</p>
</td>
</tr>
</tbody>
</table>
<p>Expresia   !expresie are valoarea 0 (fals) dacă expresia-operand are o valoare diferită de zero şi valoarea unu (adevărat) dacă expresia-operand are valoarea zero.</p>
<p>Expresia   expresie1||expresie2 are valoarea diferită de 0 (true) dacă FIE expresie1, FIE expresie2 au valori diferite de zero.</p>
<p>Expresia   expresie1 &amp;&amp; expresie2 are valoarea diferită de 0 (true) dacă AMBELE expresii-operand ( expresie1 şi expresie2) au valori diferite de zero.</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong>  </strong>Să se scrie următorul program şi să se urmărească rezultatele execuţiei acestuia.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{ int a=0, b=10, c=100, d=200; int rezult; rezult=a&amp;&amp;b;</p>
<p>cout&lt;&lt;”a&amp;&amp;b=”&lt;&lt;rezult&lt;&lt;’\n’;            //Afişare  a&amp;&amp;b=0</p>
<p>rezult=a||b; cout&lt;&lt;”a||b=”&lt;&lt;rezult&lt;&lt;’\n’;//Afişare  a||b=1 (sau valoare nenula)</p>
<p>rezult=!a;cout&lt;&lt;”!a=”&lt;&lt;rezult&lt;&lt;’\n’;     //Afişare  !a=1 (sau valoare nenula)</p>
<p>rezult=!b; cout&lt;&lt;”!b=”&lt;&lt;rezult&lt;&lt;’\n’;     //Afişare  !b=0</p>
<p>rezult=(a&gt;b) || (b&gt;c);cout&lt;&lt;”(a&gt;b) || (b&gt;c)=”&lt;&lt;rezult&lt;&lt;’\n’;</p>
<p>//Afişare (a&gt;b) || (b&gt;c) =1(sau valoare nenula)</p>
<p>rezult=!(c&lt;d);cout&lt;&lt;”!(c&lt;d)=”&lt;&lt;rezult&lt;&lt;’\n’;//Afişare  !(c&gt;d)=0</p>
<p>rezult=(a-b)&amp;&amp;1;cout&lt;&lt;”(a-b)&amp;&amp;1=”&lt;&lt;rezult&lt;&lt;’\n’;</p>
<p>//Afişare (a-b)&amp;&amp;1 =1(sau valoare nenula)</p>
<p>rezult=d||b&amp;&amp;a;cout&lt;&lt;”d||b&amp;&amp;a=”&lt;&lt;rezult&lt;&lt;’\n’;//Afişare d||b&amp;&amp;a =1</p>
<p>}// În evaluarea expresiilor din exemplu, s-au aplicat priorităţile operatorilor, indicate în tabelul. 2.6.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="219">Tabelul 2.6.</td>
<td valign="top" width="226"></td>
<td valign="top" width="197"></td>
</tr>
<tr>
<td valign="top" width="219">
<p align="center"><strong>Clasă de operatori</strong></p>
</td>
<td valign="top" width="226">
<p align="center"><strong>Operatori</strong></p>
</td>
<td valign="top" width="197">
<p align="center"><strong>Asociativitate</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="219">Unari</td>
<td valign="top" width="226">
<p align="center">!   &#8211; (unar)      ++       &#8211;</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="219">Multiplicativi</td>
<td valign="top" width="226">
<p align="center">*     /    %</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Aditivi</td>
<td valign="top" width="226">
<p align="center">+      -</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">Atribuire</td>
<td valign="top" width="226">
<p align="center">=</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="219">relaţionali</td>
<td valign="top" width="226">
<p align="center">&lt;   &lt;=   &gt;   &gt;=</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">de egalitate</td>
<td valign="top" width="226">
<p align="center">==   !=</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">logici</td>
<td valign="top" width="226">
<p align="center">&amp;&amp;</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">logici</td>
<td valign="top" width="226">
<p align="center">||</p>
</td>
<td valign="top" width="197">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="219">atribuire şi aritmetici binari</td>
<td valign="top" width="226">
<p align="center">=    *=    /=    %=    +=    -=</p>
</td>
<td valign="top" width="197">de la dreapta la stânga</td>
</tr>
</tbody>
</table>
<p><strong><em><span style="text-decoration: underline;"> </span></em></strong></p>
<p><strong><em><span style="text-decoration: underline;">Exerciţiu</span></em></strong><strong><em>:</em></strong><strong> </strong>Să se scrie un program care citeşte un număr real şi afişează 1 dacă numărul citit aparţine unui interval ale cărui limite sunt introduse tot de la tastatură, sau 0 în caz contrar.</p>
<p>#include &lt;iostream.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>double lmin, lmax, nr;cout&lt;&lt;&#8221;Numar=&#8221;;cin&gt;&gt;nr;</p>
<p>cout&lt;&lt;”Limita inferioară a intervalului:”; cin&gt;&gt;lmin;</p>
<p>cout&lt;&lt;”Limita superioară a intervalului:”; cin&gt;&gt;lmax;</p>
<p>cout&lt;&lt;(nr&gt;=lmin &amp;&amp; nr&lt;=lmax); }</p>
<p>&nbsp;</p>
<p>q  Operatori <strong><em>logici pe bit</em></strong></p>
<p><strong>Operator         Semnificaţie                                                    Exemple</strong></p>
<p><strong>~</strong><strong>                      </strong>Negaţie (cod complementar faţă de unu)                     ~a</p>
<p><strong>&amp;</strong><strong>                      </strong>AND (Conjuncţie, şi logic pe bit                                  a &amp; 0377</p>
<p><strong>|</strong><strong>                      </strong>OR<strong> (</strong>Disjuncţie, sau logic pe bit)<strong>                                  </strong>a <strong>| </strong>0377</p>
<p><strong>^</strong>                      XOR (Sau exclusiv logic pe bit)                                   a^b</p>
<p><strong>&lt;&lt;</strong><strong>                    </strong>Deplasare stânga                                              0377 &lt;&lt; 2</p>
<p><strong>&gt;&gt;</strong><strong>                    </strong>Deplasare dreapta                                            0377 &gt;&gt; 2</p>
<p>&nbsp;</p>
<p>Aceşti operatori nu se aplică numerelor reale, ci numai datelor de tip întreg sau caracter. Primul operator este unar, ceilalţi binari. Operatorii acţionează la nivel de bit, la nivelul reprezentării interne (în binar), conform tabelelului 2.7.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="104">Tabelul 2.7.</td>
<td valign="top" width="104"></td>
<td valign="top" width="104"></td>
<td valign="top" width="113"></td>
<td valign="top" width="104"></td>
<td valign="top" width="113"></td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center"><strong>x</strong></p>
</td>
<td valign="top" width="104">
<p align="center"><strong>y</strong></p>
</td>
<td valign="top" width="104">
<p align="center"><strong>x&amp;y</strong></p>
</td>
<td valign="top" width="113">
<p align="center"><strong>x | y</strong></p>
</td>
<td valign="top" width="104">
<p align="center"><strong>x^y</strong></p>
</td>
<td valign="top" width="113">
<p align="center"><strong>~x</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="113">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="113">
<p align="center">0</p>
</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="113">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="113">
<p align="center">0</p>
</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="113">
<p align="center">1</p>
</td>
<td valign="top" width="104">
<p align="center">1</p>
</td>
<td valign="top" width="113">
<p align="center">1</p>
</td>
</tr>
<tr>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="113">
<p align="center">0</p>
</td>
<td valign="top" width="104">
<p align="center">0</p>
</td>
<td valign="top" width="113">
<p align="center">1</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Operatorul <strong>~</strong> are aceeaşi prioritate ca şi ceilalţi operatori unari. El furnizează complementul faţă de unu al unui întreg, adică va schimba fiecare bit de pe 1 în zero şi invers. Operatorii de deplasare pe bit (<strong>&lt;&lt;</strong> şi <strong>&gt;&gt;</strong>) efectuează deplasarea la stânga sau la dreapta a operandului stâng, cu numărul de biţi indicaţi de operandul drept. Astfel, x&lt;&lt;2 deplasează biţii din x la stânga, cu două poziţii, introducând zero pe poziţiile rămase vacante.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>int a=3;    //Reprezentare internă a lui a (pe 2 octeţi):       0000000000000<strong>011</strong></p>
<p>int b=5;        //Reprezentare internă a lui b (pe 2 octeţi):      0000000000000<strong>101</strong></p>
<p>int rez=~a;</p>
<p>cout&lt;&lt;&#8221;~&#8221;&lt;&lt;a&lt;&lt;&#8217;='&lt;&lt;rez&lt;&lt;&#8217;\n&#8217;; //~3= -4</p>
<p>//Complementul faţă de unu este: 1111111111111<strong>100</strong>  (în octal: 0177777774  (!a= &#8211; 4)</p>
<p>rez=a &amp; b; cout&lt;&lt;a&lt;&lt;&#8217;&amp;&#8217;&lt;&lt;b&lt;&lt;&#8217;='&lt;&lt;rez&lt;&lt;&#8217;\n&#8217;; //3&amp;5=1</p>
<p>//a&amp;b=0000000000000<strong>001</strong> =1</p>
<p>rez=a^b; cout&lt;&lt;a&lt;&lt;&#8217;^'&lt;&lt;b&lt;&lt;&#8217;='&lt;&lt;rez; // 3^5= 6</p>
<p>//a ^b = 0000000000000<strong>110</strong></p>
<p>rez=a|b; cout&lt;&lt;a&lt;&lt;&#8217;|'&lt;&lt;b&lt;&lt;&#8217;='&lt;&lt;rez; //3|5= 7</p>
<p>//a | b = 0000000000000<strong>111</strong></p>
<p>rez=a&lt;&lt;2; cout&lt;&lt;a&lt;&lt;&#8221;&lt;&lt;&#8221;&lt;&lt;3&lt;&lt;&#8217;='&lt;&lt;rez;    //3&lt;&lt;2=16=2*2</p>
<p>//a&lt;&lt;2= 000000000<strong>1100000</strong></p>
<p>rez=5&gt;&gt;2; cout&lt;&lt;b&lt;&lt;&#8221;&gt;&gt;&#8221;&lt;&lt;2&lt;&lt;&#8217;='&lt;&lt;rez;    //5&gt;&gt;2=1=5/2</p>
<p>//b&gt;&gt;2= 0000000000000<strong>001</strong></p>
<p>&nbsp;</p>
<p>Operatorul binar ^  îşi găseşte o utilizare tipică în expresii ca: x&amp;^077, care maschează ultimii 6 biţi ai lui x pe zero.</p>
<p>Operatorul &amp; este adesea utilizat în expresii ca x&amp;0177, unde setează toţi biţii pe zero, cu excepţia celor de ordin inferior din x.</p>
<p>Operatorul | este utilizat în expresii ca: x&amp;MASK , unde setează pe unu biţii care în x şi masca MASK sunt setaţi pe unu.</p>
<p>Operatorii logici pe bit &amp; şi | sunt diferiţi de operatorii logici &amp;&amp; şi || (pe cuvânt).</p>
<p>Deplasarea la stânga a unei date cu n poziţii este echivalentă cu înmulţirea valorii acesteia cu 2. Deplasarea la dreapta a unei date fără semn cu n poziţii este echivalentă cu împărţirea valorii acesteia cu 2.</p>
<p>Combinând operatorii logici pe bit cu operatorul de atribuire, se obţin operatorii:</p>
<p><strong>&amp;=</strong>, <strong>^=</strong>, <strong>|=</strong>, <strong>&lt;&lt;=</strong>, <strong>&gt;&gt;=</strong>.</p>
<p><em> </em></p>
<p>q  Operatorul <strong><em>condiţional</em></strong></p>
<p>Este un operator ternar (necesită 3 operanzi), utilizat în construcţii de forma:</p>
<p align="center">expresie1<strong>?</strong>expresie2<strong>:</strong>expresie3</p>
<p>&nbsp;</p>
<p>Se evaluează <em>expresia1</em>. Dacă aceasta are o valoare diferită de zero, atunci tipul şi valoarea întregii expresii vor fi aceleaşi cu tipul şi valoarea <em>expresiei2</em>. Altfel (dacă expresie1 are valoarea zero), tipul şi valoarea întregii expresii vor fi aceleaşi cu tipul şi valoarea <em>expresiei3</em>. Deci operatorul condiţional este folosit pentru a atribui întregii expresii tipul şi valoarea expresiei2 sau a expresiei3, în funcţie de o anumită condiţie. Acest lucru este echivalent cu:</p>
<p><span style="text-decoration: underline;">Dacă</span> <em>expresie1</em> diferită de zero</p>
<p><span style="text-decoration: underline;">Atunci</span> evaluează <em>expresie2</em></p>
<p><span style="text-decoration: underline;">Altfel</span> evaluează <em>expresie3</em></p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>int semn=(x&lt;0)?-1:1</p>
<p>Dacă x&lt;0, atunci semn=-1, altfel semn=1.</p>
<p><strong><em> </em></strong></p>
<p>q  Operatorul <strong><em>virgulă</em></strong></p>
<p>Este utilizat în construcţii de forma:</p>
<p>expresie1 , expresie2</p>
<p>Operatorul virgulă forţează evaluarea unei expresii de la stânga la dreapta. Tipul şi valoarea întregii expresii este dată de tipul şi valoarea expresiei2. Operatorul virgulă este folosit în instrucţiunea <strong><em>for</em></strong>. Operatorul virgulă are cea mai mică prioritate.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>int x, c, y;</p>
<p>cout&lt;&lt;”Astept val. ptr. y:”; cin&gt;&gt;y;</p>
<p>x=(c=y, c&lt;=5);    /* c va primi valoarea lui y (citită); se verifică dacă c este mai mic sau</p>
<p align="right">egal cu 5. Daca nu, x=0; daca da, x=1 sau x=valoare diferită de zero)*/</p>
<p>x++, y&#8211;;                  //întâi este incrementat x, apoi este decrementat y</p>
<p>q  Operatorul <strong><em>sizeof()</em></strong></p>
<p>Este un operator unar, care are ca rezultat numărul de octeţi pe care este memorată o dată de un anumit tip. Operandul este <em>un tip</em> sau <em>o dată (constantă sau variabilă) de un anumit tip</em>.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong><strong><em></em></strong></p>
<p>cout&lt;&lt;sizeof(int);     // afişează numărul de octeţi pe care este memorat un întreg (2)</p>
<p>cout&lt;&lt;sizeof(”ab6*”);// afişează 5, nr. de octeţi pe care este memorată constanta şir ”ab6*”</p>
<p>&nbsp;</p>
<p>q  Operatorul <strong><em>(tip)</em></strong><em> </em></p>
<p>Este un operator unar care apare în construcţii numite ”cast” şi converteşte tipul operandului său la tipul specificat între paranteze.</p>
<p><strong><em><span style="text-decoration: underline;">Exemple:</span></em></strong></p>
<p>int a; (float) a; // converteşte operandul a (care era de tip întreg) în float</p>
<p>În afara operatorilor prezentaţi, există şi alţii, pe care îi vom enumera în continuare. Despre aceşti operatori vom discuta în capitolele viitoare, când cunoştinţele acumulate vor permite acest lucru.</p>
<p><strong> </strong></p>
<p>q  Operatorul unar <strong>*</strong><strong></strong></p>
<p>Este operator unar, numit şi <em>operator de deferenţiere. </em>Se aplică unei expresii de tip pointer şi este folosit pentru a accesa conţinutul unei zone de memorie spre care pointează operatorul. Operatorii &amp; (adresă) şi * sunt complementari.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong> Expresia *a este înlocuită cu valoarea de la adresa conţinută în variabila pointer a.</p>
<p>&nbsp;</p>
<p>q  Operatorii <strong><em>paranteză</em></strong></p>
<p>Parantezele rotunde <strong>( )</strong><strong> </strong>se utilizează în expresii, pentru schimbarea ordinii de efectuare a operaţiilor, sau la apelul funcţiilor. La apelul funcţiilor, parantezele rotunde încadrează lista parametrilor efectivi. Din acest motiv, parantezele rotunde sunt numite şi <em>operatori de apel de funcţie</em><em>.</em></p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>double sum<strong>(</strong>double a, double b<strong>)</strong>;</p>
<p>/*declar. funcţiei sum, care primeşte 2 argumente reale(double) şi returnează o valoare tip double */</p>
<p>void main()</p>
<p>{</p>
<p>. . .</p>
<p>double a=sum<strong>(</strong>89.9, 56.6<strong>)</strong>;  //apelul funcţiei <em>sum</em>, cu parametri efectivi 89.9 şi 56.6</p>
<p>int s0=6; double s1=<strong>(</strong>s0+9<strong>)</strong>/a; //folosirea parantezelor în expresii</p>
<p>. . .</p>
<p>}</p>
<p>&nbsp;</p>
<p>q  Operatorii <strong><em>de indexare</em></strong></p>
<p>Operatorii de indexare<strong> </strong>sunt parantezele pătrate <strong>[]</strong>. Acestea<strong> </strong>includ expresii întregi care reprezintă indici ai unui tablou.</p>
<p>q  Operatori <strong><em>de acces la membri structurilor</em></strong></p>
<p>Operatorii <strong>::</strong>, <strong>.</strong>,<strong> </strong><strong>-&gt;</strong>, <strong>.*</strong> şi <strong>-&gt;*</strong> permit accesul la componentele unei structuri. Ei vor fi studiaţi în capitolul 7.</p>
<p>&nbsp;</p>
<p>În tabelul 2.8. sunt prezentaţi toţi operatorii, grupaţi pe categorii, cu priorităţile lor şi regulile de asociativitate. Operatorii dintr-o categorie au aceeaşi prioritate.</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td colspan="2" valign="top" width="189">Tabelul 2.8.</td>
<td valign="top" width="274"></td>
<td valign="top" width="180"></td>
</tr>
<tr>
<td valign="top" width="38">
<p align="center">Nr.</p>
</td>
<td valign="top" width="151">
<p align="center"><strong>Clasă de operatori</strong></p>
</td>
<td valign="top" width="274">
<p align="center"><strong>Operatori</strong></p>
</td>
<td valign="top" width="180">
<p align="center"><strong>Asociativitate</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="38">1.</td>
<td valign="top" width="151">Primari</td>
<td valign="top" width="274">
<p align="center"><strong>() [] . -&gt;  ::</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">2.</td>
<td valign="top" width="151">Unari</td>
<td valign="top" width="274"><strong>! ~ ++ &#8212; sizeof  (tip)</strong><strong>-</strong>(unar)  <strong>*</strong>(deferenţiere)<strong> &amp;</strong>(referenţiere)</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">3.</td>
<td valign="top" width="151">Multiplicativi</td>
<td valign="top" width="274">
<p align="center"><strong>*     /     %</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">4.</td>
<td valign="top" width="151">Aditivi</td>
<td valign="top" width="274">
<p align="center"><strong>+     -</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">5.</td>
<td valign="top" width="151">Deplasare pe bit</td>
<td valign="top" width="274">
<p align="center"><strong>&lt;&lt;     &gt;&gt;</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">6.</td>
<td valign="top" width="151">Relaţionali</td>
<td valign="top" width="274">
<p align="center"><strong>&lt;    &lt;=    &gt;    &gt;=</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">7.</td>
<td valign="top" width="151">De egalitate</td>
<td valign="top" width="274">
<p align="center"><strong>==     !=</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">8.</td>
<td valign="top" width="151"></td>
<td valign="top" width="274">
<p align="center"><strong>&amp; </strong>(ŞI logic pe bit)<strong></strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">9.</td>
<td valign="top" width="151"></td>
<td valign="top" width="274">
<p align="center"><strong>^ </strong>(XOR pe bit)</p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">10.</td>
<td valign="top" width="151"></td>
<td valign="top" width="274">
<p align="center"><strong>| </strong>(SAU logic pe bit)</p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">11.</td>
<td valign="top" width="151"></td>
<td valign="top" width="274">
<p align="center"><strong>&amp;&amp;</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">12.</td>
<td valign="top" width="151"></td>
<td valign="top" width="274">
<p align="center"><strong>||</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
<tr>
<td valign="top" width="38">13.</td>
<td valign="top" width="151">Condiţional</td>
<td valign="top" width="274">
<p align="center"><strong>?:</strong></p>
</td>
<td valign="top" width="180">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="38">14.</td>
<td valign="top" width="151">De atribuire</td>
<td valign="top" width="274">
<p align="center"><strong>=   +=   -=   *=    %=</strong></p>
<p align="center"><strong>&amp;=  ^=  |=  &lt;&lt;=  &gt;&gt;=</strong></p>
</td>
<td valign="top" width="180">de la dreapta la stânga</td>
</tr>
<tr>
<td valign="top" width="38">15.</td>
<td valign="top" width="151">Virgulă</td>
<td valign="top" width="274">
<p align="center"><strong>,</strong></p>
</td>
<td valign="top" width="180">de la stânga la dreapta</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>2.6.2.  EXPRESII</strong></p>
<p>Prin combinarea operanzilor şi a operatorilor se obţin <strong><em>expresii</em></strong>. Tipul unei expresii este dat de tipul rezultatului obţinut în urma evaluării acesteia. La evaluarea unei expresii se aplică regulile de prioritate şi asociativitate a operatorilor din expresie. Ordinea de aplicare a operatorilor poate fi schimbată prin folosirea parantezelor. La alcătuirea expresiilor, este indicată evitarea expresiilor în care un operand apare de mai multe ori.</p>
<p><strong>2.6.3.  CONVERSII DE TIP</strong></p>
<p>La evaluarea expresiilor, se realizează conversii ale tipului operanzilor. Conversiile sunt:</p>
<p>q  Automate;</p>
<p>q  Cerute de evaluarea expresiilor;</p>
<p>q  Cerute de programator (prin construcţiile cast), explicite.</p>
<p><strong><em>Conversiile automate</em></strong> sunt realizate de către compilator:</p>
<p><strong>            </strong><strong>char, short int -&gt;   int</strong></p>
<p>Ele sunt realizate de fiecare dată când într-o expresie apar operanzi de tipul char sau short int.</p>
<p><strong><em>Conversiile cerute de evaluarea expresiilor</em></strong> sunt efectuate în cazurile în care în expresii apar operanzi de tipuri diferite. Înaintea aplicării operatorilor, se realizează conversia unuia sau a ambilor operanzi:</p>
<p>q  Dacă un operand este de tip long int, celălalt este convertit la acelaşi tip; tipul expresiei este long int.</p>
<p>q  Dacă un operand este de tipul<strong> </strong>double, celălalt este convertit la acelaşi tip; tipul expresiei este double.</p>
<p>q  Dacă un operand este de tipul<strong> </strong>float, celălalt este convertit la acelaşi tip; tipul expresiei este float.</p>
<p><strong><em>Conversiile explicite (cerute de programator)</em></strong><em> </em>se realizează cu ajutorul construcţiilor cast.</p>
<p><strong><em><span style="text-decoration: underline;">Exemplu:</span></em></strong></p>
<p>int x=3;    float y;          y=<em>(float)</em>x/2;</p>
<p>Înainte de a se efectua împărţirea celor 2 operanzi, operandul x (întreg) este convertit în număr real simplă precizie. După atribuire, valoarea lui y va fi 1.5. Dacă nu ar fi fost folosit operatorul de conversie în expresia y=x / 2, operanzii x şi 2 fiind întregi, rezultatul împărţirii este întreg, deci y ar fi avut valoarea 1.</p>
<p>&nbsp;</p>
<p align="center"><strong>ÎNTREBĂRI ŞI EXERCIŢII</strong></p>
<p><strong>Chestiuni teoretice</strong></p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<div>
<ol>
<li>Ce reprezintă datele şi care sunt atributele lor?</li>
<li>Care sunt diferenţele între constante şi variabile?</li>
<li>Cine determină tipul unei constante?</li>
<li>Ce sunt identificatorii?</li>
<li>Ce sunt directivele preprocesor?</li>
<li>Ce reprezinta variabilele?</li>
<li>Ce sunt constantele?</li>
<li>Enumeraţi tipurile simple de variabile.</li>
<li>Câte tipuri de directive preprocesor cunoasteţi? Exemple.</li>
<li>Care este modalitatea de a interzice modificarea valorii unei variabile?</li>
<li>Ce loc ocupă declararea varibilelor în cadrul unui program sursă scris în limbajul C++?</li>
<li>Ce conţin fişierele header?</li>
<li>Ce tipuri de variabile se utilizează pentru datele numerice?</li>
<li>Care sunt calificatorii folosiţi alături de tipurile de bază pentru obţinerea tipurilor derivate de date?</li>
<li>Ce semnifică parantezele unghiulare &lt; &gt; care încadrează numele unui fişier header?</li>
<li>Care este diferenţa între constantele 35.2e-1 şi 3.52 ? Dar între &#8220;\t&#8221; şi &#8216;\t&#8217;?</li>
<li>Ce tip are constanta 6.44 ?</li>
<li>Care este diferenţa între operatorii = şi = = ?</li>
<li>Ce reprezintă caracterele &#8220;escape&#8221;?</li>
<li>Constante întregi.</li>
<li>Constante caracter.</li>
<li>Ce tipuri de conversii cunoaşteţi?</li>
<li>Care sunt conversiile realizate în mod automat, de către compilator?</li>
<li>Constante şir de caractere.</li>
<li>Constante reale.</li>
<li>Ce operatori ternari cunoasteţi?</li>
<li>Operatorul virgulă.</li>
<li>Operatorul sizeof.</li>
<li>Operatori aritmetici binari compuşi.</li>
<li>Operatorul de referenţiere.</li>
<li>Operatori relaţionali binari.</li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Chestiuni aplicative</strong></p>
<p><strong> </strong></p>
<ol>
<li>Să se scrie declaraţiile pentru definirea constantelor simbolice: pi, g (acceleraţia gravitaţională), unghi_drept, dimensiune_MAX.</li>
<li>Care va fi rezultatul afişat pe ecran în urma execuţiei următoarelor secvenţe de instrucţiuni:</li>
</ol>
<p>q  double a=9/2; cout&lt;&lt;a*5&lt;&lt;’\n’;</p>
<p>q  double a=9.7, b=5.6; cout&lt;&lt;(a+6&lt;b)&lt;&lt;’\n’;</p>
<p>q  double a=9/4; cout&lt;&lt;a*6&lt;&lt;’\n’;</p>
<p>q  double x=3;int y=++x+5;cout&lt;&lt;y&lt;&lt;’\n’;</p>
<p>q  int a=7;    cout&lt;&lt;(!a)&lt;&lt;’\n’;</p>
<p>q  int a=10.5; cout&lt;&lt;a++&lt;&lt;’\n’; cout&lt;&lt;a&lt;&lt;’\n’;</p>
<p>q  int a=7; cout&lt;&lt;++a&lt;&lt;’\n’; cout&lt;&lt;a&lt;&lt;’\n’;</p>
<p>q  int a=10; cout&lt;&lt;a++&lt;&lt;’\n’; cout&lt;&lt;a&lt;&lt;’\n’;</p>
<p>q  double a=7/2; cout&lt;&lt;a&lt;&lt;’\n’;</p>
<p>q  int x=3; int y=x++-2; cout&lt;&lt;y&lt;&lt;’\n’;</p>
<p>q  int x=3; int y=++x+5; cout&lt;&lt;y&lt;&lt;’\n’;</p>
<p>q  double a=5.6, b=7.45; cout&lt;&lt;(a&gt;b)&lt;&lt;’\n’;</p>
<ol>
<li>Să se verifice corectitudinea următoarelor secvenţe. Pentru cele incorecte, explicaţi sursa erorilor.</li>
</ol>
<p>q  double a=9.7, b=5.2; int c=(a+6&lt;b)++; cout&lt;&lt;c&lt;&lt;’\n’;</p>
<p>q  double a=7/5; double c=a*5++; cout&lt;&lt;c&lt;&lt;’\n’;</p>
<p>q  double a=9.7, b=5.6; int c=(a%6&lt;b)++; cout&lt;&lt;c&lt;&lt;’\n’;</p>
<p>q  double a=5.6, b=7.45; cout&lt;&lt;++(a+5&gt;b)&lt;&lt;’\n’;</p>
<p>q  double a=9.8; double b=9.7; cout&lt;&lt;a%b&lt;&lt;’\n’;</p>
<p>q  cout&lt;&lt;&amp;(a+8)&lt;&lt;&#8217;\n&#8217;;</p>
<p>q  int I=8; cout&lt;&lt;(I+10)++&lt;&lt;&#8217;\n&#8217;;</p>
<p>q  double a=8.7; A=(a+8)/56; cout&lt;&lt;A&lt;&lt;&#8217;\n&#8217;;</p>
<p>q  int x=3/5; int y=x++; char x=&#8217;J'; cout&lt;&lt;&#8221;y=&#8221;&lt;&lt;y&lt;&lt;&#8217;\n&#8217;;</p>
<p>q  char a=&#8217;X'; const int b=89; b+=8; cout&lt;&lt;&#8221;b=&#8221;&lt;&lt;b&lt;&lt;&#8221; a=&#8221;&lt;&lt;a&lt;&lt;&#8217;\n&#8217;;</p>
<ol>
<li>Să se scrie un program care afişează următoarele mesaje:</li>
</ol>
<p>q  Sirul &#8220;este dupa-amiaza&#8221; este memorat pe &#8230;. octeti.</p>
<p>q  O marime intreaga este memorata pe &#8230; octeti.</p>
<p>q  O marime reala, in simpla precizie este memorata pe &#8230; octeti!</p>
<p>q  O marime reala, in dubla precizie este memorata pe &#8230; byti!</p>
<p>q  Constanta caracter &#8216;Q&#8217; memorata pe &#8230; octeti!</p>
<p>q  Sirul &#8220;a\n\n&#8221; este memorat pe &#8230; octei!</p>
<p>q  Sirul &#8220;\n&#8221; este memorat pe &#8230; biti!</p>
<p>q  Caracterul &#8216;\&#8217; este memorat pe &#8230;. biti.</p>
<ol>
<li>Să se evalueze expresiile, ştiind că: int i=1;int j=2;int k=-7;double x=0;double y=2.3;</li>
</ol>
<p>q  -i &#8211; 5 * j  &gt;= k + 1</p>
<p>q  3 &lt; j &lt; 5</p>
<p>q  i + j + k == -2 * j</p>
<p>q  x &amp;&amp; i || j &#8211; 3</p>
<ol>
<li>Ce operaţie logică şi ce mască trebuie să folosiţi pentru a converti codurile ASCII ale literelor mici în litere mari? Dar pentru conversia inversă?</li>
<li>O deplasare la dreapta cu 3 biţi este echivalentă cu o rotaţie la stânga cu câţi biţi?</li>
<li>Să se seteze pe 1 toţi biţii dintr-un octet, cu excepţia bitului cel mai semnificativ.</li>
<li>Să se scrie un program care citeşte o valoare întreagă. Să se afişeze un mesaj care să indice dacă numărul citit este par sau impar.</li>
<li>Să se citeasca două valori întregi. Să se calculeze şi să se afişeze restul împărţirii celor două numere</li>
</ol>
<p>download <a href="http://resurse-educationale.uv.ro/?attachment_id=195" rel="attachment wp-att-195">cap02</a></p>
]]></content:encoded>
			<wfw:commentRss>http://resurse-educationale.uv.ro/?feed=rss2&#038;p=194</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
