tipuri de date structurate

Upload: gabrielamaracine

Post on 20-Jul-2015

719 views

Category:

Documents


2 download

TRANSCRIPT

CUPRINSCapitolul I INTRODUCERE N ARHITECURA SISTEMELOR DE CALCUL............................... 1

1.1. Importan a limbajului C....................................................1 1.2 Arhitectura de baz a unui calculator ................................4 1.2.1 Microprocesorul .........................................................6 1.2.2 Memoria .....................................................................8 1.2.3 Echipamentele periferice..........................................10 1.3. Programarea calculatorului .............................................13 1.3.1. Sistemul de operare .................................................14 1.3.2. Tipuri de fiiere .......................................................17 1.3.3. Construirea fiierului executabil .............................18Capitolul II REPREZENTAREA DATELOR N CALCULATOR................. 23 2.1. Reprezentarea intern/extern a numerelor...........................24 2.2. Reprezentarea extern a numerelor ......................................25

2.2.1. Reprezentarea extern a numerelor ntregi..............26 2.2.2. Reprezentarea extern a numerelor reale ................29 2.3 Reprezentarea intern a numerelor ..................................31 2.3.1. Reprezentarea intern a numerelor ntregi ..............31 2.3.2 Adunarea, scderea i nmul irea numerelor ntregi.33 2.3.3 Reprezentarea intern a numerelor reale..................35 Game de reprezentare pentru numerele reale....................46 2.3.5. Codificare BCD.......................................................47Capitolul III ELEMENTELE DE BAZ ALE LIMABJULUI C...................... 49

3.1. Crearea i lansarea n execu ie a unui program C...........49 3.2. Structura unui program C ...............................................51 3.3. Mul imea caracterelor .....................................................53 I

3.3.1. Litere i numere.......................................................53 3.3.2. Caractere whitespace...............................................53 3.3.3. Caractere speciale i de punctua ie..........................54 3.3.4. Secven e escape.......................................................54 3.4. Identificatori ...................................................................56 3.5. Cuvintele cheie ale limbajului C.....................................56 3.6. Constante ........................................................................56 3.6.1. Constante caracter ...................................................57 3.6.2. Constante ntregi .....................................................57 3.6.3. Constante n virgul mobil ....................................57 3.6.4. Constante ir............................................................58 3.6.5. Constanta zero .........................................................59 3.6.6. Obiecte constante ....................................................59 3.6.7. Enumerri ................................................................60Capitolul IV OPERANZI I OPERATORI N C................................................ 61

4.1. Operanzi..........................................................................61 4.2. Operatori .........................................................................61 4.2.1. Operatori aritmetici .................................................62 4.2.2. Operatori de incrementare i decrementare.............63 4.2.3. Operatori rela ionali ................................................63 4.2.4. Operatori logici .......................................................64 4.2.5. Operatori logici la nivel de bit.................................65 4.2.6. Operatorul de atribuire ............................................70 4.2.7. Operatorul sizeof .....................................................70 4.2.8. Operatorul ternar ? .................................................71 4.2.9. Operatorul virgul ...................................................72 4.2.10. Operatorul de for are a tipului sau de conversie explicit (expresie cast) ........................................72 4.2.11. Operatorii parantez ..............................................73 4.2.12. Operatorul adres ..................................................73 4.2.13. Al i operatori ai limbajului C ................................74 4.2.14. Regula conversiilor implicite i preceden a operatorilor ...........................................................74 II

Capitolul V INSTRUC IUNI .............................................................................. 76

5.1. Instruc iuni etichetate (instruc iunea goto) .....................76 5.2. Instruc iuni expresie........................................................77 5.3. Instruc iuni compuse.......................................................77 5.4. Instruc iuni de selec ie ....................................................78 5.4.1. Instruc iunea if.........................................................78 5.4.2. Instruc iuni de selec ie multipl: if - else if.............79 5.4.3. Instruc iunea switch.................................................80 5.5. Instruc iuni repetitive......................................................82 5.5.1. Instruc iunea for ......................................................82 5.5.2. Instruc iunea while ..................................................86 5.5.3. Instruc iunea do-while.............................................87 5.5.4. Bucle ncuibate........................................................89 5.5.5. Instruc iunea break ..................................................91 5.5.6. Instruc iunea continue .............................................92Capitolul VI TIPURI DE DATE STRUCTURATE ............................................ 93

6.1. Tablouri unidimensionale ...............................................93 6.1.1. Constante ir............................................................94 6.1.2. Ini ializarea vectorilor de caractere .........................95 6.1.3. Func ii pentru prelucrarea irurilor (fiierul antet string.h).................................................................97 6.2. Tablouri cu dou dimensiuni (matrice).........................100 6.2.1. Ini ializarea matricelor ..........................................100 6.2.2. Tablouri bidimensionale de iruri .........................101 6.3. Tablouri multidimensionale..........................................101 6.4. Structuri ........................................................................102 6.4.1. Tablouri de structuri ..............................................104 6.4.2. Introducerea structurilor n func ii ........................110 6.4.3. Tablouri i structuri n structuri.............................114 6.5. Uniuni ...........................................................................114 6.6. Enumerri .....................................................................116

III

Capitolul VII POINTERI ...................................................................................... 118

7.1. Operatori pointer...........................................................118 7.1.1. Importan a tipului de baz.....................................120 7.1.2. Expresii n care intervin pointeri...........................120 7.2. Pointeri i tablouri.........................................................125 7.2.1. Indexarea pointerilor .............................................126 7.2.2. Pointeri i iruri .....................................................128 7.2.3. Preluarea adresei unui element al unui tablou.......129 7.2.4. Tablouri de pointeri...............................................129 7.2.5. Pointeri la pointeri.................................................130 7.2.6. Ini ializarea pointerilor..........................................131 7.2.7. Alocarea dinamic a memoriei..............................132 7.2.8. Pointeri la structuri ................................................134 7.2.9. Structuri dinamice liniare de tip list ...................137Capitolul VIII FUNC II ......................................................................................... 150

8.1. Forma general a unei func ii .......................................150 8.2. Rentoarcerea dintr-o func ie ........................................152 8.3. Valori returnate .............................................................153 8.4. Domeniul unei func ii ...................................................154 8.4.1. Variabile locale .....................................................155 8.4.2. Parametri formali...................................................156 8.4.3. Variabile globale ...................................................157 8.5. Apelul func iilor............................................................161 8.6. Apelul func iilor avnd ca argumente tablouri .............163 8.7. Argumentele argc i argv ale func iei main() ...............166 8.8. Func ii care returneaz valori nentregi ........................168 8.9. Returnarea pointerilor...................................................169 8.10. Func ii de tip void .......................................................172 8.11. Func ii prototip ...........................................................173 8.12. Func ii recursive .........................................................174 8.13. Clase de memorare (specificatori sau atribute)...........176 8.14. Pointeri la func ii ........................................................181 IV

Capitolul IX PREPROCESAREA ...................................................................... 183

9.1. Directive uzuale ............................................................183 9.2. Directive pentru compilare condi ionat ......................185 9.3. Modularizarea programelor .........................................189Capitolul X INTRRI/IEIRI ........................................................................... 194

10.1. Func ii de intrare i ieire - stdio.h ...............................194 10.2. Opera ii cu fiiere .......................................................197 10.3. Nivelul inferior de prelucrare a fiierelor ...................199 10.3.1. Deschiderea unui fiier........................................200 10.3.2. Scrierea ntr-un fiier...........................................204 10.3.3. Citirea dintr-un fiier...........................................206 10.3.4. nchiderea unui fiier...........................................208 10.3.5. Pozi ionarea ntr-un fiier....................................208 10.3.6 tergerea unui fiier .............................................210 10.3.7. Exemple de utilizare a func iilor de intrare/ieire de nivel inferior .......................................................211 10.4. Nivelul superior de prelucrare a fiierelor ..................216 10.4.1. Func ia fopen() ....................................................216 10.4.2. Func ia fclose()....................................................218 10.4.3. Func iile rename() i remove()...........................219 10.4.4. Func ii de tratare a erorilor..................................219 10.4.5. Func ii cu acces direct .........................................220 10.4.6. Func ii pentru pozi ionare ...................................221 10.4.7. Ieiri cu format ....................................................223 10.4.8. Intrri cu format ..................................................226 10.4.9. Func ii de citire i scriere a caracterelor..............228Capitolul XI UTILIZAREA ECRANULUI N MOD TEXT ........................... 233

11.1. Setarea ecranului n mod text .....................................233 11.2. Definirea unei ferestre ................................................234 11.3. tergerea unei ferestre ................................................234 11.4. Deplasarea cursorului .................................................235 V

11.5. Setarea culorilor..........................................................235 11.6. Func ii pentru gestiunea textelor ................................236Capitolul XII UTILIZAREA ECRANULUI N MOD GRAFIC....................... 240

12.1. Ini ializarea modului grafic.........................................240 12.2. Gestiunea culorilor......................................................242 12.3. Setarea ecranului.........................................................244 12.4. Utilizarea textelor n mod grafic.................................244 12.5. Gestiunea imaginilor...................................................246 12.6. Desenarea i colorarea figurilor geometrice ...............247Capitolul XIII FUNC II MATEMATICE............................................................ 253

13.1 Func ii trigonometrice .................................................253 13.2 Func ii trigonometrice inverse .....................................254 13.3 Func ii hiperbolice .......................................................254 13.4 Func ii exponen iale i logaritmice..............................254 13.5 Generarea de numere aleatoare....................................255 13.6 Alte tipuri de func ii matematice .................................256Capitolul XIV ELEMENTE DE PROGRAMARE AVANSAT ....................... 257

14.1 Gestionarea memoriei ..................................................257 14.1.1 Memoria conven ional........................................257 14.1.2 Memoria expandat ..............................................260 14.1.3 Memoria extins...................................................260 14.1.4 Stiva......................................................................260 14.2 Servicii DOS i BIOS ..................................................261 14.2.1 Serviciile BIOS ....................................................262 14.2.2 Serviciile DOS......................................................266 14.3 Bibliotecile C ...............................................................270 14.3.1 Reutilizarea unui cod obiect.................................270 14.3.2 Lucrul cu fiiere bibliotec...................................270 14.3 Fiierele antet...............................................................271BIBLIOGRAFIE ............................................................................ 272

VI

Capitolul I INTRODUCERE N ARHITECURA SISTEMELOR DE CALCUL

1.1. Importan a limbajului CCreat n anul 1972 de programatorii de sistem Dennis M. Ritchie i Brian W. Kernighan de la Bell Laboratories cu scopul de a asigura implementarea portabil a sistemului de operare UNIX, C-ul este astzi unul din cele mai cunoscute i puternice limbaje de programare. Eficient, economic i portabil, C-ul este o alegere bun pentru realizarea oricrui tip de programe, de la editoare de texte, jocuri cu facilit i grafice, programe de gestiune i pentru calcule tiin ifice, pn la programe de sistem, constituind unul dintre cele mai puternice instrumente de programare. Adesea referit ca limbaj portabil, C-ul permite transferul programelor ntre calculatoare cu diferite procesoare i n acelai timp faciliteaz utilizarea caracteristicilor specifice ale mainilor particulare, programele scrise n C fiind considerate cele mai portabile. Dac evolu ia limbajelor de programare a adus n prim plan nume ca FORTRAN, LISP, COBOL, ALGOL-60 sau PASCAL, unele cu rspndire mai mult academic fiind folosite pentru a prezenta conceptele de baz sau conceptele avansate de programare ca de pild ALGOL-60 sau PASCAL, altele cu rspndire industrial masiv ca de pild FORTRAN i COBOL limbajul C a ptruns mai lent, dar foarte sigur. Realitatea arat clar c, n momentul de fa , pia a productorilor de programe este dominat net de C i de variantele evoluate ale acestuia. Elementele principale care au contribuit la succesul C-ului sunt urmtoarele: - modularizarea programelor ce d posibilitatea unui singur programator s stpneasc relativ uor programe de zeci de mii de linii de surs;

