SlideShare a Scribd company logo
1 of 286
CUPRINS

CUPRINS............................................................................................I
Capitolul I...........................................................................................1
INTRODUCERE ÎN..........................................................................1
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.........................................................7
      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 fişiere.......................................................18
      1.3.3. Construirea fişierului executabil.............................19
Capitolul II.......................................................................................24
REPREZENTAREA DATELOR ÎN CALCULATOR.................25
   2.1. Reprezentarea internă/externă a numerelor....................26
   2.2. Reprezentarea externă a numerelor.................................27
      2.2.1. Reprezentarea externă a numerelor întregi..............28
      2.2.2. Reprezentarea externă a numerelor reale................31
   2.3 Reprezentarea internă a numerelor..................................33
      2.3.1. Reprezentarea internă a numerelor întregi..............33
      2.3.2 Adunarea, scăderea şi înmulţirea numerelor întregi.35
      2.3.3 Reprezentarea internă a numerelor reale..................37
      Game de reprezentare pentru numerele reale....................49
      2.3.5. Codificare BCD.......................................................50
Capitolul III......................................................................................52
ELEMENTELE DE BAZĂ ALE LIMABJULUI C.....................52
   3.1. Crearea şi lansarea în execuţie a unui program C...........52
   3.2. Structura unui program C................................................54
   3.3. Mulţimea caracterelor ....................................................56
      3.3.1. Litere şi numere.......................................................57
                                                  I
3.3.2. Caractere whitespace...............................................57
       3.3.3. Caractere speciale şi de punctuaţie..........................57
       3.3.4. Secvenţe escape.......................................................58
    3.4. Identificatori....................................................................59
    3.5. Cuvintele cheie ale limbajului C.....................................60
    3.6. Constante.........................................................................60
       3.6.1. Constante caracter...................................................61
       3.6.2. Constante întregi.....................................................61
       3.6.3. Constante în virgulă mobilă....................................61
       3.6.4. Constante şir............................................................62
       3.6.5. Constanta zero.........................................................63
       3.6.6. Obiecte constante....................................................63
       3.6.7. Enumerări ...............................................................64
Capitolul IV......................................................................................64
..........................................................................................................64
Operanzi şi operatori în C...............................................................64
    4.1. Operanzi .........................................................................65
    4.2. Operatori ........................................................................65
       4.2.1. Operatori aritmetici.................................................66
       4.2.2. Operatori de incrementare şi decrementare.............67
       4.2.3. Operatori relaţionali................................................67
       4.2.4. Operatori logici.......................................................68
       4.2.5. Operatori logici la nivel de bit.................................69
       4.2.6. Operatorul de atribuire............................................74
       4.2.7. Operatorul sizeof.....................................................74
       4.2.8. Operatorul ternar ?.................................................75
       4.2.9. Operatorul virgulă...................................................76
       4.2.10. Operatorul de forţare a tipului sau de conversie
               explicită (expresie cast)........................................77
       4.2.11. Operatorii paranteză..............................................77
       4.2.12. Operatorul adresă..................................................78
       4.2.13. Alţi operatori ai limbajului C................................78
       4.2.14. Regula conversiilor implicite şi precedenţa
               operatorilor...........................................................78
Capitolul V.......................................................................................80
..........................................................................................................80
                                                    II
Instrucţiuni.......................................................................................80
    5.1. Instrucţiuni etichetate (instrucţiunea goto).....................80
    5.2. Instrucţiuni expresie........................................................81
    5.3. Instrucţiuni compuse.......................................................82
    5.4. Instrucţiuni de selecţie....................................................82
       5.4.1. Instrucţiunea if.........................................................82
       5.4.2. Instrucţiuni de selecţie multiplă: if - else if.............84
       5.4.3. Instrucţiunea switch.................................................85
    5.5. Instrucţiuni repetitive......................................................87
       5.5.1. Instrucţiunea for......................................................87
       5.5.2. Instrucţiunea while..................................................90
       5.5.3. Instrucţiunea do-while.............................................92
       5.5.4. Bucle încuibate........................................................94
       5.5.5. Instrucţiunea break..................................................96
       5.5.6. Instrucţiunea continue.............................................97
Capitolul VI......................................................................................97
..........................................................................................................97
TIPURI DE DATE STRUCTURATE ...........................................97
    6.1. Tablouri unidimensionale...............................................98
       6.1.1. Constante şir............................................................99
       6.1.2. Iniţializarea vectorilor de caractere.......................100
       6.1.3. Funcţii pentru prelucrarea şirurilor (fişierul antet
                string.h)...............................................................102
    6.2. Tablouri cu două dimensiuni (matrice).........................104
       6.2.1. Iniţializarea matricelor..........................................105
       6.2.2. Tablouri bidimensionale de şiruri.........................106
    6.3. Tablouri multidimensionale..........................................106
    6.4. Structuri.........................................................................107
       6.4.1. Tablouri de structuri..............................................109
       6.4.2. Introducerea structurilor în funcţii........................115
       6.4.3. Tablouri şi structuri în structuri.............................119
    6.5. Uniuni...........................................................................119
    6.6. Enumerări......................................................................121
Capitolul VII..................................................................................123
........................................................................................................123
POINTERI.....................................................................................123

                                                   III
7.1. Operatori pointer...........................................................123
      7.1.1. Importanţa tipului de bază.....................................125
      7.1.2. Expresii în care intervin pointeri...........................125
   7.2. Pointeri şi tablouri.........................................................130
      7.2.1. Indexarea pointerilor.............................................131
      7.2.2. Pointeri şi şiruri ....................................................133
      7.2.3. Preluarea adresei unui element al unui tablou.......134
      7.2.4. Tablouri de pointeri...............................................134
      7.2.5. Pointeri la pointeri.................................................135
      7.2.6. Iniţializarea pointerilor..........................................136
      7.2.7. Alocarea dinamică a memoriei..............................137
      7.2.8. Pointeri la structuri................................................139
      7.2.9. Structuri dinamice liniare de tip listă...................142
Capitolul VIII.................................................................................155
FUNCŢII.......................................................................................155
   8.1. Forma generală a unei funcţii.......................................155
   8.2. Reîntoarcerea dintr-o funcţie........................................158
   8.3. Valori returnate.............................................................159
   8.4. Domeniul unei funcţii...................................................160
      8.4.1. Variabile locale.....................................................160
      8.4.2. Parametri formali...................................................162
      8.4.3. Variabile globale...................................................163
   8.5. Apelul funcţiilor............................................................167
   8.6. Apelul funcţiilor având ca argumente tablouri.............168
   8.7. Argumentele argc şi argv ale funcţiei main()...............172
   8.8. Funcţii care returnează valori neîntregi........................173
   8.9. Returnarea pointerilor...................................................174
   8.10. Funcţii de tip void.......................................................177
   8.11. Funcţii prototip............................................................178
   8.12. Funcţii recursive..........................................................180
   8.13. Clase de memorare (specificatori sau atribute)...........181
   8.14. Pointeri la funcţii.........................................................187
Capitolul IX....................................................................................188
PREPROCESAREA.....................................................................189
   9.1. Directive uzuale............................................................189
   9.2. Directive pentru compilare condiţionată.......................191
                                               IV
9.3. Modularizarea programelor.........................................195
Capitolul X.....................................................................................200
 ........................................................................................................200
INTRĂRI/IEŞIRI...........................................................................200
    10.1. Funcţii de intrare şi ieşire - stdio.h..............................200
    10.2. Operaţii cu fişiere........................................................203
    10.3. Nivelul inferior de prelucrare a fişierelor...................206
       10.3.1. Deschiderea unui fişier........................................206
       10.3.2. Scrierea într-un fişier...........................................210
       10.3.3. Citirea dintr-un fişier...........................................212
       10.3.4. Închiderea unui fişier...........................................214
       10.3.5. Poziţionarea într-un fişier....................................214
       10.3.6 Ştergerea unui fişier.............................................216
       10.3.7. Exemple de utilizare a funcţiilor de intrare/ieşire de
                nivel inferior.......................................................217
    10.4. Nivelul superior de prelucrare a fişierelor..................222
       10.4.1. Funcţia fopen()....................................................223
       10.4.2. Funcţia fclose()....................................................224
       10.4.3. Funcţiile rename() şi remove()...........................225
       10.4.4. Funcţii de tratare a erorilor..................................225
       10.4.5. Funcţii cu acces direct.........................................226
       10.4.6. Funcţii pentru poziţionare...................................228
       10.4.7. Ieşiri cu format....................................................229
       10.4.8. Intrări cu format..................................................232
       10.4.9. Funcţii de citire şi scriere a caracterelor..............235
Capitolul XI....................................................................................239
........................................................................................................239
Utilizarea ecranului.......................................................................239
în mod text.....................................................................................239
    11.1. Setarea ecranului în mod text......................................240
    11.2. Definirea unei ferestre.................................................241
    11.3. Ştergerea unei ferestre.................................................241
    11.4. Deplasarea cursorului..................................................241
    11.5. Setarea culorilor..........................................................242
    11.6. Funcţii pentru gestiunea textelor.................................243
Capitolul XII..................................................................................246

                                                    V
........................................................................................................246
Utilizarea ecranului.......................................................................246
în mod GRAFIC............................................................................246
    12.1. Iniţializarea modului grafic.........................................247
    12.2. Gestiunea culorilor......................................................249
    12.3. Setarea ecranului.........................................................251
    12.4. Utilizarea textelor în mod grafic.................................251
    12.5. Gestiunea imaginilor...................................................253
    12.6. Desenarea şi colorarea figurilor geometrice...............254
Capitolul XIII.................................................................................260
Funcţii matematice .......................................................................260
    13.1 Funcţii trigonometrice..................................................261
    13.2 Funcţii trigonometrice inverse.....................................261
    13.3 Funcţii hiperbolice.......................................................261
    13.4 Funcţii exponenţiale şi logaritmice..............................262
    13.5 Generarea de numere aleatoare....................................262
    13.6 Alte tipuri de funcţii matematice.................................263
Capitolul XIV.................................................................................264
ELEMENTE DE PROGRAMARE AVANSATĂ.......................264
    14.1 Gestionarea memoriei..................................................264
       14.1.1 Memoria convenţională........................................264
       14.1.2 Memoria expandată..............................................267
       14.1.3 Memoria extinsă...................................................268
       14.1.4 Stiva......................................................................268
    14.2 Servicii DOS şi BIOS..................................................269
       14.2.1 Serviciile BIOS....................................................270
       14.2.2 Serviciile DOS......................................................274
    14.3 Bibliotecile C...............................................................277
       14.3.1 Reutilizarea unui cod obiect.................................278
       14.3.2 Lucrul cu fişiere bibliotecă...................................278
    14.3 Fişierele antet...............................................................279
BIBLIOGRAFIE............................................................................279




                                                   VI
Capitolul I

         INTRODUCERE ÎN
 ARHITECURA SISTEMELOR DE CALCUL



1.1. Importanţa limbajului C

        Creat î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 astăzi unul din cele mai cunoscute şi puternice limbaje de
programare. Eficient, economic şi portabil, C-ul este o alegere bună
pentru realizarea oricărui tip de programe, de la editoare de texte,
jocuri cu facilităţi grafice, programe de gestiune şi pentru calcule
ştiinţifice, până 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 acelaşi timp
facilitează utilizarea caracteristicilor specifice ale maşinilor
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 răspândire 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 răspândire industrială
masivă – ca de pildă FORTRAN şi COBOL – limbajul C a pătruns
mai lent, dar foarte sigur. Realitatea arată clar că, în momentul de faţă,
piaţa producătorilor de programe este dominată net de C şi de
variantele evoluate ale acestuia.
        Elementele principale care au contribuit la succesul C-ului sunt
următoarele:
          - modularizarea programelor – ce dă posibilitatea unui
              singur programator să stăpânească relativ uşor programe
              de zeci de mii de linii de sursă;
                                    1
-     capacitatea de programare atât la nivel înalt cât şi la
              nivel scăzut – ceea ce dă posibilitatea utilizatorului de a
              programa fie fără a ”simţi” sistemul de operare şi maşina
              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 număr mare de operatori şi funcţii
              de bibliotecă ce fac programarea mult mai uşoară.
        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
programării orientate pe obiecte.
        Limbajul C++, ca şi limbajul C, se bucură de o portabilitate
mare şi este implementat pe o gamă largă de calculatoare începând cu
microcalculatoare şi până la cele mai mari supercalculatoare.
        Limbajul C++ a fost implementat pe microcalculatoarele
compatibile IBM PC în mai multe variante. Cele mai importante
implementări ale limbajelor C++ pe aceste calculatoare sunt cele
realizate de firmele Microsoft şi Borland.
        Conceptele programării orientate pe obiecte au influenţat în
mare măsură dezvoltarea limbajelor de programare în ultimul deceniu.
De obicei, multe limbaje au fost extinse astfel încât ele să admită
conceptele mai importante ale programării orientate pe obiecte. Uneori
s-au făcut mai multe extensii ale aceluiaşi 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 programării de sistem, limbajul Avalon/C++
destinat calculului distribuit, şi nu în ultimul rând 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
                                   2
calculatoare. În principiu, ele simplifică interacţiunea dintre programe
şi utilizatorii acestora. Astfel, diferite comenzi, date de intrare sau
rezultate pot fi exprimate simplu şi natural utilizând 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
uşor fără a mai fi nevoie să cunoşti ş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 aplicării 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 numeşte 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
                                    3
aplicaţiei şi, implicit, a programului, prin filozofia de rezolvare a
problemelor folosind limbajul. Din aceste puncte de vedere, C-ul nu
poate lipsi din cultura unui programator, iar pentru un profesionist C-
ul 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 calculator
      Calculatoarele de tip PC (calculatoare personale) reprezintă cele
mai răspândite şi mai utilizate dintre calculatoare, datorită gradului de
accesibilitate şi preţului relativ scăzut. Indiferent de tipul
calculatorului, modul general de concepţie, de alcătuire şi funcţionare
este acelaşi. Calculatorul este o maşină programabilă. Două dintre
principalele caracteristici ale unui calculator sunt:
 1.     Răspunde la un set specific de instrucţiuni într-o manieră bine
        definită.
 2.     Calculatorul poate executa o listă preînregistrată de
        instrucţiuni, numită program.
       Calculatoarele moderne sunt electronice şi numerice.
     Partea de circuite electrice şi electronice precum şi conexiunile
        fizice dintre ele se numeşte hardware.
     Totalitatea programelor precum şi datele aferente acestor
        programe poartă denumirea de software.




                                   4
Echipamente de ieşire




                                                         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
     Partea hardware a unui calculator este formată din totalitatea
componentelor sale fizice. Toate calculatoarele de uz general necesită
următoarele 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 ieşire: 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
                                             5
