Page 1

Curs 2 Reprezentarea şi structurarea informaţiei Informaţiile vehiculate de om, în diferite situaţii, sunt legate de mijloacele prin care acesta comunică cu mediul înconjurător şi cu ceilalţi oameni. În primul caz, informaţiile apar sub formă de imagini şi sunete, iar în al doilea caz informaţiile apar în plus sub formă de texte (cărţi, reclame, etichete de produs) şi sub formă de numere (sume de bani, vârste). În scopul manipulării acestor tipuri de informaţie prin intermediul tehnicii de calcul, fiecare din categoriile de mai sus capătă o reprezentare anume, pentru a fi „inteligibilă” calculatorului numeric. Reprezentarea informaţiei în creierul uman nu este încă elucidată - datorită complexităţii structurilor din creier şi datorită mecanismelor, încă necunoscute, ce realizează stocarea informaţiilor. În calculatoarele electronice, dispozitivele de stocare au doar două stări şi sunt astfel simplu de realizat tehnologic: condensatoare cu stările încărcat / descărcat sau dispozitive cu două stări stabile (numite bistabile). In alte variante tehnologice ele sunt de asemenea, uşor de realizat: mecanic, chimic şi chiar la nivel atomic. Calculatoarele actuale sunt denumite calculatoare numerice (sau digitale – de la cuvântul englezesc „digit” - cifră) pentru că ele transformă toate informaţiile pe care le stochează şi prelucrează în reprezentări discrete. Au existat şi calculatoare analogice, în care informaţia păstra reprezentarea continuă, firească, a semnalelor din lumea înconjurătoare; aceste calculatoare prelucrau semnalele continui cu ajutorul „dispozitivelor electronice analogice” de tip amplificator de semnal, integrator cu condensator electric, etc. Limitările calculatoarelor analogice privind aplicaţiile şi modalitatea de stocare a datelor au dus la înlocuirea lor cu dispozitive numerice, care prin discretizare şi cuantificare pot reprezenta şi prelucra orice semnal analogic (cu o precizie mai mare sau mai mică).

Bit, octet şi multiplii acestora În deschiderea, definiţia informaţiei este însoţită de exemplificări relative la tipuri de informaţii – cum sunt de exemplu imagini, sunete, numere, text. Informaţiile logice, de tip Adevarat/Fals sau Da/Nu, sunt informaţii abstracte, putând fi considerate piese elementare de informaţie fiindcă au doar două valori posibile şi reprezintă situaţii simple sau generale – de exemplu un eveniment oarecare se produce (Da) sau nu se produce (Nu). Piesa de informaţie ce poate avea doar două valori posibile se numeşte bit.

0

1

Figura 1 O realizare tehnică a valorilor logice 0 şi 1 pentru un bit În calculatoarele numerice, un bit se consideră că poate lua ori valoarea 0 ori valoarea 1, fiecare din acestea corespunzând de fapt unei situaţii fizice în care un comutator este deschis – respectiv închis (vezi ), sau un condensator electric este încărcat cu sarcină electrică – respectiv este descărcat. Valorile 0 sau 1 reprezintă deci „valori logice” (Adevarat/Fals) dar totodată, fiind cifre, permit crearea de numere .


Memoriile semiconductoare ale calculatoarelor numerice pot stoca biţi în miliarde de condensatoare minuscule, numărul acestor biţi reprezentând capacitatea de memorie a respectivului calculator. Asemenea numere uriaşe nu sunt comod de utilizat, de aceea se utilizează multipli de bit. Octet (sau Byte) este un grup de opt biţi reprezentând, tradiţional, o celulă de memorie. Evident ca evaluarea capacităţilor de memorie actuale, folosind ca unitate de măsură octetul, nu rezolvă problema numerelor foarte mari vehiculate. De aceea se folosesc multipli de octet, cu denumiri uzuale ale multiplilor unităţilor de măsură, dar cu semnificaţie diferită - conform tabelului de mai jos. Nume multiplu

Semnificaţie

Kilo

210

 1.024

Mega

220

 1.048.576

Giga

230

 1.073.741.824

Tera

240

 1.099.511.627.776

Magnitudine

Tabel 1 Multipli de bit şi octet După cum se observă din Tabel 1 semnificaţia multiplilor de bit şi octet în informatică diferă de cea tradiţională (în care Kilo reprezintă 103 - de exemplu), dar valoarea numerică a fiecărei categorii de multiplu este oarecum apropiată de cea tradiţională (Kilo apropiat de mie, Mega de milion, etc.). Raţiunea acestor valori pentru multiplii utilizaţi în informatică este reprezentarea în calculator a numerelor folosind baza de numeraţie 2 .

Identificator, variabilă, constantă, literal Datele sunt memorate ca succesiuni de biţi în memoria de lucru (RAM) sau pe suport extern (disc magnetic sau optic), iar ele pot fi piese simple sau pot fi colecţii de piese, cu o semnificaţie anume (litere, numere, texte, sunete, imagini). Pentru a fi manipulate, datele trebuie referite, adică apelate după un nume sau prin adresa acestora în memorie. Fie prelucrarea algebrică următoare: a = b + pi + 15 + sin(c) unde a,b,c,pi, sunt date denumite prin litere, sin() este numele funcţiei trigonometrice sinus iar 15 este o valoare imediată. Pe acest exemplu simplu se vor enunţa noţiunile ce urmează. Identificatorul este numele ataşat unei piese sau colecţii de date, dar şi a unei prelucrări anume, în general aflate în memoria de lucru. Numele este un şir de caractere (litere, cifre şi alte simboluri) care trebuie să satisfacă anumite criterii, funcţie de locul de utilizare a identificatorului. Astfel, în limbajele de programare identificatorii nu pot conţine spaţii (constituie un singur cuvânt). În expresia de mai sus identificatori pentru date sunt a, b, c, pi, iar pentru prelucrări este sin (calcului sinusului de unghi c). Dacă datele sunt piese sau colecţii care se stochează în memoria internă (RAM) atunci identificatorii au semnificaţia unor adrese – prin care se pot manipula variabile şi constante. Variabila este o locaţie de memorie referită printr-un identificator şi poate conţine diverse valori ale unei date de tip specificat. Valorile pe care le poate lua variabila aparţin domeniului specific tipului de date respectiv. De exemplu, datele de tip logic pot lua doar două valori - Adevărat sau Fals, iar datele de tip întreg pe un octet pot lua valori numere între 0 şi 255 . Datele vehiculate într-un program sunt de fapt variabile, care au primit fiecare o valoare chiar la momentul declaraţiei (prin iniţializare) –sau ca rezultat al unei expresii (prin atribuire)


