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

2
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

6
CUPRINS
Prefa 5
Capitolul 1. Arhitectura sistemelor de calcul si bazele aritmetice si 11
logice ale calculatoarelor
1.1. Structura unui calculator electronic 11
1.2. Sisteme de numeraie 14
1.2.1. Conversia dintr-o baz oarecare B n baza 10 15
1.2.2. Conversia din baza 10 ntr-o baz de numeraie 15
oarecare B
1.3. Sistemul binar 17
1.3.1. Conversia numerelor din sistemul binar n cel zecimal 17
1.3.2. Operaii aritmetice n sistemul binar 18
1.4. Sistemul hexazecimal 21
1.4.1. Conversia numerelor din sistemul hexazecimal n 22
zecimal i invers
1.4.2. Conversia numerelor din hexazecimal n binar i invers 22
1.4.3. Operaii aritmetice n sistemul hexazecimal 23
1.5. Reprezentarea intern a numerelor n calculator 25
1.5.1. Reprezentarea intern a numerelor ntregi 25
1.5.2. Reprezentarea numerelor reale n virgul mobil 26
1.6. Codificarea datelor 27

Capitolul 2. Algoritmi i scheme logice 29


2.1. Algoritm concept i proprieti 29
2.1.1. Conceptul de algoritm 29
2.1.2. Proprietile algoritmilor i etapele rezolvrii unei 31
probleme
2.2. Descrierea algoritmilor n pseudocod i cu ajutorul schemelor 32
logice
2.3. Exemple 37
2.4. Probleme propuse 43

Capitolul 3. Prezentarea general a limbajului C/C++ 45


3.1. Elemente de sintax C/C++ 45
3.2. Elemente de comunicare utilizator-program 51
3.2.1. Funcii de intrare de pe stdin 52
3.2.2. Funcii de ieire pe stdout 53
3.2.3. Un exemplu de utilizare a funciilor de intrare ieire 55
3.3. Directivele procesor #include i #define 57

7
3.3.1. Directiva #include 58
3.3.2. Directiva #define 60

Capitolul 4. Tipuri de date i clase de memorie 65


4.1. Tipuri fundamentale de date i constante 65
4.1.1. Tipul void 66
4.1.2. Tipul boolean 66
4.1.3. Tipul caracter 67
4.1.4. Tipul ntreg 70
4.1.5. Tipul real 71
4.2. Clase de memorie 72
4.2.1. Clasa automatic 73
4.2.2. Clasa static 75
4.2.3. Clasa extern 76
4.2.4. Clas register 79

Capitolul 5. Operatori i expresii 81


5.1. Clase de operatori 81
5.1.1. Operatori funcie, de indexare, calificare i rezoluie 81
5.1.2. Operatori unari 82
5.1.3. Operatori aritmetici 89
5.1.4. Operatori de lucru pe bii 90
5.1.5. Operatori de testare a relaiei dintre operanzi 96
5.1.6. Operatorul condiional 96
5.1.7. Operatori de atribuire 98
5.2. Expresii 101
5.2.1. Clasificarea expresiilor 101
5.2.2. Conversii i evaluarea expresiilor 102

Capitolul 6. Instruciuni 107


6.1. Instruciuni pentru descrierea entitilor fundamentale ale 107
programrii structurate
6.1.1. Construirea structurilor liniare 107
6.1.2. Construirea structurilor alternative 108
6.1.3. Construirea structurilor repetitive 116
6.2. Alte instruciuni 121
6.2.1. Instruciunea break 122
6.2.2. Instruciunea continue 123
6.2.3. Instruciunea goto 125

8
6.2.4. Instruciunea _asm 126
6.3. Aplicaii rezolvate 129
6.4. Aplicaii propuse 145

Capitolul 7. Pointeri 147


7.1. Declararea i ncrcarea pointerilor 147
7.1.1. Declararea pointerilor 147
7.1.2. ncrcarea pointerilor 148
7.2. Referirea prin pointeri a obiectelor pointate 154
7.3. Aritmetica de pointeri 155

Capitolul 8. Masive 169


8.1. Declararea masivelor 169
8.2. Referirea elementelor unui masiv 170
8.2.1. Referirea elementelor prin indexare 170
8.2.2. Referirea elementelor prin indirectare 172
8.3. ncrcarea masivelor 175
8.3.1. Iniializarea masivelor la declarare 175
8.3.2. ncrcarea individual a elementelor masivelor 178
8.3.3. ncrcarea masivelor prin citire de pe stdin 180
8.4. Masive de pointeri 182
8.4.1. Manipularea unitar a unor zone de memorie eterogene 183
8.4.2. Alocarea dinamic de memorie pe dimensiuni a 185
masivelor multidimensionale mari i foarte mari

Capitolul 9. Caractere i iruri de caractere 187


9.1. Lucrul cu caractere 187
9.1.1. Definirea, reprezentarea intern i iniializarea 187
variabilelor de tip caracter
9.1.2. Funcii de intrare/ieire specifice caracterelor 189
9.2. iruri de caractere 191
9.2.1. De la caracter la ir 192
9.2.2. Declararea i iniializarea variabilelor de tip ir de 192
caractere
9.2.3. Funcii pentru lucrul cu iruri de caractere 195
9.2.4. Conversia irurilor de caractere n valori numerice 203

Anexa 1. Codul ASCII extins 205


Bibliografie 209

9
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.)

Programe Comenzi
Rezultate
Date
Date

UI UAL UE Rezultate

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;

1
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 (1.1)

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)

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
M M M M
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
101 101
==11
101
=111
101 ctul este 101, iar restul 10.
=10

1.4 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
, deci 7A516 = 195710 .
= 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
121=7 16 + 9 , deci 193710 = 79116
= 0 16 + 7
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:

}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 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 A B C D E F

0 0 1 2 3 4 5 6 7 8 9 A B C D E F

1 1 2 3 4 5 6 7 8 9 A B C D E F 10

2 2 3 4 5 6 7 8 9 A B C D E F 10 11

3 3 4 5 6 7 8 9 A B C D E F 10 11 12

4 4 5 6 7 8 9 A B C D E F 10 11 12 13

5 5 6 7 8 9 A B C D E F 10 11 12 13 14

6 6 7 8 9 A B C D E F 10 11 12 13 14 15

7 7 8 9 A B C D E F 10 11 12 13 14 15 16

8 8 9 A B C D E F 10 11 12 13 14 15 16 17

9 9 A B C D E F 10 11 12 13 14 15 16 17 18

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

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

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

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

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

F 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:

32 31 24 23 1
S C = E + 127 M
unde:
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:

64 63 53 52 1
S C = E + 127 M
unde:
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.

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