1

- capacitatea de programare att la nivel nalt ct i la nivel sczut ceea ce d posibilitatea utilizatorului de a programa fie fr a sim i sistemul de operare i maina de calcul, fie la un nivel apropiat de sistemul de operare ceea ce permite un control foarte bun al eficien ei programului din punct de vedere vitez/memorie; - portabilitatea programelor ce permite utilizarea programelor scrise n C pe o mare varietate de calculatoare i sisteme de operare; - facilit ile de reprezentare i prelucrare a datelor materializate printr-un numr mare de operatori i func ii de bibliotec ce fac programarea mult mai uoar. Prin anii 80 interesul pentru programarea orientat pe obiecte a crescut, ceea ce a condus la apari ia de limbaje care s permit utilizarea ei n scrierea programelor. Limbajul C a fost dezvoltat i el n aceast direc ie i n anul 1980 a fost dat publicit ii limbajul C++, elaborat de Bjarne Stroustrup de la AT&T. La ora actual, majoritatea limbajelor de programare moderne au fost dezvoltate n direc ia programrii orientate pe obiecte. Limbajul C++, ca i limbajul C, se bucur de o portabilitate mare i este implementat pe o gam larg de calculatoare ncepnd cu microcalculatoare i pn la cele mai mari supercalculatoare. Limbajul C++ a fost implementat pe microcalculatoarele compatibile IBM PC n mai multe variante. Cele mai importante implementri ale limbajelor C++ pe aceste calculatoare sunt cele realizate de firmele Microsoft i Borland. Conceptele programrii orientate pe obiecte au influen at n mare msur dezvoltarea limbajelor de programare n ultimul deceniu. De obicei, multe limbaje au fost extinse astfel nct ele s admit conceptele mai importante ale programrii orientate pe obiecte. Uneori s-au fcut mai multe extensii ale aceluiai limbaj. De exemplu, limbajul C++ are ca extensii limbajul E ce permite crearea i gestiunea obiectelor persistente, lucru deosebit de important pentru sistemele de gestiune a bazelor de date, limbajul O ce ncearc s mbine facilit ile de nivel nalt cu cele ale programrii de sistem, limbajul Avalon/C++ destinat calculului distribuit, i nu n ultimul rnd binecunoscutul de acum limbaj Java, specializat n aplica ii Internet. Interfe ele utilizator au atins o mare dezvoltare datorit facilit ilor oferite de componentele hardware ale diferitelor calculatoare. n principiu, ele simplific interac iunea dintre programe

2

i utilizatorii acestora. Astfel, diferite comenzi, date de intrare sau rezultate pot fi exprimate simplu i natural utiliznd diferite standarde care con in ferestre, bare de meniuri, cutii de dialoguri, butoane, etc. Cu ajutorul mouse-ului toate acestea pot fi accesate extrem de rapid i uor fr a mai fi nevoie s cunoti i s memorezi o serie ntreag comenzi ale sistemului de operare sau ale limbajului de programare. Toate acestea conduc la interfe e simple i vizuale, accesibile unui segment foarte larg de utilizatori. Implementarea interfe elor este mult simplificat prin utilizarea limbajelor orientate spre obiecte, aceasta mai ales datorit posibilit ii de a utiliza componente standardizate aflate n biblioteci specifice. Importan a aplicrii conceptului de reutilizare a codului rezult din faptul c interfe ele utilizator adesea ocup 40% din codul total al aplica iei. Firma Borland comercializeaz o bibliotec de componente standardizate care pot fi utilizate folosind limbajul C++, bibliotec cunoscut sub numele Turbo Vision. De obicei, interfe ele utilizator gestioneaz ecranul n mod grafic. O astfel de interfa utilizator se numete interfa utilizator grafic. Una din cele mai populare interfe e utilizator grafice pentru calculatoarele IBM PC este produsul Windows oferit de firma Microsoft. Windows este un mediu de programare ce amplific facilit ile oferite de sistemul de operare MS-DOS. Aplica iile Windows se pot dezvolta folosind diferite medii de dezvoltare ca: Turbo C++ pentru Windows, Pascal pentru Windows, Microsoft C++, Microsoft Visual Basic, Visual C i Visual C++. Componentele Visual permit specificarea n mod grafic a interfe ei utilizator, a unei aplica ii, folosind mouse-ul, iar aplica ia propriu-zis se programeaz ntr-un limbaj de tip Basic, C sau C++. Dac n ani 70 se considera c o persoan este rezonabil s se poat ocupa de o aplica ie de 4-5 mii de instruc iuni, n prezent, n condi iile folosirii limbajelor de programare orientate pe obiecte, aceast medie a ajuns la peste 25 de mii de instruc iuni. Un limbaj de programare trebuie privit nu doar la suprafa a sa sintax i mod de butonare a calculatorului pentru o implementare particular ci mai ales n profunzime, prin conceptele pe care se bazeaz, prin stilul de programare, prin modul de structurare a aplica iei i, implicit, a programului, prin filozofia de rezolvare a

3

problemelor folosind limbajul. Din aceste puncte de vedere, C-ul nu poate lipsi din cultura unui programator, iar pentru un profesionist Cul este, i mai mult, o necesitate vital, acesta fiind piatra de temelie pentru n elegerea i utilizarea eficient a limbajelor de nivel nalt orientate pe obiecte i Visual.

1.2 Arhitectura de baz a unui calculatorCalculatoarele de tip PC (calculatoare personale) reprezint cele mai rspndite i mai utilizate dintre calculatoare, datorit gradului de accesibilitate i pre ului relativ sczut. Indiferent de tipul calculatorului, modul general de concep ie, de alctuire i func ionare este acelai. Calculatorul este o main programabil. Dou dintre principalele caracteristici ale unui calculator sunt: 1. Rspunde la un set specific de instruc iuni ntr-o manier bine definit. 2. Calculatorul poate executa o list prenregistrat de instruc iuni, numit program. Calculatoarele moderne sunt electronice i numerice. Partea de circuite electrice i electronice precum i conexiunile fizice dintre ele se numete hardware. Totalitatea programelor precum i datele aferente acestor programe poart denumirea de software.Echipamente de ieire

Echipamente de stocare date (HDD, FDD, CD-ROM, etc.)

UPC Unitatea de procesare i control

Echipamente de intrare

Fig.1.1 Configura ia standard pentru utilizator

4

Partea hardware a unui calculator este format din totalitatea componentelor sale fizice. Toate calculatoarele de uz general necesit urmtoarele componente hardware: memorie: Permite calculatorului s stocheze, cel pu in temporar, date i programe. dispozitive de stocare externe: Permit calculatoarelor s stocheze permanent programe i mari cantit i de date. Cele mai uzuale dispozitive de stocare extern sunt HDD (hard disk drives), FDD (floppy disk drive) i CD-ROM (Compact Disk-Read Only Memory) sau CD-R/W (Compact Disk-Read/Write). dispozitive de intrare : n mod uzual sunt reprezentate de tastatur (keyboard) i de mouse. Aceste dispozitive reprezint calea uzual de introducere a datelor i instruc iunilor care gestioneaz func ionarea unui calculator. dispozitive de ieire: Reprezint modalitatea prin care calculatorul transmite utilizatorului uman rezultatele execu iei programelor. Ecranul monitorului sau imprimanta sunt astfel de dispozitive uzuale. unitatea de procesare i control (UPC) : Este partea principal a unui calculator deoarece este componenta care execut instruc iunile. n mod uzual aceast unitate de procesare i control este reprezentat de un microprocesor care se plaseaz pe placa de baz (mainboard) a calculatorului mpreun cu memoria intern RAM. n plus fa de aceste componente orice calculator este prevzut cu o magistral (bus) prin care se gestioneaz modalitatea de transmitere a datelor ntre componentele de baz ale calculatorului. Magistrala reprezint o colec ie de trasee electrice care leag microprocesorul de dispozitivele de intrare/ieire i de dispozitivele interne/externe de stocare a datelor. Putem distinge magistrala de date, magistrala de adrese i magistrala de comand i control. n figura 1.2 este prezentat interac iunea dintre componentele HARD principale ale unui calculator. Calculatoarele pot fi n general clasificate dup dimensiuni sau putere de calcul. Nu se poate face ns la ora actual o distinc ie net ntre urmtoarele categorii de calculatoare:

PC (Personal Computer): Un calculator de dimensiuni mici, monoutilizator (single-user), bazat pe un microprocesor. n plus 5

acesta este dotat standard cu tastatur, mouse, monitor i dispozitive periferice de stocare a datelor.Memoria secundar Echipament de intrare UNITATEA CENTRAL Echipament de ieire

Memoria principal Fig. 1.2 Arhitectura minimal a unui sistem de calcul

sta ii de lucru (workstation): Un calculator monoutilizator de mare putere. Aceasta este asemntor unui PC dar are un microprocesor mai puternic i un monitor de nalt calitate (rezolu ie mai mare). minicalculator (minicomputer): Un calculator multiutilizator (multi-user) capabil s lucreze simultan cu zeci sau chiar sute de utilizatori. mainframe: Un calculator multiutilizator capabil s lucreze simultan cu sute sau chiar mii de utilizatori. supercomputer: Un computer extrem de rapid care poate executa sute de milioane de opera ii ntr-o secund.

1.2.1 MicroprocesorulMicroprocesorul este cea mai important i cea mai scump component a unui calculator de performan ele acesteia depinznd n mare msur rezultatele ntregului sistem. Din punct de vedere fizic, microprocesorul este un cip ce con ine un circuit integrat complex ce i permite s prelucreze informa ii prin executarea unor opera ii logice i matematice diverse (adunri, scderi, nmul iri, mpr iri, comparri de numere). El este compus din dou pr i importante: unitatea de execu ie (EU Execution Unit) i unitatea de interfa a magistralei de date (BIU Bus Interface Unit). Prima component realizeaz efectiv

6