Constanta este o locaţie de memorie referită printr-un identificator şi poate conţine doar o singură valoare a unei date de tip specificat. Constantele sunt utile pentru anumite valori speciale (celebre) cum sunt numărul  sau numărul lui Neper e, constante universale sau doar valori care nu se doresc a fi modificată în cadrul unor prelucrări (voit sau din eroare). Constanta este de fapt o variabilă cu restricţie de modificare a valorii, valoarea însăşi fiind „ascunsă” după identificator. Identificatorii constantelor sunt în general nume rezervate - într-un limbaj de programare (de exemplu pi). Literal este o valoare concretă pentru un tip de date, indicată prin simboluri specifice tipului respectiv. Iniţializarea variabilelor (adică atribuirea unei valori iniţiale în tipul de date propriu variabilei) sau specificarea unei valori imediate într-o expresie se face utilizând literali. În expresia de mai sus apare banal 15 - ca literal numeric, dar pentru alte tipuri de date specificarea este mai puţin comună; de exemplu un literal caracter (litera a) se indică ‘a’ .

Tipuri de date simple Varietatea informaţiilor utilizate de om pare foarte mare, însă ele pot fi clasificate în categorii generice care apoi să primească reprezentări generale ca tipuri de date. Se poate face o analiză sumară din care rezultă câteva categorii de asemenea informaţii simple: a) numere singulare – utilizate a desemna sume de bani, distanţe, zile din luna calendaristică, cu care se pot face calcule matematice. Se deosebesc două categorii de numere – numere întregi şi numere reale (cu zecimale). b) simboluri grafice - litere, cifre, semne de punctuaţie, spaţii libere, utilizate în texte. Aceste simboluri sunt elemente ale unui set finit de simboluri de scriere (alfabetul, cifrele de la 0 la 9, semnele de punctuaţie); ele sunt denumite generic caractere alfanumerice. c) Informaţii de tip Adevărat sau Fals – pentru a desemna o situaţie sau un eveniment funcţie de care se ia o decizie (de exemplu, dacă un eveniment a avut loc se execută o anumită acţiune, altfel altă acţiune), denumite informaţii logice. Reprezentarea numerelor întregi Numerele utilizate curent pentru calcule (şi nu numai) se prezintă în aşa-numita „scriere arabă”, în care cifrele sunt aranjate pe ranguri corespunzătoare puterilor lui 10, numărul 10 considerat „bază de numeraţie”. Mii 103 5

... ... ...

Sute 102 9

Zeci 101 9

Unităţi 100 9

5999(10) = 9100 + 9101 + 9102 + 5103 Figura 2 Numărul 5999 în scrierea arabă, cu baza de numeraţie 10. După cum se ştie - şi este prezentat mai sus, în reprezentarea zecimală a numerelor, rangurile conţin cifre care pot lua valori de la 0 la 9. Numărul de simboluri folosite pentru cifre este 10 (adică un număr egal cu baza de numeraţie). Numere binare Calculatoarele numerice sunt dispozitive realizate tehnologic în cel mai simplu mod, prin faptul că folosesc cea mai simplă reprezentare a informaţiei: Adevărat / Fals sau Da / Nu. Aceste două simboluri pot fi cifre pentru numere în baza de numeraţie 2, fiindcă, similar lucrului în baza de numeraţie 10, un rang 3 rang 2 rang 1 rang 0 ... 23 22 21 20 ... 1 0 1 1 ... 0 1 2 3 1011(2) = 12 +12 +02 +12 = 11(10)


număr reprezentat în baza de numeraţie 2 va avea rangurile ca puteri ale bazei - aşa cum se prezintă în Figura 3Error! Reference source not found.. Figura 3 Numărul 11 în scrierea arabă, cu baza de numeraţie 2 Pentru a ilustra simplitatea reprezentării numerelor în baza 2, se prezintă în Tabel 2 numere înscrise succesiv, începând de la 0 până la 10(10), obţinute prin adunare succesivă a unităţii (adică prin „incrementare”), aşa cum apar în coloana (I) pentru baza 2 şi în coloana (III) pentru baza 10. Coloanele (II) şi (IV) indică numărul rezultat, înscris în baza 2 şi respectiv în baza 10. Se reaminteşte că la numărarea în baza 10, atunci când se obţin zece unităţi pe un rang se adaugă o unitate (numită transport) la rangul imediat superior – vezi ultima linie din Tabel 2. Procedeul se aplică similar şi pentru baza 2: la două unităţi pe un rang se obţine o unitate de rang imediat superior – vezi linia cu numărul 2 din Tabel 2. Incrementare (I) 0 0+ 1 1 1+ 1 10 10 + 1 11 11 + 1 100 100 + 1 101 101 + 1 110 110 + 1 111 111 + 1 1000 1000 + 1 1001 1001 + 1 1010

Număr în baza 2 (II) 0 1

10

11

100

101

110

111

1000

1001

1010

Incrementare Număr în baza 10 (III) (IV) 0 0 0+ 1 1 1 1+ 1 2 2 2+ 1 3 3 3+ 1 4 4 4+ 1 5 5 5+ 1 6 6 6+ 1 7 7 7+ 1 8 8 8+ 1 9 9 9+ 1 10 10

Tabel 2 Numărare în baza 2 şi în baza 10, cu rezultatele obţinute.


Numere pozitive şi negative Adunarea a două numere în baza 2 decurge după regulile cunoscute din baza 10, adică se adună cifrele pe ranguri şi, eventual, transportul de la rangul inferior, procedeul începând cu rangul cel mai puţin semnificativ. Din cele prezentate, rezultă că folosind doar două cifre (0 şi 1) se pot forma numere şi se poate opera cu ele în modul cunoscut. Aceste numere sunt denumite numere binare iar scrierea în baza 2 este denumită reprezentare binară a numerelor. Până la acest punct au fost prezentate numai numere naturale (întregi şi pozitive); numerele negative presupun existenţa semnului ce se ataşează numărului natural. Aşa cum numerele negative reprezintă o convenţie din lumea matematicii (în lumea reală ele indicând o „lipsă”), la reprezentarea numerelor negative în calculator se face uz de o convenţie prin care rangurilor disponibile pentru reprezentarea numărului se adaugă un rang suplimentar (cel mai semnificativ), indicând semnul: 

0 – numărul este pozitiv (semnul +),

1 – numărul este negativ (semnul ).

