Sunteți pe pagina 1din 28

BAZELE INFORMATICII ELEMENTE DE PROGRAMARE C/C++

Asist. univ.dr. Aurelia PTRACU


Universitatea PetrolGaze din Ploieti

Prof. univ. dr. Marian ZAHARIA


Universitatea PetrolGaze din Ploieti

Lect. univ. dr. Ana TNSESCU


Universitatea PetrolGaze din Ploieti

Aurelia PTRACU Marian ZAHARIA Ana TNSESCU

BAZELE INFORMATICII ELEMENTE DE PROGRAMARE C/C++

EDITURA UNIVERSITAR Bucureti, 2011


3

Referent tiinific: Tehnoredactare computerizat: Amelua Vian Coperta: Angelica Mlescu Ilustraia copertei: COPERTA 1 COPERTA 4 Copyright 2011 Editura Universitar Director: Drd. Vasile Muscalu B-dul. N. Blcescu nr. 27-33, Sector 1, Bucureti Tel.: 021 315.32.47 / 319.67.27 www.editurauniversitara.ro e-mail: redactia@editurauniversitara.ro

EDITUR RECUNOSCUT DE CONSILIUL NAIONAL AL CERCETRII TIINIFICE DIN NVMNTUL SUPERIOR (C.N.C.S.I.S.)

Descrierea CIP a Bibliotecii Naionale a Romniei PTRACU, AURELIA Bazele informaticii : elemente de programare C/C++ / Ptracu Aurelia, Zaharia Marian, Tnsescu Ana. - Bucureti : Editura Universitar, 2011 Bibliogr. ISBN 978-606-591-328-8 I. Zaharia, Marian II. Tnsescu, Ana 004.43 C 004.43 C++

Toate drepturile asupra acestei lucrri sunt rezervate autorului.

Distribuie: tel.: 021-315.32.47 /319.67.27, comenzi@editurauniversitara.ro ISBN 978-606-591-328-8 DOI: 10.5682/9786065913288

PREFA Dup cum rezult i din titlul lucrrii, scopul principal al acesteia este de ini iere n tainele informaticii i programrii structurate n limbajul C/C++. Din acest considerent lucrarea se oprete numai asupra unor capitole care s ajute cititorii sa fac primii pai n programarea structurat. Ea va fi urmat de o alt lucrare a noastr care va viza programarea avansat n C/C++, unde vor fi abordate problematicile construirii i utilizrii func iilor, declararea i utilizarea pointerilor ctre func ii, crearea i exploatarea structurilor autoreferite, precum i bazele programrii orientate obiect. Lucrarea este structurat n nou capitole, nso ite de numeroase aplica ii practice, scheme i comentarii, i abordeaz, gradat, conceptele i elementele fundamentale ale definirii algoritmilor i schemelor logice, precum i ale implementrii acestora n limbajul C/C++. Capitolul I, Arhitectura sistemelor de calcul i bazele aritmetice i logice ale calculatoarelor, aduce n aten ia cititorului elementele structurale fundamentale ale calculatoarelor numerice. De asemenea, se prezint, bazat pe exemple concrete, bazele aritmetice i logice ale acestora. Capitolul II, Algoritmi i scheme logice, ofer cititorului un set de cunotin e de baz privind construirea algoritmilor, precum i premisele utilizrii acestora la modelarea structurilor fundamentale ale programrii structurate. Capitolul III, Prezentarea general a limbajului C, are rolul de a ajuta utilizatorul s fac primii pai n cunoaterea i utilizarea limbajului C/C++, n conceperea i dezvoltarea aplica iilor sale. Sunt trecute n revist elementele fundamentale de sintax, pornind de la alfabet i semne de punctua ie, pn la scrierea propozi iilor i/sau frazelor, precum i func ii de intrare/ieire necesare construirii unor interfe e minime ntre utilizator i aplica iile sale. De asemenea, sunt prezentate directivele procesor define i include, acestea fiind unele dintre cele mai utilizate directive procesor la dezvoltarea de aplica ii C/C++, directive folosite n exemplele prezentate n lucrare. Capitolul IV, Tipuri fundamentale de date i clase de memorie, abordeaz probleme privind declararea i ini ializarea tipurilor fundamentale de date, modurile de reprezentare ale acestora, domeniile valorilor 5