opera iile, iar cea de-a doua are func ia de transfer a datelor de la i nspre microprocesor. Microprocesorul reprezint de fapt unitatea central a unui calculator i ndeplinete o serie de activit i specifice cum ar fi: execut opera ii aritmetice i logice, decodific instruc iuni speciale, transmite altor cipuri din sistem semnale de control. Toate aceste opera ii sunt executate cu ajutorul unor zone de memorie ale microprocesorului, numite registre. Orice microprocesor are un set finit de instruc iuni pe care le recunoate i pe care le poate executa. Calculatoarele IBM PC folosesc procesoare INTEL sau compatibile, realizate de alte companii cum ar fi: AMD, NexGen, CYRIX. Numele microprocesorului este folosit la identificarea calculatorului. Se folosesc frecvent expresii de tipul calculator 386, calculator 486, calculator Pentium II, etc. n 1971 firma Intel a fost abordata de o companie Japoneza, acum disprut, pentru a construi un circuit dedicat pentru un nou calculator. Designerul Ted Hoff a propus o solu ie programabil, de uz general, i astfel s-a nscut circuitul Intel 4004. Au urmat la scurt timp chipurile 4040 si 8008 dar lor le lipseau multe din caracteristicile microprocesoarelor aa cum le tim noi azi. n 1974 Intel a prezentat pentru prima oar circuitul Intel 8080 care a fost folosit in sistemele Altair i IMSAI. Curnd dup aceea au aprut procesoarele Motorola 6800 i 6502 de la MOS Technology. Doi dintre proiectan ii de la Intel au prsit firma, crend corpora ia ZILOG care a produs chipul Z80 (compatibil cu 8080 dar cu set de instruc iuni mai puternic i de dou ori mai rapid. Cipul Intel 4004 a fost primul procesor comercial, lansat la sfritul anului 1971. La un pre de circa 200$ i nglobnd 2300 de tranzistori, cipul 4004 dezvolta mai mult putere de calcul dect ENIAC, primul calculator electronic, cu 25 de ani n urma. Fa de cele 18.000 de tuburi cu vacuum ce ocupau 900 metri cubi, procesorul 4004 putea dezvolta 60.000 de opera ii pe secund. Aceast inven ie a contribuit la revolu ionarea domeniilor de aplica ii ale computerelor, dnd startul unui adevrat galop de inova ii tehnologice. Urmtorul pas a fost n 1980, cnd IBM a inclus un procesor Intel n arhitectura primului PC. Astzi PC-urile sunt pretutindeni n jurul nostru. Un copil care lucreaz la o maina ce incorporeaz un procesor Pentium Pro beneficiaz de mult mai mult putere de calcul dect dispunea

7

guvernul SUA n perioada lansrii primelor echipaje umane ctre Lun. ntr-un numr aniversar al publica iei Communications of the ACM, Gordon Moore, co-fondator al companiei Intel, era optimist n privin a evolu iei PC-urilor i a microprocesoarelor: "complexitatea microprocesoarelor, care se msoar prin numrul de tranzistori pe cip, s-a dublat aproape constant la fiecare 18 luni, de la apari ia primului prototip 4004. Aceasta evolu ie exponen ial a determinat o continu cretere a performan elor PC-urilor i o scdere a costului procesului de calcul. Pe cnd n 1991 un PC bazat pe procesorul Intel 486 costa aproape 225$ pentru o performan de un milion de instruc iuni pe secund (MIPS), astzi, un sistem desktop ce utilizeaz un cip Pentium Pro este evaluat la circa 7$ pe MIPS. Nu se ntrevede nici o dificultate care s frneze aceast rat de dezvoltare".

1.2.2 MemoriaMicroprocesorul are capacitatea de a memora date care urmeaz a fi prelucrate, ct i rezultatele intermediare. Se observ c rolul su principal este de a prelucra i transmite informa iile i rezultatele i deci capacitatea sa de memorare este mic neputnd stoca programe. De aceea, un calculator necesit i o memorie care s gzduiasc date i programe. Memoria este format din punct de vedere fizic din cipuri ce stocheaz informa ia sub forma a dou niveluri de tensiune ce corespund valorilor 0 i 1 din sistemul de numera ie. Celulele de baz ale memoriei (ce pot avea valoarea 0 sau 1) se numesc bi i i ele reprezint particulele cele mai mici de informa ie din calculator. Pentru citirea informa iilor nu se folosesc bi i n mod individual ci acetia sunt grupa i ntr-o succesiune. Astfel o succesiune de 8 bi i formeaz un octet (sau un byte) aceasta reprezentnd unitatea de msur a capacit ii de memorie. Deoarece reprezentarea numerelor n calculator se face n baza 2 i nu n baza 10, aa cum suntem obinui i n mod normal s lucrm, i multiplii unui byte vor fi puteri ale lui 2, astfel: 1 KB=210B=1024 B 1 MB=210KB=1 048 576 B 1 GB=210MB=230 B Abrevierile K (kilo), M (mega), G (giga) se scriu de obicei cu litere mari i reprezint mii, milioane i, respectiv, miliarde.

8

Memoria unui calculator are dou componente: memoria principal (intern) i memoria secundar (extern). Memoria intern este memoria ce poate fi accesat n mod direct de ctre microprocesor i n care sunt ncrcate programele nainte de a fi executate de ctre microprocesor. Dac primele procesoare puteau accesa doar 1 MB de memorie astzi un procesor Pentium poate accesa peste 256 MB. Memoria principal este format din dou tipuri de circuite: cip-uri ROM i cip-uri RAM. Circuitele de tip ROM (Read Only Memory) au memorate programele care controleaz ini ial calculatorul (sistemul de operare). Aceste memorii pot fi doar citite (con inutul lor nu poate fi modificat). nscrierea con inutului acestor memorii se face de ctre fabricant, iar opera iunea de nscriere cu programe se mai numete arderea memoriilor. Circuitele de tip RAM (Random Acces Memory ) sunt memorii la care utilizatorul are acces i al cror con inut se terge la deconectarea calculatorului. n memoria RAM informa ia este stocat temporar. De exemplu, programele de aplica ii curente i datele asociate acestor aplica ii sunt ncrcate n memoria RAM nainte de a fi prelucrate de ctre microprocesor. Deoarece capacitatea de memorie a unui calculator nu poate fi att de mare nct s poat pstra toate programele pe vrem s le executm, a aprut necesitatea existen ei unor memorii externe, care s fie solicitate la nevoie. Rolul acestora l joac discurile i ele pot fi asemnate cu cr ile dintr-o bibliotec pe care le putem consulta ori de cte ori avem nevoie de anumite informa ii. Primele discuri aprute pentru PC-uri, numite i dischete, floppy disk-uri sau discuri flexibile, permiteau stocarea a maximum 160 KB de informa ie. Astzi mai exist doar dischete cu diametrul de 3.5 inch cu capacitatea de 1,44 MB. Existen a acestora pare a fi pus ns n pericol de apari ia CD-urilor reinscriptibile a cror capacitate de memorare depete 700 MB iar evolu ia tehnologic, din ce n ce mai rapid, d semne c lucrurile nu se vor opri aici. Dischetele folosesc metode magnetice de memorare a informa iei motiv pentru care ele se mai numesc i suporturi magnetice de informa ie. Principala component a unui calculator utilizat pentru memorarea programelor o reprezint hard discul. Acesta poate fi asemnat cu o dischet de mare capacitate, integrat ntr-o unitate

9

ncapsulat. Ini ial, pu ine PC-uri prezentau hard discuri, dar cum pre urile acestora au sczut considerabil, iar performan ele i capacit ile au crescut, n prezent toate calculatoarele prezint acest dispozitiv. n clipa de fa , capacitatea de memorare a unui hard disc a depit valoarea de 40 de GB.

1.2.3 Echipamentele perifericeComunicarea om-main se realizeaz cu ajutorul echipamentelor periferice prin intermediul crora utilizatorul poate programa sau da anumite comenzi calculatorului sau poate vizualiza rezultatele ob inute de ctre anumite programe. Principalele echipamente periferice ale unui calculator sunt urmtoarele: tastatura, mouse-ul, scanner-ul, monitorul i imprimanta. Ele pot fi grupate n echipamente de intrare cele prin care calculatorul primete informa ii sau comenzi (tastatur, mouse, scanner) - i echipamente de ieire cele prin care calculatorul transmite informa ii n exterior (monitor, imprimant). n continuare sunt prezentate cteva caracteristici ale fiecrui echipament. Tastatura este principalul dispozitiv de intrare al calculatorului prin intermediul cruia se transmit comenzi ctre unitatea central. Cuplarea la calculator a tastaturii se face prin intermediul unui cablu de conectare. Din punct de vedere al dispunerii tastelor, tastatura se aseamn destul de mult cu cea a unei maini de scris dar are i pr i care o individualizeaz. Primele tastaturi au avut 83/84 de taste, pentru ca, ulterior, ele s fie mbog ite prin dublarea tastelor existente sau adugarea altora noi, ajungndu-se la 101/102 taste. Din punct de vedere al func ionalit ii lor ele pot fi mpr ite n patru categorii: - taste alfanumerice; - taste cu scopuri speciale; - taste direc ionale i numerice; - taste func ionale. Tastele alfanumerice con in literele, cifrele i semnele de punctua ie i ocup partea central a tastaturii. Ac ionarea unei astfel de taste determin apari ia caracterului corespunztor pe ecranul calculatorului. Tastele cu scopuri speciale sunt aezate n acelai bloc cu tastele alfanumerice i determin efectuarea anumitor ac iuni fr

10

nscrierea de caractere pe ecran. Tastele de micare se afl situate n partea dreapt a tastaturii i ele func ioneaz n dou moduri, care pot fi comutate prin ac ionarea altei taste, aflate deasupra lor, pe care scrie NumLock. Dac ledul corespunztor acestei taste este aprins, modul de lucru este numeric, n caz contrar fiind comutat pe semnifica ia direc ional. Tastele func ionale sunt un grup de 12 taste situate n partea de sus a tastaturii avnd pe ele litera F urmat de un numr ntre 1 i 12. Ac ionarea acestor taste determin efectuarea unor opera ii specifice de la program la program. Mouse-ul este tot un echipament de intrare mai uor de manevrat dect tastatura dar care poate efectua mai pu ine opera ii. Totui, foarte multe aplica ii (n special aplica iile grafice) nu mai pot fi concepute fr mouse. Un mouse are aspectul unei buc i de spun, uor manevrabil, avnd dedesubt o bil pozi ionabil, cu sensibilitate i vitez reglabile. Micarea maouse-ului pe o suprafa plan este corelat cu deplasarea pe ecran a unui cursor cu o form deosebit: cruciuli , sgeat, etc. Declanarea unei ac iuni se face prin pozi ionarea cursorului n zona corespunztoare i apsarea unuia dintre butoanele aflate pe partea posterioar. Ini ial un mouse avea dou sau trei butoane. Acum exist mouse-uri cu 5 butoane i 2 roti e ce ndeplinesc o serie de func ii corespunztoare unor taste speciale. Folosirea mouse-ului uureaz mult munca utilizatorilor, nemaifiind necesar ca acetia s memoreze numrul relativ mare de comenzi corespunztor fiecrui produs, ca n situa ia n care se folosete numai tastatura. Utilitatea mouse-ului este i mai evident n cazul aplica iilor grafice. De altfel, WINDOWS este un sistem de operare creat special pentru lucrul cu mouse-ul. Scanner-ul reprezint dispozitive care se cupleaz la un PC i cu care, prin intermediul unui software adecvat, se pot capta imagini, fotografii, texte etc., n vederea unei prelucrri ulterioare. Astfel se pot manevra imagini foto, se pot crea efecte grafice speciale, care nu se pot ob ine prin metode tradi ionale. Dup captare, imaginea poate fi prelucrat, mutat, mrit, micorat, rotit, colorat, umbrit, suprapus cu alt imagine etc. Cu un software de recunoatere optic a caracterelor datele sau documentele tiprite pe coli de hrtie pot fi transformate n fiiere, putndu-se realiza chiar o stocare a lor sub form de arhiv.

11

Monitorul - Sistemul video este format din dou pr i: un adaptor (plac) video i un monitor sau display. Adaptorul video reprezint dispozitivul care realizeaz legtura (interfa a) cu calculatorul i se afl n interiorul acestuia. El va fi corespunztor tipului de monitor video care i este ataat. Adaptorul video realizeaz o rezolu ie orizontal i una vertical. Rezolu ia reprezint numrul de elemente, n cazul de fa puncte pixeli care pot fi afiate pe ecran. De exemplu, un monitor VGA, n mod video, are o rezolu ie de 640 x 480 pixeli. Standardul VGA (Video Graphics Array) a fost introdus de ctre IBM o dat cu calculatoarele PS/2, iar modurile video VGA reprezint un superset al standardelor video anterioare, CGA (Color Graphics Adapter) i EGA (Enhanced Graphics Adapter). Cea mai important mbunt ire adus de standardul VGA a fost rezolu ia superioar a caracterelor n modul text, precum i posibilitatea de a afia 256 de culori la un moment dat. Monitorul, denumit uneori i display, permite vizualizarea datelor introduse de la tastatur sau rezultate n urma execu iei unor comenzi sau programe, fiind ncadrat n categoria echipamentelor periferice de ieire. Ca pies principal, monitorul con ine un tub de vacuum, similar cu cel de la televizor i trei tunuri de electroni (corespunztoare celor trei culori fundamentale). Standardele video MDA, CGA i EGA folosesc monitoare digitale. Datele care descriu culorile pixelilor sunt trimise de adaptorul video la monitor sub forma unor serii de semnale digitale care sunt echivalente unor serii de bi i. Standardul VGA a introdus un nou tip de monitor care utilizeaz semnale analogice pentru transferul informa iilor privind culoarea de la adaptorul video la monitor. Dac semnalele digitale prezint niveluri care indic prezen a sau absen a unui bit, semnalele analogice pot prezenta orice valoare ntre una minim i una maxim. Imprimanta - Reprezint un dispozitiv care poate fi ataat unui calculator, cu scopul tipririi de texte i grafic, putnd fi considerat un fel de main de scris automat. Pn n prezent au fost realizate un numr destul de mare de tipuri de imprimante pentru PC-uri, ele diferind att prin performan e, ct i prin modalit ile tehnice de ralizare. Fiecare dintre ele prezint avantaje i dezavantaje, ideal fiind a o folosi pe cea care corespunde cel mai bine tipului de lucrri

12

executate. n func ie de modul n care este realizat imprimarea se disting urmtoarele tipuri de imprimante: - imprimante matriceale cu 9, 18 sau 24 de ace realizeaz imprimarea prin impactul acelor peste o band de hrtie; - imprimante cu jet de cerneal func ioneaz prin pulverizarea fin a unor picturi de cerneal pe hrtia de imprimat; - imprimante laser ce utilizeaz o raz laser sau mici diode luminiscente care ncarc electrostatic un tambur de imprimare, corespunztor caracterului care urmeaz a fi imprimat; - imprimante rapide de linii ce imprim mai multe linii odat, fiind folosite mai mult la sisteme de calcul de dimensiuni mari. Calitatea imprimrii crete de la primul la ultimul tip prezentat, dar n mod corespunztor i pre ul echipamentului.

1.3. Programarea calculatoruluiProgramele de calculator, cunoscute sub numele de software, sunt constituite dintr-o serie de instruc iuni pe care le execut calculatorul. Cnd se creeaz un program, trebuie specificate instruc iunile pe care calculatorul trebuie s le execute pentru a realiza opera iile dorite. Procesul de definire a instruc iunilor pe care le execut calculatorul se numete programare. Programele executate pe un calculator pot fi mpr ite n trei categorii: programe de aplica ie sunt acele programe care interac ioneaz direct cu utilizatorul, specializate n realizarea unei categorii de prelucrri. Editoarele de texte, programele pentru gestiunea bazelor de date, programele de tehnoredactare asistat de calculator, de grafic etc. sunt programe de aplica ie. utilitare programe, care la fel ca programele de aplica ie, interac ioneaz direct cu utilizatorul, dar, spre deosebire de acestea, realizeaz prelucrri de uz general. Utilitarele realizeaz o serie de opera ii de gospodrie cum ar fi: copierea fiierelor, pregtirea discurilor magnetice pentru utilizare, crearea de copii de salvare, testarea echipamentului, etc. programe de sistem realizeaz legtura ntre componentele electronice ale calculatorului i programele de aplica ie i utilitare. Rolul programului de sistem este acela de a uura sarcina programatorului, simplificnd ndeplinirea acelor sarcini care sunt

13

comune marii majorit i a programelor de aplica ie: alocarea memoriei, afiarea caracterelor pe ecran i la imprimant, citirea caracterelor de la tastatur, accesul la informa iile stocate pe disc magnetic, etc.

1.3.1. Sistemul de operareSistemul de operare este o parte component a software-ului unui calculator, care mai cuprinde un numr variabil de programe utilitare selectate conform cu necesit ile programatorilor. Sistemul de operare este un program cu func ii de coordonare i control asupra resurselor fizice ale calculatorului i care intermediaz dialogul om-calculator. Sistemul de operare permite rularea programelor i pstrarea informa iilor pe disc. n plus, fiecare sistem de operare pune la dispozi ia aplica iilor o serie de servicii care permit programelor s aloce memorie, s acceseze diferite echipamente periferice, cum ar fi imprimanta, i s gestioneze alte resurse ale calculatorului. Un sistem de operare trebuie s aib capacitatea de a se adapta rapid la modificrile tehnologice, rmnnd n acelai timp compatibil cu hardware-ul anterior. Lan ul de comunicare utilizator calculator este prezentat n Figura 1.3: Sistemul de operare este cel mai important program care ruleaz pe un calculator. Orice calculator de uz general este dotat cu un sistem de operare care permite execu ia altor programe. Sistemele de operare execut opera iuni de baz precum: recunoaterea unei intrri de la tastatur (preluare caracter), trimiterea unui caracter pentru afiare pe ecranul monitorului, gestionarea fiierelor i a directoarelor pe disc (floppy-disk sau hard-disk), controlul fluxului de date cu echipamentele periferice ca drivere de disc sau imprimante.

C A LC U LA T O R S IS T E M D E O PER AR E A P LIC A II U T ILIZ A T O R

Fig. 1.3. Comunicarea utilizator - calculator

14

Aplica ie

Disk-drive Sistem de operare Mouse Monitor

Tastatur

Imprimant

Fig. 1.4 Rolul sistemului de operare

Sistemul de operare al unui calculator este partea de software necesar i suficient pentru execu ia oricror alte aplica ii dorite de utilizator. Un calculator nu poate func iona dect sub gestiunea unui sistem de operare. Orice aplica ie lansat n execu ie de ctre un utilizator apeleaz la resursele puse la dispozi ie de ctre sistemul de operare. Sistemul de operare interfa eaz calculatorul cu operatorul uman de o manier ct mai transparent cu putin astfel nct utilizatorul nu trebuie s fac eforturi mari de adaptare dac lucreaz cu arhitecturi hardware diferite. Pentru sisteme mai mari, sistemele de operare au responsabilit i i capabilit i i mai mari. Ele ac ioneaz ca un gestionar al traficului de date i al execu iei programelor. n principal sistemul de operare asigur ca diferite programe i diferi i utilizatori s nu interfereze unele cu altele. Sistemul de operare este de asemenea responsabil cu securitatea, asigurnd inaccesibilitatea persoanelor neautorizate la resursele sistemului. Sistemele de operare se pot clasifica dup cum urmeaz: multi-user: Permit ca doi sau mai mul i utilizatori s ruleze n acelai timp programe (utilizatori concuren i). Anumite sisteme de operare permit sute sau chiar mii de utilizatori concuren i. multiprocesor: Permit execu ia unui program pe mai mult de un microprocesor. multitasking: Permit mai multor programe s ruleze n acelai timp (execu ie concurent).

15

multithreading: Permit diferitelor pr i ale unui program s fie executate concurent. timp real (real time): Rspund instantaneu la diferite intrri. Sistemele de operare de uz general, ca DOS sau UNIX nu sunt sisteme de operare de timp real. Sistemele de operare furnizeaz o platform software pe baza creia alte programe, numite programe de aplica ie, pot rula (pot fi executate). Programele de aplica ie trebuie s fie scrise pentru a rula pe baza unui anumit sistem de operare. Alegerea unui anumit sistem de operare determin n consecin mul imea aplica iilor care pot fi rulate pe calculatorul respectiv. Pentru PC-uri, cele mai populare sisteme de operare sunt DOS, OS/2 sau Windows, dar mai sunt disponibile i altele precum Linux. Ca utilizator se interac ioneaz cu sistemul de operare prin intermediul unor comenzi. Spre exemplu, sistemul de operare DOS accept comenzi precum COPY sau RENAME pentru a copia fiiere sau pentru a le redenumi. Aceste comenzi sunt acceptate i executate de o parte a sistemului de operare numit procesor de comenzi sau interpretor de linie de comand. Interfa ele grafice cu utilizatorul (GUI, Graphical user interfaces) permit introducerea unor comenzi prin selectarea i ac ionarea cu mouse-ul a unor obiecte grafice care apar pe ecran. Spre exemplu, sistemul de operare Windows are un desktop ca intefa garfic cu utilizatorul. Pe acest desktop (birou) se afl diferite simboluri grafice (icoane, icons) ataate diferitelor aplica ii disponibile pe calculatorul respectiv. Utilizatorul are multiple posibilit i de configurare a acestei intefe e grafice. Primul sistem de operare creat pentru calculatoare a fost CP/M (Control Program for Microcomputers), realizat pentru calculatoarele pe 8 bi i. O dat cu perfec ionarea componentelor HARD s-a impus i necesitatea dezvoltrii unui SOFT adecvat. Astfel, n 1981, a aprut prima versiune a sistemului de operare MS-DOS. Sistemul de operare MSDOS (MicroSoft Disk Operating System) este destinat gestionrii resurselor software si hardware ale microcalculatoarelor cu o arhitectura de tip IBM PC sau compatibil cu aceasta i echipate cu procesoare 8086 sau 80x86, Pentium. Odat cu creterea capabilit ilor hardware ale calculatoarelor, acesta s-a transformat, prin dezvoltri succesive, n Windows.

16

Indiferent de sistemul de operare utilizat, din punctul de vedere al utilizatorului, informa iile sunt scrise pe disc sub forma unor fiiere. Un fiier este o colec ie de informa ii grupate sub acelai nume. Un fiier poate fi un program executabil, un text, o imagine, un grup de comenzi sau orice altceva. Un fiier este identificat prin numele su. Numele unui fiier este format dintr-un ir de caractere (care n func ie de sistemul de operare este limitat la un anumit numr maxim de caractere), urmate eventual de semnul punct (.) i de nc maximum 4 caractere, numite extensie, ca de exemplu: nume.ext. Pentru a putea avea acces rapid la fiiere, sistemul de operare creeaz nite fiiere speciale, numite directoare, care pot fi asemnate cu cuprinsul unei cr i, deoarece ele con in numele fiierelor i adresa de nceput a acestora. De asemenea, un director poate con ine la rndul su alte directoare crendu-se astfel o structur arborescent de directoare n care poate fi gsit foarte repede un anumit fiier.

1.3.2. Tipuri de fiiereFiierele se pot mpr i n dou categorii executabile i neexecutabile. n prima categorie intr acele fiiere al cror nume scris n dreptul prompterului (n cazul sistemului de operare DOS) determin executarea unor activit i de ctre sistemul de operare. O parte dintre fiierele executabile sunt programe i sunt recunoscute prin extensia lor care poate fi EXE sau COM, altele fiind constituite n fiiere de comenzi proprii sistemului de operare, a cror extensie este BAT. Fiierele COM, numite adesea i comenzi, con in informa ii n formatul imagine de memorie. Ele sunt mai compacte i mai rapide dect fiierele EXE, dar lungimea lor nu poate s depeasc 64 K. Fiierele EXE pot s ajung la dimensiuni mai mari prin segmentarea programului n fragmente a cror dimensiune s fie de maximum 64K. Dintre fiierele neexecutabile vom aminti cteva mai importante: fiiere text ; fiiere cu extensia SYS sau DRV, cunoscute sub numele de driver-e i care con in instruc iuni despre modul n care sistemul de operare trebuie s controleze diferite componente hardware; surse de programe scrise n diferite limbaje (cu extensiile PAS limbajul Pascal, C limbajul C, CPP limbajul C++, etc.);

17

fiiere care con in informa ii intermediare ntre cele n limbaj surs i cele executabile (extensiile OBJ, OVL); fiiere ce con in imagini (extensiile JPEG, GIF, BMP); fiiere ce con in sunete (extensiile WAV, MIDI, MP3) etc.

1.3.3. Construirea fiierului executabilInstruc iunile pe care le execut un calculator sunt de fapt grupuri de 1 0 (cifre binare) care reprezint semnale electronice produse n interiorul calculatorului. Pentru a programa primele calculatoare (n anii 1940-1950), programatorii trebuiau s n eleag modul n care calculatorul interpreta diferitele combina ii de 0 i 1, deoarece programatorii scriau toate programele folosind cifre binare. Cum programele deveneau din ce n ce mai mari, acest mod de lucru a devenit foarte incomod pentru programatori. De aceea au fost create limbaje de programare care permit exprimarea instruc iunilor calculatorului ntr-o form mai accesibil programatorului. Dup ce programatorul scrie instruc iunile ntr-un fiier - numit fiier surs, un al doilea program numit compilator, convertete instruc iunile limbajului de programare n irurile 1 i 0 cunoscute sub numele de cod main. Pentru a ob ine un program executabil, orice program surs trebuie eventual translatat (tradus) n limbaj cod main sau cod obiect pe care l poate n elege microprocesorul. n urma acestui proces, alturi de fiierul surs apare i fiierul cod obiect (object file.) Aceast translatare sau traducere este efectuat de ctre compilatoare, interpretoare sau asambloare. Compilatorul este folosit pentru transformarea codului surs, adic a programului scris ntr-un limbaj de programare de nivel nalt, n cod obiect (object code). Acest cod obiect va fi transformat n faza de editare de legturi n cod main executabil de microprocesorul sistemului de calcul. Programatorii scriu programe ntr-o form numit cod surs. Acest cod surs parcurge apoi c iva pai nainte de a deveni program executabil. Pe scurt, un compilator este un program special care proceseaz instruc iuni scrise ntr-un limbaj de programare particular i le transform n limbaj main sau cod main pe care l poate executa microprocesorul.

18

La ora actual un limbaj de programare este inclus ntr-un mediu de programare mai complex care include un editor de texte pentru introducerea instruc iunilor n limbajul de programare de nivel nalt, un compilator i un editor de legturi folosite pentru translatarea codului surs n cod main. n mod tipic, un programator scrie declara ii ntr-un limbaj precum Pascal, C sau MATLAB folosind un editor. Se creeaz astfel un fiier numit fiier cod surs ce con ine o colec ie de instruc iuni i declara ii scrise n limbajul respectiv. Primul pas este prelucrarea codului surs de ctre compilator, care translateaz instruc iunile de nivel nalt ntr-o serie de instruc iuni cod obiect. Cnd este lansat n execu ie compilatorul acesta, ntr-o prim etap, lanseaz un analizor sintactic, gramatical, numit parser. Acesta parcurge i analizeaz sintactic, secven ial, n ordinea n care au fost introduse, toate instruc iunile scrise n limbajul de nivel nalt. O instruc iune de nivel nalt se translateaz ntr-una sau mai multe instruc iuni specifice microprocesorului pentru care a fost conceput compilatorul. Aceste instruc iuni ale microprocesorului sunt nlocuite cu codurile lor binare, fiecare instruc iune a microprocesorului fiind codificat de ctre constructor. Codurile binare ale instruc iunilor microprocesorului mpreun cu reprezentrile interne ale datelor manipulate formeaz codul obiect. Deci n unul sau mai multe faze (parserul este una dintre faze) din codul surs de intrare se produce un cod de ieire, numit n mod tradi ional cod obiect. Este foarte important ca referiri la alte module de cod s fie corect reprezentate n acest cod obiect. Pasul final n producerea programului executabil, dup ce compilatorul a produs codul obiect, este prelucrarea codului obiect de ctre un editor de legturi (link-editor sau linker). Acest linker combin diferitele module (le leag) i d valori reale, efective, tuturor adreselor simbolice existente n codul obiect. n urma acestei prelucrri se ob ine codul main, salvat ntr-un fiier cu extensia .exe. Acest cod main poate fi executat secven ial, instruc iune cu instruc iune, de ctre microprocesor. Cu alte cuvinte, un program executabil (executable program aflat pe disc cu extensia .exe) se ob ine prin salvarea pe disc a codului main ob inut prin prelucrarea succesiv a fiierului cod surs de ctre compilator (compiler) i apoi de ctre link-editor (linker).

19

Fig. 1.5 Procesul de elaborare a unui program executabil

Procesul de ob inere a unui executabil este prezentat n figura de mai jos. Blocurile tridimensionale reprezint entit ile principale ale mediului de programare: editorul de texte, compilatorul (compiler) i editorul de legturi (linker). Blocurile dreptunghiulare reprezint fiierele rezultate n urma aplicrii celor trei utilitare de sistem: n urma utilizrii editorului de texte ob inem fiierul text surs cod cu numele generic nume. Dac folosim limbajul de programare C spre exemplu, se ob ine fiierul nume.c care se va salva pe disc. n urma lansrii n execu ie a compilatorului, acesta preia fiierul surs i l prelucreaz corespunztor, semnalizndu-se toate erorile fatale pentru program sau avertismente utile programatorului n procesul de depanare. n cazul n care compilarea se efectueaz cu succes, se ob ine un fiier cod obiect, salvat pe disc sub numele nume.obj n urma lansrii n execu ie a editorului de legturi, se preia fiierul cod obiect nume.obj i se leag cu toate modulele necesare (inclusiv func ii de bibliotec sau alte module externe), ob inndu-se un program executabil (cod main) cu numele nume.exe la care adresele nu mai sunt simbolice ci absolute relativ la adresa de nceput a programului. La lansarea n execu ie a programului fluxul de informa ie este complet controlat de ctre microprocesor, toate salturile de adres fiind fcute corespunztor. Interpretorul (interpreter) este un program care execut instruc iuni scrise ntr-un limbaj de nivel nalt. Numai anumite limbaje

20

de nivel nalt, spre exemplu BASIC, LISP sau MATLAB, sunt prevzute cu un interpretor. Exist dou modalit i de a executa un program scris n limbaj de nivel nalt. Cel mai comun mod este acela de a compila programul. Cealalt modalitate este pasarea programului unui interpretor. Un interpretor translateaz instruc iunile de nivel nalt ntr-o form intermediar care este apoi executat. Prin contrast, un compilator translateaz instruc iunile de nivel nalt direct n limbaj main (cod main). Programele compilate ruleaz n general mai rapid dect cele interpretate. Un alt avantaj al programelor compilate este acela al desprinderii din context n sensul c programele executabile generate n urma procesului de compilare pot fi executate direct sub sistemul de operare al calculatorului. Un program interpretat se execut sub mediul n care a fost creat. Spre exemplu, pentru a rula un program scris n limbajul BASIC se lanseaz n execu ie mediul BASIC, apoi se deschide fiierul surs-BASIC corespunztor i se lanseaz interpretorul de BASIC pentru execu ia sa. Avantajul unui interpretor este acela al evitrii procesului de compilare consumator de timp n cazul n care avem programe de mari dimensiuni. Interpretorul poate executa imediat programele surs. Pentru acest motiv interpretoarele se folosesc mai ales n procesul de dezvoltare al programelor, cnd programatorul dorete adugarea unor mici por iuni de program pe care s le testeze rapid. De asemenea, interpretoarele permit o programare interactiv fiind des folosite n procesul de instruc ie. n mediul de programare MATLAB, mediu interpretor, orice comand utilizator se execut imediat. Se pot edita i fiiere script, care con in secven e de comenzi care se execut secven ial. Programele de descriere a paginii (Page Description Languages) ca PostScript spre exemplu folosesc un interpretor. Fiecare imprimant PostScript are incorporat un interpretor care execut instruc iuni PostScript. Asamblorul (assembler) este un program care face transla ia unui program scris n limbaj de asamblare (limbaj de nivel sczut, corespunztor microprocesorului sistemului de calcul) n limbaj cod main. Putem spune c asamblorul reprezint pentru limbajul de asamblare ceea ce reprezint compilatorul pentru limbajele de nivel nalt. Cum limbajul de asamblare con ine instruc iuni mai pu in

21

complexe dect cele de nivel nalt, asamblorul face practic o convertire biunivoc ntre mnemonicele limbajului de asamblare i codurile binare corespunztoare acestor mnemonice (instruc iuni).I n s tr u c iu n ile n lim b a ju l d e n iv e l n a lt s e in tr o d u c d e la ta s ta tu r .

T o t c e s e in tr o d u c e d e la ta s ta tu r e s te v izib il p e m o n ito r

E d it o r d e t e x t e ( e v e n tu a l in c o r p o r a t n m e d iu )

F i ie r te x t ( f i ie r s u rs ) c u e x te n s ia a d e c v a t : n u m e .p a s ( lim b a j P a s c a l) n u m e .c ( lim b a j C ) n u m e .c p p ( lim b a j C + + ) n u m e .b a s ( lim b a j B A S I C ) , e t c .

F i ie r u l s u r s c u n u m e le n u m e i e x te n s ia c o r e s p u n z to a r e s e s a lv e a z d in m e m o r ia R A M p e h a r d d is k

C o m p ila t o r S e c o m p ile a z fi ie r u l s u r s

S e o b in e fi ie r u l c o d o b ie c t : n u m e .o b j S e s a lv e a z p e h a r d d is k fi ie r u l n u m e .o b j L in k - e d it a re ( le g a r e a tu tu r o r m o d u le lo r n e c e s a r e )

S e o b in e fi ie r u l c o d m a in ( e x e c u t a b il) : n u m e .e x e

S e s a lv e a z p e h a r d d is k fi ie r u l n u m e .e x e

L a n s a r e a n e x e c u ie d e c tr e s is te m u l d e o p e r a r e a e x e c u ta b ilu lu i n u m e . e x e

Fig. 1.6 Detalierea procesului de generare a unui executabil

22

Capitolul II REPREZENTAREA DATELOR N CALCULATORSe tie c un calculator numeric prelucreaz numere binare. Acest lucru ine de suportul fizic de manipulare, transport i stocare a datelor interne, mai bine zis este legat de faptul c semnalul fizic purttor de informa ie este o tensiune continu cu dou valori: una nalt (High) i una joas (Low). Acestor dou valori li se asociaz natural dou valori logice: T (true, adevrat) i F (false, fals) sau cele dou cifre binare1 i 0.T e nsiune H igh= 1

L o w = 0 timp Ca urmare a acestei asocieri spunem, prin abuz de limbaj, c un calculator numeric prelucreaz numere binare. Ca i un numr zecimal, un numr binar are mai multe cifre binare. Sistemul de numera ie binar folosit pentru reprezentarea informa iei n calculatoare este un sistem de numera ie ponderal, ntocmai ca sistemul de numera ie zecimal. Reprezentarea natural a numerelor la nivelul percep iei umane este cea zecimal, pe cnd reprezentarea proprie mainilor de calcul este cea binar. De aici rezult necesitatea compatibilizrii sau interfa rii ntre aceste dou moduri de reprezentare a numerelor. Cum cele dou sisteme de numera ie sunt ponderale, o prim diferen este aceea c sistemul zecimal folosete ca ponderi puterile ntregi (pozitive sau negative) ale lui 10 (zece) iar sistemul binar va folosi puterile ntregi (pozitive sau negative) ale lui 2.

23

n alt ordine de idei, dac pentru reprezentarea extern sunt semnificative simbolurile de reprezentare (cifre, semnele + sau -, punct zecimal sau binar, mantis sau exponent), pentru reprezentarea intern sunt necesare conven ii de reprezentare: indiferent de tipul datelor, acestea vor fi colec ii sau iruri de cifre binare crora, prin conven ie, li se atribuie semnifica ii. ntr-o prim instan , este foarte important s facem o distinc ie ntre tipurile de date recunoscute de un calculator (sau mai bine zis de microprocesorul cu care este dotat calculatorul personal) i formatele de reprezentare ale acestor date ce reprezint conven ii pentru reprezentarea tipurilor de date, att la nivel intern (n memoria calculatorului) ct i la nivel extern, al percep iei umane. Din punctul de vedere al tipurilor de date care sunt implementate n limbajul C putem spune c distingem dou mari categorii, date de tip ntreg (integer) i date de tip real (float). Formatele de reprezentare intern/extern vor fi prezentate n cele ce urmeaz. Cel mai simplu de reprezentat sunt numerele naturale. Se face apoi trecerea la numerele ntregi negative i apoi la numerele reale care au o parte ntreag i una frac ionar. 2.1. Reprezentarea intern/extern a numerelor Reprezentarea intern a numerelor se refer la modul n care se stocheaz datele n memoria RAM a calculatorului sau n regitrii microprocesorului. n acest format se prelucreaz numerele pentru implementarea diverselor opera ii aritmetice. La nivelul calculatorului informa ia nu poate fi dect binar. n aceast reprezentare putem scrie numere ntregi pozitive sau negative sau numere reale. Exist un standard IEEE care reglementeaz modul de reprezentare intern a datelor. Reprezentarea extern este reprezentarea numerelor la nivelul utilizatorului uman, deci n principiu se poate folosi orice baz de numera ie pentru reprezentarea numerelor. La nivel de reprezentare extern se folosete semnul - n fa a unui numr n cazul n care acesta este negativ sau punctul care separ partea ntreag de cea frac ionar. De asemenea, numerele ntregi interpretate fr semn se pot afia i n format binar, octal sau hexazecimal, deci n bazele 2, 8 sau 16. n cele ce urmeaz ne vom pune urmtoarele probleme: - cum se reprezint extern un numr natural

24

-

cum se reprezint intern un numr natural cum se reprezint extern un numr ntreg negativ cum se reprezint intern un numr ntreg negativ cum se face conversia de la reprezentarea extern la cea intern cum se face conversia de la reprezentarea intern la cea extern

2.2. Reprezentarea extern a numerelor n ceea ce privete reprezentarea extern, nu sunt nici un fel de dificult i deoarece fiecare este familiarizat cu reprezentarea zecimal a numerelor naturale sau reale. Trebuie men ionat de la nceput c orice tip de reprezentare pe care o vom folosi este ponderal n sensul c pozi ia cifrelor n numr nu este ntmpltoare ci conform cu o pondere corespunztoare unei puteri a bazei de numera ie. O caracteristic a reprezentrilor externe este folosirea unor conven ii de format unanim acceptate i de altfel foarte naturale pentru un utilizator uman. Spre exemplu, pentru a exprima numere negative se folosete semnul - iar pentru reprezentarea numerelor reale se folosete punctul . pentru delimitarea pr ii ntregi de cea frac ionar. De asemenea, suntem familiariza i i cu nota ia tiin ific n care intervine mantisa i exponentul (n virgul mobil). Reprezentarea zecimal este cea mai natural pentru utilizatorul uman. Vom oferi n continuare cteva exemple de reprezentri zecimale externe: Numr Reprezentare Reprezentare normal tiin ific37 -37 0.375 -0.375 0.00375 -0.00375 12.375 -12.375 37 -37 0.375 -0.375 0.00375 -0.00375 12.375 -12.375 0.37x10 2 -0.37x10 0 0.375x10 0 -0.375x10 -2 0.375x10 -2 -0.375x10 2 0.12375x10 2 -0.12375x102

n general dorim s ob inem rezultatele numerice ale programelor pe care le concepem ntr-o form de reprezentare accesibil. Totui, calculatorul trebuie informat asupra formatului de reprezentare n care dorim s se afieze datele necesare. Aceasta

25

nseamn c va trebui s specificm cte cifre se vor folosi la partea ntreag i cte la partea frac ionar sau dac dorim reprezentare tiin ific sau nu. De altfel i operatorul uman face aceleai conven ii de reprezentare. Spre exemplu tim c numrul1 nu poate fi exact 3

reprezentat ca un numr zecimal, deci fixm un format de reprezentare. Dac formatul ale se limiteaz la 4 cifre zecimale, atunci vom scrie1 0.3333 3

Limbajul C are o serie de func ii de reprezentare cu format a datelor numerice sau alfanumerice prin care programatorul poate impune un format extern cu care se manipuleaz datele.

2.2.1. Reprezentarea extern a numerelor ntregiNumerele naturale se pot reprezenta fie n baza de numera ie 10, fie n orice alt baz. n general, un numr ntreg n baza b se poate reprezenta cu un numr predeterminat de cifre ci B = {0,1,2,....., b 2, b 1} . Mul imea B reprezint mul imea cifrelor sau simbolurilor de reprezentare. Spre exemplu: b = 2 B = {0,1} b = 7 B = {0,1,2,3,4,5,6} b = 10 B = {0,1,2,3,4,5,6,7,8,9} Noi suntem obinui i s folosim mul imea cifrelor zecimale. Dac totui se folosete o baz de reprezentare mai mare dect 10, atunci mul imea cifrelor zecimale nu mai este suficient pentru reprezentarea numerelor n acea baz. Spre exemplu s considerm baza b = 16 care va folosi 16 cifre hexazecimale (sau mai simplu hexa). Prin conven ie, cele 16 cifre hexazecimale vor fi: Cifra Simbol Cifra Simbol0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 9 A B C D E F

26

Forma general de reprezentare extern a numerelor ntregi este de forma:

N b = c n 1c n 2 ......c 2 c1c 0 c k B = {0,1,2,....., b 2, b 1}Valoarea numeric zecimal a numrului N b va fi:

N b = c n 1 b n 1 + c n 2 b n 2 + ... + c1 b1 + c 0 b 0 = -

(

) ck b k k =0

n 1

n continuare vom studia urmtoarele probleme: cum se face conversia unui numr din baza b = 10 n bazab=2

cum se face conversia invers, din baza b = 2 n baza b = 10 cum se face conversia dintr-o baz oarecare b1 n alt baz b2 Pentru a reprezenta un numr natural din baza 10 n baza 2, se mparte succesiv numrul la 2 i se utilizeaz resturile la aceste mpr iri n ordinea invers de cum au fost ob inute. a) Conversia din baza 10 n baza 2 i invers Fie de exemplu numrul zecimal 37. Reprezentarea sa binar va fi ob inut astfel: 3710 = 100101237 36 1 2 18 18 0 2 9 2 8 4 2 1 4 2 2 0 2 1 0