Rangul adăugat pentru indicarea semnului face parte din lungimea cuvântului alocat pentru reprezentarea numerelor şi se numeşte uzual bit de semn. În lungimea cuvântului este 5, bitul de semn fiind în poziţia rangului cel mai semnificativ. + 23 22 21 0 0 1 0 a) Numărul + 4(10)

20 0

 1

23 1

22 1

21 0

20 0

b) Numărul  4(10) Figura 4 Reprezentarea numerelor cu semn, pe un exemplu.

Complementul faţă de 2 al unui număr pozitiv (şi ca urmare numărul negativ corespunzător) se obţine prin algoritmul următor: se inversează fiecare bit (adică 0 devine 1 şi 1 devine 0) pentru fiecare rang, începând cu cel mai semnificativ (adică cu bitul de semn) spre cel mai puţin semnificativ, până la ultimul bit de 1 exclusiv (vezi exemplul din ). Tipuri de date întregi Limbajele de programare prevăd diferite categorii de numere întregi, clasificate după numărul de ranguri disponibile pentru reprezentarea numărului şi după prezenţa bitului de semn. Lungimea a rangurilor disponibile pentru reprezentarea numărului exprimă „precizia” acestuia şi este exprimată în biţi sau octeţi. Se prezintă mai jos exemple de declaraţii pentru variabile de tip întreg în limbajul C. a) Variabile de tip întreg pe doi octeţi, indicând ziua din lună şi trei note de examen: int ziua=13; int NotaExamen1, NotaExamen2, NotaExamen3; b) Variabilă de tip întreg pe 4 octeţi, indicând numărul de operaţii estetice ale unei cunoscute actriţe (neiniţializat, adică fără valoare specificată – pentru confidenţialite): unsigned long int nr_estetic; În cazul a) variabila ziua este iniţializată la valoarea specificată după semnul =, adică această valoare este „încărcată” în locaţia de memorie a variabilei chiar la momentul declaraţiei, deci imediat după rezervarea spaţiului de memorie necesar (2 octeţi). Valoarea ce apare după semnul = este un literal. Operaţii cu numere întregi Un tip anume de date permite un set bine definit de operaţii permise asupra variabilelor declarate cu acel tip. Operaţiile sau operatorii se aplică diferenţiat funcţiile de caracteristicile tipului de date, mai jos fiind inventariate operaţii pe cele trei categorii conform.


Asupra numerelor întregi se pot efectua următoarele operaţii aritmetice (în paranteze simbolul uzual al operaţiei): adunare şi scădere (+ şi ), înmulţire (*), câtul împărţirii întregi (/), restul împărţirii întregi (%). Ultimele două operaţii sunt specifice numerelor întregi, rezultatul operaţiei de împărţire fiind tot un întreg. Numerele întregi pot fi comparate privind magnitudinea prin operatori relaţionali cu simbolurile <, >, <=, >=; simbolurile <> sau != realizează comparaţia de neegalitate , iar simbolurile = sau = = comparaţia de egalitate. Tipul de date întreg este un tip ordinal cu ordine între valorile din domeniu: numărul 1 este înaintea numărului 2 şi după numărul 0. De aceea sunt posibile operaţii de tip predecesor – succesor; de exemplu operatorul de succesiune din expresia succ(2) are ca rezultat 3. Reprezentarea numerelor reale Pentru numerele reale care nu prezintă parte întreagă ci doar partea zecimală (adică numerele subunitare) se foloseşte o reprezentare binară imediată, în care virgula zecimală se consideră plasată între bitul de semn şi rangurile binare ale numărului propriu-zis (vezi Figura 5 a). + 0

23 0

22 1

21 0

20 0

virgula zecimală a) număr real în virgulă fixă

SM

M SE E Mantisă Exponent b) număr real în virgulă mobilă

Figura 5 Reprezentarea numerelor reale a) în „virgulă fixă” şi b) în virgulă mobilă. Convenţia prin virgulă fixă are multe dezavantaje, între care lungimea mare necesară pentru a reprezenta numere rezonabile este poate cea mai importantă. Convenţia de reprezentare prin virgulă (vezi Figura 5 b) este mai compactă şi totodată eficientă, formată din două părţi (Mantisă şi Exponent) ca numere reprezentate în virgulă fixă. Reprezentarea numerelor în virgulă mobilă Mantisa (M) este numărul propriu-zis reprezentat ca număr subunitar, iar exponentul (E) este puterea lui 10 - care înmulţită cu mantisa va da numărul real vizat. Fiecare din cele două părţi are semnul său: SM semnul mantisei este de fapt semnul numărului real (pozitiv sau negativ) iar SE semnul exponentului indică puteri pozitive (înmulţire cu 10) sau negative (împărţire prin 10) stabilit astfel ca să obţinem la mantisă un număr subunitar. Scrierea numerelor reale prin mantisă şi exponent este practicată în aproape orice produs informatic, datorită modului compact în care se prezintă. Spre exemplu, numărul 22,57 poate fi scris prin mantisă şi exponent în forma 0,2257e-2, exponentul fiind separat de mantisă prin litera e. În această formă se afişează, în general, rezultatele numerice obţinute în urma unor calcule matematice. Operaţii cu numere reale Fiind numere, cu numerele reale se pot efectua operaţiile aritmetice uzuale: adunare şi scădere (+ şi ), înmulţire (*),împărţirii cu zecimale (/). Mulţimea numerelor reale se reprezintă matematic ca puncte infinit apropiate pe o dreaptă (axa reală). Între oricare două puncte de pe axa reală se poate găsi încă cel puţin un punct, deci nu se poate considera că un punct urmează după altul, deci tipul real nu este un tip de date ordinal, ca atare nu se poate considera că există o ordine între numerele reale, adică nu există operatori de tip predecesor pred()sau succesor succ(). Între numerele reale se pot efectua comparaţii prin operatori relaţionali: <, >, <=, >=; comparaţia de neegalitate <> sau !=, apoi = sau = = pentru comparaţia de egalitate.