reprezentabile, precum i modul de vehiculare a datelor de diverse tipuri n cadrul aplica iilor. Capitolul V, Operatori i expresii, prezint clasele de operatori ai limbajului C/C++, modurile lor de aplicare, efectele produse asupra datelor implicate, precum i modurile de evaluare ale expresiilor n care apar. Capitolul VI, Intruc iuni, abordeaz structurile de programare fundamentale (secven ial, alternativ i repetitiv), instruc iunile care permit construirea i exploatarea acestor structuri, instruc iunile de salt i de inserare n codul surs C/C++ a instruc iunilor n limbaj de asamblare. Capitolul VII, Pointeri, este dedicat prezentrii modurilor de declarare i de ncrcare a pointerilor, inclusiv alocarea dinamic de memorie, trecerii n revist a principalelor opera ii care pot fi efectuate cu pointeri din aa-numita aritmetic de pointeri. innd seama de importan a n elegerii i dobndirii de deprinderi n lucrul cu pointeri, n cadrul capitolului sunt prezentate o serie de exemple edificatoare. Capitolul VIII, Masive, este destinat prezentrii modurilor de definire i utilizare a masivelor de date n C/C++. Sunt abordate tematici privind declararea masivelor, ini ializarea acestora la declarare, prin ncrcare individual sau citirea de la stdin, referirea elementelor masivelor prin indexare i prin indirectare, lucrul cu masive de pointeri i alocarea dinamic de memorie pentru masive. Capitolul IX, Caractere i iruri de caractere, dup trecerea n revist a unor aspecte specifice lucrului cu caractere i masive de caractere, precum i a func iilor i macrodefini iilor pentru lucrul cu acestea, prezint modurile de definire i ini ializare a irurilor de caractere, func iile specifice de intrare/ieire, precum i o gam larg de func ii destinate lucrului cu iruri de caractere. n scopul facilitrii parcurgerii i nsuirii cunotin elor privind lucrul cu caractere i iruri de caractere, pe parcursul capitolului sunt prezentate aplica ii nso ite de comentarii. Contien i c lucrarea este perfectibil, mul umim anticipat celor care, prin observa iile i recomandrile lor, vor contribui la mbunt irea acesteia. Autorii

CUPRINS Prefa Capitolul 1. Arhitectura sistemelor de calcul si bazele aritmetice si logice ale calculatoarelor 1.1. Structura unui calculator electronic 1.2. Sisteme de numera ie 1.2.1. Conversia dintr-o baz oarecare B n baza 10 1.2.2. Conversia din baza 10 ntr-o baz de numera ie oarecare B 1.3. Sistemul binar 1.3.1. Conversia numerelor din sistemul binar n cel zecimal 1.3.2. Opera ii aritmetice n sistemul binar 1.4. Sistemul hexazecimal 1.4.1. Conversia numerelor din sistemul hexazecimal n zecimal i invers 1.4.2. Conversia numerelor din hexazecimal n binar i invers 1.4.3. Opera ii aritmetice n sistemul hexazecimal 1.5. Reprezentarea intern a numerelor n calculator 1.5.1. Reprezentarea intern a numerelor ntregi 1.5.2. Reprezentarea numerelor reale n virgul mobil 1.6. Codificarea datelor Capitolul 2. Algoritmi i scheme logice 2.1. Algoritm concept i propriet i 2.1.1. Conceptul de algoritm 2.1.2. Propriet ile algoritmilor i etapele rezolvrii unei probleme 2.2. Descrierea algoritmilor n pseudocod i cu ajutorul schemelor logice 2.3. Exemple 2.4. Probleme propuse Capitolul 3. Prezentarea general a limbajului C/C++ 3.1. Elemente de sintax C/C++ 3.2. Elemente de comunicare utilizator-program 3.2.1. Func ii de intrare de pe stdin 3.2.2. Func ii de ieire pe stdout 3.2.3. Un exemplu de utilizare a func iilor de intrare ieire 3.3. Directivele procesor #include i #define

5 11 11 14 15 15 17 17 18 21 22 22 23 25 25 26 27 29 29 29 31 32 37 43 45 45 51 52 53 55 57 7

3.3.1. Directiva #include 3.3.2. Directiva #define Capitolul 4. Tipuri de date i clase de memorie 4.1. Tipuri fundamentale de date i constante 4.1.1. Tipul void 4.1.2. Tipul boolean 4.1.3. Tipul caracter 4.1.4. Tipul ntreg 4.1.5. Tipul real 4.2. Clase de memorie 4.2.1. Clasa automatic 4.2.2. Clasa static 4.2.3. Clasa extern 4.2.4. Clas register Capitolul 5. Operatori i expresii 5.1. Clase de operatori 5.1.1. Operatori func ie, de indexare, calificare i rezolu ie 5.1.2. Operatori unari 5.1.3. Operatori aritmetici 5.1.4. Operatori de lucru pe bi i 5.1.5. Operatori de testare a rela iei dintre operanzi 5.1.6. Operatorul condi ional 5.1.7. Operatori de atribuire 5.2. Expresii 5.2.1. Clasificarea expresiilor 5.2.2. Conversii i evaluarea expresiilor Capitolul 6. Instruc iuni 6.1. Instruc iuni pentru descrierea entit ilor fundamentale ale programrii structurate 6.1.1. Construirea structurilor liniare 6.1.2. Construirea structurilor alternative 6.1.3. Construirea structurilor repetitive 6.2. Alte instruc iuni 6.2.1. Instruc iunea break 6.2.2. Instruc iunea continue 6.2.3. Instruc iunea goto 8

