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 iniiere 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 funciilor, declararea i utilizarea pointerilor ctre funcii, crearea i exploatarea structurilor autoreferite, precum i bazele programrii orientate obiect. Lucrarea este structurat n nou capitole, nsoite de numeroase aplicaii 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 atenia 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 cunotine 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 aplicaiilor sale. Sunt trecute n revist elementele fundamentale de sintax, pornind de la alfabet i semne de punctuaie, pn la scrierea propoziiilor i/sau frazelor, precum i funcii de intrare/ieire necesare construirii unor interfee minime ntre utilizator i aplicaiile sale. De asemenea, sunt prezentate directivele procesor define i include, acestea fiind unele dintre cele mai utilizate directive procesor la dezvoltarea de aplicaii C/C++, directive folosite n exemplele prezentate n lucrare. Capitolul IV, Tipuri fundamentale de date i clase de memorie, abordeaz probleme privind declararea i iniializarea 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 aplicaiilor. 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, Intruciuni, abordeaz structurile de programare fundamentale (secvenial, alternativ i repetitiv), instruciunile care permit construirea i exploatarea acestor structuri, instruciunile de salt i de inserare n codul surs C/C++ a instruciunilor 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 operaii care pot fi efectuate cu pointeri din aa-numita aritmetic de pointeri. innd seama de importana nelegerii 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, iniializarea 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 funciilor i macrodefiniiilor pentru lucrul cu acestea, prezint modurile de definire i iniializare a irurilor de caractere, funciile specifice de intrare/ieire, precum i o gam larg de funcii destinate lucrului cu iruri de caractere. n scopul facilitrii parcurgerii i nsuirii cunotinelor privind lucrul cu caractere i iruri de caractere, pe parcursul capitolului sunt prezentate aplicaii nsoite de comentarii. Contieni c lucrarea este perfectibil, mulumim anticipat celor care, prin observaiile i recomandrile lor, vor contribui la mbuntirea 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 numeraie 1.2.1. Conversia dintr-o baz oarecare B n baza 10 1.2.2. Conversia din baza 10 ntr-o baz de numeraie oarecare B 1.3. Sistemul binar 1.3.1. Conversia numerelor din sistemul binar n cel zecimal 1.3.2. Operaii 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. Operaii 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 proprieti 2.1.1. Conceptul de algoritm 2.1.2. Proprietile 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. Funcii de intrare de pe stdin 3.2.2. Funcii de ieire pe stdout 3.2.3. Un exemplu de utilizare a funciilor 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 funcie, de indexare, calificare i rezoluie 5.1.2. Operatori unari 5.1.3. Operatori aritmetici 5.1.4. Operatori de lucru pe bii 5.1.5. Operatori de testare a relaiei dintre operanzi 5.1.6. Operatorul condiional 5.1.7. Operatori de atribuire 5.2. Expresii 5.2.1. Clasificarea expresiilor 5.2.2. Conversii i evaluarea expresiilor Capitolul 6. Instruciuni 6.1. Instruciuni pentru descrierea entitilor 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 instruciuni 6.2.1. Instruciunea break 6.2.2. Instruciunea continue 6.2.3. Instruciunea 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. Instruciunea _asm Aplicaii rezolvate Aplicaii 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. Iniializarea 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 iniializarea variabilelor de tip caracter 9.1.2. Funcii de intrare/ieire specifice caracterelor 9.2. iruri de caractere 9.2.1. De la caracter la ir 9.2.2. Declararea i iniializarea variabilelor de tip ir de caractere 9.2.3. Funcii 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 raional a informaiilor prin intermediul mainilor automate. Prelucrarea automat a informaiei s-a realizat o dat cu apariia calculatoarelor electronice. Aadar, scopul utilizrii unui calculator este de a prelucra informaia. Informaia 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 funcionale. Blocurile funcionale, simbolurile acestora i destinaia 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 operaii 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 obinute 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 informaiile 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 menionate n figura 1.1., din punct de vedere al funciilor sale, cel mai important este unitatea central (UC). Aceasta are n structura sa dou uniti care i asigur funcionalitatea: unitatea de memorie intern este destinat, pe de o parte, pstrrii informaiilor de configurare, iar, pe de alt parte, pstrrii datelor i instruciunilor programelor aflate n execuie. Aceste funcii sunt asigurate de: o memoria Read Only Memory (ROM) aflat ntr-un cip pe placa de baz i utilizat pentru a stoca informaii despre hardware i anumite programe care configureaz diverse dispozitive ale calculatorului, lansate n execuie la pornirea calculatorului. Memoria ROM ale urmtoarele caracteristici: nu i pierde coninutul la oprirea calculatorului; 12