Curs 3 Tipul de date caracter Simbolurile de scriere (fie ele în alfabetul latin, chirilic sau japonez) se numesc caractere (în engleză „characters”) şi ele sunt necesare la scrierea textelor sau chiar a comenzilor prin care omul comunică cu calculatorul. Fiindcă în memoria calculatorului orice informaţie este reprezentată binar – ca numere, pentru caractere se utilizează o codificare numerică pe un număr de biţi, fiecărui caracter corespunzând, prin convenţie, un cod numeric anume. Convenţiile de codificare sunt cuprinse în aşa-numitele „tabele de cod”. Există mai multe asemenea tabele:  tabela ASCII – pe 7 biţi, cea mai utilizată tabelă de cod (în calculatoarele personale şi alte sisteme de calcul), provenind din standardul american (American Standard Code for Information Interchange);  tabela Unicode – pe 16 biţi, care este o altă extensie a tabelei ASCII (prima parte fiind identică cu tabela ASCII) şi care are un număr mare de coduri disponibile, pentru reprezentarea nu numai a caracterelor latine cu diverse diacritice dar şi a caracterelor diferite de cel latin (chirilic, arab, etc.). Tabela Unicode s-a impus mai ales prin utilizarea Internet-ului, unde informaţia se personalizează în foarte mare măsură pentru ca oameni din diferite colţuri ale lumii şi din diferite culturi să poată interacţiona eficient cu aplicaţiile la distanţă, adică să comunice fiecare în limba şi scrierea proprie. Reprezentarea caracterelor Pentru a se deosebi de identificatori (care pot fi litere singulare), la manipularea caracterelor acestea se indică prin încadrarea simbolului de scriere între apostrof, adică se indică literali de tip caracter. Exemplu ‘A’, ‘a’, ‘0’, ‘:’. Aceste simboluri nu au nici o semnificaţie în sistemul de programe, ci ele au rol numai de a fi desenate pe dispozitivele de ieşire (ecran, imprimantă) pentru a fi citite de om. În oricare din tabelele de cod de mai sus caracterelor li se asociază un număr întreg (fără semn), astfel ca ordinea numerică a codurilor să fie similară cu ordinea lexicografică a caracterelor în alfabetul ales. Astfel, se dau mai jos exemple de coduri ataşate (identic) unor caractere în tabela ASCII, IBM extins sau Unicode: ‘A’= 65(10), ‘B’= 66(10), ‘C’= 67(10), ‘a’= 97(10), ‘\n’= 10(10) – cod ataşat acţiunii de salt la nou rând, ‘\a’= 7(10) – cod ataşat sunetului „bell” produs pentru a atrage atenţia sonor. După cum se observă, unele „caractere” sunt de fapt acţiuni executate de la tastatură (de exemplul salt la nouă linie), dar au fost cazuri când caracterele au avut rol în comunicaţia de date – de exemplu indicarea începutului şi sfârşitului de mesaj STX = 2(10), ETX = 3(10) sau încheierii transmisiei EOT = 4(10). Ordonarea lexicografică a caracterelor se poate face pe baza numerelor asociate drept cod acestora; astfel, literele majuscule sunt la înaintea literelor mici (adică primele au valori mai mici) iar cifrele sun înaintea literelor în tabela de cod. Tipul caracter este utilizat ca atare dar şi în tipul structurat „şir de caractere” (vezi 0). Operaţii cu tipul de date caracter Tipul de date caracter este un tip ordinal, deci permite operaţii prin care se indică poziţia relativă a valorilor caracterelor, unele faţă de altele - predecesor pred(),succesor succ(). Fiind reprezentate prin numere întregi, caracterele permit operaţii aritmetice admise pentru întregi. Între acestea, sunt utile cele de incrementare / decrementare (creştere / descreştere cu o unitate), prin care se poate parcurge tabela de cod sau şi se pot genera succesiuni de litere.


Trebuie subliniat că cifra ‘3’, nu este acelaşi lucru cu numărul 3 – primul este un simbol de scriere (şi are drept cod numărul 51(10)) iar al doilea este util pentru calcule şi are o reprezentare în baza 2 ca în Tabel 2. Tipul de date logic În viaţa obişnuită sunt dese situaţii în care interesează apariţia unui eveniment; funcţie de apariţia acestuia pot apare alte evenimente sau se vor lua decizii în consecinţă. De exemplu, faptul că plouă şi fereastra este deschisă conduce la umezirea cărţilor de pe masa de lângă fereastră; dacă plouă, luăm decizia să închidem fereastra. Se poate, aşadar, ca intrând în camera cu pricina să constatăm că este „adevărat” că fereastra este deschisă. Cazurile de interes la apariţia unui eveniment sunt deci două „adevărat” sau „fals”, caracterizând din punct de vedere logic situaţia. Reprezentarea datelor de tip logic Datele care transpun în memoria calculatorului informaţiile despre situaţii carateriyate prin atributul „adevărat” sau „fals” se numesc date de tip logic, iar reprezentarea lor se poate face folosind un singur bit: apariţia evenimentului este asociată valorii „1‟ logic, iar ne-apariţia valorii „0‟ logic. Operaţii cu tipul de date logic Este posibilă combinarea mai multor situaţii logice (vezi exemplul de la începutul acestui paragraf), pentru cazurile când acestea:  apar numai simultan (conjuncţia) – ŞI logic (în engleză AND),  apar alternativ sau simultan (disjuncţia) – SAU logic (în engleză OR),  apar în contradicţie (negaţia) – NU logic (în engleză NOT), care constituie chiar operatorii specifici ce se pot aplica datelor de tip logic. Pentru exemplificarea şi lămurirea acestor trei operatori, se prezintă mai jos (vezi ) trei cazuri intuitive, în care întrerupătoarele x (şi y) se pot acţiona pentru aprinderea unui bec z. Stării închis a unui anume întrerupător se asociază valoarea logică „adevărat” iar stării deschis a întrerupătorului se asociază valoarea logică „fals”; stării „aprins” a becului se asociază valoarea logică „adevărat” iar stării „stins” valoarea logică „fals”. Astfel, pentru cazul din Figura 6 a) corespunde expresia logică: «becul z devine „adevărat” (aprins) pentru întrerupător x „adevărat” (închis) ŞI întrerupător y „adevărat” (închis)».

~

x

ŞI

y

SAU

z ~

a)

x

x

z

NU b) c)

~

x

z

Figura 6 Operaţii logice în prezentare intuitivă a) ŞI – AND, b) SAU – OR, c) NU – NOT. În timp ce operaţiile ŞI, SAU din desenele de mai sus sunt uşor de imaginat, operatorul NU (NOT) în Figura 6 c) este indicat prin întrerupătorul x menţinut de un arc în starea închis –chiar fără a fi acţionat butonul x (deci în starea logică „fals”) cu becul z aprins – deci în starea „adevărat”; la apăsarea


butonului x apare starea deschis („fals”) a acestuia însă a becul z – se stinge – deci apare starea „fals”. Prin această funcţionare apare o negare a acţiunii logice de apăsarea a butonului x prin stingerea becului z.  y 0 1 x z 0 0 1 1 1 1 SAU (OR) z=xy

 y 0 1 x z 0 0 0 1 0 1 ŞI (AND) z=xy Tabel 3 Operator logic ŞI