58 60 65 65 66 66 67 70 71 72 73 75 76 79 81 81 81 82 89 90 96 96 98 101 101 102 107 107 107 108 116 121 122 123 125

6.3. 6.4.

6.2.4. Instruc iunea _asm Aplica ii rezolvate Aplica ii propuse

126 129 145 147 147 147 148 154 155 169 169 170 170 172 175 175 178 180 182 183 185 187 187 187 189 191 192 192 195 203 205 209 9

Capitolul 7. Pointeri 7.1. Declararea i ncrcarea pointerilor 7.1.1. Declararea pointerilor 7.1.2. ncrcarea pointerilor 7.2. Referirea prin pointeri a obiectelor pointate 7.3. Aritmetica de pointeri Capitolul 8. Masive 8.1. Declararea masivelor 8.2. Referirea elementelor unui masiv 8.2.1. Referirea elementelor prin indexare 8.2.2. Referirea elementelor prin indirectare 8.3. ncrcarea masivelor 8.3.1. Ini ializarea masivelor la declarare 8.3.2. ncrcarea individual a elementelor masivelor 8.3.3. ncrcarea masivelor prin citire de pe stdin 8.4. Masive de pointeri 8.4.1. Manipularea unitar a unor zone de memorie eterogene 8.4.2. Alocarea dinamic de memorie pe dimensiuni a masivelor multidimensionale mari i foarte mari Capitolul 9. Caractere i iruri de caractere 9.1. Lucrul cu caractere 9.1.1. Definirea, reprezentarea intern i ini ializarea variabilelor de tip caracter 9.1.2. Func ii de intrare/ieire specifice caracterelor 9.2. iruri de caractere 9.2.1. De la caracter la ir 9.2.2. Declararea i ini ializarea variabilelor de tip ir de caractere 9.2.3. Func ii pentru lucrul cu iruri de caractere 9.2.4. Conversia irurilor de caractere n valori numerice Anexa 1. Codul ASCII extins Bibliografie

Capitolul 1

Arhitectura sistemelor de calcul i bazele aritmetice i logice ale calculatoarelor


Informatica reprezint un complex de discipline prin care se asigur prelucrarea ra ional a informa iilor prin intermediul mainilor automate. Prelucrarea automat a informa iei s-a realizat o dat cu apari ia calculatoarelor electronice. Aadar, scopul utilizrii unui calculator este de a prelucra informa ia. Informa ia prelucrat poate fi format din texte, numere, imagini sau sunete i este pstrat pe diferite medii de memorare, n diferite formate, sub form de date.

1.1

Structura unui calculator electronic

Structura unui calculator numeric a fost definit n anul 1945 de ctre matematicianul John von Neumann n lucrarea Prima schi de Raport asupra EDVAC i este prezentat n figura 1.1 [1, 2, 10, 11, 26, 28]. n aceast figur, liniile continue reprezint fluxuri de date, liniile ntrerupte reprezint fluxuri de comenzi i de stri, iar dreptunghiurile blocuri func ionale. Blocurile func ionale, simbolurile acestora i destina ia lor sunt urmtoarele: unitatea de intrare (UI) este destinat introducerii de date i programe n sistemul de calcul (tastatur, scanner, joystick, mouse etc.); memoria (M) permite stocarea datelor i a programelor n scopul prelucrrii; unitatea aritmetico-logic (UAL) efectueaz calcule aritmetice i opera ii logice; 11

Bazele informaticii. Elemente de programare C/C++ unitatea central (UC) este componenta care coordoneaz ntreaga activitate din sistemul de calcul; unitatea de ieire (UE) permite transmiterea rezultatelor ob inute prin prelucrarea datelor de intrare ctre utilizator. Extragerea datelor i a rezultatelor se face prin utilizarea unor dispozitive de ieire printre care: monitorul, imprimanta, plotter-ul, boxe etc. Imprimanta transfer informa iile pe suport de hrtie, fiind, la rndul ei, de diverse tipuri (matricial, cu jet de cerneal, laser etc.) M Programe Date Date UAL UE Rezultate Comenzi

Rezultate

UI