Conversia invers, din baza 2 n baza 10 este simpl i utilizeaz ponderea 2:

1001012

25 24 23 22 21 20 = 1 0 0 1 0 1 = 1x25 + 1x22 + 1x20=37

Cu aceste numere naturale putem face o serie de opera ii aritmetice. Adunarea numerelor naturale binare se face ntocmai ca la cele n reprezentare n baza 10, dup regula: 0+0=0

27

0+1=1 1+0=1 1+1=0, transport 1 spre rangul urmtor Astfel, s facem adunarea 37+25 n binar: 37 1 0 0 1 0 1+ 25 1 1 0 0 1 62 1 1 1 1 1 0 Se observ cum se ob ine rezultatul corect. nmul irea se face n mod asemntor, ca o adunare repetat. Spre exemplu, s calculm 37x25

37 25

925

1 0 0 1 0 1x 11001 100101 100101 100101 1110 011101

11100111012 = 1x20 + 1x22 + 1x23 +1x24 +1x27 +1x28+1x29 = 1+4+8+16+128+256+512 = 92510 b) Conversia dintr-o baz oarecare b1 ntr-o alt baz b2 . Fie spre exemplu numrul 4911 care se dorete scris n baza 13. Pentru a realiza aceast conversie, vom folosi baza intermediar 10. Vom converti mai nti 4 A11 n baza 10 i apoi numrul zecimal ob inut l vom trece n baza 13. Se observ cum un numr n baza 11 poate con ine i cifra A=10 iar un numr n baza 13 poate con ine cifrele A=10, B=11, C=12.