Tabel 4 Operator logic SAU

x 0 1 z 0 1 NU (NOT) z=x Tabel 5 Operator logic NU

Efectele acestor trei operatori asupra variabilelor de tip logic sunt ilustrate prin „tablele de adevăr” prezentate mai jos, în care se prezintă şi simbolurile grafice asociate celor trei operatori:  pentru ŞI,  pentru SAU,  pentru NU. Operatorii logici apar în programe, cel mai adesea, pentru a exprima condiţii complexe în urma cărora se ramifică fluxul de comenzi ce se vor executa (vezi decizia binară). Tipuri de date structurate Această categorie de date se referă la colecţii de piese de date - simple sau structurate, numite şi tipuri compuse de date. Tipul fiecărei piese de date şi organizarea lor în structură se trebuie declarate la începutul programului, adică trebuie comunicate explicit compilatorului pentru a se face rezervarea corespunzătoare a locaţiilor de memorie necesare. Structura astfel declarată nu se modifică pe parcursul programului, de aceea tipurile compuse sunt considerate structuri statice de date. Tipul de date tablou Deseori sunt necesare prelucrări asupra unui set de date de acelaşi tip; acestea se pot grupa în masive de date sau tablouri, cum sunt vectorii (tablouri cu o singură dimensiune) sau matricele (tablouri cu două sau mai multe dimensiuni). Un tablou este o structură cu piese de date de acelaşi tip, fiecare piesă referită prin poziţie. Piesele de date din tablou sunt organizate pe linii şi coloane şi pentru a fi accesate sunt referite, adică adresate, prin indicii de line (şi eventual coloană). Mai jos se prezintă o matrice pătratică de numere întregi, cu patru linii şi patru coloane, în care fiecare element aij este referit prin linia i şi coloana j la intersecţia cărora se află.

a11 a12 a13 a14  a 21 a 22 ...   a ... aij ...    a 41 .... a 44  Prelucrările cu tablouri (sume, produse, transpuneri, etc.) se efectuează asupra fiecărui element în parte; de exemplu, sumarea matricelor a şi b constă a sumarea perechilor de elemente cu acelaşi indice (linie şi coloană). Operaţii asupra datelor de tip tablou Fiindcă datele de tip tablou sunt structuri ale altor tipuri de date, operaţiile posibile asupra elementelor din tablou sunt cele permise pentru tipul de date respectiv. Astfel, pentru datele de tip întreg sunt


permise operaţii specificate la. De fapt, operaţiile permise se aplică respectând restricţiile impuse de operaţii cu tablouri, spre exemplu:  sumarea tablourilor – sumarea elementelor de acelaşi indice pentru linie şi coloană;  înmulţirea tablourilor – obţinerea unui tablou produs corespunzător operaţiei produs vizate: scalar (linii cu coloane) sau vectorial (coloane cu linii), cu reguli din algebră. Parcurgerea element cu element a tabloului se face şi pentru operaţiile banale:  introducerea datelor în tablou – ataşarea către fiecare element a unei valori din tipul indicat, cu informaţii preluate de la tastatură sau dintr-un fişier;  afişarea datelor din tablou – înscrierea valorilor fiecărui element pe ecran sau într-un fişier pe disc. Tipul de date şir de caractere Simbolurile de scriere (caracterele) sunt utile mai ales pentru a se construi cu ele cuvinte, propoziţii şi fraze, necesare comunicării inter-umane sau denumirii obiectelor (în interiorul sau exteriorul sistemului de calcul). În acest scop se alătură caractere în şiruri ordonate, poziţia fiecărui caracter respectând regulile de scriere în limba respectivă. Fiecare astfel de şir va fi memorat într-o variabilă (locaţie de memorie) – rezervată anterior spre a primi numărul de caractere specificat, adică variabila va „lua valoare”. Cel mai adesea, prelucrările efectuate asupra şirurilor de caractere utilizează poziţia caracterelor (de exemplu pentru anagramarea unui nume); rezultă că pentru reprezentare unui şir este utilă o structură similară tabloului. Reprezentarea datelor de tip şir de caractere Fie un tablou unidimensional (vector) ce are drept elemente piese de tip caracter, în cuvinte - vezi Figura 7 cu variabila Nume care ia valoarea „Vasile” apoi „Ion”. Cuvintele pot fi unele mai lungi, altele mai scurte, deci pe lângă vectorul de caractere mai este necesară o informaţie care să indice lungimea curentă a şirului (sau poziţia ultimului caracter în din vector). În diverse limbaje de programare această informaţie specifică:  lungimea şirului – limbajul Pascal (în prima poziţie din vector)  finalul şirului – limbajul C (caracterul NULL după ultimul caracter din şir). Fără această informaţie este posibil ca la încărcarea succesivă a unui şir lung („Vasile”) apoi a unuia mai scurt („Ion”) în acelaşi vector, să apară (de exemplu la afişare) şirul scurt completat cu restul literelor, din poziţiile neacoperite, ale şirului precedent (vezi Figura 7). Dacă finalul de şir este marcat cu un simbol special (de exemplu NULL) dispozitivul de afişare nu ia în seamă ce apare după acesta şi va afişa doar caracterele până la el. Nume : V a s i l e 0 1 2 3 4 5  7 finalul şirului de caractere

Nume : I 0

o n i l e 1 2  4 5 6 7 finalul şirului de caractere

Figura 7 Două valori pentru variabila şir de caractere Nume. Lungimea maximă a unei variabile şir de caractere este, în general, 256, rezultă deci că nu se pot înscrie texte ci doar părţi scurte – în general cuvinte, nu propoziţii. Operaţii asupra datelor de tip şir de caractere Cu toate că reprezentarea şirurilor se bazează pe tipul de date tablou, operaţiile posibile sunt specifice şirurilor de caractere şi sunt implementate prin funcţii în biblioteci asociate limbajului de programare. Între acestea, cele mai uzuale sunt cele de „concatenare” a şirurilor (adăugare a unui şir după un altul),