UC Figura 1.1. Schema von Neumann a unui calculator numeric [10, 11]. Dintre blocurile men ionate n figura 1.1., din punct de vedere al func iilor sale, cel mai important este unitatea central (UC). Aceasta are n structura sa dou unit i care i asigur func ionalitatea: unitatea de memorie intern este destinat, pe de o parte, pstrrii informa iilor de configurare, iar, pe de alt parte, pstrrii datelor i instruc iunilor programelor aflate n execu ie. Aceste func ii sunt asigurate de: o memoria Read Only Memory (ROM) aflat ntr-un cip pe placa de baz i utilizat pentru a stoca informa ii despre hardware i anumite programe care configureaz diverse dispozitive ale calculatorului, lansate n execu ie la pornirea calculatorului. Memoria ROM ale urmtoarele caracteristici: nu i pierde con inutul la oprirea calculatorului; 12

1. Arhitectura sistemelor de calcul nu poate fi scris de ctre utilizatorul calculatorului; este inscrip ionat de ctre productor cu ajutorul unei aparaturi speciale. o memoria Random Access Memory (RAM) care stocheaz temporar programele n timp ce acestea ruleaz, mpreun cu datele utilizate de aceste programe. Prin lansarea n execu ie a unui program, fiierele sunt aduse n memoria RAM. Acestea rezid n memoria RAM, atta timp ct ruleaz. Memoria RAM se caracterizeaz prin: este o memorie volatil (la nchiderea calculatorului tot ce este n memoria RAM se pierde); fizic, este un ansamblu de cipuri sau de module con innd cipuri care sunt introduse ntr-un conector de pe placa de baz. unitatea central de prelucrare sau procesorul (central processing unit). Procesorul este montat n interiorul calculatorului pe placa1 de baz, fiind cel mai important cip din sistemul de calcul. Dintre func iile procesorului se men ioneaz: realizeaz calculele i opera iile logice; execut instruc iuni pentru programe;

Placa de baz (Motherboard) este cea mai important component a sistemului de calcul. Pe ea sunt montate toate componentele care controleaz sistemul de calcul. Dintre cele mai cunoscute se amintesc: soclul (conectorul) procesorului; soclurile de memorie (RAM); cipul BIOS; setul de cipuri al plcii de baz; conectoarele de magistral: conectoare ISA (Industry Standard Architecture); conectoare PCI (Peripheral Component Interconnect); conectoare AGP (Accelerated Graphics Port). cipurile super I / O: controlere pentru unit ile de dischet; controlere pentru porturi paralele; controlere pentru porturi seriale; controlere pentru tastatur i mouse.

13

Bazele informaticii. Elemente de programare C/C++

controleaz opera iile efectuate de alte componente ale calculatorului.

Unitatea central i unitatea aritmetico-logic prelucreaz doar valori numerice n format binar (numere n baza 2). Aceste valori sunt greu de manevrat de ctre un utilizator obinuit. Din acest motiv, pentru reprezentarea informa iilor prelucrate, se folosesc diverse modalit i de codificare, n func ie de tipul valorilor pe care le iau datele respective.

1.2

Sisteme de numera ie

Un sistem de numera ie este format din totalitatea regulilor de reprezentare a numerelor, folosind un anumit set de simboluri distincte, numite cifre [1, 2, 10, 29]. Sistemele de numera ie sunt de dou tipuri: sisteme de numera ie pozi ionale; sisteme de numera ie nepozi ionale. Sistemele de numera ie pozi ionale sunt acele sisteme de numera ie pentru care valoarea unei cifre din cadrul unui numr depinde de pozi ia ocupat de acea cifr n cadrul numrului. Sistemul arab zecimal de numera ie este unul pozi ional. De exemplu, cifra 8 are valoarea 80 n numrul 53986 i are valoarea 80000 n numrul 85712. Sistemele de numera ie nepozi ionale sunt sistemele de numera ie pentru care valoarea unei cifre dintr-un numr nu este unic determinat de pozi ia cifrei n numr, ci de contextul n care se afl cifra. De exemplu, sistemul roman de numera ie este unul nepozi ional. Astfel, valoarea cifrei I n numrul VI este +1, iar n numrul IV este 1. Baza unui sistem de numera ie pozi ional este dat de numrul de elemente care formeaz alfabetul sistemului de numera ie. Se consider c alfabetul este format din cifre care sunt numere ntregi, consecutive, nenegative. De exemplu, sistemul de numera ie n baza 2 are alfabetul {0,1}, sistemul de numera ie n baza 10 are alfabetul {0,1,2,3,4,5,6,7,8,9}, iar sistemul de numera ie n baza 16 are alfabetul {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}.

14

1. Arhitectura sistemelor de calcul

1.2.1 Conversia dintr-o baz oarecare B n baza 10 Fie sistemul de numera ie n baza B, cu alfabetul {0,1,...,B-1}. Un numr ra ional pozitiv care este reprezentat n baza B prin irul: QB = bn 1bn 2 Kb0 , b1 Kbm are, prin defini ie, urmtoarea valoare n baza 10:
Q10 = bn 1 B n 1 + bn 2 B n 2 + K + b1 B + b0 + b1 B 1 + K b m B m (1.2)