1. Arhitectura sistemelor de calcul nu poate fi scris de ctre utilizatorul calculatorului; este inscripionat 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 execuie 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 coninnd 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 funciile procesorului se menioneaz: realizeaz calculele i operaiile logice; execut instruciuni 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 unitile de dischet; controlere pentru porturi paralele; controlere pentru porturi seriale; controlere pentru tastatur i mouse.

13

Bazele informaticii. Elemente de programare C/C++

controleaz operaiile 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 informaiilor prelucrate, se folosesc diverse modaliti de codificare, n funcie de tipul valorilor pe care le iau datele respective.

1.2

Sisteme de numeraie

Un sistem de numeraie este format din totalitatea regulilor de reprezentare a numerelor, folosind un anumit set de simboluri distincte, numite cifre [1, 2, 10, 29]. Sistemele de numeraie sunt de dou tipuri: sisteme de numeraie poziionale; sisteme de numeraie nepoziionale. Sistemele de numeraie poziionale sunt acele sisteme de numeraie pentru care valoarea unei cifre din cadrul unui numr depinde de poziia ocupat de acea cifr n cadrul numrului. Sistemul arab zecimal de numeraie este unul poziional. De exemplu, cifra 8 are valoarea 80 n numrul 53986 i are valoarea 80000 n numrul 85712. Sistemele de numeraie nepoziionale sunt sistemele de numeraie pentru care valoarea unei cifre dintr-un numr nu este unic determinat de poziia cifrei n numr, ci de contextul n care se afl cifra. De exemplu, sistemul roman de numeraie este unul nepoziional. Astfel, valoarea cifrei I n numrul VI este +1, iar n numrul IV este 1. Baza unui sistem de numeraie poziional este dat de numrul de elemente care formeaz alfabetul sistemului de numeraie. Se consider c alfabetul este format din cifre care sunt numere ntregi, consecutive, nenegative. De exemplu, sistemul de numeraie n baza 2 are alfabetul {0,1}, sistemul de numeraie n baza 10 are alfabetul {0,1,2,3,4,5,6,7,8,9}, iar sistemul de numeraie 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 numeraie n baza B, cu alfabetul {0,1,...,B-1}. Un numr raional pozitiv care este reprezentat n baza B prin irul: QB = bn 1bn 2 Kb0 , b1 Kbm are, prin definiie, 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 prii ntregi a numrului: bn 1bn 2 K b0 se obine un ntreg, iar prin conversia prii fracionare: b1b1 K bm se obine un numr subunitar.

1.2.2 Conversia din baza 10 ntr-o baz de numeraie 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 mpriri ntregi, succesive la baza B: n urma fiecrei mpriri se obine un nou ct i un rest; noul ct este dempritul urmtoarei mpriri ntregi; algoritmul se ncheie cnd se obine ctul 0;

15

Bazele informaticii. Elemente de programare C/C++ resturile obinute, ncepnd cu ultimul i pn la primul, reprezint cifrele numrului, de la cea mai semnificativ la cea mai puin semnificativ. se convertete partea fracionar a numrului prin nmuliri succesive, cu baza B: partea fracionar a fiecrui produs constituie denmulitul pentru produsul urmtor; partea fracionar a numrului convertit n baza B este reprezentat de succesiunea obinut din prile ntregi ale tuturor produselor obinute, ncepnd cu primul produs care furnizeaz cifra cea mai semnificativ a rezultatului; algoritmul se ncheie cu un rezultat exact, atunci cnd se obine ca produs parial un ntreg; algoritmul se ncheie cu o aproximare a numrului fracionar, dup un anumit numr de pai, atunci cnd nu se poate obine ca produs parial 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 obinut 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 numeraie zecimal n cel binar i invers, precum i a efecturii operaiilor aritmetice n sistemul de numeraie 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 funcie 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 mpriri succesive la 2. Deoarece mpritorul este 2, resturile vor fi 0 sau 1. mpririle la 2 se continu pn cnd ck = 0 . Astfel, se obine urmtorul ir de egaliti: 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 obine:

17

Bazele informaticii. Elemente de programare C/C++

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

1.3.2 Operaii aritmetice n sistemul binar


n continuare, se vor prezenta cele patru operaii aritmetice elementare: adunarea, scderea, nmulirea i mprirea.

Adunarea
Operaia de adunare n sistemul binar se desfoar conform urmtoarei tabele: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 n situaia 1 + 1 = 10, se scrie la rezultat cifra 0 i se pstreaz 1 pentru poziia 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 poziia de ordin superior. Cifrele care se pstreaz pentru poziia 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 operaiei de scdere n sistem binar este: 0 0 = 0 0 1 = X 1 0 = 1 1 1 = 0 Pentru situaia 0 1 se ia o unitate de la poziia 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 poziia 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 poziia 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 poziia 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 poziia 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

nmulirea
Tabela nmulirii 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

mprirea
Fie x = 11011 i y = 101. Atunci x : y se obine 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 mpriri 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 mprire la 16 este echivalent cu patru mpriri 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: 0 } 3 4 } 1 } B } F } } 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 Operaii aritmetice n sistemul hexazecimal


n hexazecimal, operaiile de adunarea, respectiv scdere, se efectueaz astfel:

Adunarea
Modul de efectuare a operaiei 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 numeraie 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 funcie de mulimea creia i aparine numrul. Operaiile (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 bii. Dac se cunoate numrul de bii pe care se reprezint un numr natural, se poate stabili numrul maxim admis care poate fi reprezentat. Acest numr maxim se obine prin ocuparea tuturor poziiilor disponibile cu cifra 1. Reprezentarea numerelor ntregi este numit i reprezentare algebric. Ea este asemntoare reprezentrii aritmetice, cu deosebirea c prima poziie este ocupat de semnul numrului reprezentat. Prin convenie, dac poziia 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 bii. Cunoscnd numrul de poziii 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 poziia 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 puin semnificativ.

1.5.2 Reprezentarea numerelor reale n virgul mobil Numerele reale se reprezint ntr-un sistem de calcul sub form fracionar, 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 fracionar, B - baza de numeraie, 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 bii); virgul mobil dubl precizie (pe 64 bii). 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 condiie ca la numerele ntregi: 0 pentru numerele pozitive, 1 pentru cele negative; C caracteristica; E exponentul; M mantisa (partea fracionar). Pentru a nu se ocupa nc o poziie binar pentru semnul exponentului, s-a introdus noiunea de caracteristic. Aceasta este reprezentarea exponentului n exces de 127. Rezult n urma acestei convenii, 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 bii pentru mantis:

S bitul de semn; C caracteristica; M mantisa. Att la numerele n simpl precizie, ct i la cele n dubl precizie, partea fracionar este aliniat stnga, adic de la virgul. La formatul de reprezentare n virgul mobil, se observ c cifra 1 din faa 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 informaiei conform unui anumit format poart denumirea de codificare. Necesitatea utilizrii codurilor se impune pentru a asigura comunicaia 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. Operaia de codificare este prezent pe mai multe nivele de tratare a informaiilor. Ea este prezent pornind de la nivelul sczut al sistemului de calcul (hardware, software de baz), pn la nivelul codificrii n ansamblul sistemului informaional (coduri de materiale, coduri de produse, codul de bare etc.). Procedura de codificare, la nivelul sistemului informaional, este n mare parte la alegerea utilizatorului. Cu ct se coboar spre nivelul elementar de prelucrare a informaiei, 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 nelege: 27

Bazele informaticii. Elemente de programare C/C++

literele mari i mici ale alfabetului; cifrele de la 0 la 9; semnele de punctuaie; operatorii aritmetici i de relaie; alte caractere speciale. n general, prin caractere alfanumerice se neleg 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 puin 7 poziii binare. Cum numrul de caractere de codificat este limitat i relativ redus, funcia 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 bii, proiectat pentru codificarea informaiilor, 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 bii; 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 bii 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 bii, aa-numitele coduri pe octet, ctre coduri pe doi octei 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 evideniaz i unele dezavantaje: utiliznd UNICODE pe 16 bii, dimensiunea fiierelor text se dubleaz, n comparaie 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