precum şi cele de înlocuire a unui subşir (parte a unui şir) cu un alt subşir, în scopul prelucrării textelor. Tipul de date articol Cele mai răspândite programe utilizate în domeniul economic (şi nu numai) sunt aplicaţiile de gestiune. Acestea folosesc tabele care grupează datele referitoare la „obiecte” din lumea reală (cum sunt produsele dintr-un depozit, candidaţi la un examen, etc.), iar „gestiunea” constă în evidenţa şi prelucrarea datelor referitoare la acele obiecte. Un tabel se referă la o categorie de obiecte anume în care, la rândul lor, o linie se referă la un obiect anume iar o coloană (o rubrică) se referă la o anume proprietate sau atribut al acelui obiect. De exemplu, o linie din tabel se referă la un candidat anume iar coloanele conţin datele asupra sa (nume, prenume, media, etc.). O linie din tabel se numeşte uzual articol (sau înregistrare – în engleză „record”) iar o celulă ce conţine date (pe o coloană cu numele în capul de tabel) se numeşte câmp (în engleză „field”). Câmpurile pot conţine date de tip şir de caractere (nume, prenume pentru un candidat), date de tip numeric (media), sau date de tip logic (a absolvit sau nu examenul). Reprezentarea datelor de tip articol Un articol este o structură cu piese de date de tipuri diferite, fiecare piesă referită prin nume. Prin intermediul articolelor se pot manipula datele din tabele, în memoria internă a calculatorului şi la transferul cu discul - memoria externă. Accesul al fiecare piesă de date (câmp) din articol se face prin numele rubricii (al câmpului). Ca reprezentare a structurii de tip articol se poate imagina un tabel cu doar două linii: capul de tabel şi o linie cu date referitoare la un singur obiect - cel prelucrat la un moment dat.

Articol

Nr_Legitimatie Nume 325 Popescu

Prenume Ion Câmp

Media Absolvit 8,5 Da

Valoare

Nume câmp

Figura 8 Dată de tip articol, pe un exemplu. Se face observaţia că tipul articol nu există ca tip de date în limbajul Java, fiindcă conceptul de clasă reprezintă o structură de date extensie a articolului, cu deosebirea că la definirea clasei se indică atât piesele de date diferite ce intră în structură cât şi operaţiile (metodele) prin care se poate manipula structura. Pentru prelucrarea pieselor de date din articol, acestea se vor referi prin numele asociat articolului şi numele asociat câmpului, respectând sintaxa: nume_articol.nume_câmp În cazul exemplului din Figura 8, referirea câmpului Prenume în variabila candidat1 se face prin construcţia: candidat1.Prenume care poate fi folosită pentru atribuirea de valori câmpului Prenume sau poate fi folosită în expresii (ca operand) pentru prelucrări necesare unei aplicaţii vizate. Operaţii asupra datelor de tip articol


Similar tipului de date tablou, tipul articol este o structură ce conţine alte tipuri de date, astfel că operaţiile posibile asupra valorilor câmpurilor sunt cele permise pentru tipul de date din câmpul respectiv. În exemplul din Figura 8, pentru datele de tip şir de caractere din câmpurile Nume şi Prenume sunt permise operaţii specificate la . Tipuri abstracte de date – Clase de obiecte După cum s-a constatat, la fiecare tip de date prezentate anterior, fiecare tip de date are specific un nume, o semnificaţie, un domeniu de valori şi operaţii posibile asupra acestor valori. În abordarea obiectuală, se definesc clase de obiecte, ca tipuri abstracte de date ce înglobează structura de variabile şi operaţiile asupra lor. Iniţial, clasa este descrisă privind datele (proprietăţile) şi metodele (prelucrările) caracteristice obiectelor pe care le reprezintă. Fie un exemplu în care se declară în limbajul Java două variabile şir de caracter (s1, s2 şi s3) ce fac parte din clasa String (ca tip special de tablou), iar apoi se execută concatenarea primelor două (v. operaţii pe şiruri): String s1, s2, s3; … s3=s1+s2; … Şirurile s1 şi s2 intră direct în expresie cu operatorul + între variabile, ca şi cum ar fi un tip de date simple şi nu s-ar supune restricţiilor privind operaţiile asupra tablourilor. Operatorul + nu face sumarea obişnuită ci concatenarea (adăugarea) şirurilor s2 după s1; rezultatul concatenării este „încărcat” apoi în variabila s3. Operatorul + este un operator definit special pentru clasa de obiecte String – şir de caractere, iar atunci când apare între două variabile de acest tip „ştie” cum să opereze (adaugă şirurile, nu face sumare ca la numere întregi). Avantajul pe care programatorul îl are la folosirea claselor de obiecte este acela că poate declara orice structură de date corespunzătoare unei categorii de obiecte din lumea reală (o clasă de obiecte), defineşte operatori specifici clasei iar apoi foloseşte obiecte din această clasă în expresii, ca şi cum ar fi piese simple de date. Mai mult, chiar faza de proiectare a programului, se simplifică fiindcă nu vor trebui decât „imaginate” obiectele şi prelucrările necesare cu acestea, în scopul obţinerii unui rezultat dorit. Spre exemplu, dacă se defineşte o clasă „paralelogram” – cu două operaţii posibile „modificarea dimensiunii a două laturi paralele” şi „modificarea unui unghi de colţ”, se pot face prelucrări complexe cum sunt: transformarea paralelogramului în dreptunghi sau transformarea dreptunghiului în pătrat, folosind operatori şi simboluri definite specific în cadrul clasei. Valorile obţinute după prelucrări, în acest exemplu, vor fi „dreptunghi” respectiv „pătrat”.


Curs 4 Structuri dinamice de date Imaginaţi-vă o secţie de asamblare automobile: muncitori specializaţi (în montarea uşilor, a motorului, a farurilor, etc.) prezintă fiecare un loc de muncă ordonat, cu seturi de unelte la îndemână - truse de şurubelniţe, panouri de scule. Banda de montaj, cu seria de automobile, trece pe la fiecare loc de muncă şi muncitorii fac, fiecare la rândul său, prelucrările specifice. Fiecare trusă sau panou de unelte este o structură statică (nu se modifică în timp – dacă nu se rătăcesc uneltele ), iar automobilul de pe bandă este o structură dinamică (la care se adaugă succesiv componentele necesare). Fără ordinea la locul de muncă nu se poate lucra eficient, iar asamblarea ordonată a automobilului este scopul prelucrărilor din secţie. Orice prelucrare se face cu organizarea prealabilă a materialelor şi uneltelor de lucru, deci nu este de mirare că şi în prelucrarea datelor organizarea este esenţială. Între tipurile de date structurate prezentate la tabloul este similar trusei de şurubelniţe iar articolul panoului de scule (explicaţi dumneavoastră asemănarea), aşa cum s-a amintit acestea fiind structuri statice de date. Automobilul este o structură în evoluţie, şi poate fi asemănat cu una din structurile deja prezentate la (lista lineară sau lista nelineară - arborele), acestea fiind structuri dinamice de date. În concluzie, structurile de date sunt organizări ale datelor în scopul realizării eficiente a unor categorii generale de prelucrări, implementate prin tipul articol (iar operaţiile asupra lor prin programe separate) sau, mai eficient, implementate prin obiecte ce conţin pe datele din structuri şi metodele – ca posibile asupra lor, aşa cum se prezintă în continuare. Liste lineare În mod intuitiv lista poate fi privită ca o mulţime finită şi ordonată de elemente oarecare. Un vector poate fi privit ca o listă care prezintă însă două mari dezavantaje: număr elementelor trebuie cunoscut de la început (datorită naturii statice a vectorilor) şi faptul că introducerea unui nou element între altele existente necesită re-aranjarea elementelor care urmează celui nou (datorită naturii compacte a vectorilor). Listă simplu înlănţuită Pentru cazul când pointer-ul Pi indică nodul următor, lista se numeşte simplu înlănţuită şi apare ca în Figura 9; ultimul nod conţine în câmpul Pi o valoare ce indică sfârşitul listei - valoare numită nil (în Pascal) sau NULL (în C, C++ sau Java), valoare care indică spre „nimic”. P0