4 A11 = 10 110 + 4 111 = 44 + 10 = 541054 52 2 13 4 0 4 13 0

5310 = 4213 4 A11 = 421328

2.2.2. Reprezentarea extern a numerelor realeSemnificativ pentru utilizatorul uman este reprezentarea zecimal (n baza b=10) a numerelor reale, cu care suntem obinui i. Fa de reprezentarea numerelor ntregi, la numerele reale intervine simbolul punct . care delimiteaz partea ntreag de partea frac ionar. Cu alte cuvinte, cu ajutorul numerelor reale putem reprezenta i numere care nu sunt ntregi. Forma general a unui numr real reprezentat ntr-o baz oarecare b este:

N b = c n 1c n 2 ...c1c 0 c 1c 2 ...c m +1c m c k B = {0,1,2,..., b 2, b 1}Valoarea zecimal a numrului de mai sus va fi:N10 = cn1bn1 +cn2bn2 +c1b1 +c0b0 +c1b1 +c2 b2+cm+1bm+1 +cmbm =

(

) ck bk k =m

n1

Se observ cum punctul delimiteaz partea ntreag (exprimat printr-o combina ie de puteri pozitive ale bazei b) i partea frac ionar (exprimat printr-o combina ie de puteri negative ale bazei b). Semnifica ie pentru programator i pentru productorii de software sau microprocesoare au bazele de reprezentare b = 10 i b = 2 , deoarece baza 10 este natural pentru reprezentarea extern a numerelor iar baza 2 este natural pentru reprezentarea binar, intern, a numerelor. n formulele de mai sus avem o reprezentare a unui numr real cu n cifre pentru partea ntreag i m cifre pentru partea frac ionar. Aa cum n sistemul zecimal reprezentm cu un numr finit de cifre zecimale numerele reale, acelai lucru se va ntmpla i n sistemul binar. Punctul binar va avea o semnifica ie asemntoare cu punctul zecimal, care face separarea ntre partea ntreag i cea frac ionar. Cifrele binare situate dup punctul binar vor corespunde puterilor negative ale lui 2. Astfel, n general, un numr real va avea reprezentarea binar:

N2 =bmbm1...1b0.b1b2... n =bm2m +bm12m1 +b 21 +b020 +b121 +b222 +...+bn2n b b 1Spre exemplu, numrul 12.25 va avea reprezentarea binar:

(

)

12.2510 = 1100.01 = 2 3 + 2 2 + 2 2

29

Partea ntreag a unui numr real se reprezint binar precum numerele ntregi (cu sau fr semn). Pentru a determina partea frac ionar, se procedeaz n mod invers ca la partea ntreag. Astfel, dac partea frac ionar zecimal se reprezint binar, atunci aceasta se nmul ete succesiv cu 2. Dac rezultatul depete valoarea 1, atunci se nscrie un bit 1. Se continu mai departe cu dublarea valorii care depete 1. Dac rezultatul nu depete valoarea 1, atunci se nscrie un bit 0 i se continu multiplicarea cu 2. Spre exemplificare, vom vedea cum se ob ine reprezentarea binar a lui 12.25. Partea ntreag este 12. Ea se reprezint binar prin mpr iri succesive la 2 i considerarea resturilor. Partea frac ionar este 0.25 Partea P.F. x 2 Noua Bitul frac ionar P.F. nscris P.F.0.25 0.5 0 0.5 1 0 0 1

Ob inem exact rezultatul cutat: 12.25 = 1100.01 S mai considerm un alt exemplu. S reprezentm numrul 5.37 Partea ntreag are reprezentarea 510 =1012Partea frac ionar P.F. 0.37 0.74 0.48 0.96 0.92 0.84 0.68 0.36 0.72 Etc.. P.F. x 2 0.74 1.48 0.96 1.92 1.84 1.68 1.36 0.72 1.44 Noua P.F. 0.74 0.48 0.96 0.92 0.84 0.68 0.36 0.72 0.44 Bitul nscris 0 1 0 1 1 1 1 0 1 Etc..