plasează pe placa de bază (mainboard) a calculatorului
         împreună cu memoria internă RAM. În plus faţă de aceste
         componente orice calculator este prevăzut 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/ieşire ş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 următoarele categorii de calculatoare:
PC (Personal Computer): Un calculator de dimensiuni mici,
monoutilizator (single-user), bazat pe un microprocesor. În plus
acesta este dotat standard cu tastatură, mouse, monitor şi
dispozitive periferice de stocare a datelor.

                                     Memoria
                                     secundară


                  Echipament       UNITATEA          Echipament
                   de intrare      CENTRALĂ           de ieşire


                                     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 asemănător unui PC dar are un
        microprocesor mai puternic şi un monitor de înaltă calitate
        (rezoluţie mai mare).



                                    6
    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 Microprocesorul
       Microprocesorul este cea mai importantă şi cea mai scumpă
componentă a unui calculator de performanţele acesteia depinzând în
mare măsură 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
 (adunări, scăderi, înmulţiri, împărţiri, comparări de numere).
       El este compus din două părţ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
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 îndeplineşte 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 recunoaşte ş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 dispărută, 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 născut circuitul Intel 4004. Au urmat la scurt timp
chipurile 4040 si 8008 dar lor le lipseau multe din caracteristicile
microprocesoarelor aşa cum le ştim noi azi. În 1974 Intel a prezentat

                                    7
pentru prima oară circuitul Intel 8080 care a fost folosit in sistemele
Altair şi IMSAI. Curând după aceea au apărut procesoarele Motorola
6800 şi 6502 de la MOS Technology. Doi dintre proiectanţii de la
Intel au părăsit firma, creând 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
sfârşitul anului 1971. La un preţ de circa 200$ şi înglobând 2300 de
tranzistori, cipul 4004 dezvolta mai multă putere de calcul decât
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,
dând startul unui adevărat galop de inovaţii tehnologice. Următorul
pas a fost în 1980, când IBM a inclus un procesor Intel în arhitectura
primului PC.
       Astăzi PC-urile sunt pretutindeni în jurul nostru. Un copil care
lucrează la o maşina ce incorporează un procesor Pentium Pro
beneficiază de mult mai multă putere de calcul decât dispunea
guvernul SUA în perioada lansării primelor echipaje umane către
Lună.
       Într-un număr 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 măsoară prin numărul 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ă creştere a performanţelor PC-urilor şi o scădere a costului
procesului de calcul. Pe când în 1991 un PC bazat pe procesorul Intel
486 costa aproape 225$ pentru o performanţă de un milion de
instrucţiuni pe secundă (MIPS), astăzi, un sistem desktop ce utilizează
un cip Pentium Pro este evaluat la circa 7$ pe MIPS. Nu se întrevede
nici o dificultate care să frâneze această rată de dezvoltare".
1.2.2 Memoria
       Microprocesorul are capacitatea de a memora date care urmează
a fi prelucrate, cât şi rezultatele intermediare. Se observă că rolul său
principal este de a prelucra şi transmite informaţiile şi rezultatele şi
deci capacitatea sa de memorare este mică neputând stoca programe.

                                   8
De aceea, un calculator necesită şi o memorie care să găzduiască 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
aceştia sunt grupaţi într-o succesiune. Astfel o succesiune de 8 biţi
formează un octet (sau un byte) aceasta reprezentând unitatea de
măsură a capacităţii de memorie. Deoarece reprezentarea numerelor în
calculator se face în baza 2 şi nu în baza 10, aşa cum suntem obişnuiţi
în mod normal să lucrăm, ş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.
        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 către microprocesor
şi în care sunt încărcate programele înainte de a fi executate de către
microprocesor. Dacă primele procesoare puteau accesa doar 1 MB de
memorie astăzi 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 către fabricant, iar
operaţiunea de înscriere cu programe se mai numeşte „arderea
memoriilor”.
        Circuitele de tip RAM (Random Acces Memory ) sunt memorii
la care utilizatorul are acces şi al căror 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 încărcate în memoria RAM înainte de a
fi prelucrate de către microprocesor.
                                   9
Deoarece capacitatea de memorie a unui calculator nu poate fi
atât de mare încât să poată păstra toate programele pe vrem să le
executăm, a apărut necesitatea existenţei unor memorii externe, care
să fie solicitate la nevoie. Rolul acestora îl joacă discurile şi ele pot fi
asemănate cu cărţile dintr-o bibliotecă pe care le putem consulta ori de
câte ori avem nevoie de anumite informaţii.
       Primele discuri apărute pentru PC-uri, numite şi dischete,
floppy disk-uri sau discuri flexibile, permiteau stocarea a maximum
160 KB de informaţie. Astăzi 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 căror capacitate
de memorare depăşeşte 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
asemănat cu o dischetă de mare capacitate, integrată într-o unitate
încapsulată. Iniţial, puţine PC-uri prezentau hard discuri, dar cum
preţurile acestora au scăzut 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
depăşit valoarea de 40 de GB.
1.2.3 Echipamentele periferice
       Comunicarea om-maşină se realizează cu ajutorul
echipamentelor periferice prin intermediul cărora utilizatorul poate
programa sau da anumite comenzi calculatorului sau poate vizualiza
rezultatele obţinute de către anumite programe. Principalele
echipamente periferice ale unui calculator sunt următoarele: tastatura,
mouse-ul, scanner-ul, monitorul şi imprimanta. Ele pot fi grupate în
echipamente de intrare – cele prin care calculatorul primeşte
informaţii sau comenzi (tastatură, mouse, scanner) - şi echipamente de
ieşire – cele prin care calculatorul transmite informaţii în exterior
(monitor, imprimantă). În continuare sunt prezentate câteva
caracteristici ale fiecărui echipament.
       Tastatura – este principalul dispozitiv de intrare al
calculatorului prin intermediul căruia se transmit comenzi către

                                    10
unitatea centrală. Cuplarea la calculator a tastaturii se face prin
intermediul unui cablu de conectare.
       Din punct de vedere al dispunerii tastelor, tastatura se aseamănă
destul de mult cu cea a unei maşini de scris dar are şi părţ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 adăugarea altora
noi, ajungându-se la 101/102 taste.
       Din punct de vedere al funcţionalităţii lor ele pot fi împărţ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 corespunzător pe ecranul
calculatorului. Tastele cu scopuri speciale sunt aşezate în acelaşi bloc
cu tastele alfanumerice şi determină efectuarea anumitor acţiuni fără
înscrierea de caractere pe ecran. Tastele de mişcare 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 corespunzător 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 având pe ele litera F urmată de un număr î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 uşor de
manevrat decât tastatura dar care poate efectua mai puţine operaţii.
Totuşi, foarte multe aplicaţii (în special aplicaţiile grafice) nu mai pot
fi concepute fără mouse. Un mouse are aspectul unei bucăţi de săpun,
uşor manevrabil, având dedesubt o bilă poziţionabilă, cu sensibilitate
şi viteză reglabile.
       Mişcarea maouse-ului pe o suprafaţă plană este corelată cu
deplasarea pe ecran a unui cursor cu o formă deosebită: cruciuliţă,
săgeată, etc. Declanşarea unei acţiuni se face prin poziţionarea
cursorului în zona corespunzătoare şi apăsarea unuia dintre butoanele
aflate pe partea posterioară. Iniţial un mouse avea două sau trei
                                    11
butoane. Acum există mouse-uri cu 5 butoane şi 2 rotiţe ce îndeplinesc
o serie de funcţii corespunzătoare unor taste speciale.
       Folosirea mouse-ului uşurează mult munca utilizatorilor,
nemaifiind necesar ca aceştia să memoreze numărul relativ mare de
comenzi corespunzător fiecărui produs, ca în situaţia în care se
foloseşte 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 prelucrări 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ă, mărită, micşorată, rotită, colorată, umbrită,
suprapusă cu altă imagine etc.
       Cu un software de recunoaştere optică a caracterelor datele sau
documentele tipărite pe coli de hârtie pot fi transformate în fişiere,
putându-se realiza chiar o stocare a lor sub formă de arhivă.

       Monitorul - Sistemul video este format din două părţi: un
adaptor (placă) video şi un monitor sau display. Adaptorul video
reprezintă dispozitivul care realizează legătura (interfaţa) cu
calculatorul şi se află în interiorul acestuia. El va fi corespunzător
tipului de monitor video care îi este ataşat. Adaptorul video realizează
o rezoluţie orizontală şi una verticală. Rezoluţia reprezintă numărul de
elemente, în cazul de faţă puncte – pixeli – care pot fi afişate 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
către 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ă îmbunătăţire adusă de standardul VGA a fost rezoluţia
superioară a caracterelor în modul text, precum şi posibilitatea de a
afişa 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 ieşire. Ca piesă principală, monitorul conţine un tub de
                                    12
vacuum, similar cu cel de la televizor şi trei tunuri de electroni
(corespunzătoare 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 ataşat unui
calculator, cu scopul tipăririi de texte şi grafică, putând fi considerată
un fel de maşină de scris automată. Până în prezent au fost realizate un
număr destul de mare de tipuri de imprimante pentru PC-uri, ele
diferind atât prin performanţe, cât ş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 lucrări
executate. În funcţie de modul în care este realizată imprimarea se
disting următoarele tipuri de imprimante:
      -           imprimante matriceale cu 9, 18 sau 24 de ace –
                  realizează imprimarea prin impactul acelor peste o
                  bandă de hârtie;
      -           imprimante cu jet de cerneală – funcţionează prin
                  pulverizarea fină a unor picături de cerneală pe hârtia
                  de imprimat;
      -           imprimante laser – ce utilizează o rază laser sau mici
                  diode luminiscente care încarcă electrostatic un
                  tambur de imprimare, corespunzător 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 imprimării creşte de la primul la ultimul tip prezentat,
dar în mod corespunzător şi preţul echipamentului.

1.3. Programarea calculatorului


                                    13
Programele de calculator, cunoscute sub numele de software,
sunt constituite dintr-o serie de instrucţiuni pe care le execută
calculatorul. Când 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 numeşte programare.
       Programele executate pe un calculator pot fi împărţite în trei
categorii:
       • programe de aplicaţie – sunt acele programe care
            interacţionează direct cu utilizatorul, specializate în
            realizarea unei categorii de prelucrări. 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ă prelucrări de uz general. Utilitarele
            realizează o serie de operaţii de „gospodărie” cum ar fi:
            copierea fişierelor, pregătirea discurilor magnetice pentru
            utilizare, crearea de copii de salvare, testarea
            echipamentului, etc.
       • programe de sistem – realizează legătura între
            componentele electronice ale calculatorului şi programele
            de aplicaţie şi utilitare. Rolul programului de sistem este
            acela de a uşura sarcina programatorului, simplificând
            îndeplinirea acelor sarcini care sunt comune marii
            majorităţi a programelor de aplicaţie: alocarea memoriei,
            afişarea 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 operare
        Sistemul de operare este o parte componentă a software-ului
unui calculator, care mai cuprinde un număr 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 păstrarea informaţiilor pe disc. În plus, fiecare sistem
                                   14
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 modificările tehnologice, rămânând în acelaşi 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: recunoaşterea unei intrări de la
tastatură (preluare caracter), trimiterea unui caracter pentru afişare pe
ecranul monitorului, gestionarea fişierelor şi a directoarelor pe disc
(floppy-disk sau hard-disk), controlul fluxului de date cu
echipamentele periferice ca drivere de disc sau imprimante.



                                CALCULATOR


                                  SISTEM DE
                                  OPERARE

                                  APLICAŢII

                                 UTILIZATOR


                    Fig. 1.3. Comunicarea utilizator - calculator




                                     15
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 oricăror alte aplicaţii dorite de
utilizator. Un calculator nu poate funcţiona decât sub gestiunea unui
sistem de operare. Orice aplicaţie lansată în execuţie de către un
utilizator apelează la resursele puse la dispoziţie de către sistemul de
operare. Sistemul de operare interfaţează calculatorul cu operatorul
uman de o manieră cât mai transparentă cu putinţă astfel încât
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, asigurând 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
          acelaşi 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.


                                          16
     multitasking: Permit mai multor programe să ruleze în acelaşi
          timp (execuţie concurentă).
      multithreading: Permit diferitelor părţi ale unui program să
          fie executate concurent.
      timp real (real time): Răspund instantaneu la diferite intrări.
          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
căreia 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 fişiere
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) ataşate 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 dezvoltării unui SOFT adecvat. Astfel, în 1981, a apărut
prima versiune a sistemului de operare MS-DOS. Sistemul de operare
MS–DOS (MicroSoft Disk Operating System) este destinat
gestionării 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 creşterea

                                  17
capabilităţilor hardware ale calculatoarelor, acesta s-a transformat,
prin dezvoltări succesive, în Windows.
        Indiferent de sistemul de operare utilizat, din punctul de vedere
al utilizatorului, informaţiile sunt scrise pe disc sub forma unor fişiere.
Un fişier este o colecţie de informaţii grupate sub acelaşi nume. Un
fişier poate fi un program executabil, un text, o imagine, un grup de
comenzi sau orice altceva.
        Un fişier este identificat prin numele său. Numele unui fişier
este format dintr-un şir de caractere (care în funcţie de sistemul de
operare este limitat la un anumit număr 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 fişiere, sistemul de operare
creează nişte fişiere speciale, numite directoare, care pot fi asemănate
cu cuprinsul unei cărţi, deoarece ele conţin numele fişierelor şi adresa
de început a acestora. De asemenea, un director poate conţine la
rândul său alte directoare creându-se astfel o structură arborescentă de
directoare în care poate fi găsit foarte repede un anumit fişier.
1.3.2. Tipuri de fişiere
       Fişierele se pot împărţi în două categorii – executabile şi
neexecutabile. În prima categorie intră acele fişiere al căror nume scris
în dreptul prompterului (în cazul sistemului de operare DOS)
determină executarea unor activităţi de către sistemul de operare. O
parte dintre fişierele executabile sunt programe şi sunt recunoscute
prin extensia lor care poate fi EXE sau COM, altele fiind constituite
în fişiere de comenzi proprii sistemului de operare, a căror extensie
este BAT.
       Fişierele COM, numite adesea şi comenzi, conţin informaţii în
formatul imagine de memorie. Ele sunt mai compacte şi mai rapide
decât fişierele EXE, dar lungimea lor nu poate să depăşească 64 K.
Fişierele EXE pot să ajungă la dimensiuni mai mari prin segmentarea
programului în fragmente a căror dimensiune să fie de maximum 64K.
       Dintre fişierele neexecutabile vom aminti câteva mai
importante:
   • fişiere text ;
   • fişiere cu extensia SYS sau DRV, cunoscute sub numele de
        driver-e şi care conţin instrucţiuni despre modul în care

                                    18
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.);
   •   fişiere care conţin informaţii intermediare între cele în limbaj
       sursă şi cele executabile (extensiile OBJ, OVL);
   •   fişiere ce conţin imagini (extensiile JPEG, GIF, BMP);
   •   fişiere ce conţin sunete (extensiile WAV, MIDI, MP3) etc.