E1

P1

E2

P2

En

NULL

Figura 9 Listă lineară simplu înlănţuită. Indicatorul P0 este de fapt variabila pointer prin care se face acces la listă, dar nu face parte din listă. E1 este primul iar En este ultimul element al listei, n fiind lungimea listei, elementele fiind ordonate după poziţia lor în listă; Dacă n = 0, atunci se spune că lista este vidă. Operaţii asupra listelor Modificările de valoare Ei ale unui nod au loc prin operaţii asupra tipurilor de date ce stocate în câmpurile acestuia, dar operaţiile asupra listelor privesc modificarea structurii acestora, adică a organizării nodurilor prin legăturile dintre ele. Caracterul dinamic al structurii de tip listă se vădeşte în modul cum operaţiile afectează dimensiunea listei, fără a modifica poziţia fizică a nodurilor (în memoria de lucru) ci, eventual, valorile indicatorilor din fiecare nod.


 

Inserarea unui nou element Ex în listă este reprezentată în Figura 10 a); după cum se observă, după „întreruperea legăturii” dintre nodurile Ei, şi Ej, se actualizează doar valorile indicatorilor Pi si Px. La ştergerea unui element (Ei+1), se actualizează valoarea pointer-rului nodului precedent (Ei) pentru a indica elementul următor (Ei+2), iar elementul şters (Ei+1) este eliminat din memorie (eliberează locaţia ocupată până la acest moment) - Figura 10 b).

Din aceste două exemple se constată caracterul flexibil şi dinamic al listelor, cu observaţia că aceste caracteristici rezultă din utilizarea tipului indicator (pointer)

Ei

Pi

Ej Ex

Ei

Pi

Pj

En

NULL

a)

Px

Ei+1

Pi+1

Ei+2

Pi+2

b) Figura 10 Operaţii de inserare şi de ştergere a unui nod în lista lineară simplu înlănţuită. Alte operaţii pot fi:  parcurgerea listei în scopul căutării unui nod (de indice sau valoare cunoscută), al primului sau ultimului element (capul sau coada listei);  determinarea elementului succesor sau predecesor pentru un nod dat;  iniţializarea listei – adică ştergerea tuturor elementelor din listă (vidarea listei). Operaţiile de ştergere ale unui nod sau a întregii liste face totodată eliberarea zonei de memorie ocupată, spre a fi utilizată pentru alte variabile dinamice. Tipuri de liste Dacă pointer-ul ultimului nod En al listei indică primul element E1, atunci lista se numeşte listă circulară, fiindcă parcurgerea liste se poate face până la capăt şi apoi din nou de la început. Parcurgerea listei se face prin „saltul” între indicatori (P0, P1, ..., Pi, ...) iar vizitarea nodului i se face prin prelucrarea (sau pur şi simplu consultarea) valorii Ei. Fiindcă lista simplu înlănţuită nu poate fi parcursă decât de la „cap” (P0) la „coadă” (Pn) iar pentru revenirea către cap trebuie reluată parcurgerea de la cap, se foloseşte adesea lista dublu înlănţuită; acestea prezintă două câmpuri indicator: unul spre dreapta (spre coadă) altul spre stânga (spre cap). Parcurgerea listei se poate face uşor în ambele sensuri prin „salturi” atât spre dreapta cât şi spre stânga. Cozi – numite şi liste FIFO („First In First Out” – primul intrat primul ieşit) sunt liste la care interesează în special cele două capete şi modurile cum se adaugă noi elemente sau se elimină elementele - pentru aceste tipuri de liste introducerea / eliminarea de elemente se face doar prin capete. Stive – numite şi liste LIFO („Last In First Out” – ultimul intrat primul ieşit) – care seamănă cu un pachet de cărţi de joc: adăugarea de noi elemente se face prin capătul de sus (vârful stivei) iar eliminarea la fel. Acest tip de listă este util pentru cazurile când prelucrările parcurg datele într-un sens iar apoi le parcurg în sens invers – de exemplu la crearea unui palindrom cum este „radar” citit la fel şi invers.


Liste nelineare (arbori) Pentru această categorie de liste nodurile au legături cu număr variabil şi nu doar între vecini (cu indici succesivi) – vezi Figura 11. Relaţiile între noduri nu privesc ordinea ci ierarhia: un nod are relaţii de predecesor („părinte” – de exemplu E2) cu noduri succesor (noduri subordonate, „fii” – exemplu E4 şi E5). Nodurile care nu au „fii” sunt noduri finale şi au valorile indicatorilor nule (NULL).

E1 P’1 P”1

Nivel I

Nivel II

Nivel III

Nivel IV

E2

E3

P’2 P”2

P’3 P”3

E4

E5

NULL NULL

NULL NULL

E6 P’6

NULL

E7 NULL NULL

E8 NULL NULL