Ob inem: 5.3710 = 101.010111101...2 Cu ct mai multe cifre binare vom re ine dup punctul binar, cu att vom fi mai aproape de valoarea exact 5.37. Ob inem un rezultat foarte important: Dei un numr zecimal poate avea un numr finit de cifre zecimale dup punctul zecimal, reprezentarea sa binar intern poate avea un numr infinit de cifre binare. Este valabil i reciproca: un numr real zecimal cu un numr

30

infinit de cifre se poate reprezenta ntr-o alt baz pe un numr finit 1 de cifre ( ex: = 0.3333...3...10 = 0.13 ). Cum orice reprezentare 3 binar intern este pe un numr finit de bi i, numrul poate s nu fie reprezentat exact n calculator, ci cu o anumit aproxima ie. Acest lucru este decisiv pentru a n elege importan a lungimii reprezentrii numerelor n calculator. Cu ct un numr binar se reprezint pe un numr mai mare de bi i, cu att precizia de reprezentare crete.

2.3 Reprezentarea intern a numerelorDeoarece semnalul intern purttor de informa ie ntr-un calculator este de tip binar, un numr zecimal (ntreg sau real) se va reprezenta intern n baza 2 cu ajutorul unui numr binar. O cifr binar se numete bit (Binary Digit) i poate fi fie 0 fie 1. n reprezentarea extern a numerelor am vzut c se poate folosi orice baz de numera ie (cu cifrele corespunztoare). De asemenea, numerele pot fi prefixate cu un simbol de semn i pot include n reprezentare i punctul de separa ie ntre partea ntreag i cea frac ionar. n reprezentarea intern acest lucru nu mai este posibil deoarece semnele plus (+), minus (-) sau punct (.) nu au nici o semnifica ie pentru calculator. Orice numr (orice tip de dat) este reprezentat la nivel intern de un numr prestabilit de bi i. Specialitii din industria software au ajuns la un consens de reprezentare concretizat prin standardul IEEE 754 de reprezentare a intern a numerelor reale n computere. Reprezentarea intern a numerelor a impus n limbajul C definirea aa-numitelor tipuri de date. Tipul unei date reprezint modul n care microprocesorul stocheaz n memorie i prelucreaz cu ajutorul regitrilor interni o dat. Tipul unei date se refer la lungimea sa de reprezentare (pe c i bi i se reprezint data) precum i ce semnifica ie au anumite cmpuri de bi i din cadrul reprezentrii.

2.3.1. Reprezentarea intern a numerelor ntregiUn numr binar este o colec ie de cifre binare ponderate fiecare cu o putere a lui 2. Bitul corespunztor ponderii celei mai mari, situat cel mai n stnga, se numete MSB (Most Significand Bit) iar cel

31

corespunztor ponderii celei mai mici, situat cel mai n dreapta, se numete LSB (Less Significand Bit). n cazul reprezentrii binare a numerelor naturale, reprezentarea extern (cea perceput de operatorul uman) i cea intern (cea prelucrat de procesorul calculatorului) sunt asemntoare. Cum pentru operatorul uman operatorii + sau - semnific faptul c un numr este pozitiv sau negativ, este necesar o conven ie pentru reprezentarea intern a numerelor ntregi negative. Aceast conven ie prevede folosirea MSB pentru reprezentarea semnului numerelor ntregi. Dac numrul este pozitiv, se adaug n pozi ia MSB bitul de semn 0, iar dac numrul este negativ se utilizeaz n pozi ia MSB bitul de semn 1. Mai mult, numerele negative se reprezint n aa numitul complement fa de 2.Reprezentarea numerelor ntregi negative n complement fa de 2 Aceast form de reprezentare a numerelor negative necesit parcurgerea urmtorilor pai: pas1. Se reprezint modulul numrului negativ, folosind bit de semn (egal cu 0, evident) pas2. Se complementeaz to i bi ii numrului astfel ob inut. Complementarea nseamn transformarea bitului 0 n bitul 1 i a bitului 1 n bitul 0. pas3. Numrul astfel ob inut se adun cu 1. De exemplu, s reprezentm numrul -37. pas1. |-37| = 37 3710 = 1001012 = [0] 100101bit semn

pas2. 0100101---->1011010 pas3. 1011010 + 1 = 1011011 => -3710 = 10110112 Evident, MSB este bitul de semn i este egal cu 1. La o prim vedere, este posibil s credem c prin utilizarea complementului fa de 2 putem pierde semnifica ia numrului negativ. Pentru a vedea ce numr negativ este reprezentat, putem repeta procedeul de mai sus i ob inem reprezentarea numrului pozitiv dat de modulul su.

O modalitate mai simpl este alocarea ponderii corespunztoare bitului de semn dar pe care o considerm c reprezint un numr negativ. Astfel: 10110112 = -1x26 + 1x24 + 1x23 + 1x21 + 1x20 = -64 + 27 = -37

32

2.3.2 Adunarea, scderea i nmul irea numerelor ntregiAceste opera ii se execut folosind reprezentarea n complement fa de 2 a numerelor ntregi, sau, mai bine zis, se execut folosind n algoritmi bitul de semn ca pe un bit obinuit. De exemplu, dorim s calculm: 37-25 25-37 (-25)x37 (-25)x(-37) Pentru efectuarea acestor calcule, vom scrie reprezentrile cu bit de semn ale numerelor implicate: 2510 = 110012 = 011001 25 = 100111 10 2 3710 = 1001012 = 0100101 3710 = 1011011 Se observ c 25 i (-25) se reprezint pe 6 bi i iar 37 i (-37) pe 7 bi i. Deoarece am observat c bi ii unui ntreg cu semn nu au to i aceeai semnifica ie, este nevoie s reprezentm numerele cu care lucrm pe un acelai numr de bi i. La adunri sau scderi, bi ii de semn se vor afla n aceeai pozi ie (vor avea aceeai pondere) i vom ob ine astfel rezultate corecte. Pentru a avea o scriere pe un acelai numr de bi i, se adaug (completeaz) la stnga bitul de semn de un numr corespunztor de ori. Astfel:37 25 = 37 + ( 25) = 0100101 + 1100111 0100101 + 1100111 0001100 = 1210 2510 = 1001112 = 1100111 25 = 0110012 = 0011001

37 = 1011011 25 = 0110012 = 0011001

25 37 = 25 + (37) = 0011001 + 1011011 0011001 + 1011011 1110100 = 64 + 52 = 12

33

n continuare vom pune n eviden importan a gamei de reprezentare, adic a domeniului de valori ale datelor. S considerm, spre exemplu, adunarea a dou numere cu semn reprezentate pe un octet (8 bi i). Aceste numere sunt cuprinse n gama

[ 2 , 2 1] = [ 128, 127].7 7

Dac vom dori s adunm dou numere din acest domeniu i s reprezentm rezultatul tot pe un octet, putem avea surprize. De exemplu, s considerm opera iile (117-12) i (117+12). Se observ c operanzii sunt n gama de reprezentare a numerelor cu semn pe 8 bi i. Prin prima scdere, ne ateptm s ob inem un rezultat, 105, n aceeai gam de reprezentare. 117-12=117+(-12) = 01110101+11110100 = 01101001 = 10510, rezultat corect. 117+12 = 01110101+00001100 = 10000001 = -12710, rezultat evident incorect. Incorectitudinea provine de la faptul c rezultatul a depit gama de reprezentare. Dac rezultatul este interpretat pe 9 bi i de exemplu, gama de reprezentare devine [ 256, 255] i rezultatul va fi 117+12 = 001110101+000001100 = 010000001 = 12910, rezultat corect. Ca o concluzie preliminar, re inem c pentru a ob ine rezultate corecte este necesar s precizm dac se lucreaz sau nu cu bit de semn i pe c i bi i se face reprezentarea, pentru c numai n acest context interpretarea rezultatelor este corect. n ceea ce privete nmul irea numerelor ntregi cu semn (cu bit de semn), aici problema nu mai are o rezolvare asemntoare, n sensul c nu putem trata bi ii de semn la fel cu cei de reprezentare ai valorii. Astfel, procesorul studiaz bi ii de semn i ia o decizie n privin a semnului rezultatului. De fapt, se realizeaz func ia logic XOR a bi ilor de semn. Numerele negative se vor lua n modul, iar opera iile de nmul ire se vor face numai cu numere pozitive. La final, func ie de semnul rezultatului, se ia decizia reprezentrii corecte a rezultatului. Spre exemplu, s calculm (-25)x37. Pentru aceasta, procesorul va primi pentru procesare urmtoarele dou numere: 37 x( 25) = [0]100101 [1]100111

34