(1.1)

De exemplu, numrul 81A16 , n baza 10 devine :


81A16 = 8 16 2 + 1 161 + A 16 0 = 2048 + 16 + 10 = 207410 iar numrul 11,1012 devine : 11,1012 = 1 21 + 1 2 0 + 1 2 1 + 0 2 2 + 1 2 3 = 3,62510 Se observ c prin conversia pr ii ntregi a numrului: bn 1bn 2 K b0 se ob ine un ntreg, iar prin conversia pr ii frac ionare: b1b1 K bm se ob ine un numr subunitar.

1.2.2 Conversia din baza 10 ntr-o baz de numera ie oarecare B


Conversia unui numr din baza 10 ntr-o baz oarecare B se realizeaz conform urmtorului algoritm: se convertete partea ntreag a numrului prin mpr iri ntregi, succesive la baza B: n urma fiecrei mpr iri se ob ine un nou ct i un rest; noul ct este dempr itul urmtoarei mpr iri ntregi; algoritmul se ncheie cnd se ob ine ctul 0;

15

Bazele informaticii. Elemente de programare C/C++ resturile ob inute, ncepnd cu ultimul i pn la primul, reprezint cifrele numrului, de la cea mai semnificativ la cea mai pu in semnificativ. se convertete partea frac ionar a numrului prin nmul iri succesive, cu baza B: partea frac ionar a fiecrui produs constituie denmul itul pentru produsul urmtor; partea frac ionar a numrului convertit n baza B este reprezentat de succesiunea ob inut din pr ile ntregi ale tuturor produselor ob inute, ncepnd cu primul produs care furnizeaz cifra cea mai semnificativ a rezultatului; algoritmul se ncheie cu un rezultat exact, atunci cnd se ob ine ca produs par ial un ntreg; algoritmul se ncheie cu o aproximare a numrului frac ionar, dup un anumit numr de pai, atunci cnd nu se poate ob ine ca produs par ial un ntreg.

Exemplul 1. Conversia numrului 2536 n baza 5 se realizeaz astfel:


2536 : 5 = 507 rest 1 507 : 5 = 101 rest 2 101 : 5 = 20 rest 1 20 : 5 = 4 rest 0 4 : 5 = 0 rest 4 Rezultatul ob inut este 253610=401215.

Exemplul 2. Conversia numrului 0,208984375 n baza 8 presupune efectuarea urmtoarelor etape: 0,208984375*8=1,671875 0,671875 *8=5,375 0,375 *8=3 Rezultatul conversiei este 0,1538.

16

1. Arhitectura sistemelor de calcul

1.3

Sistemul binar

Acest subcapitol este destinat prezentrii modului de conversie din sistemul de numera ie zecimal n cel binar i invers, precum i a efecturii opera iilor aritmetice n sistemul de numera ie binar.

1.3.1 Conversia numerelor din sistemul binar n cel zecimal i invers


Trecerea de la baza 2 la baza 10 se face pornind de la exprimarea numrului binar n func ie de puteri ale lui 2. De exemplu:
101101 = 1 25 + 0 24 + 1 23 +1 22 + 0 21 +1 20 = 1 32 + 0 16 +1 8 +1 4 + 0 2 +11 = = 45 1011012 = 4510 indicele fiind baza n care este scris numrul. Pentru a trece un numr din baza 10 n baza 2, se consider numrul natural n scris n baza 10. Pentru a afla corespondentul binar al acestuia, se noteaz cu c1 , c2 ,..., ck cturile i cu r1 , r2 ,..., rk resturile respective ale mpr iri succesive la 2. Deoarece mpr itorul este 2, resturile vor fi 0 sau 1. mpr irile la 2 se continu pn cnd ck = 0 . Astfel, se ob ine urmtorul ir de egalit i: c1 = c2 2 + r2

c2 = c3 2 + r3

ck 1 = ck 2 + rk unde ck = 0 .
Numrul binar corespunztor lui n este: rk rk 1...r2 r1 . De exemplu, pentru n = 47 se ob ine:

17

Bazele informaticii. Elemente de programare C/C++

adic 4710 = 1011112, iar k = 6 , adic c6 = 0 .

1.3.2 Opera ii aritmetice n sistemul binar


n continuare, se vor prezenta cele patru opera ii aritmetice elementare: adunarea, scderea, nmul irea i mpr irea.