1.3.3. Construirea fişierului executabil
       Instrucţ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 fişier - numit fişier sursă, un
al doilea program – numit compilator, converteşte instrucţiunile
limbajului de programare în şirurile 1 şi 0 – cunoscute sub numele de
cod maşină.
       Pentru a obţine un program executabil, orice program sursă
trebuie eventual translatat (tradus) în limbaj cod maşină sau cod
obiect pe care îl poate înţelege microprocesorul. În urma acestui
proces, alături de fişierul sursă apare şi fişierul cod obiect (object file.)
Această translatare sau traducere este efectuată de către 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 legături în cod maşină executabil de microprocesorul
sistemului de calcul.
       Programatorii scriu programe într-o formă numită cod sursă.
Acest cod sursă parcurge apoi câţiva paşi înainte de a deveni program
executabil.

                                     19
Pe scurt, un compilator este un program special care procesează
instrucţiuni scrise într-un limbaj de programare particular şi le
transformă în limbaj maşină sau cod maşină pe care îl poate executa
microprocesorul.
        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 legături folosite pentru translatarea
codului sursă în cod maşină.
        În mod tipic, un programator scrie declaraţii într-un limbaj
precum Pascal, C sau MATLAB folosind un editor. Se creează astfel
un fişier numit fişier 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 către compilator, care
translatează instrucţiunile de nivel înalt într-o serie de instrucţiuni cod
obiect. Când 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 către constructor. Codurile binare ale instrucţiunilor
microprocesorului împreună cu reprezentările 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 ieşire, 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
către un editor de legături (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
prelucrări se obţine codul maşină, salvat într-un fişier cu extensia .exe.
Acest cod maşină poate fi executat secvenţial, instrucţiune cu
instrucţiune, de către microprocesor.

                                    20
Cu alte cuvinte, un program executabil (executable program -
aflat pe disc cu extensia .exe) se obţine prin salvarea pe disc a codului
maşină obţinut prin prelucrarea succesivă a fişierului cod sursă de
către compilator (compiler) şi apoi de către link-editor (linker).




              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 legături (linker). Blocurile dreptunghiulare reprezintă
fişierele rezultate în urma aplicării celor trei utilitare de sistem:
      în urma utilizării editorului de texte obţinem fişierul text
          sursă cod cu numele generic “nume”. Dacă folosim limbajul
          de programare C spre exemplu, se obţine fişierul nume.c care
          se va salva pe disc.
      în urma lansării în execuţie a compilatorului, acesta preia
          fişierul sursă şi îl prelucrează corespunzător, semnalizându-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 fişier cod
          obiect, salvat pe disc sub numele nume.obj
      în urma lansării în execuţie a editorului de legături, se preia
          fişierul cod obiect nume.obj şi se leagă cu toate modulele
          necesare (inclusiv funcţii de bibliotecă sau alte module
          externe), obţinându-se un program executabil (cod maşină) cu

                                    21
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 către microprocesor, toate salturile de
         adresă fiind făcute corespunzător.
       Interpretorul (interpreter) este un program care execută
instrucţiuni scrise într-un limbaj de nivel înalt. Numai anumite limbaje
de nivel înalt, spre exemplu BASIC, LISP sau MATLAB, sunt
prevăzute 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 maşină (cod maşină).
                Programele compilate rulează în general mai rapid
                decât 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
fişierul sursă-BASIC corespunzător şi se lansează interpretorul de
BASIC pentru execuţia sa.
       Avantajul unui interpretor este acela al evitării 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, când programatorul doreşte adăugarea 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 fişiere script,
care conţin secvenţe de comenzi care se execută secvenţial.

                                   22
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 scăzut,
corespunzător microprocesorului sistemului de calcul) în limbaj cod
maşină. 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
complexe decât cele de nivel înalt, asamblorul face practic o
convertire biunivocă între mnemonicele limbajului de asamblare şi
codurile binare corespunzătoare acestor mnemonice (instrucţiuni).




                                 23
Instrucţiunile în limbajul
de nivel înalt se introduc
de la tastaturã.




                                         Tot ce se introduce de la
                                         tastaturã este vizibil pe monitor



          Editor de texte
  (eventual incorporat în mediu)



 Fişier text (fişier sursã)
 cu extensia adecvatã:
       nume.pas (limbaj Pascal)
           nume.c (limbaj C)
        nume.cpp (limbaj C++)
    nume.bas (limbaj BASIC), etc.          Fişierul sursã cu numele
                                           “nume” şi extensia
                                           corespunzãtoare se salveazã
                                           din memoria RAM pe harddisk
           Compilator
   Se compileazã fişierul sursã


   Se obţine fişierul cod obiect:
                nume.obj
                                           Se salveazã pe harddisk fişierul
                                                      nume.obj

             Link-editare
(legarea tuturor modulelor necesare)



     Se obţine fişierul cod maşinã
             (executabil):
               nume.exe                      Se salveazã pe harddisk fişierul
                                                        nume.exe



          Lansarea în execuţie de cãtre
              sistemul de operare
           a executabilului nume.exe

     Fig. 1.6 Detalierea procesului de generare a unui executabil
                         Capitolul II

                                    24
REPREZENTAREA DATELOR ÎN
               CALCULATOR


       Se ş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
purtător 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, adevărat) şi F (false, fals) sau cele
două cifre binare1 şi 0.
                Tensiune

    High=’1’



     Low=’0’

                                                                   timp
       Ca urmare a acestei asocieri spunem, prin abuz de limbaj, că un
calculator numeric prelucrează numere binare. Ca şi un număr
zecimal, un număr 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 când reprezentarea proprie maşinilor de calcul
este cea binară. De aici rezultă necesitatea compatibilizării 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 foloseşte ca ponderi puterile întregi
(pozitive sau negative) ale lui 10 (zece) iar sistemul binar va folosi
puterile întregi (pozitive sau negative) ale lui 2.
       Î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

                                   25
internă sunt necesare convenţii de reprezentare: indiferent de tipul
datelor, acestea vor fi colecţii sau şiruri de cifre binare cărora, 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, atât la nivel intern (în memoria
calculatorului) cât ş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 regiştrii
microprocesorului. În acest format se prelucrează numerele pentru
implementarea diverselor operaţii aritmetice. La nivelul calculatorului
informaţia nu poate fi decât 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 foloseşte semnul “-” în faţa unui număr în cazul în care
acesta este negativ sau punctul care separă partea întreagă de cea
fracţionară. De asemenea, numerele întregi interpretate fără semn se
pot afişa şi în format binar, octal sau hexazecimal, deci în bazele 2, 8
sau 16.
       În cele ce urmează ne vom pune următoarele probleme:
     - cum se reprezintă extern un număr natural
     - cum se reprezintă intern un număr natural
     - cum se reprezintă extern un număr întreg negativ
                                   26
-    cum se reprezintă intern un număr î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 priveşte 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 număr nu este întâmplătoare ci conformă cu o
pondere corespunzătoare unei puteri a bazei de numeraţie.
       O caracteristică a reprezentărilor 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 foloseşte semnul “-” iar pentru reprezentarea numerelor reale se
foloseşte punctul “.” pentru delimitarea părţ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 câteva exemple de reprezentări
zecimale externe:
        Număr           Reprezentare             Reprezentare
                          normală                  ştiinţifică
             37               37                    0.37x102
            -37              -37                   -0.37x102
           0.375            0.375                  0.375x100
          -0.375           -0.375                 -0.375x100
        0.00375           0.00375                  0.375x10-2
        -0.00375         -0.00375                 -0.375x10-2
         12.375            12.375                0.12375x102
         -12.375          -12.375               -0.12375x102
      În general dorim să obţinem rezultatele numerice ale
programelor pe care le concepem într-o formă de reprezentare
accesibilă. Totuşi, calculatorul trebuie informat asupra formatului de
reprezentare în care dorim să se afişeze datele necesare. Aceasta
înseamnă că va trebui să specificăm câte cifre se vor folosi la partea

                                  27
întreagă şi câte la partea fracţionară sau dacă dorim reprezentare
ştiinţifică sau nu. De altfel şi operatorul uman face aceleaşi convenţii
                                                     1
de reprezentare. Spre exemplu ştim că numărul          nu poate fi exact
                                                     3
reprezentat ca un număr zecimal, deci fixăm un format de
reprezentare. Dacă formatul ale se limitează la 4 cifre zecimale, atunci
            1
vom scrie     ≅ 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 întregi

       Numerele naturale se pot reprezenta fie în baza de numeraţie
10, fie în orice altă bază.
       În general, un număr întreg în baza b se poate reprezenta cu un
număr 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 obişnuiţi să folosim mulţimea cifrelor zecimale.
Dacă totuşi se foloseşte o bază de reprezentare mai mare decât 10,
atunci mulţimea cifrelor zecimale nu mai este suficientă pentru
reprezentarea numerelor în acea bază. Spre exemplu să considerăm
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 Simbol
                     0       0         8         8
                     1       1         9         9
                     2       2         10        A
                     3       3         11        B
                     4       4         12        C
                     5       5         13        D
                     6       6         14        E
                     7       7         15        F


                                  28
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 numărului N b va fi:

         (                                                         ) ∑ ck ⋅ b k
                                                                            n −1
N b = ± c n−1 ⋅ b n −1 + c n − 2 ⋅ b n− 2 + ... + c1 ⋅ b1 + c 0 ⋅ b 0 = ±
                                                                     k =0
     În continuare vom studia următoarele probleme:
    - cum se face conversia unui număr din baza b = 10 în baza
         b=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 număr natural din baza 10 în baza 2, se
împarte succesiv numărul la 2 şi se utilizează resturile la aceste
împărţiri în ordinea inversă de cum au fost obţinute.
    a) Conversia din baza 10 în baza 2 şi invers
    Fie de exemplu numărul zecimal 37. Reprezentarea sa binară va fi
obţinută astfel:
                             3710 = 1001012
                          37     2
                          36     18    2
                           1     18    9 2
                                  0    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:

                25 24 23 22 21 20
 1001012      = 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

                                           29
0+1=1
         1+0=1
         1+1=0, transport 1 spre rangul următor
Astfel, să facem adunarea 37+25 în binar:
                     37          1 0 0 1 0 1+
                     25            11001
                     62          111110
Se observă cum se obţine rezultatul corect.
      Înmulţirea se face în mod asemănător, ca o adunare repetată.
Spre exemplu, să calculăm 37x25

                    37             1 0 0 1 0 1x
                    25               11001
                                    100101
                                100101
                               100101
                    925        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 numărul 4911 care se doreşte scris în baza 13.
Pentru a realiza această conversie, vom folosi baza intermediară 10.
Vom converti mai întâi 4A11 în baza 10 şi apoi numărul zecimal
obţinut îl vom trece în baza 13. Se observă cum un număr în baza 11
poate conţine şi cifra A=10 iar un număr în baza 13 poate conţine
cifrele A=10, B=11, C=12.
             4 A11 = 10 ⋅110 + 4 ⋅111 = 44 + 10 = 5410
                          54    13
                          52    4     13
                          2     0     0
                                 4
                           5310 = 4213
                           4 A11 = 4213


                                 30
2.2.2. Reprezentarea externă a numerelor reale

       Semnificativă pentru utilizatorul uman este reprezentarea
zecimală (în baza b=10) a numerelor reale, cu care suntem obişnuiţ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
număr 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 numărului de mai sus va fi:
         (                                                                                                     ) ∑ ck ⋅ b k
                                                                                                                       n− 1
N10 = ± cn − 1b n − 1 + cn − 2b n − 2 + c1b1 + c0b 0 + c− 1b − 1 + c− 2 ⋅ b − 2 + c− m + 1b − m + 1 + c− m b − m = ±
                                                                                                                 k= −m
       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 producătorii 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 număr real
cu n cifre pentru partea întreagă şi m cifre pentru partea fracţionară.
       Aşa cum în sistemul zecimal reprezentăm cu un număr finit de
cifre zecimale numerele reale, acelaşi lucru se va întâmpla şi în
sistemul binar. Punctul binar va avea o semnificaţie asemănătoare 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 număr real va avea reprezentarea binară:
             (
 N 2 = ± bm bm− 1...b1b0 .b− 1b− 2 ...b− n = bm 2 m + bm− 1 2 m− 1 + b1 21 + b0 20 + b− 1 2 − 1 + b− 2 2 − 2 + ... + b− n 2 − n   )
Spre exemplu, numărul 12.25 va avea reprezentarea binară:
                              12.2510 = 1100.01 = 2 3 + 2 2 + 2 −2


                                                              31