Se analizeaz separat bi ii de semn i se ia decizia c rezultatul va fi negativ, deci, la final, se va reprezenta n complement fa de 2. Mai departe se va lucra cu 25, modulul numrului (-25), care se ob ine prin complementarea fa de 2 a numrului binar 1100111: 1100111 0011000+1=0011001 Se va re ine pentru procesare numai numrul (fr semn) 11001, care se va nmul i cu numrul (fr semn) 100101, ob innd, aa cum am artat mai sus, valoarea 1110011101. Mai departe, se adaug bitul de semn, 0 pentru numere pozitive, ob inndu-se 01110011101. Acest ultim numr se va complementa fa de 2, ob inndu-se 10001100010+1=[1]0001100011, adic valoarea -1024+99 = -925, valoarea corect. Ca o concluzie, pentru a furniza rezultate corecte, procesorul va trebui informat n permanen despre ce fel de numere prelucreaz (cu sau fr semn) i care este lungimea lor de reprezentare (toate trebuie s aib aceeai lungime). Reprezentarea n complement fa de 2 se poate folosi i pentru numerele reale negative, bitul de semn fiind MSB de la partea ntreag. Astfel, -12.25 poate avea reprezentarea: 12.2510 = 1100 .012 01100 .01

01100 .01 10011 .10 + 0.01 = 10011 .11 10011 .112 = 2 4 + 21 + 2 0 + 2 1 + 2 2 = 16 + 3 + 0.75 = 12.2510

Pentru nmul irea numerelor reale rmn valabile considerentele de la numere ntregi.n cazul de mai sus, problema reprezentrii numrului negativ a fost rezolvat cu ajutorul bitului de semn dar problema reprezentrii punctului binar va avea alt rezolvare.

2.3.3 Reprezentarea intern a numerelor realeDin considerentele de la reprezentarea extern a datelor putem trage alte concluzii importante din punct de vedere al reprezentrii interne. Numerele binare ntregi fr semn au aceeai reprezentare att extern ct i intern. Numerele ntregi cu semn (care n reprezentare extern sunt prefixate cu ) au ca reprezentare intern un bit de semn, dar care se trateaz deosebit de ceilal i bi i ai reprezentrii. To i ntregii cu semn, care au MSB=1, sunt reprezenta i intern n complement fa de 2.

35

Numerele reale se pot reprezenta identic cu cele ntregi cu semn, cu o precizare: nu se face o deosebire net ntre bi ii reprezentrii pr ii ntregi i cei ai reprezentrii pr ii frac ionare. Acest tratament nediferen iat provine de la reprezentarea tiin ific uzual cu mantis i exponent. Fie, spre exemplu, reprezentarea binar a numrului

12.25:

12.2510 = 1100.01 = 0.110001 x 2 4

Calculatorul poate reprezenta irul de bi i 110001 i re ine faptul c punctul se pune dup primii 4 bi i ai reprezentrii. Acest lucru se ntmpl i n realitate. Deci, singura deosebire ntre reprezentarea numerelor reale i a celor ntregi const n faptul c numerele reale necesit o informa ie suplimentar despre aa numitul exponent, n cazul nostru numrul pozitiv 4. n cele ce urmeaz, vom prezenta tipurile de baz pe care le pot avea datele n reprezentarea intern. Tipul unei date determin modul n care procesorul stocheaz i prelucreaz data respectiv. Cum primele procesoare care au condus la apari ia pe pia a primelor calculatoare pentru neprofesioniti (aa numitele Home Computers) au fost procesoare capabile s prelucreze i s transmit n paralel 8 bi i, a fost natural gruparea a 8 bi i ntr-o entitate numit byte. 1B = 8b (adic un byte reprezint 8 bi i) Procesoarele au evoluat, ajungndu-se n prezent la procesoare pe 64 de bi i. Cum evolu ia lor s-a fcut trecndu-se succesiv prin multipli de 8 bi i, s-au impus i alte entit i de reprezentare a informa iei, pe care le vom prezenta sintetic n tabelul de mai jos.Denumire Dimensiune Denumire echivalent Nota ie

Nr. byteByte Word Double_Words Quad_Words Ten_Words

Nr. biti8b 16 b 32 b 64 b 80 b octet cuvnt Cuvnt dublu Cuvnt cvadruplu B W DW QW TW

1B 2B 4B 8B 10B

A determina reprezentarea intern nseamn s determinm lungimea reprezentrii (de obicei n multipli de octe i), modul de interpretare al bi ilor ce compun reprezentarea i gama de

36

reprezentare, adic s determinm magnitudinea (valorile minime i maxime pozitive i negative) ce pot fi reprezentate n formatul respectiv. n limbajul C, exist dou tipuri de reprezentare pe care le putem numi principale: tipul ntreg i tipul real, fiecare avnd i anumite particularizri. Astfel, tipul ntreg (int) include i tipul caracter (char) iar tipul real (float) include i tipul real extins (double). Tipurile de date le vom reprezenta de la simplu la complex, n ordinea char, int, float, double. Tipurile de baz sunt char, int, float, double i cu ajutorul modificatorilor de tip putem ob ine diverse particularizri. Modificatorii pot fi signed, unsigned, short, long. Ca o generalitate, numerele sunt reprezentate intern lundu-se n considerare bitul de semn, deci implicit numerele ntregi sau reale au MSB bit de semn. Dac se specific explicit, prin modificatorul unsigned, nu se mai consider (interpreteaz) bitul de semn. 2.3.3.1 Tipul char

Codul ASCII (American Standard Code for Information Interchange) este un cod de reprezentare a caracterelor. Prin caracter n elegem unit ile de baz care se pot tasta (intrri de la tastatur), tipri la imprimant sau afia pe ecran. Tastatura reprezint, de exemplu, dispozitivul de intrare care con ine de fapt o ntreag colec ie de caractere ce pot fi emise prin apsarea unei taste. Pentru a fi receptat, emis sau prelucrat de ctre calculator, fiecare caracter are asociat un cod binar (o combina ie de bi i) care l identific n mod unic. Cum cu un octet putem codifica 28 = 256 caractere, octetul s-a dovedit o entitate suficient pentru codificarea caracterelor utilizate n informatic. n 256 de coduri distincte se pot include literele mari i mici ale alfabetului anglo-saxon (inclusiv litere specifice diverselor alfabete precum cel chirilic sau particularit i ale diferitelor ri: , , , , ... n romn, de exemplu). Se mai pot include caractere ce reprezint numere, semne de punctua ie sau alte caractere de control. Codul ASCII a standardizat aceast codificare, astfel nct el este folosit n cvasitotalitatea calculatoarelor (doar mainframe-urile IBM mai folosesc un alt cod, mai vechi, numit EBCIDIC). Dac se declar o dat de tip char, ea este considerat explicit de tipul signed char (cu MSB bit de semn), deci reprezentarea intern este de forma:

37

S

b6

b5

b4

b3

b2

b1

b0

B it d e s e m n Gama de reprezentare este cuprins ntre max = 27 1 = 127 [ 128, 127] min = 27 = 128 Dac se declar tipul unsigned char, atunci nu se mai consider (interpreteaz) bitul de semn i data se consider ntreag pozitiv, n gama max = 2 8 1 = 255 [0, 255] min = 0 Tabelele de mai sus con in codurile ASCII ale primelor 128 de caractere. Coloana D semnific valoarea zecimal (decimal) a octetului, coloana H reprezint aceeai valoare reprezentat n format hexazecimal (baza 16) iar n coloana Sym se reprezint simbolul afiat pe monitoarele PC. ntregul alfabet al limbajului C se regsete n mul imea primelor 128 de caractere ASCII. Restul de 128 de caractere se mai numete i set de caractere extins ASCII i poate fi vizualizat printr-un program simplu. Trebuie men ionat faptul c reprezentarea datelor n format hexazecimal este foarte rspndit n tehnica programrii calculatoarelor. Avantajul reprezentrii interne a datelor n format hexazecimal const n folosirea unui numr mai mic de cifre (de 4 ori mai mic dect numrul de cifre binare). Reprezentarea unui numr natural n format hexazecimal se realizeaz cu metoda mpr irii succesive la 16 sau, mai simplu, pornind de la reprezentarea binar a numrului. Cum mul imea cifrelor hexa con ine 16 simboluri (09 i AF), pentru codificarea celor 16 cifre avem nevoie de 4 cifre binare ( 2 4 = 16 ). Pentru a reprezenta un octet vom avea nevoie de 2 cifre hexazecimale i vom proceda astfel: - se divide octetul n dou grupe de cte 4 bi i

38

se nlocuiete fiecare grup de 4 bi i cu cifra hexazecimal pe care o codific. De exemplu, s presupunem c avem numrul 217.21710 = 110110012 = 1101.10012 = D916 = 13 161 + 9 16 0 = 208 + 9 = 217

-

n acest mod, dac un numr are o reprezentare intern pe un numr de k octe i, se poate reprezenta simplu cu ajutorul a 2k cifre hexazecimale. n tabelele de mai jos se prezint codificarea ASCII a caracterelor. Codurile corespunztoare simbolurilor alfanumerice din tabel sunt exact semnalele binare care se transmit n reprezentarea intern. Cu alte cuvinte, dac la tastatur se tasteaz simbolul a, atunci circuitele corespunztoare transmit spre calculator semnale binare corespunztoare codului 1010 0001, adic 61H sau 97 n zecimal. La fel se ntmpl cnd se lucreaz cu procesoare de text sau cnd se tiprete un document la imprimant. Sistemul de calcul manevreaz codurile ASCII corespunztoare literelor i cifrelor pe care utilizatorul le poate interpreta.D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 H 0 1 2 3 4 5 6 7 8 9 a b c d e f Sym Null D 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 H 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f Sym D 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 H 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f Sym D 48 ! 49 " 50 # 51 $ 52 % 53 & 54 ' 55 ( 56 ) 57 * 58 + 59 , 60 61 . 62 / 63 H 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f Sym 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

LF CR

39

D 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

H 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f

Sym D @ 80 A 81 B 82 C 83 D 84 E 85 F 86 G 87 H 88 I 89 J 90 K 91 L 92 M 93 N 94 O 95

H 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f

Sym P Q R S T U V W X Y Z [ \ ] ^ _

D 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

H 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f

Sym ` a b c d e f g h i j k L M n o

D 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

H 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f

Sym p q r s t u v w x y z { | } ~

2.3.3.2 Tipul int Acest tip se folosete pentru reprezentarea numerelor ntregi cu sau fr semn. Odat cu standardizarea ANSI C din 1989, s-a trecut la modul de reprezentare a ntregilor impus de noul procesor Intel 80386 dotat i cu coprocesorul matematic Intel 80387.MSB S b30 O ctetul 1 O ctetul 2 O ctetul 3 b0 LS B O ctetul 4

Tipul int este identic cu signed int i utilizeaz o reprezentare pe 4B a numerelor ntregi cu semn. Reprezentarea pe 4 octe i duce la posibilitatea mririi gamei de reprezentare astfel: max = 2 31 1 3 3 ; 2 31 = 2 2 30 = 2 210 2 10 3 2 10 9 min = 2 31

( )

( )

40

Rezult c putem reprezenta numere ntregi n gama:

[ 2.1475 10 ] [ 2 10 , 2 10 ]9 9 9

unsigned int nu va mai lua n considerare bitul de semn, astfel nct reprezentarea intern este de forma din figura de mai jos. Evident, 3 3 max = 2 32 1 ; 2 32 = 4 2 30 = 4 210 4 10 3 4 10 9 min = 0

( )

( )

Gama de reprezentare se poate schimba cu ajutorul modificatorilor short sau long.MSB S b 14 b0 LSB

short int se va reprezenta pe 2B, sub forma

max