Figura 11 Arbore binar. Funcţie de numărul maxim de fii ale unui nod (oarecare), arborele poate fi categorisit ca arbore binar – maxim două noduri fii, arbore ternar – maxim trei noduri fii, etc. Reprezentarea arborilor binari Cele mai utilizate categorii sunt cele binare – mai simple şi cu proprietăţi dar şi cu semnificaţii intuitive (de exemplu clasificarea în categorii complementare – de un fel şi de altul); există algoritmi de transformare a unui arbore oarecare într-un arbore binar. Reprezentarea unui arbore se poate face şi folosind un tablou de muchii (cu două coloane, indicând pe fiecare linie noduri adiacente) însă folosirea indicatorilor) permite o reprezentare ce ocupă un spaţiu minim în memoria de lucru şi, evident, ne-limitarea dimensiunii arborelui. Operaţii cu arbori Fiind liste, arborii prezintă categorii de operaţii similare celor de la, prin care se afectează structura de noduri şi legături sau se accesează valorile elementelor. Specific listelor nelineare sunt ramificaţiile prin care se pot separa subarbori, care pentru arborii binari vor fi denumiţi „subarbore stâng” şi „subarbore drept”. Deci prelucrarea elementelor în arbore necesită două acţiuni de avans în arbore – avans stânga şi avans dreapta, precum şi o acţiune de acces şi prelucrare a valorii nodului curent – vizitare. Operaţii posibile sunt:  Parcurgerea arborelui constă în vizitarea succesivă a nodurilor acestuia. Privind modul de succesiune al vizitării nodurilor, există trei modalităţi uzuale de parcurgere - după modul în care se pot combina acţiunile de avans şi vizitare: a) Preordine: 1 – vizitare, 2 – avans stânga, 3 – avans dreapta; b) Inordine: 1 – avans stânga, 2 – vizitare, 3 – avans dreapta; c) Postordine: 1 – avans stânga, 2 – avans dreapta, 3 – vizitare. Aceste modalităţi de parcurgere se pot aplica şi recursiv .


   

Inserarea şi ştergerea unui nod din arbore – similar celor de la liste liniare. Determinarea înălţimii arborelui. Determinarea succesorului sau predecesorului unui nod în arbore. Extragerea unui subarbore.

Operaţiile de parcurgere ale arborelui din Figura 11 sunt ilustrate în Figura 12 – prin succesiunea de noduri obţinute în fiecare caz. 1 Preordine: 1-2-3-4-5-6-7-8 2

3 Inordine:

4

5

6

7

4-2-5-1-8-6-3-7

Postordine: 4-5-2-8-6-7-3-1

8 Figura 12 Parcurgerea arborelui binar în preordine, indordine şi postordine. După cum s-a arătat şi la Error! Reference source not found., structurarea arborescentă este foarte eficientă în prelucrarea datelor, cum sunt căutarea în volume mari de date, calculul expresiilor respectând precedenţa operatorilor (forma poloneză), clasificarea obiectelor.


Rezumat Bit-ul reprezintă unitatea elementară de informaţie, corespunzând unei situaţii fizice în care un comutator este deschis sau închis, situaţii reprezentate de oameni, în afara calculatorului prin cifrele 0 şi 1, deci, cifrele sistemului de numeraţie binar. Octet (sau Byte) este un grup de opt biţi reprezentând, tradiţional, o celulă de memorie. Identificatorul este numele ataşat unei piese sau colecţii de date, dar şi a unei prelucrări anume, în general aflate în memoria de lucru. Variabila este o locaţie de memorie referită printr-un identificator şi poate conţine diverse valori ale unei date de tip specificat. Constanta este o locaţie de memorie referită printr-un identificator şi poate conţine doar o singură valoare a unei date de tip specificat. Literal este o valoare concretă pentru un tip de date, indicată prin simboluri specifice tipului respectiv. Varietatea informaţiilor utilizate de om pare foarte mare, însă ele pot fi clasificate în categorii generice care apoi să primească reprezentări generale ca tipuri de date. Se poate face o analiză sumară din care rezultă câteva categorii de asemenea informaţii simple: a) numere singulare – utilizate a desemna sume de bani, distanţe, zile din luna calendaristică, cu care se pot face calcule matematice. Se deosebesc două categorii de numere – numere întregi şi numere reale (cu zecimale). b) simboluri grafice - litere, cifre, semne de punctuaţie, spaţii libere, utilizate în texte. Aceste simboluri sunt elemente ale unui set finit de simboluri de scriere (alfabetul, cifrele de la 0 la 9, semnele de punctuaţie); ele sunt denumite generic caractere alfanumerice. c) Informaţii de tip Adevărat sau Fals – pentru a desemna o situaţie sau un eveniment funcţie de care se ia o decizie (de exemplu, dacă un eveniment a avut loc se execută o anumită acţiune, altfel altă acţiune), denumite informaţii logice. Datele numerice se reprezintă prin conversie în baza 2, utilizându-se diferite formate. Tipul de date caracter se reprezintă tot prin cifre binare prin convenţii de codificare corespunzătoare unor “tabele de cod”, două dintre acestea fiind: ASCII, UNICODE. Tipurile de date structurate se mai numesc şi tipuri compuse de date. Datele structurate de tip tablou sunt cele mai uzuale şi sunt reprezentate de matrici, indiferent de dimensiunile acestora, componentele matricilor fiind date de acelaşi tip. Datele de tip articol se referă la posibilitatea de descriere a obiectelor din lumea reală, un articol reprezentând o structură de date de diferite tipuri, fiecare “piesă” din structură fiind referită prin nume. Tipurile de date abstracte sunt specifice abordării obiectuale, înglobând structura de variabile ce caracterizează obiectul şi operaţiile asupra lor. Cu aceste tipuri de date se pot efectua operaţii specifice. Structurile de date sunt organizări ale datelor în scopul realizării eficiente a unor categorii generale de prelucrări, implementate prin tipul articol (iar operaţiile asupra lor prin programe separate) sau, mai eficient, implementate prin obiecte ce conţin pe datele din structuri şi metodele. Concluzii Datele corespunzătoare informaţiilor vehiculate de om se împart în mai multe categorii, se reprezintă cu ajutorul cifrelor binare 0 şi 1, în diferite formate şi pot fi operate în moduri corespunzătoare.


Recomandări bibliografice Ariton V., Reţele de calculatoare, Editura Evrika Galati, 1999. Bott E., Leonhard W., Microsoft Office XP, Teora, 2002. Brookshear J. G., Introducere în Informatică, Ed. Teora, 1998. Burdescu D. D., Algoritmi şi structuri de date, Ed. Mirton, 1992 Cowart R., Knittel B., Microsoft Windows Professional, Teora, 2002 Davis C. et al. (Eds)., Entity-Relationship approach to Software Engineering, North Holland, 1983. Jacobson I., Ericsson M. and Jacobson A., The Object Advantage: business process engineering with object technology, Addison-Wesley, 2001. Scholtz-Reiter B., et al., Business Process Modelling, Heidelberg, Springer, 1996. Wilson D. A., Managing Information, Butterworth-Heinemann, 1998. Zorkoczy P., Heap N., Information Technology – an introduction, Pitman Publishing, 1995.

curs 2-4  

curs 2-4 Bazele informaticii

Read more
Read more
Similar to
Popular now
Just for you