Adunarea
Opera ia de adunare n sistemul binar se desfoar conform urmtoarei tabele: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 n situa ia 1 + 1 = 10, se scrie la rezultat cifra 0 i se pstreaz 1 pentru pozi ia de ordin superior (caz analog cu 5 + 5 = 10 n baza 10, cnd se scrie 0 i se pstreaz 1). n cazul 1 + 1 + 1 = 10 + 1 = 11, se scrie 1 i se pstreaz 1 pentru pozi ia de ordin superior. Cifrele care se pstreaz pentru pozi ia de ordin superior se numesc cifre de transport.

Exemplul 1: x = 11101 i y = 1101; x + y = ?

18

1. Arhitectura sistemelor de calcul

11101 + 1101 101010 Exemplul 2: x = 1100011011 i y = 101111101; x + y = ? 111111111 cifrele de transport 1100011011 + 101111101

10010011000

Scderea
Tabela opera iei de scdere n sistem binar este: 0 0 = 0 0 1 = X 1 0 = 1 1 1 = 0 Pentru situa ia 0 1 se ia o unitate de la pozi ia de ordin superior i atunci 10 1 = 1. Exemplul 1: x = 111101 i y = 110100; x y = ? 111101
110100 1001

Exemplul 2: x = 1101000 i y = 10011; x y = ? 7654321 coloane 1101000 10011


1010101

prima coloan: avem 0 1 se ia o unitate de la pozi ia de ordin superior 10 1 = 1


19

Bazele informaticii. Elemente de programare C/C++

a doua coloan: trebuie s se scad din 0 unitatea sczut anterior i unitatea lui y. De aceea, se ia o unitate de la pozi ia de ordin superior 1011= 1 1 = 0 a treia coloan: trebuie s se scad din 0 unitatea sczut anterior. Astfel, se ia o unitate de la pozi ia de ordin superior 10 1 = 1 a patra coloan: se scade din 1 unitatea anterior sczut 11 = 0 a cincea coloan: 0 1 se ia o unitate de la pozi ia de ordin superior 10 1 = 1 a asea coloan: se scade din 1 unitatea anterior sczut 11 = 0 a aptea coloan: nu se scade nimic 1

nmul irea
Tabela nmul irii n sistemul binar este: 0 0 = 0 0 1 = 0 1 0 = 0 11 = 1

Exemplul 1: x = 10101 i y = 1001; x y = ? 10101 1001


10101 10101 10111101 Exemplul 2: x = 101101 i y = 11101; x y = ?

20

1. Arhitectura sistemelor de calcul

101101 11101 101101 101101 101101 101101 10100011001

mpr irea
Fie x = 11011 i y = 101. Atunci x : y se ob ine astfel:

11011 101 ==11 101 =111 101 =10 1.4

101 101

ctul este 101, iar restul 10.

Sistemul hexazecimal

Cifrele sistemului hexazecimal sunt: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Literele utilizate au urmtoarele interpretri n baza 10: A = 10; B = 11; C = 12; D = 13; E = 14; F = 15

21

Bazele informaticii. Elemente de programare C/C++

1.4.1 Conversia numerelor din sistemul hexazecimal n zecimal i invers


Conversiile numerelor din hexazecimal n zecimal i invers se efectueaz conform celor prezentate n subcapitolele 1.2.1 i 1.2.2.. De exemplu, conversia numrului 7 A516 n baza 10 se face astfel: 7 A5 = 7 162 + A 161 + 5 160 = 7 256 + 10 16 + 5 = 1792 + 160 + 5 = 1957 Pentru a afla corespondentul hexazecimal al unui numr n baza 10 se fac mpr iri succesive la 16, procedndu-se ca la aflarea corespondentului binar. 1937 = 121 16 + 1 , deci 193710 = 79116 121=7 16 + 9 = 0 16 + 7 , deci 7A516 = 195710 .