Partea întreagă a unui număr real se reprezintă binar precum
numerele întregi (cu sau fără 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ţeşte succesiv cu 2. Dacă rezultatul depăşeşte
valoarea 1, atunci se înscrie un bit 1. Se continuă mai departe cu
dublarea valorii care depăşeşte 1. Dacă rezultatul nu depăşeşte
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 împărţ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         1
                    0
Obţinem exact rezultatul căutat: 12.25 = 1100.01
Să mai considerăm un alt exemplu. Să reprezentăm numărul 5.37
Partea întreagă are reprezentarea 510 =1012
                 Partea         P.F. x 2    Noua       Bitul
            fracţionară P.F.                P.F.      înscris
                  0.37           0.74       0.74         0
                  0.74           1.48       0.48         1
                  0.48           0.96       0.96         0
                  0.96           1.92       0.92         1
                  0.92           1.84       0.84         1
                  0.84           1.68       0.68         1
                  0.68           1.36       0.36         1
                  0.36           0.72       0.72         0
                  0.72           1.44       0.44         1
                  Etc..                                Etc..
      Obţinem: 5.3710 = 101.010111101...2
Cu cât mai multe cifre binare vom reţine după punctul binar, cu atât
vom fi mai aproape de valoarea exactă 5.37.
      Obţinem un rezultat foarte important: Deşi un număr zecimal
poate avea un număr finit de cifre zecimale după punctul zecimal,
reprezentarea sa binară internă poate avea un număr infinit de cifre
binare. Este valabilă şi reciproca: un număr real zecimal cu un

                                   32
număr infinit de cifre se poate reprezenta într-o altă bază pe un
                             1
număr finit de cifre ( ex:      = 0.3333...3...10 = 0.13 ). Cum orice
                             3
reprezentare binară internă este pe un număr finit de biţi, numărul
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 reprezentării numerelor în calculator. Cu cât un număr binar
se reprezintă pe un număr mai mare de biţi, cu atât precizia de
reprezentare creşte.

2.3 Reprezentarea internă a numerelor
       Deoarece semnalul intern purtător de informaţie într-un
calculator este de tip binar, un număr zecimal (întreg sau real) se va
reprezenta intern în baza 2 cu ajutorul unui număr binar. O cifră binară
se numeşte bit (Binary Digit) şi poate fi fie 0 fie 1.
       În reprezentarea externă a numerelor am văzut că se poate folosi
orice bază de numeraţie (cu cifrele corespunzătoare). 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 număr (orice tip de dată) este reprezentat la
nivel intern de un număr prestabilit de biţi. Specialiştii 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 aşa-numitelor tipuri de date.
       Tipul unei date reprezintă modul în care microprocesorul
stochează în memorie şi prelucrează cu ajutorul regiştrilor 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 câmpuri
de biţi din cadrul reprezentării.
2.3.1. Reprezentarea internă a numerelor întregi


                                  33
Un număr binar este o colecţie de cifre binare ponderate fiecare
cu o putere a lui 2. Bitul corespunzător ponderii celei mai mari, situat
cel mai în stânga, se numeşte MSB (Most Significand Bit) iar cel
corespunzător ponderii celei mai mici, situat cel mai în dreapta, se
numeşte LSB (Less Significand Bit). În cazul reprezentării binare a
numerelor naturale, reprezentarea externă (cea percepută de operatorul
uman) şi cea internă (cea prelucrată de procesorul calculatorului) sunt
asemănătoare. Cum pentru operatorul uman operatorii ‘+’ sau ‘-‘
semnifică faptul că un număr 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ă numărul este pozitiv, se adaugă în
poziţia MSB bitul de semn ‘0’, iar dacă numărul este negativ se
utilizează în poziţia MSB bitul de semn ‘1’. Mai mult, numerele
negative se reprezintă în aşa numitul complement faţă de 2.
  Reprezentarea numerelor întregi negative în complement faţă de 2
      Această formă de reprezentare a numerelor negative necesită
parcurgerea următorilor paşi:
   pas1. Se reprezintă modulul numărului negativ, folosind bit de
semn (egal cu 0, evident)
   pas2.    Se complementează toţi biţii numărului astfel obţinut.
            Complementarea înseamnă transformarea bitului 0 în
            bitul 1 şi a bitului 1 în bitul 0.
   pas3. Numărul astfel obţinut se adună cu 1.
De exemplu, să reprezentăm numărul -37.
                               3710 = 1001012 = [ 0] 100101
   pas1.         |-37| = 37                     bit
                                                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 numărului
negativ. Pentru a vedea ce număr negativ este reprezentat, putem
repeta procedeul de mai sus şi obţinem reprezentarea numărului
pozitiv dat de modulul său.
       O modalitate mai simplă este alocarea ponderii corespunzătoare
bitului de semn dar pe care o considerăm că reprezintă un număr
negativ. Astfel:
                                  34
10110112 = -1x26 + 1x24 + 1x23 + 1x21 + 1x20 = -64 + 27 = -37

2.3.2 Adunarea, scăderea şi înmulţirea numerelor întregi

        Aceste 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 obişnuit.
De exemplu, dorim să calculăm:
                                    37-25
                                    25-37
                                  (-25)x37
                                (-25)x(-37)
        Pentru efectuarea acestor calcule, vom scrie reprezentările 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
aceeaşi semnificaţie, este nevoie să reprezentăm numerele cu care
lucrăm pe un acelaşi număr de biţi. La adunări sau scăderi, biţii de
semn se vor afla în aceeaşi poziţie (vor avea aceeaşi pondere) şi vom
obţine astfel rezultate corecte. Pentru a avea o scriere pe un acelaşi
număr de biţi, se adaugă (completează) la stânga bitul de semn de un
număr corespunzător de ori. Astfel:
                               37 − 25 = 37 + (−25) = 0100101 + 1100111
                               0100101 +
− 2510 = 1001112 = 1100111
                              1100111
25 = 0110012 = 0011001        −−−−−−
                               0001100 = 1210




                                    35
25 − 37 = 25 + (−37) = 0011001 + 1011011
                             0011001 +
− 37 = 1011011
                            1011011
25 = 0110012 = 0011001
                              −−−−−−
                              1110100 = −64 + 52 = −12
       În continuare vom pune în evidenţă importanţa gamei de
reprezentare, adică a domeniului de valori ale datelor. Să considerăm,
spre exemplu, adunarea a două numere cu semn reprezentate pe un
octet (8 biţi). Aceste numere sunt cuprinse în gama
             [− 2 , 2 − 1]
                7   7
                           = [ − 128, 127] .
       Dacă vom dori să adunăm două numere din acest domeniu şi să
reprezentăm rezultatul tot pe un octet, putem avea surprize. De
exemplu, să considerăm 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 scădere, ne aşteptăm să obţinem un rezultat, 105, în aceeaşi
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 depăşit
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ă precizăm 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 priveşte înmulţirea numerelor întregi cu semn (cu bit
de semn), aici problema nu mai are o rezolvare asemănătoare, î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,

                                  36
funcţie de semnul rezultatului, se ia decizia reprezentării corecte a
rezultatului.
       Spre exemplu, să calculăm (-25)x37. Pentru aceasta, procesorul
va primi pentru procesare următoarele două numere:
                    37 x(−25) = [ 0]100101 × [1]100111
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 numărului (-25), care se obţine prin
complementarea faţă de 2 a numărului binar 1100111:
                     11001110011000+1=0011001
Se va reţine pentru procesare numai numărul (fără semn) 11001, care
se va înmulţi cu numărul (fără semn) 100101, obţinând, aşa cum am
arătat mai sus, valoarea 1110011101. Mai departe, se adaugă bitul de
semn, 0 pentru numere pozitive, obţinându-se 01110011101. Acest
ultim număr se va complementa faţă de 2, obţinându-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 fără semn) şi care este lungimea lor de reprezentare (toate trebuie
să aibă aceeaşi 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 rămân valabile considerentele
                     de la numere întregi.
       În cazul de mai sus, problema reprezentării numărului negativ a
fost rezolvată cu ajutorul bitului de semn dar problema reprezentării
punctului binar va avea altă rezolvare.
2.3.3 Reprezentarea internă a numerelor reale

      Din considerentele de la reprezentarea externă a datelor putem
trage alte concluzii importante din punct de vedere al reprezentării

                                  37
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003
Carte C 2003

More Related Content

What's hot

47363283 curs-comunicare-profesionala
47363283 curs-comunicare-profesionala47363283 curs-comunicare-profesionala
47363283 curs-comunicare-profesionalasunshine38a
 
Initiere operare pc
Initiere operare pcInitiere operare pc
Initiere operare pcELENA NITA
 
Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...
Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...
Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...Miu Alexandru
 
curs utilizarea-calculatorului
curs utilizarea-calculatoruluicurs utilizarea-calculatorului
curs utilizarea-calculatoruluicomsys00
 
246665018 deontologie
246665018 deontologie246665018 deontologie
246665018 deontologieexodumuser
 
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-201186576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011exodumuser
 
Sfântul Dionisie Aeropagitul – Opere complete
Sfântul Dionisie Aeropagitul – Opere completeSfântul Dionisie Aeropagitul – Opere complete
Sfântul Dionisie Aeropagitul – Opere completeStea emy
 
77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romane77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romaneLivia Moldovan
 
17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-sociale17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-socialeexodumuser
 
Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013IMI PQ NET Romania
 
Metodica predarii matematicii_si_aritmetice
Metodica predarii matematicii_si_aritmeticeMetodica predarii matematicii_si_aritmetice
Metodica predarii matematicii_si_aritmeticeVioleta Tacea
 
Drept internaţional privat
Drept internaţional privatDrept internaţional privat
Drept internaţional privatexodumuser
 
58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...
58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...
58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...Lucrari de licenta
 
Plan de Dezvoltare Locala Alutus
Plan de Dezvoltare Locala AlutusPlan de Dezvoltare Locala Alutus
Plan de Dezvoltare Locala AlutusBodvaj Egyesület
 
22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat
22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat
22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnatPopescuAnca8
 
Manual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-blackManual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-blackQuickmobile
 
Dreptul muncii-2011
Dreptul muncii-2011Dreptul muncii-2011
Dreptul muncii-2011exodumuser
 

What's hot (20)

47363283 curs-comunicare-profesionala
47363283 curs-comunicare-profesionala47363283 curs-comunicare-profesionala
47363283 curs-comunicare-profesionala
 
Initiere operare pc
Initiere operare pcInitiere operare pc
Initiere operare pc
 
Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...
Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...
Opera omiletica a_sfantului_vasile_cel_mare_si_actualitatea_ei_pentru_misiune...
 
Comunicare..
Comunicare..Comunicare..
Comunicare..
 
curs utilizarea-calculatorului
curs utilizarea-calculatoruluicurs utilizarea-calculatorului
curs utilizarea-calculatorului
 
246665018 deontologie
246665018 deontologie246665018 deontologie
246665018 deontologie
 
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-201186576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
 
Sfântul Dionisie Aeropagitul – Opere complete
Sfântul Dionisie Aeropagitul – Opere completeSfântul Dionisie Aeropagitul – Opere complete
Sfântul Dionisie Aeropagitul – Opere complete
 
77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romane77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romane
 
17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-sociale17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-sociale
 
Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013
 
Metodica predarii matematicii_si_aritmetice
Metodica predarii matematicii_si_aritmeticeMetodica predarii matematicii_si_aritmetice
Metodica predarii matematicii_si_aritmetice
 
Romana
RomanaRomana
Romana
 
Fisa2verb
Fisa2verbFisa2verb
Fisa2verb
 
Drept internaţional privat
Drept internaţional privatDrept internaţional privat
Drept internaţional privat
 
58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...
58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...
58 administrarea salarizarii. analiza diagnostic a cheltuielilor salariale (s...
 
Plan de Dezvoltare Locala Alutus
Plan de Dezvoltare Locala AlutusPlan de Dezvoltare Locala Alutus
Plan de Dezvoltare Locala Alutus
 
22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat
22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat
22 teza varga csaba f v_- 27_sept_ 2018 final-converted-semnat
 
Manual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-blackManual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-black
 
Dreptul muncii-2011
Dreptul muncii-2011Dreptul muncii-2011
Dreptul muncii-2011
 

Viewers also liked

Manual de programare c
Manual de programare cManual de programare c
Manual de programare cArgos
 
Instructiuni in c si c++
Instructiuni in c si c++Instructiuni in c si c++
Instructiuni in c si c++Serghei Urban
 
Functii, tablouri si pointeri in c si c++
Functii, tablouri si pointeri  in c si c++Functii, tablouri si pointeri  in c si c++
Functii, tablouri si pointeri in c si c++Serghei Urban
 
Programarea calculatoarelor - Limbajul C
Programarea calculatoarelor   - Limbajul CProgramarea calculatoarelor   - Limbajul C
Programarea calculatoarelor - Limbajul CVlad Posea
 
'Documents.tips curs baze-de-date-5642553eddb8c.doc'
'Documents.tips curs baze-de-date-5642553eddb8c.doc''Documents.tips curs baze-de-date-5642553eddb8c.doc'
'Documents.tips curs baze-de-date-5642553eddb8c.doc'Otilia-Loredana Tudor
 
Pagina de Facebook - Ghid practic
Pagina de Facebook - Ghid practicPagina de Facebook - Ghid practic
Pagina de Facebook - Ghid practicAlexandru Negrea
 
Introducere baza de-date
Introducere baza de-dateIntroducere baza de-date
Introducere baza de-dateChelariu Mihai
 
Microsoft+access+este+aplicatia+de+management+a+bazelor[1]
Microsoft+access+este+aplicatia+de+management+a+bazelor[1]Microsoft+access+este+aplicatia+de+management+a+bazelor[1]
Microsoft+access+este+aplicatia+de+management+a+bazelor[1]Claudia
 
Instruire Asistata De Calculator Modul1a
Instruire Asistata De Calculator Modul1aInstruire Asistata De Calculator Modul1a
Instruire Asistata De Calculator Modul1aCella Buciuman
 
Baze+de+date 1
Baze+de+date 1Baze+de+date 1
Baze+de+date 1Claudia
 
Programarea independenta de platforma in C++. Qt
Programarea independenta de platforma in C++. QtProgramarea independenta de platforma in C++. Qt
Programarea independenta de platforma in C++. QtDragos Tudor Acostachioaie
 
baze-de-date-access-laborator-de-ioan-mocian
baze-de-date-access-laborator-de-ioan-mocianbaze-de-date-access-laborator-de-ioan-mocian
baze-de-date-access-laborator-de-ioan-mocianCristina Timofte
 
68 De Pagini De Probleme Rezolvate Si Teorie In Pascal
68 De Pagini De Probleme Rezolvate Si Teorie In Pascal68 De Pagini De Probleme Rezolvate Si Teorie In Pascal
68 De Pagini De Probleme Rezolvate Si Teorie In Pascalguest274e8
 

Viewers also liked (20)

Manual de programare c
Manual de programare cManual de programare c
Manual de programare c
 
Instructiuni in c si c++
Instructiuni in c si c++Instructiuni in c si c++
Instructiuni in c si c++
 
Functii, tablouri si pointeri in c si c++
Functii, tablouri si pointeri  in c si c++Functii, tablouri si pointeri  in c si c++
Functii, tablouri si pointeri in c si c++
 
Limbajul c
Limbajul cLimbajul c
Limbajul c
 
Programarea calculatoarelor - Limbajul C
Programarea calculatoarelor   - Limbajul CProgramarea calculatoarelor   - Limbajul C
Programarea calculatoarelor - Limbajul C
 
Manual limbaj c
Manual limbaj cManual limbaj c
Manual limbaj c
 
'Documents.tips curs baze-de-date-5642553eddb8c.doc'
'Documents.tips curs baze-de-date-5642553eddb8c.doc''Documents.tips curs baze-de-date-5642553eddb8c.doc'
'Documents.tips curs baze-de-date-5642553eddb8c.doc'
 
Pagina de Facebook - Ghid practic
Pagina de Facebook - Ghid practicPagina de Facebook - Ghid practic
Pagina de Facebook - Ghid practic
 
Introducere baza de-date
Introducere baza de-dateIntroducere baza de-date
Introducere baza de-date
 
Microsoft+access+este+aplicatia+de+management+a+bazelor[1]
Microsoft+access+este+aplicatia+de+management+a+bazelor[1]Microsoft+access+este+aplicatia+de+management+a+bazelor[1]
Microsoft+access+este+aplicatia+de+management+a+bazelor[1]
 
Instruire Asistata De Calculator Modul1a
Instruire Asistata De Calculator Modul1aInstruire Asistata De Calculator Modul1a
Instruire Asistata De Calculator Modul1a
 
Microsoft office word 2010
Microsoft office word 2010Microsoft office word 2010
Microsoft office word 2010
 
Baze de date Access
Baze de date AccessBaze de date Access
Baze de date Access
 
Baze+de+date 1
Baze+de+date 1Baze+de+date 1
Baze+de+date 1
 
Programarea independenta de platforma in C++. Qt
Programarea independenta de platforma in C++. QtProgramarea independenta de platforma in C++. Qt
Programarea independenta de platforma in C++. Qt
 
Tutorial C++
Tutorial C++Tutorial C++
Tutorial C++
 
Manual microsoft excel
Manual microsoft excelManual microsoft excel
Manual microsoft excel
 
baze-de-date-access-laborator-de-ioan-mocian
baze-de-date-access-laborator-de-ioan-mocianbaze-de-date-access-laborator-de-ioan-mocian
baze-de-date-access-laborator-de-ioan-mocian
 
Emoţii şoc
Emoţii şocEmoţii şoc
Emoţii şoc
 
68 De Pagini De Probleme Rezolvate Si Teorie In Pascal
68 De Pagini De Probleme Rezolvate Si Teorie In Pascal68 De Pagini De Probleme Rezolvate Si Teorie In Pascal
68 De Pagini De Probleme Rezolvate Si Teorie In Pascal
 

Similar to Carte C 2003

Management de proiect editia ii v1
Management de proiect editia ii   v1Management de proiect editia ii   v1
Management de proiect editia ii v1Oxana Ghenciu
 
Programare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducereProgramare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducereTraian Anghel
 
Curs practic de_java
Curs practic de_javaCurs practic de_java
Curs practic de_javastones1
 
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaCristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaBujor Elena
 
Cristian frasinaru curs practic de java
Cristian frasinaru   curs practic de javaCristian frasinaru   curs practic de java
Cristian frasinaru curs practic de javaCorniciuc Oana
 
Limbajul c c pentru incepatori
Limbajul c c pentru incepatoriLimbajul c c pentru incepatori
Limbajul c c pentru incepatoriSTELIANCREANGA
 
Curs ubuntu
Curs ubuntuCurs ubuntu
Curs ubuntucrys72f
 
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...Lucrari de licenta
 
Introducere in expertiza contabila si in audit financiar, 2008, abbyy6
Introducere in expertiza contabila si in audit financiar, 2008, abbyy6Introducere in expertiza contabila si in audit financiar, 2008, abbyy6
Introducere in expertiza contabila si in audit financiar, 2008, abbyy6silviaxx
 
Antreprenoriat manual
Antreprenoriat manualAntreprenoriat manual
Antreprenoriat manualLupu Maria
 
Bit defender businessclient_userguide_ro
Bit defender businessclient_userguide_roBit defender businessclient_userguide_ro
Bit defender businessclient_userguide_ropaulbth
 
Cicerone laurentiu popa teza doctorat
Cicerone laurentiu popa  teza doctoratCicerone laurentiu popa  teza doctorat
Cicerone laurentiu popa teza doctoratadinachirila
 
510402 Cristian Frasinaru Curs Practic De Java
510402 Cristian Frasinaru Curs Practic De Java510402 Cristian Frasinaru Curs Practic De Java
510402 Cristian Frasinaru Curs Practic De Javaguesteeb1f68
 
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaCristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaSerghei Urban
 
328871716 ghid-integral-final-x
328871716 ghid-integral-final-x328871716 ghid-integral-final-x
328871716 ghid-integral-final-xCristina Nicu
 
Notiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitecturaNotiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitecturaGeorge Cazan
 
Notiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitecturaNotiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitecturaRobin Cruise Jr.
 
Curs management-proiect
Curs management-proiectCurs management-proiect
Curs management-proiectcaddylac_slk
 

Similar to Carte C 2003 (20)

Management de proiect editia ii v1
Management de proiect editia ii   v1Management de proiect editia ii   v1
Management de proiect editia ii v1
 
Programare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducereProgramare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducere
 
Curs practic de_java
Curs practic de_javaCurs practic de_java
Curs practic de_java
 
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaCristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
 
Cristian frasinaru curs practic de java
Cristian frasinaru   curs practic de javaCristian frasinaru   curs practic de java
Cristian frasinaru curs practic de java
 
Limbajul c c pentru incepatori
Limbajul c c pentru incepatoriLimbajul c c pentru incepatori
Limbajul c c pentru incepatori
 
Curs ubuntu
Curs ubuntuCurs ubuntu
Curs ubuntu
 
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...
 
curs-ubuntu
curs-ubuntucurs-ubuntu
curs-ubuntu
 
Introducere in expertiza contabila si in audit financiar, 2008, abbyy6
Introducere in expertiza contabila si in audit financiar, 2008, abbyy6Introducere in expertiza contabila si in audit financiar, 2008, abbyy6
Introducere in expertiza contabila si in audit financiar, 2008, abbyy6
 
Antreprenoriat manual
Antreprenoriat manualAntreprenoriat manual
Antreprenoriat manual
 
Bit defender businessclient_userguide_ro
Bit defender businessclient_userguide_roBit defender businessclient_userguide_ro
Bit defender businessclient_userguide_ro
 
Cicerone laurentiu popa teza doctorat
Cicerone laurentiu popa  teza doctoratCicerone laurentiu popa  teza doctorat
Cicerone laurentiu popa teza doctorat
 
510402 Cristian Frasinaru Curs Practic De Java
510402 Cristian Frasinaru Curs Practic De Java510402 Cristian Frasinaru Curs Practic De Java
510402 Cristian Frasinaru Curs Practic De Java
 
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaCristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
 
SeniorERP structura
SeniorERP structuraSeniorERP structura
SeniorERP structura
 
328871716 ghid-integral-final-x
328871716 ghid-integral-final-x328871716 ghid-integral-final-x
328871716 ghid-integral-final-x
 
Notiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitecturaNotiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitectura
 
Notiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitecturaNotiuni de geometrie descriptiva in reprezentarile de arhitectura
Notiuni de geometrie descriptiva in reprezentarile de arhitectura
 
Curs management-proiect
Curs management-proiectCurs management-proiect
Curs management-proiect
 

More from MegaVjohnson

Digital Photo Repair Using Photoshop
Digital Photo Repair Using PhotoshopDigital Photo Repair Using Photoshop
Digital Photo Repair Using PhotoshopMegaVjohnson
 
Notiuni De Optoelectronica
Notiuni De OptoelectronicaNotiuni De Optoelectronica
Notiuni De OptoelectronicaMegaVjohnson
 
Securitatea Retelelor. Viermele Internetului
Securitatea Retelelor. Viermele InternetuluiSecuritatea Retelelor. Viermele Internetului
Securitatea Retelelor. Viermele InternetuluiMegaVjohnson
 
Solutia Linux De Conectare La Internet
Solutia Linux De Conectare La InternetSolutia Linux De Conectare La Internet
Solutia Linux De Conectare La InternetMegaVjohnson
 
On Social E Learning
On Social E LearningOn Social E Learning
On Social E LearningMegaVjohnson
 
Capturing Knowledge Of User Preferences With Recommender Systems
Capturing Knowledge Of User Preferences With Recommender SystemsCapturing Knowledge Of User Preferences With Recommender Systems
Capturing Knowledge Of User Preferences With Recommender SystemsMegaVjohnson
 
Evaluating Collaborative Filtering Recommender Systems
Evaluating Collaborative Filtering Recommender SystemsEvaluating Collaborative Filtering Recommender Systems
Evaluating Collaborative Filtering Recommender SystemsMegaVjohnson
 
Hybrid Recommender Systems
Hybrid Recommender SystemsHybrid Recommender Systems
Hybrid Recommender SystemsMegaVjohnson
 
Collaborative Projects And Self Evaluation Within A Social Reputation Based E...
Collaborative Projects And Self Evaluation Within A Social Reputation Based E...Collaborative Projects And Self Evaluation Within A Social Reputation Based E...
Collaborative Projects And Self Evaluation Within A Social Reputation Based E...MegaVjohnson
 
An Usability Study Of A Recommender System For Mash Ups For Learning
An Usability Study Of A Recommender System For Mash Ups For LearningAn Usability Study Of A Recommender System For Mash Ups For Learning
An Usability Study Of A Recommender System For Mash Ups For LearningMegaVjohnson
 

More from MegaVjohnson (15)

Digital Photo Repair Using Photoshop
Digital Photo Repair Using PhotoshopDigital Photo Repair Using Photoshop
Digital Photo Repair Using Photoshop
 
Notiuni De Optoelectronica
Notiuni De OptoelectronicaNotiuni De Optoelectronica
Notiuni De Optoelectronica
 
Lunar Eclipse
Lunar EclipseLunar Eclipse
Lunar Eclipse
 
Space Travel
Space TravelSpace Travel
Space Travel
 
Sirtel Workshop
Sirtel WorkshopSirtel Workshop
Sirtel Workshop
 
Securitatea Retelelor. Viermele Internetului
Securitatea Retelelor. Viermele InternetuluiSecuritatea Retelelor. Viermele Internetului
Securitatea Retelelor. Viermele Internetului
 
Solutia Linux De Conectare La Internet
Solutia Linux De Conectare La InternetSolutia Linux De Conectare La Internet
Solutia Linux De Conectare La Internet
 
Atomic Structure
Atomic StructureAtomic Structure
Atomic Structure
 
Curs Sctr2009
Curs Sctr2009Curs Sctr2009
Curs Sctr2009
 
On Social E Learning
On Social E LearningOn Social E Learning
On Social E Learning
 
Capturing Knowledge Of User Preferences With Recommender Systems
Capturing Knowledge Of User Preferences With Recommender SystemsCapturing Knowledge Of User Preferences With Recommender Systems
Capturing Knowledge Of User Preferences With Recommender Systems
 
Evaluating Collaborative Filtering Recommender Systems
Evaluating Collaborative Filtering Recommender SystemsEvaluating Collaborative Filtering Recommender Systems
Evaluating Collaborative Filtering Recommender Systems
 
Hybrid Recommender Systems
Hybrid Recommender SystemsHybrid Recommender Systems
Hybrid Recommender Systems
 
Collaborative Projects And Self Evaluation Within A Social Reputation Based E...
Collaborative Projects And Self Evaluation Within A Social Reputation Based E...Collaborative Projects And Self Evaluation Within A Social Reputation Based E...
Collaborative Projects And Self Evaluation Within A Social Reputation Based E...
 
An Usability Study Of A Recommender System For Mash Ups For Learning
An Usability Study Of A Recommender System For Mash Ups For LearningAn Usability Study Of A Recommender System For Mash Ups For Learning
An Usability Study Of A Recommender System For Mash Ups For Learning
 

Carte C 2003

  • 1. CUPRINS CUPRINS............................................................................................I Capitolul I...........................................................................................1 INTRODUCERE ÎN..........................................................................1 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.........................................................7 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 fişiere.......................................................18 1.3.3. Construirea fişierului executabil.............................19 Capitolul II.......................................................................................24 REPREZENTAREA DATELOR ÎN CALCULATOR.................25 2.1. Reprezentarea internă/externă a numerelor....................26 2.2. Reprezentarea externă a numerelor.................................27 2.2.1. Reprezentarea externă a numerelor întregi..............28 2.2.2. Reprezentarea externă a numerelor reale................31 2.3 Reprezentarea internă a numerelor..................................33 2.3.1. Reprezentarea internă a numerelor întregi..............33 2.3.2 Adunarea, scăderea şi înmulţirea numerelor întregi.35 2.3.3 Reprezentarea internă a numerelor reale..................37 Game de reprezentare pentru numerele reale....................49 2.3.5. Codificare BCD.......................................................50 Capitolul III......................................................................................52 ELEMENTELE DE BAZĂ ALE LIMABJULUI C.....................52 3.1. Crearea şi lansarea în execuţie a unui program C...........52 3.2. Structura unui program C................................................54 3.3. Mulţimea caracterelor ....................................................56 3.3.1. Litere şi numere.......................................................57 I
  • 2. 3.3.2. Caractere whitespace...............................................57 3.3.3. Caractere speciale şi de punctuaţie..........................57 3.3.4. Secvenţe escape.......................................................58 3.4. Identificatori....................................................................59 3.5. Cuvintele cheie ale limbajului C.....................................60 3.6. Constante.........................................................................60 3.6.1. Constante caracter...................................................61 3.6.2. Constante întregi.....................................................61 3.6.3. Constante în virgulă mobilă....................................61 3.6.4. Constante şir............................................................62 3.6.5. Constanta zero.........................................................63 3.6.6. Obiecte constante....................................................63 3.6.7. Enumerări ...............................................................64 Capitolul IV......................................................................................64 ..........................................................................................................64 Operanzi şi operatori în C...............................................................64 4.1. Operanzi .........................................................................65 4.2. Operatori ........................................................................65 4.2.1. Operatori aritmetici.................................................66 4.2.2. Operatori de incrementare şi decrementare.............67 4.2.3. Operatori relaţionali................................................67 4.2.4. Operatori logici.......................................................68 4.2.5. Operatori logici la nivel de bit.................................69 4.2.6. Operatorul de atribuire............................................74 4.2.7. Operatorul sizeof.....................................................74 4.2.8. Operatorul ternar ?.................................................75 4.2.9. Operatorul virgulă...................................................76 4.2.10. Operatorul de forţare a tipului sau de conversie explicită (expresie cast)........................................77 4.2.11. Operatorii paranteză..............................................77 4.2.12. Operatorul adresă..................................................78 4.2.13. Alţi operatori ai limbajului C................................78 4.2.14. Regula conversiilor implicite şi precedenţa operatorilor...........................................................78 Capitolul V.......................................................................................80 ..........................................................................................................80 II
  • 3. Instrucţiuni.......................................................................................80 5.1. Instrucţiuni etichetate (instrucţiunea goto).....................80 5.2. Instrucţiuni expresie........................................................81 5.3. Instrucţiuni compuse.......................................................82 5.4. Instrucţiuni de selecţie....................................................82 5.4.1. Instrucţiunea if.........................................................82 5.4.2. Instrucţiuni de selecţie multiplă: if - else if.............84 5.4.3. Instrucţiunea switch.................................................85 5.5. Instrucţiuni repetitive......................................................87 5.5.1. Instrucţiunea for......................................................87 5.5.2. Instrucţiunea while..................................................90 5.5.3. Instrucţiunea do-while.............................................92 5.5.4. Bucle încuibate........................................................94 5.5.5. Instrucţiunea break..................................................96 5.5.6. Instrucţiunea continue.............................................97 Capitolul VI......................................................................................97 ..........................................................................................................97 TIPURI DE DATE STRUCTURATE ...........................................97 6.1. Tablouri unidimensionale...............................................98 6.1.1. Constante şir............................................................99 6.1.2. Iniţializarea vectorilor de caractere.......................100 6.1.3. Funcţii pentru prelucrarea şirurilor (fişierul antet string.h)...............................................................102 6.2. Tablouri cu două dimensiuni (matrice).........................104 6.2.1. Iniţializarea matricelor..........................................105 6.2.2. Tablouri bidimensionale de şiruri.........................106 6.3. Tablouri multidimensionale..........................................106 6.4. Structuri.........................................................................107 6.4.1. Tablouri de structuri..............................................109 6.4.2. Introducerea structurilor în funcţii........................115 6.4.3. Tablouri şi structuri în structuri.............................119 6.5. Uniuni...........................................................................119 6.6. Enumerări......................................................................121 Capitolul VII..................................................................................123 ........................................................................................................123 POINTERI.....................................................................................123 III
  • 4. 7.1. Operatori pointer...........................................................123 7.1.1. Importanţa tipului de bază.....................................125 7.1.2. Expresii în care intervin pointeri...........................125 7.2. Pointeri şi tablouri.........................................................130 7.2.1. Indexarea pointerilor.............................................131 7.2.2. Pointeri şi şiruri ....................................................133 7.2.3. Preluarea adresei unui element al unui tablou.......134 7.2.4. Tablouri de pointeri...............................................134 7.2.5. Pointeri la pointeri.................................................135 7.2.6. Iniţializarea pointerilor..........................................136 7.2.7. Alocarea dinamică a memoriei..............................137 7.2.8. Pointeri la structuri................................................139 7.2.9. Structuri dinamice liniare de tip listă...................142 Capitolul VIII.................................................................................155 FUNCŢII.......................................................................................155 8.1. Forma generală a unei funcţii.......................................155 8.2. Reîntoarcerea dintr-o funcţie........................................158 8.3. Valori returnate.............................................................159 8.4. Domeniul unei funcţii...................................................160 8.4.1. Variabile locale.....................................................160 8.4.2. Parametri formali...................................................162 8.4.3. Variabile globale...................................................163 8.5. Apelul funcţiilor............................................................167 8.6. Apelul funcţiilor având ca argumente tablouri.............168 8.7. Argumentele argc şi argv ale funcţiei main()...............172 8.8. Funcţii care returnează valori neîntregi........................173 8.9. Returnarea pointerilor...................................................174 8.10. Funcţii de tip void.......................................................177 8.11. Funcţii prototip............................................................178 8.12. Funcţii recursive..........................................................180 8.13. Clase de memorare (specificatori sau atribute)...........181 8.14. Pointeri la funcţii.........................................................187 Capitolul IX....................................................................................188 PREPROCESAREA.....................................................................189 9.1. Directive uzuale............................................................189 9.2. Directive pentru compilare condiţionată.......................191 IV
  • 5. 9.3. Modularizarea programelor.........................................195 Capitolul X.....................................................................................200 ........................................................................................................200 INTRĂRI/IEŞIRI...........................................................................200 10.1. Funcţii de intrare şi ieşire - stdio.h..............................200 10.2. Operaţii cu fişiere........................................................203 10.3. Nivelul inferior de prelucrare a fişierelor...................206 10.3.1. Deschiderea unui fişier........................................206 10.3.2. Scrierea într-un fişier...........................................210 10.3.3. Citirea dintr-un fişier...........................................212 10.3.4. Închiderea unui fişier...........................................214 10.3.5. Poziţionarea într-un fişier....................................214 10.3.6 Ştergerea unui fişier.............................................216 10.3.7. Exemple de utilizare a funcţiilor de intrare/ieşire de nivel inferior.......................................................217 10.4. Nivelul superior de prelucrare a fişierelor..................222 10.4.1. Funcţia fopen()....................................................223 10.4.2. Funcţia fclose()....................................................224 10.4.3. Funcţiile rename() şi remove()...........................225 10.4.4. Funcţii de tratare a erorilor..................................225 10.4.5. Funcţii cu acces direct.........................................226 10.4.6. Funcţii pentru poziţionare...................................228 10.4.7. Ieşiri cu format....................................................229 10.4.8. Intrări cu format..................................................232 10.4.9. Funcţii de citire şi scriere a caracterelor..............235 Capitolul XI....................................................................................239 ........................................................................................................239 Utilizarea ecranului.......................................................................239 în mod text.....................................................................................239 11.1. Setarea ecranului în mod text......................................240 11.2. Definirea unei ferestre.................................................241 11.3. Ştergerea unei ferestre.................................................241 11.4. Deplasarea cursorului..................................................241 11.5. Setarea culorilor..........................................................242 11.6. Funcţii pentru gestiunea textelor.................................243 Capitolul XII..................................................................................246 V
  • 6. ........................................................................................................246 Utilizarea ecranului.......................................................................246 în mod GRAFIC............................................................................246 12.1. Iniţializarea modului grafic.........................................247 12.2. Gestiunea culorilor......................................................249 12.3. Setarea ecranului.........................................................251 12.4. Utilizarea textelor în mod grafic.................................251 12.5. Gestiunea imaginilor...................................................253 12.6. Desenarea şi colorarea figurilor geometrice...............254 Capitolul XIII.................................................................................260 Funcţii matematice .......................................................................260 13.1 Funcţii trigonometrice..................................................261 13.2 Funcţii trigonometrice inverse.....................................261 13.3 Funcţii hiperbolice.......................................................261 13.4 Funcţii exponenţiale şi logaritmice..............................262 13.5 Generarea de numere aleatoare....................................262 13.6 Alte tipuri de funcţii matematice.................................263 Capitolul XIV.................................................................................264 ELEMENTE DE PROGRAMARE AVANSATĂ.......................264 14.1 Gestionarea memoriei..................................................264 14.1.1 Memoria convenţională........................................264 14.1.2 Memoria expandată..............................................267 14.1.3 Memoria extinsă...................................................268 14.1.4 Stiva......................................................................268 14.2 Servicii DOS şi BIOS..................................................269 14.2.1 Serviciile BIOS....................................................270 14.2.2 Serviciile DOS......................................................274 14.3 Bibliotecile C...............................................................277 14.3.1 Reutilizarea unui cod obiect.................................278 14.3.2 Lucrul cu fişiere bibliotecă...................................278 14.3 Fişierele antet...............................................................279 BIBLIOGRAFIE............................................................................279 VI
  • 7. Capitolul I INTRODUCERE ÎN ARHITECURA SISTEMELOR DE CALCUL 1.1. Importanţa limbajului C Creat î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 astăzi unul din cele mai cunoscute şi puternice limbaje de programare. Eficient, economic şi portabil, C-ul este o alegere bună pentru realizarea oricărui tip de programe, de la editoare de texte, jocuri cu facilităţi grafice, programe de gestiune şi pentru calcule ştiinţifice, până 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 acelaşi timp facilitează utilizarea caracteristicilor specifice ale maşinilor 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 răspândire 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 răspândire industrială masivă – ca de pildă FORTRAN şi COBOL – limbajul C a pătruns mai lent, dar foarte sigur. Realitatea arată clar că, în momentul de faţă, piaţa producătorilor de programe este dominată net de C şi de variantele evoluate ale acestuia. Elementele principale care au contribuit la succesul C-ului sunt următoarele: - modularizarea programelor – ce dă posibilitatea unui singur programator să stăpânească relativ uşor programe de zeci de mii de linii de sursă; 1
  • 8. - capacitatea de programare atât la nivel înalt cât şi la nivel scăzut – ceea ce dă posibilitatea utilizatorului de a programa fie fără a ”simţi” sistemul de operare şi maşina 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 număr mare de operatori şi funcţii de bibliotecă ce fac programarea mult mai uşoară. 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 programării orientate pe obiecte. Limbajul C++, ca şi limbajul C, se bucură de o portabilitate mare şi este implementat pe o gamă largă de calculatoare începând cu microcalculatoare şi până la cele mai mari supercalculatoare. Limbajul C++ a fost implementat pe microcalculatoarele compatibile IBM PC în mai multe variante. Cele mai importante implementări ale limbajelor C++ pe aceste calculatoare sunt cele realizate de firmele Microsoft şi Borland. Conceptele programării orientate pe obiecte au influenţat în mare măsură dezvoltarea limbajelor de programare în ultimul deceniu. De obicei, multe limbaje au fost extinse astfel încât ele să admită conceptele mai importante ale programării orientate pe obiecte. Uneori s-au făcut mai multe extensii ale aceluiaşi 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 programării de sistem, limbajul Avalon/C++ destinat calculului distribuit, şi nu în ultimul rând 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 2
  • 9. calculatoare. În principiu, ele simplifică interacţiunea dintre programe şi utilizatorii acestora. Astfel, diferite comenzi, date de intrare sau rezultate pot fi exprimate simplu şi natural utilizând 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 uşor fără a mai fi nevoie să cunoşti ş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 aplicării 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 numeşte 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 3
  • 10. aplicaţiei şi, implicit, a programului, prin filozofia de rezolvare a problemelor folosind limbajul. Din aceste puncte de vedere, C-ul nu poate lipsi din cultura unui programator, iar pentru un profesionist C- ul 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 calculator Calculatoarele de tip PC (calculatoare personale) reprezintă cele mai răspândite şi mai utilizate dintre calculatoare, datorită gradului de accesibilitate şi preţului relativ scăzut. Indiferent de tipul calculatorului, modul general de concepţie, de alcătuire şi funcţionare este acelaşi. Calculatorul este o maşină programabilă. Două dintre principalele caracteristici ale unui calculator sunt: 1. Răspunde la un set specific de instrucţiuni într-o manieră bine definită. 2. Calculatorul poate executa o listă preînregistrată de instrucţiuni, numită program. Calculatoarele moderne sunt electronice şi numerice.  Partea de circuite electrice şi electronice precum şi conexiunile fizice dintre ele se numeşte hardware.  Totalitatea programelor precum şi datele aferente acestor programe poartă denumirea de software. 4
  • 11. Echipamente de ieşire 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 Partea hardware a unui calculator este formată din totalitatea componentelor sale fizice. Toate calculatoarele de uz general necesită următoarele 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 ieşire: 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 5
  • 12. plasează pe placa de bază (mainboard) a calculatorului împreună cu memoria internă RAM. În plus faţă de aceste componente orice calculator este prevăzut 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/ieşire ş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 următoarele categorii de calculatoare: PC (Personal Computer): Un calculator de dimensiuni mici, monoutilizator (single-user), bazat pe un microprocesor. În plus acesta este dotat standard cu tastatură, mouse, monitor şi dispozitive periferice de stocare a datelor. Memoria secundară Echipament UNITATEA Echipament de intrare CENTRALĂ de ieşire 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 asemănător unui PC dar are un microprocesor mai puternic şi un monitor de înaltă calitate (rezoluţie mai mare). 6
  • 13. 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 Microprocesorul Microprocesorul este cea mai importantă şi cea mai scumpă componentă a unui calculator de performanţele acesteia depinzând în mare măsură 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 (adunări, scăderi, înmulţiri, împărţiri, comparări de numere). El este compus din două părţ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 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 îndeplineşte 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 recunoaşte ş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 dispărută, 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 născut circuitul Intel 4004. Au urmat la scurt timp chipurile 4040 si 8008 dar lor le lipseau multe din caracteristicile microprocesoarelor aşa cum le ştim noi azi. În 1974 Intel a prezentat 7
  • 14. pentru prima oară circuitul Intel 8080 care a fost folosit in sistemele Altair şi IMSAI. Curând după aceea au apărut procesoarele Motorola 6800 şi 6502 de la MOS Technology. Doi dintre proiectanţii de la Intel au părăsit firma, creând 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 sfârşitul anului 1971. La un preţ de circa 200$ şi înglobând 2300 de tranzistori, cipul 4004 dezvolta mai multă putere de calcul decât 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, dând startul unui adevărat galop de inovaţii tehnologice. Următorul pas a fost în 1980, când IBM a inclus un procesor Intel în arhitectura primului PC. Astăzi PC-urile sunt pretutindeni în jurul nostru. Un copil care lucrează la o maşina ce incorporează un procesor Pentium Pro beneficiază de mult mai multă putere de calcul decât dispunea guvernul SUA în perioada lansării primelor echipaje umane către Lună. Într-un număr 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 măsoară prin numărul 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ă creştere a performanţelor PC-urilor şi o scădere a costului procesului de calcul. Pe când în 1991 un PC bazat pe procesorul Intel 486 costa aproape 225$ pentru o performanţă de un milion de instrucţiuni pe secundă (MIPS), astăzi, un sistem desktop ce utilizează un cip Pentium Pro este evaluat la circa 7$ pe MIPS. Nu se întrevede nici o dificultate care să frâneze această rată de dezvoltare". 1.2.2 Memoria Microprocesorul are capacitatea de a memora date care urmează a fi prelucrate, cât şi rezultatele intermediare. Se observă că rolul său principal este de a prelucra şi transmite informaţiile şi rezultatele şi deci capacitatea sa de memorare este mică neputând stoca programe. 8
  • 15. De aceea, un calculator necesită şi o memorie care să găzduiască 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 aceştia sunt grupaţi într-o succesiune. Astfel o succesiune de 8 biţi formează un octet (sau un byte) aceasta reprezentând unitatea de măsură a capacităţii de memorie. Deoarece reprezentarea numerelor în calculator se face în baza 2 şi nu în baza 10, aşa cum suntem obişnuiţi în mod normal să lucrăm, ş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. 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 către microprocesor şi în care sunt încărcate programele înainte de a fi executate de către microprocesor. Dacă primele procesoare puteau accesa doar 1 MB de memorie astăzi 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 către fabricant, iar operaţiunea de înscriere cu programe se mai numeşte „arderea memoriilor”. Circuitele de tip RAM (Random Acces Memory ) sunt memorii la care utilizatorul are acces şi al căror 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 încărcate în memoria RAM înainte de a fi prelucrate de către microprocesor. 9
  • 16. Deoarece capacitatea de memorie a unui calculator nu poate fi atât de mare încât să poată păstra toate programele pe vrem să le executăm, a apărut necesitatea existenţei unor memorii externe, care să fie solicitate la nevoie. Rolul acestora îl joacă discurile şi ele pot fi asemănate cu cărţile dintr-o bibliotecă pe care le putem consulta ori de câte ori avem nevoie de anumite informaţii. Primele discuri apărute pentru PC-uri, numite şi dischete, floppy disk-uri sau discuri flexibile, permiteau stocarea a maximum 160 KB de informaţie. Astăzi 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 căror capacitate de memorare depăşeşte 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 asemănat cu o dischetă de mare capacitate, integrată într-o unitate încapsulată. Iniţial, puţine PC-uri prezentau hard discuri, dar cum preţurile acestora au scăzut 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 depăşit valoarea de 40 de GB. 1.2.3 Echipamentele periferice Comunicarea om-maşină se realizează cu ajutorul echipamentelor periferice prin intermediul cărora utilizatorul poate programa sau da anumite comenzi calculatorului sau poate vizualiza rezultatele obţinute de către anumite programe. Principalele echipamente periferice ale unui calculator sunt următoarele: tastatura, mouse-ul, scanner-ul, monitorul şi imprimanta. Ele pot fi grupate în echipamente de intrare – cele prin care calculatorul primeşte informaţii sau comenzi (tastatură, mouse, scanner) - şi echipamente de ieşire – cele prin care calculatorul transmite informaţii în exterior (monitor, imprimantă). În continuare sunt prezentate câteva caracteristici ale fiecărui echipament. Tastatura – este principalul dispozitiv de intrare al calculatorului prin intermediul căruia se transmit comenzi către 10
  • 17. unitatea centrală. Cuplarea la calculator a tastaturii se face prin intermediul unui cablu de conectare. Din punct de vedere al dispunerii tastelor, tastatura se aseamănă destul de mult cu cea a unei maşini de scris dar are şi părţ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 adăugarea altora noi, ajungându-se la 101/102 taste. Din punct de vedere al funcţionalităţii lor ele pot fi împărţ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 corespunzător pe ecranul calculatorului. Tastele cu scopuri speciale sunt aşezate în acelaşi bloc cu tastele alfanumerice şi determină efectuarea anumitor acţiuni fără înscrierea de caractere pe ecran. Tastele de mişcare 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 corespunzător 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 având pe ele litera F urmată de un număr î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 uşor de manevrat decât tastatura dar care poate efectua mai puţine operaţii. Totuşi, foarte multe aplicaţii (în special aplicaţiile grafice) nu mai pot fi concepute fără mouse. Un mouse are aspectul unei bucăţi de săpun, uşor manevrabil, având dedesubt o bilă poziţionabilă, cu sensibilitate şi viteză reglabile. Mişcarea maouse-ului pe o suprafaţă plană este corelată cu deplasarea pe ecran a unui cursor cu o formă deosebită: cruciuliţă, săgeată, etc. Declanşarea unei acţiuni se face prin poziţionarea cursorului în zona corespunzătoare şi apăsarea unuia dintre butoanele aflate pe partea posterioară. Iniţial un mouse avea două sau trei 11
  • 18. butoane. Acum există mouse-uri cu 5 butoane şi 2 rotiţe ce îndeplinesc o serie de funcţii corespunzătoare unor taste speciale. Folosirea mouse-ului uşurează mult munca utilizatorilor, nemaifiind necesar ca aceştia să memoreze numărul relativ mare de comenzi corespunzător fiecărui produs, ca în situaţia în care se foloseşte 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 prelucrări 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ă, mărită, micşorată, rotită, colorată, umbrită, suprapusă cu altă imagine etc. Cu un software de recunoaştere optică a caracterelor datele sau documentele tipărite pe coli de hârtie pot fi transformate în fişiere, putându-se realiza chiar o stocare a lor sub formă de arhivă. Monitorul - Sistemul video este format din două părţi: un adaptor (placă) video şi un monitor sau display. Adaptorul video reprezintă dispozitivul care realizează legătura (interfaţa) cu calculatorul şi se află în interiorul acestuia. El va fi corespunzător tipului de monitor video care îi este ataşat. Adaptorul video realizează o rezoluţie orizontală şi una verticală. Rezoluţia reprezintă numărul de elemente, în cazul de faţă puncte – pixeli – care pot fi afişate 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 către 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ă îmbunătăţire adusă de standardul VGA a fost rezoluţia superioară a caracterelor în modul text, precum şi posibilitatea de a afişa 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 ieşire. Ca piesă principală, monitorul conţine un tub de 12
  • 19. vacuum, similar cu cel de la televizor şi trei tunuri de electroni (corespunzătoare 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 ataşat unui calculator, cu scopul tipăririi de texte şi grafică, putând fi considerată un fel de maşină de scris automată. Până în prezent au fost realizate un număr destul de mare de tipuri de imprimante pentru PC-uri, ele diferind atât prin performanţe, cât ş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 lucrări executate. În funcţie de modul în care este realizată imprimarea se disting următoarele tipuri de imprimante: - imprimante matriceale cu 9, 18 sau 24 de ace – realizează imprimarea prin impactul acelor peste o bandă de hârtie; - imprimante cu jet de cerneală – funcţionează prin pulverizarea fină a unor picături de cerneală pe hârtia de imprimat; - imprimante laser – ce utilizează o rază laser sau mici diode luminiscente care încarcă electrostatic un tambur de imprimare, corespunzător 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 imprimării creşte de la primul la ultimul tip prezentat, dar în mod corespunzător şi preţul echipamentului. 1.3. Programarea calculatorului 13
  • 20. Programele de calculator, cunoscute sub numele de software, sunt constituite dintr-o serie de instrucţiuni pe care le execută calculatorul. Când 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 numeşte programare. Programele executate pe un calculator pot fi împărţite în trei categorii: • programe de aplicaţie – sunt acele programe care interacţionează direct cu utilizatorul, specializate în realizarea unei categorii de prelucrări. 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ă prelucrări de uz general. Utilitarele realizează o serie de operaţii de „gospodărie” cum ar fi: copierea fişierelor, pregătirea discurilor magnetice pentru utilizare, crearea de copii de salvare, testarea echipamentului, etc. • programe de sistem – realizează legătura între componentele electronice ale calculatorului şi programele de aplicaţie şi utilitare. Rolul programului de sistem este acela de a uşura sarcina programatorului, simplificând îndeplinirea acelor sarcini care sunt comune marii majorităţi a programelor de aplicaţie: alocarea memoriei, afişarea 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 operare Sistemul de operare este o parte componentă a software-ului unui calculator, care mai cuprinde un număr 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 păstrarea informaţiilor pe disc. În plus, fiecare sistem 14
  • 21. 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 modificările tehnologice, rămânând în acelaşi 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: recunoaşterea unei intrări de la tastatură (preluare caracter), trimiterea unui caracter pentru afişare pe ecranul monitorului, gestionarea fişierelor şi a directoarelor pe disc (floppy-disk sau hard-disk), controlul fluxului de date cu echipamentele periferice ca drivere de disc sau imprimante. CALCULATOR SISTEM DE OPERARE APLICAŢII UTILIZATOR Fig. 1.3. Comunicarea utilizator - calculator 15
  • 22. 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 oricăror alte aplicaţii dorite de utilizator. Un calculator nu poate funcţiona decât sub gestiunea unui sistem de operare. Orice aplicaţie lansată în execuţie de către un utilizator apelează la resursele puse la dispoziţie de către sistemul de operare. Sistemul de operare interfaţează calculatorul cu operatorul uman de o manieră cât mai transparentă cu putinţă astfel încât 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, asigurând 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 acelaşi 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. 16
  • 23. multitasking: Permit mai multor programe să ruleze în acelaşi timp (execuţie concurentă).  multithreading: Permit diferitelor părţi ale unui program să fie executate concurent.  timp real (real time): Răspund instantaneu la diferite intrări. 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 căreia 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 fişiere 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) ataşate 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 dezvoltării unui SOFT adecvat. Astfel, în 1981, a apărut prima versiune a sistemului de operare MS-DOS. Sistemul de operare MS–DOS (MicroSoft Disk Operating System) este destinat gestionării 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 creşterea 17
  • 24. capabilităţilor hardware ale calculatoarelor, acesta s-a transformat, prin dezvoltări succesive, în Windows. Indiferent de sistemul de operare utilizat, din punctul de vedere al utilizatorului, informaţiile sunt scrise pe disc sub forma unor fişiere. Un fişier este o colecţie de informaţii grupate sub acelaşi nume. Un fişier poate fi un program executabil, un text, o imagine, un grup de comenzi sau orice altceva. Un fişier este identificat prin numele său. Numele unui fişier este format dintr-un şir de caractere (care în funcţie de sistemul de operare este limitat la un anumit număr 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 fişiere, sistemul de operare creează nişte fişiere speciale, numite directoare, care pot fi asemănate cu cuprinsul unei cărţi, deoarece ele conţin numele fişierelor şi adresa de început a acestora. De asemenea, un director poate conţine la rândul său alte directoare creându-se astfel o structură arborescentă de directoare în care poate fi găsit foarte repede un anumit fişier. 1.3.2. Tipuri de fişiere Fişierele se pot împărţi în două categorii – executabile şi neexecutabile. În prima categorie intră acele fişiere al căror nume scris în dreptul prompterului (în cazul sistemului de operare DOS) determină executarea unor activităţi de către sistemul de operare. O parte dintre fişierele executabile sunt programe şi sunt recunoscute prin extensia lor care poate fi EXE sau COM, altele fiind constituite în fişiere de comenzi proprii sistemului de operare, a căror extensie este BAT. Fişierele COM, numite adesea şi comenzi, conţin informaţii în formatul imagine de memorie. Ele sunt mai compacte şi mai rapide decât fişierele EXE, dar lungimea lor nu poate să depăşească 64 K. Fişierele EXE pot să ajungă la dimensiuni mai mari prin segmentarea programului în fragmente a căror dimensiune să fie de maximum 64K. Dintre fişierele neexecutabile vom aminti câteva mai importante: • fişiere text ; • fişiere cu extensia SYS sau DRV, cunoscute sub numele de driver-e şi care conţin instrucţiuni despre modul în care 18
  • 25. 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.); • fişiere care conţin informaţii intermediare între cele în limbaj sursă şi cele executabile (extensiile OBJ, OVL); • fişiere ce conţin imagini (extensiile JPEG, GIF, BMP); • fişiere ce conţin sunete (extensiile WAV, MIDI, MP3) etc. 1.3.3. Construirea fişierului executabil Instrucţ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 fişier - numit fişier sursă, un al doilea program – numit compilator, converteşte instrucţiunile limbajului de programare în şirurile 1 şi 0 – cunoscute sub numele de cod maşină. Pentru a obţine un program executabil, orice program sursă trebuie eventual translatat (tradus) în limbaj cod maşină sau cod obiect pe care îl poate înţelege microprocesorul. În urma acestui proces, alături de fişierul sursă apare şi fişierul cod obiect (object file.) Această translatare sau traducere este efectuată de către 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 legături în cod maşină executabil de microprocesorul sistemului de calcul. Programatorii scriu programe într-o formă numită cod sursă. Acest cod sursă parcurge apoi câţiva paşi înainte de a deveni program executabil. 19
  • 26. Pe scurt, un compilator este un program special care procesează instrucţiuni scrise într-un limbaj de programare particular şi le transformă în limbaj maşină sau cod maşină pe care îl poate executa microprocesorul. 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 legături folosite pentru translatarea codului sursă în cod maşină. În mod tipic, un programator scrie declaraţii într-un limbaj precum Pascal, C sau MATLAB folosind un editor. Se creează astfel un fişier numit fişier 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 către compilator, care translatează instrucţiunile de nivel înalt într-o serie de instrucţiuni cod obiect. Când 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 către constructor. Codurile binare ale instrucţiunilor microprocesorului împreună cu reprezentările 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 ieşire, 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 către un editor de legături (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 prelucrări se obţine codul maşină, salvat într-un fişier cu extensia .exe. Acest cod maşină poate fi executat secvenţial, instrucţiune cu instrucţiune, de către microprocesor. 20
  • 27. Cu alte cuvinte, un program executabil (executable program - aflat pe disc cu extensia .exe) se obţine prin salvarea pe disc a codului maşină obţinut prin prelucrarea succesivă a fişierului cod sursă de către compilator (compiler) şi apoi de către link-editor (linker). 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 legături (linker). Blocurile dreptunghiulare reprezintă fişierele rezultate în urma aplicării celor trei utilitare de sistem:  în urma utilizării editorului de texte obţinem fişierul text sursă cod cu numele generic “nume”. Dacă folosim limbajul de programare C spre exemplu, se obţine fişierul nume.c care se va salva pe disc.  în urma lansării în execuţie a compilatorului, acesta preia fişierul sursă şi îl prelucrează corespunzător, semnalizându-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 fişier cod obiect, salvat pe disc sub numele nume.obj  în urma lansării în execuţie a editorului de legături, se preia fişierul cod obiect nume.obj şi se leagă cu toate modulele necesare (inclusiv funcţii de bibliotecă sau alte module externe), obţinându-se un program executabil (cod maşină) cu 21
  • 28. 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 către microprocesor, toate salturile de adresă fiind făcute corespunzător. Interpretorul (interpreter) este un program care execută instrucţiuni scrise într-un limbaj de nivel înalt. Numai anumite limbaje de nivel înalt, spre exemplu BASIC, LISP sau MATLAB, sunt prevăzute 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 maşină (cod maşină). Programele compilate rulează în general mai rapid decât 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 fişierul sursă-BASIC corespunzător şi se lansează interpretorul de BASIC pentru execuţia sa. Avantajul unui interpretor este acela al evitării 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, când programatorul doreşte adăugarea 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 fişiere script, care conţin secvenţe de comenzi care se execută secvenţial. 22
  • 29. 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 scăzut, corespunzător microprocesorului sistemului de calcul) în limbaj cod maşină. 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 complexe decât cele de nivel înalt, asamblorul face practic o convertire biunivocă între mnemonicele limbajului de asamblare şi codurile binare corespunzătoare acestor mnemonice (instrucţiuni). 23
  • 30. Instrucţiunile în limbajul de nivel înalt se introduc de la tastaturã. Tot ce se introduce de la tastaturã este vizibil pe monitor Editor de texte (eventual incorporat în mediu) Fişier text (fişier sursã) cu extensia adecvatã: nume.pas (limbaj Pascal) nume.c (limbaj C) nume.cpp (limbaj C++) nume.bas (limbaj BASIC), etc. Fişierul sursã cu numele “nume” şi extensia corespunzãtoare se salveazã din memoria RAM pe harddisk Compilator Se compileazã fişierul sursã Se obţine fişierul cod obiect: nume.obj Se salveazã pe harddisk fişierul nume.obj Link-editare (legarea tuturor modulelor necesare) Se obţine fişierul cod maşinã (executabil): nume.exe Se salveazã pe harddisk fişierul nume.exe Lansarea în execuţie de cãtre sistemul de operare a executabilului nume.exe Fig. 1.6 Detalierea procesului de generare a unui executabil Capitolul II 24
  • 31. REPREZENTAREA DATELOR ÎN CALCULATOR Se ş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 purtător 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, adevărat) şi F (false, fals) sau cele două cifre binare1 şi 0. Tensiune High=’1’ Low=’0’ timp Ca urmare a acestei asocieri spunem, prin abuz de limbaj, că un calculator numeric prelucrează numere binare. Ca şi un număr zecimal, un număr 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 când reprezentarea proprie maşinilor de calcul este cea binară. De aici rezultă necesitatea compatibilizării 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 foloseşte ca ponderi puterile întregi (pozitive sau negative) ale lui 10 (zece) iar sistemul binar va folosi puterile întregi (pozitive sau negative) ale lui 2. Î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 25
  • 32. internă sunt necesare convenţii de reprezentare: indiferent de tipul datelor, acestea vor fi colecţii sau şiruri de cifre binare cărora, 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, atât la nivel intern (în memoria calculatorului) cât ş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 regiştrii microprocesorului. În acest format se prelucrează numerele pentru implementarea diverselor operaţii aritmetice. La nivelul calculatorului informaţia nu poate fi decât 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 foloseşte semnul “-” în faţa unui număr în cazul în care acesta este negativ sau punctul care separă partea întreagă de cea fracţionară. De asemenea, numerele întregi interpretate fără semn se pot afişa şi în format binar, octal sau hexazecimal, deci în bazele 2, 8 sau 16. În cele ce urmează ne vom pune următoarele probleme: - cum se reprezintă extern un număr natural - cum se reprezintă intern un număr natural - cum se reprezintă extern un număr întreg negativ 26
  • 33. - cum se reprezintă intern un număr î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 priveşte 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 număr nu este întâmplătoare ci conformă cu o pondere corespunzătoare unei puteri a bazei de numeraţie. O caracteristică a reprezentărilor 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 foloseşte semnul “-” iar pentru reprezentarea numerelor reale se foloseşte punctul “.” pentru delimitarea părţ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 câteva exemple de reprezentări zecimale externe: Număr Reprezentare Reprezentare normală ştiinţifică 37 37 0.37x102 -37 -37 -0.37x102 0.375 0.375 0.375x100 -0.375 -0.375 -0.375x100 0.00375 0.00375 0.375x10-2 -0.00375 -0.00375 -0.375x10-2 12.375 12.375 0.12375x102 -12.375 -12.375 -0.12375x102 În general dorim să obţinem rezultatele numerice ale programelor pe care le concepem într-o formă de reprezentare accesibilă. Totuşi, calculatorul trebuie informat asupra formatului de reprezentare în care dorim să se afişeze datele necesare. Aceasta înseamnă că va trebui să specificăm câte cifre se vor folosi la partea 27
  • 34. întreagă şi câte la partea fracţionară sau dacă dorim reprezentare ştiinţifică sau nu. De altfel şi operatorul uman face aceleaşi convenţii 1 de reprezentare. Spre exemplu ştim că numărul nu poate fi exact 3 reprezentat ca un număr zecimal, deci fixăm un format de reprezentare. Dacă formatul ale se limitează la 4 cifre zecimale, atunci 1 vom scrie ≅ 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 întregi Numerele naturale se pot reprezenta fie în baza de numeraţie 10, fie în orice altă bază. În general, un număr întreg în baza b se poate reprezenta cu un număr 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 obişnuiţi să folosim mulţimea cifrelor zecimale. Dacă totuşi se foloseşte o bază de reprezentare mai mare decât 10, atunci mulţimea cifrelor zecimale nu mai este suficientă pentru reprezentarea numerelor în acea bază. Spre exemplu să considerăm 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 Simbol 0 0 8 8 1 1 9 9 2 2 10 A 3 3 11 B 4 4 12 C 5 5 13 D 6 6 14 E 7 7 15 F 28
  • 35. 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 numărului N b va fi: ( ) ∑ ck ⋅ b k n −1 N b = ± c n−1 ⋅ b n −1 + c n − 2 ⋅ b n− 2 + ... + c1 ⋅ b1 + c 0 ⋅ b 0 = ± k =0 În continuare vom studia următoarele probleme: - cum se face conversia unui număr din baza b = 10 în baza b=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 număr natural din baza 10 în baza 2, se împarte succesiv numărul la 2 şi se utilizează resturile la aceste împărţiri în ordinea inversă de cum au fost obţinute. a) Conversia din baza 10 în baza 2 şi invers Fie de exemplu numărul zecimal 37. Reprezentarea sa binară va fi obţinută astfel: 3710 = 1001012 37 2 36 18 2 1 18 9 2 0 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: 25 24 23 22 21 20 1001012 = 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 29
  • 36. 0+1=1 1+0=1 1+1=0, transport 1 spre rangul următor Astfel, să facem adunarea 37+25 în binar: 37 1 0 0 1 0 1+ 25 11001 62 111110 Se observă cum se obţine rezultatul corect. Înmulţirea se face în mod asemănător, ca o adunare repetată. Spre exemplu, să calculăm 37x25 37 1 0 0 1 0 1x 25 11001 100101 100101 100101 925 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 numărul 4911 care se doreşte scris în baza 13. Pentru a realiza această conversie, vom folosi baza intermediară 10. Vom converti mai întâi 4A11 în baza 10 şi apoi numărul zecimal obţinut îl vom trece în baza 13. Se observă cum un număr în baza 11 poate conţine şi cifra A=10 iar un număr în baza 13 poate conţine cifrele A=10, B=11, C=12. 4 A11 = 10 ⋅110 + 4 ⋅111 = 44 + 10 = 5410 54 13 52 4 13 2 0 0 4 5310 = 4213 4 A11 = 4213 30
  • 37. 2.2.2. Reprezentarea externă a numerelor reale Semnificativă pentru utilizatorul uman este reprezentarea zecimală (în baza b=10) a numerelor reale, cu care suntem obişnuiţ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 număr 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 numărului de mai sus va fi: ( ) ∑ ck ⋅ b k n− 1 N10 = ± cn − 1b n − 1 + cn − 2b n − 2 + c1b1 + c0b 0 + c− 1b − 1 + c− 2 ⋅ b − 2 + c− m + 1b − m + 1 + c− m b − m = ± k= −m 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 producătorii 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 număr real cu n cifre pentru partea întreagă şi m cifre pentru partea fracţionară. Aşa cum în sistemul zecimal reprezentăm cu un număr finit de cifre zecimale numerele reale, acelaşi lucru se va întâmpla şi în sistemul binar. Punctul binar va avea o semnificaţie asemănătoare 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 număr real va avea reprezentarea binară: ( N 2 = ± bm bm− 1...b1b0 .b− 1b− 2 ...b− n = bm 2 m + bm− 1 2 m− 1 + b1 21 + b0 20 + b− 1 2 − 1 + b− 2 2 − 2 + ... + b− n 2 − n ) Spre exemplu, numărul 12.25 va avea reprezentarea binară: 12.2510 = 1100.01 = 2 3 + 2 2 + 2 −2 31
  • 38. Partea întreagă a unui număr real se reprezintă binar precum numerele întregi (cu sau fără 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ţeşte succesiv cu 2. Dacă rezultatul depăşeşte valoarea 1, atunci se înscrie un bit 1. Se continuă mai departe cu dublarea valorii care depăşeşte 1. Dacă rezultatul nu depăşeşte 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 împărţ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 1 0 Obţinem exact rezultatul căutat: 12.25 = 1100.01 Să mai considerăm un alt exemplu. Să reprezentăm numărul 5.37 Partea întreagă are reprezentarea 510 =1012 Partea P.F. x 2 Noua Bitul fracţionară P.F. P.F. înscris 0.37 0.74 0.74 0 0.74 1.48 0.48 1 0.48 0.96 0.96 0 0.96 1.92 0.92 1 0.92 1.84 0.84 1 0.84 1.68 0.68 1 0.68 1.36 0.36 1 0.36 0.72 0.72 0 0.72 1.44 0.44 1 Etc.. Etc.. Obţinem: 5.3710 = 101.010111101...2 Cu cât mai multe cifre binare vom reţine după punctul binar, cu atât vom fi mai aproape de valoarea exactă 5.37. Obţinem un rezultat foarte important: Deşi un număr zecimal poate avea un număr finit de cifre zecimale după punctul zecimal, reprezentarea sa binară internă poate avea un număr infinit de cifre binare. Este valabilă şi reciproca: un număr real zecimal cu un 32
  • 39. număr infinit de cifre se poate reprezenta într-o altă bază pe un 1 număr finit de cifre ( ex: = 0.3333...3...10 = 0.13 ). Cum orice 3 reprezentare binară internă este pe un număr finit de biţi, numărul 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 reprezentării numerelor în calculator. Cu cât un număr binar se reprezintă pe un număr mai mare de biţi, cu atât precizia de reprezentare creşte. 2.3 Reprezentarea internă a numerelor Deoarece semnalul intern purtător de informaţie într-un calculator este de tip binar, un număr zecimal (întreg sau real) se va reprezenta intern în baza 2 cu ajutorul unui număr binar. O cifră binară se numeşte bit (Binary Digit) şi poate fi fie 0 fie 1. În reprezentarea externă a numerelor am văzut că se poate folosi orice bază de numeraţie (cu cifrele corespunzătoare). 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 număr (orice tip de dată) este reprezentat la nivel intern de un număr prestabilit de biţi. Specialiştii 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 aşa-numitelor tipuri de date. Tipul unei date reprezintă modul în care microprocesorul stochează în memorie şi prelucrează cu ajutorul regiştrilor 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 câmpuri de biţi din cadrul reprezentării. 2.3.1. Reprezentarea internă a numerelor întregi 33
  • 40. Un număr binar este o colecţie de cifre binare ponderate fiecare cu o putere a lui 2. Bitul corespunzător ponderii celei mai mari, situat cel mai în stânga, se numeşte MSB (Most Significand Bit) iar cel corespunzător ponderii celei mai mici, situat cel mai în dreapta, se numeşte LSB (Less Significand Bit). În cazul reprezentării binare a numerelor naturale, reprezentarea externă (cea percepută de operatorul uman) şi cea internă (cea prelucrată de procesorul calculatorului) sunt asemănătoare. Cum pentru operatorul uman operatorii ‘+’ sau ‘-‘ semnifică faptul că un număr 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ă numărul este pozitiv, se adaugă în poziţia MSB bitul de semn ‘0’, iar dacă numărul este negativ se utilizează în poziţia MSB bitul de semn ‘1’. Mai mult, numerele negative se reprezintă în aşa numitul complement faţă de 2. Reprezentarea numerelor întregi negative în complement faţă de 2 Această formă de reprezentare a numerelor negative necesită parcurgerea următorilor paşi: pas1. Se reprezintă modulul numărului negativ, folosind bit de semn (egal cu 0, evident) pas2. Se complementează toţi biţii numărului astfel obţinut. Complementarea înseamnă transformarea bitului 0 în bitul 1 şi a bitului 1 în bitul 0. pas3. Numărul astfel obţinut se adună cu 1. De exemplu, să reprezentăm numărul -37. 3710 = 1001012 = [ 0] 100101 pas1. |-37| = 37 bit 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 numărului negativ. Pentru a vedea ce număr negativ este reprezentat, putem repeta procedeul de mai sus şi obţinem reprezentarea numărului pozitiv dat de modulul său. O modalitate mai simplă este alocarea ponderii corespunzătoare bitului de semn dar pe care o considerăm că reprezintă un număr negativ. Astfel: 34
  • 41. 10110112 = -1x26 + 1x24 + 1x23 + 1x21 + 1x20 = -64 + 27 = -37 2.3.2 Adunarea, scăderea şi înmulţirea numerelor întregi Aceste 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 obişnuit. De exemplu, dorim să calculăm: 37-25 25-37 (-25)x37 (-25)x(-37) Pentru efectuarea acestor calcule, vom scrie reprezentările 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 aceeaşi semnificaţie, este nevoie să reprezentăm numerele cu care lucrăm pe un acelaşi număr de biţi. La adunări sau scăderi, biţii de semn se vor afla în aceeaşi poziţie (vor avea aceeaşi pondere) şi vom obţine astfel rezultate corecte. Pentru a avea o scriere pe un acelaşi număr de biţi, se adaugă (completează) la stânga bitul de semn de un număr corespunzător de ori. Astfel: 37 − 25 = 37 + (−25) = 0100101 + 1100111 0100101 + − 2510 = 1001112 = 1100111  1100111 25 = 0110012 = 0011001 −−−−−− 0001100 = 1210 35
  • 42. 25 − 37 = 25 + (−37) = 0011001 + 1011011 0011001 + − 37 = 1011011  1011011 25 = 0110012 = 0011001 −−−−−− 1110100 = −64 + 52 = −12 În continuare vom pune în evidenţă importanţa gamei de reprezentare, adică a domeniului de valori ale datelor. Să considerăm, spre exemplu, adunarea a două numere cu semn reprezentate pe un octet (8 biţi). Aceste numere sunt cuprinse în gama [− 2 , 2 − 1] 7 7 = [ − 128, 127] . Dacă vom dori să adunăm două numere din acest domeniu şi să reprezentăm rezultatul tot pe un octet, putem avea surprize. De exemplu, să considerăm 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 scădere, ne aşteptăm să obţinem un rezultat, 105, în aceeaşi 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 depăşit 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ă precizăm 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 priveşte înmulţirea numerelor întregi cu semn (cu bit de semn), aici problema nu mai are o rezolvare asemănătoare, î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, 36
  • 43. funcţie de semnul rezultatului, se ia decizia reprezentării corecte a rezultatului. Spre exemplu, să calculăm (-25)x37. Pentru aceasta, procesorul va primi pentru procesare următoarele două numere: 37 x(−25) = [ 0]100101 × [1]100111 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 numărului (-25), care se obţine prin complementarea faţă de 2 a numărului binar 1100111: 11001110011000+1=0011001 Se va reţine pentru procesare numai numărul (fără semn) 11001, care se va înmulţi cu numărul (fără semn) 100101, obţinând, aşa cum am arătat mai sus, valoarea 1110011101. Mai departe, se adaugă bitul de semn, 0 pentru numere pozitive, obţinându-se 01110011101. Acest ultim număr se va complementa faţă de 2, obţinându-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 fără semn) şi care este lungimea lor de reprezentare (toate trebuie să aibă aceeaşi 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 rămân valabile considerentele de la numere întregi. În cazul de mai sus, problema reprezentării numărului negativ a fost rezolvată cu ajutorul bitului de semn dar problema reprezentării punctului binar va avea altă rezolvare. 2.3.3 Reprezentarea internă a numerelor reale Din considerentele de la reprezentarea externă a datelor putem trage alte concluzii importante din punct de vedere al reprezentării 37