7 9 1
1.4.2 Conversia numerelor din sistemul hexazecimal n binar i invers
O mpr ire la 16 este echivalent cu patru mpr iri la 2. Orice cifr a sistemului cu baza 16 se scrie cu patru cifre binare. Utiliznd acesta coresponden , numrul 4B0F1316 se scrie astfel n baza 2: 4 B 0 F 1 3 }}}}}} 010010110000111100010011 Invers, numrul binar 11010110101011 are urmtorul corespondent n baza 16: 0011 0101 1010 1011 {{{{ 3 5 A B 22

1. Arhitectura sistemelor de calcul

1.4.3 Opera ii aritmetice n sistemul hexazecimal


n hexazecimal, opera iile de adunarea, respectiv scdere, se efectueaz astfel:

Adunarea
Modul de efectuare a opera iei de adunare este ilustrat n tabelul 1.1

Exemplul 1: x = 1AB02 i y = A13; x y = ?

1 1AB02+ A13 1B5 15


3+ 2 = 5 1+ 0 = 1 A + B = 15 A+ 1 = B

Exemplul 2: x = ABFF9 i y = 9F38; x y = ?

1 111 ABFF9 + 9F38 B5F31


9 + 8 = 11 F + 3 + 1 = 13 F + F + 1 = 1F + 1 = 1F 9 + B + 1 = 15 A+1 = B

23

Bazele informaticii. Elemente de programare C/C++

Tabelul 1.1. Tabla adunrii n sistemul hexazecimal + 0 1 2 3 4 5 6 7 8 9 0 0 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 A B C D E F 2 2 3 4 5 6 7 8 9 A B C D E F 3 3 4 5 6 7 8 9 A B C D E F 4 4 5 6 7 8 9 A B C D E F 5 5 6 7 8 9 A B C D E F 6 6 7 8 9 A B C D E F 7 7 8 9 A B C D E F 8 8 9 A B C D E F 9 9 A B C D E F A A B C D E F 10 B B C D E F 10 11 12 13 14 15 16 17 18 19 C C D E F 10 11 12 13 14 15 16 17 18 D D E F 10 11 12 13 14 15 16 17 18 19 E E F 10 11 12 13 14 15 16 17 18 F F 10 11 12 13 14 15 16 17 18 19

10 11

10 11 12

10 11 12 13

A A B B C C D D E E F

10 11 12 13 14

10 11 12 13 14 15

19 1A 1A 1B

10 11 12 13 14 15 16

10 11 12 13 14 15 16 17

19 1A 1B 1C 1A 1B 1C 1D

10 11 12 13 14 15 16 17 18

F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1F

24

1. Arhitectura sistemelor de calcul

Scderea Exemplul 1: x = 1937A i y = A65; x y = ? 1937A A65


18915

Exemplul 2: x = AB0003 i y = BF21; x y = ? AB0 0 03 BF 21


AA4 0 E2

1.5

Reprezentarea intern a numerelor n calculator

1.5.1 Reprezentarea intern a numerelor ntregi


Sistemul de numera ie utilizat pentru reprezentarea datelor ntr-un sistem de calcul electronic este sistemul binar. Reprezentarea numerelor n acest sistem se poate face n mai multe forme, n func ie de mul imea creia i apar ine numrul. Opera iile (calculele) sunt efectuate fie de dispozitive aritmetice specializate pentru fiecare mod de reprezentare, fie prin succesiunea conversie-calcul-conversie, n cazul n care sistemul de calcul nu dispune dect de un singur dispozitiv specializat pentru calcul [2, 22]. Reprezentarea numerelor naturale, numit i reprezentare aritmetic, se realizeaz pe lungimi standard, de 8, 16, 32, 64 bi i. Dac se cunoate numrul de bi i pe care se reprezint un numr natural, se poate stabili numrul maxim admis care poate fi reprezentat. Acest numr maxim se ob ine prin ocuparea tuturor pozi iilor disponibile cu cifra 1. Reprezentarea numerelor ntregi este numit i reprezentare algebric. Ea este asemntoare reprezentrii aritmetice, cu deosebirea c prima pozi ie este ocupat de semnul numrului reprezentat. Prin conven ie, dac pozi ia de semn este 0, numrul este pozitiv, iar dac este 1 numrul este negativ. De regul, numerele ntregi se reprezint pe 8, 16, 32 i 64 bi i. Cunoscnd numrul de pozi ii binare pe care se reprezint un numr ntreg, se poate determina intervalul admis pentru aceast reprezentare. Reprezentarea numerelor negative se poate face n trei forme, astfel: 25

Bazele informaticii. Elemente de programare C/C++

n cod direct, adic reprezentare prin mrime i semn, care coincide cu reprezentarea numerelor ntregi, avnd cifra 1 n pozi ia alocat semnului, urmat de cifrele binare ale numrului. n cod invers, adic reprezentarea n complement fa de 1. Fiecare cifr binar dintr-un numr reprezentat n cod invers este complementul fa de 1. n cod complementar, complementul fa de 2, n care fiecare cifr binar i schimb starea, adunnd apoi 1 la cifra cea mai pu in semnificativ.

1.5.2 Reprezentarea numerelor reale n virgul mobil Numerele reale se reprezint ntr-un sistem de calcul sub form frac ionar, prin intermediul reprezentrii n virgul mobil (flotant). Forma general de reprezentare a unui numr n virgul mobil este:

N = 1, f B E
unde: N - este numrul reprezentat, + - semnul (pozitiv sau negativ), f partea frac ionar, B - baza de numera ie, E - exponentul (puterea). n aceast form, f se numete form normalizat. Reprezentarea numerelor reale n virgul mobil se poate face n dou forme: virgul mobil simpl precizie (pe 32 bi i); virgul mobil dubl precizie (pe 64 bi i). Forma de reprezentare n simpl precizie se prezint astfel:

unde:

32 S

31

C = E + 127

24 23

S bitul de semn care respect aceeai condi ie ca la numerele ntregi: 0 pentru numerele pozitive, 1 pentru cele negative; C caracteristica; E exponentul; M mantisa (partea frac ionar). Pentru a nu se ocupa nc o pozi ie binar pentru semnul exponentului, s-a introdus no iunea de caracteristic. Aceasta este reprezentarea exponentului n exces de 127. Rezult n urma acestei conven ii, c, dac C > 127, exponentul E > 0, iar dac C < 127, atunci E < 0.

26

1. Arhitectura sistemelor de calcul Lungimea mantisei reprezint de fapt precizia de reprezentare a numrului. Forma de reprezentare n dubl precizie folosete un numr de 52 de bi i pentru mantis:

S bitul de semn; C caracteristica; M mantisa. Att la numerele n simpl precizie, ct i la cele n dubl precizie, partea frac ionar este aliniat stnga, adic de la virgul. La formatul de reprezentare n virgul mobil, se observ c cifra 1 din fa a virgulei nu se reprezint. Acest lucru se va avea n vedere, cnd se va interpreta numrul real exprimat n virgul mobil.

unde:

64 S

63 53 52 C = E + 127

1.6

Codificarea datelor

Procedeul de reprezentare a informa iei conform unui anumit format poart denumirea de codificare. Necesitatea utilizrii codurilor se impune pentru a asigura comunica ia ntre utilizator i sistemul de calcul, avnd n vedere c utilizatorului i este specific gndirea zecimal i folosirea caracterelor alfabetului, n timp ce tehnica de calcul recunoate doar sistemul binar. Se numete cod un set de simboluri elementare, mpreun cu o serie de reguli potrivit crora se formeaz aceste simboluri. Opera ia de codificare este prezent pe mai multe nivele de tratare a informa iilor. Ea este prezent pornind de la nivelul sczut al sistemului de calcul (hardware, software de baz), pn la nivelul codificrii n ansamblul sistemului informa ional (coduri de materiale, coduri de produse, codul de bare etc.). Procedura de codificare, la nivelul sistemului informa ional, este n mare parte la alegerea utilizatorului. Cu ct se coboar spre nivelul elementar de prelucrare a informa iei, cu att sistemele de codificare sunt mai rigide, ele fiind standardizate din considerente de compatibilitate n utilizarea tehnicii de calcul. Codurile alfanumerice sunt coduri binare utilizate pentru reprezentarea caracterelor alfanumeric. Prin caractere alfanumerice se n elege: 27

Bazele informaticii. Elemente de programare C/C++

literele mari i mici ale alfabetului; cifrele de la 0 la 9; semnele de punctua ie; operatorii aritmetici i de rela ie; alte caractere speciale. n general, prin caractere alfanumerice se n eleg toate caracterele care pot fi introduse de la tastatura unui calculator. Numrul acestor caractere este mai mare dect 64 i, din acest motiv, pentru reprezentarea binar a caracterelor alfanumerice sunt necesare cel pu in 7 pozi ii binare. Cum numrul de caractere de codificat este limitat i relativ redus, func ia de codificare alfa-numeric se definete tabelar. Cele mai cunoscute coduri alfanumerice sunt:: Codul Extended Binary Coded decimal Interchange Code (EBCDIC) este un cod alfanumeric pe 8 bi i, proiectat pentru codificarea informa iilor, la calculatoarele din seria IBM 360; Codul a fost utilizat pn prin anii 70. Codul American Standard Code for Information Interchange (ASCII) reprezint un standard actual de codificare alfanumeric pe 7 bi i; Este un cod alfanumeric, cu recomandare International Standard Organization (ISO) i este utilizat de multe tipuri de calculatoare i de majoritatea echipamentelor periferice care lucreaz cu aceste calculatoare. Codul UNICODE. Este un cod alfanumeric pe 16 bi i care i propune s defineasc un cod standard pentru simbolurile alfanumerice specifice tuturor limbilor de pe planet. Prin dezvoltarea sistemelor de coduri pe 7 i 8 bi i, aa-numitele coduri pe octet, ctre coduri pe doi octe i sau coduri Double-Bit Code System (DBCS ) s-a creat o familie de coduri care se dorete a fi unificat de sistemul de codificare UNICODE. nlocuirea codului ASCII cu UNICODE ar avea avantajul unificrii sistemului de codificare a caracterelor folosite oriunde n lume. n acelai timp se eviden iaz i unele dezavantaje: utiliznd UNICODE pe 16 bi i, dimensiunea fiierelor text se dubleaz, n compara ie cu cea a fiierelor codificate ASCII; programele care utilizeaz codul ASCII vor trebui adaptate pentru a putea recunoate codul UNICODE.

28

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