Sunteți pe pagina 1din 83

BAZELE INFORMATICII PARTEA I

1. INTRODUCERE

1.1. CONCEPTE DE BAZ{. DAT{, INFORMA|IE, CALCULATOR, INFORMATIC{


Prin dat se nelege un numr, mrime, relaie etc., reprezentarea unui fenomen, lucru sau fapt, fiind susceptibil de a fi memorat, transformat sau vehiculat. n sens larg, informaia desemneaz un element nou, necunoscut anterior. n sens restrns informaia poate fi definit ca o msur a incertitudinii nlturat prin realizarea unui eveniment dintr-un set de evenimente posibile. Calculatorul este sistemul fizic care prelucreaz datele introduse ntr-o form prestabilit i furnizeaz rezultate fie ntr-o form accesibil utilizatorului, fie ca semnale destinate acionrii unor echipamente. n funcie de modul de reprezentare a datelor exist: calculatoare numerice datele sunt codificate numeric calculatoare analogice pentru codificare se utilizeaz elemente de tip continuu calculatoare hibride se mbin elemente de tip numeric cu elemente de tip continuu n acest curs ne referim la calculatoarele numerice. Informatica este tiina pluridisciplinar avnd ca scop proiectarea, dezvoltarea i exploatarea unor tehnici i sisteme, pentru organizarea, memorarea i distribuirea mai eficient a informaiei.

1.2. EVOLU|IA MA+INILOR DE CALCUL SCURT ISTORIC


Ideea efectu[rii calculelor cu ajutorul unor dispozitive nu este de dat[ recent[. Astfel, abacul, unul din primele dispozitive de calcul realizat de om =i care este folosit =i ast[zi, este cunoscut din timpul civiliza\iilor antice, greac[ =i roman[. Stocarea datelor se face manual prin pozi\ionarea bilelor pe s`rmele unui cadru dreptunghiular, iar rezultatele se ob\in prin observarea pozi\iilor finale ale bilelor. Mult mai t`rziu, apare ideea reprezent[rii datelor cu ajutorul unor ro\i din\ate. Valorile de intrare se marcau manual prin pozi\ionarea corespunz[toare a ro\ilor, se declan=a angrenajul de ro\i din\ate =i la oprire se interpretau pozi\iile finale ale ro\ilor. Legat de aceast[ tehnologie cele mai importante nume sunt: Blaise Pascal (1623-1662, francez), Gottfried Wilhem Leibniz (1646-1716, german), Charles Babbage (1792-1871, englez). Spre deosebire de inven\iile predecesorilor s[i, ma=ina inventat[ de Babbage tip[rea rezultatele direct pe h`rtie, evit`ndu-se astfel erorile de transcriere. }n 1801, Joseph Jacquard (Fran\a), un produc[tor de r[zboaie de cusut, avusese ideea de a comanda pa=ii pe care trebuia s[-i fac[ ma=ina pentru a realiza un anumit model de \es[tur[, folosind perfora\iile de pe cartelele de h`rtie. Babbage aplic[ aceast[ idee ]n cazul ma=inii sale de calcul: pa=ii algoritmului nu mai sunt integra\i ]n structura ma=inii, ci sunt prelua\i de pe cartele perforate. }n felul acesta, func\ie de configura\ia perfora\iilor, ma=ina lui Babbage putea s[ execute diferi\i algoritmi. Ideile folosite de Babbage ]n construc\ia ma=ini sale, cum ar fi tip[rirea rezultatelor =i mai ales memorarea

pa=ilor algoritmilor vor fi folosite =i mai t`rziu, ]n epoca modern[ a calculatoarelor. La recens[m`ntul efectuat ]n 1890 ]n S.U.A., Herman Hollerith (1860-1929) utilizeaz[ pentru memorarea datelor cartelele perforate, fapt ce reduce spectaculos timpul de procesare a informa\iilor. Legat =i de rezultatele ob\inute de Hollerith, ]n 1924 apare firma IBM (International Busines Machine Corporation), firm[ ce va juca un rol important ]n evolu\ia tehnicii de calcul pe plan mondial. }n 1940 George Stibitz construie=te la Bell Laboratories o ma=in[ de calcul electronic[. Patru ani mai t`rziu, ]n 1944, Howard Aiken de la Universitatea din Harvard construie=te calculatorul Mark I, care utilizeaz[ relee mecanice comandate electronic. Primul calculator electronic bazat pe tuburi electronice este considerat a fi ENIAC (Electronic Numerical Integrator And Calculator) construit de John Mauchly =i J. Presper Eckert, Universitatea din Pensylvania, ]n perioada 1942-1945. Unii cercet[tori ai istoriei evolu\iei calculatoarelor consider[ c[ prima ma=in[ care folose=te integral ]n construc\ia sa elemente electronice este calculatorul construit de John Atanasoff =i de asistentul s[u Clifford Berry ]n perioada 19371941. Revenind la ENIAC, se poate spune c[, fa\[ de calculatoarele din ziua de azi, era un gigant care se mi=ca ]ns[ foarte lent. Avea ]n structura sa aproape 20 000 de tuburi electronice, ocupa 160m2 =i avea o greutate de aproximativ 30 tone. Viteza de calcul putea ajunge p`n[ la 5000 de adun[ri pe secund[. O problem[ dificil[ era introducerea datelor =i a programului. Aceast[ activitate dura mai multe zile =i se f[cea cu ajutorul fi=elor celor 40 de panouri special construite ]n acest scop. Matematicianul american de origine german[ John von Neumann public[ ]n 1946, ]n S.U.A. proiectul primului calculator cu prelucrare secven\ial[ a instruc\iunilor =i datelor, memorate ]
4

mpreun[ ]ntr-o zon[ special[ numit[ memoria calculatorului. Principiile lui von Neumann au stat la baza dezvolt[rii calculatoarelor moderne. Prima aplicare a principiilor lui John von Neumann este datorat[ profesorului M. Wilkes de la Universitatea Cambridge din Anglia, care ]n 1949 a construit primul calculator cu program stocat ]ntr-o memorie cu ]nt`rziere, calculator ce a primit numele EDSAC (Electronic Delay Storage Automatic Calculator). Perioada care a urmat este ]mp[r\it[ ]n etape de evolu\ie cunoscute sub numele de genera\ii de calculatoare. Prezent[m ]n continuare limitele aproximative ]n timp ale fiec[rei perioade, precum =i caracteristicile sale principale. Genera\ia I de calculatoare este cuprins[ ]ntre anii 19461958 =i folose=te drept tehnologie de baz[ tuburile electronice. Alte caracteristici: memorie de mic[ capacitate =i timp de acces mare vitez[ de calcul mic[ (maxim 104 opera\ii/sec) se programeaz[ ]n cod ma=in[ =i ]n limbaje de

asamblare Genera\ia a II-a de calculatoare este localizat[ ]n timp ]ntre anii 1958-1964 =i se bazeaz[ pe tehnologia tranzistoarelor =i a diodelor semiconductoare. Caracteristicile de baz[ ale acestei genera\ii de calculatoare sunt: memorie intern[ cu capacitate sporit[ =i timp de acces mai mic vitez[ de calcul sporit[ (maxim 105 opera\ii/sec) apar limbaje de programare: FORTRAN (FORmula, TRANslator), COBOL (Common Business Oriented Language) =i ALGOL (ALGOrithmic Language) apar sisteme de operare

Genera\ia a III-a de calculatoare se ]ntinde de-a lungul perioadei 1964-1981 =i are la baz[ tehnologia circuitelor integrate. Printre caracteristicile celei de-a III-a genera\ii amintim: volum mic, capacitate mare de memorare viteza de calcul mari (106 adun[ri/sec) se dezvolt[ limbajele de programare de nivel ]nalt: PL/1, Pascal, LIST, Basic etc. =i de nivel mediu (limbajul C) Genera\ia 3.5 - 4 se ]ntinde ]n perioada 1982-1989 =i se bazeaz[ pe tehnologia circuitelor pe scar[ larg[ =i foarte larg[ (p`n[ la un milion de tranzistoare pe circuit integrat). Concomintent cu progresele ob\inute ]n domeniul tehnologiei folosite, se dezvolt[ puternic componentele logice de baz[ ale calculatorului. Astfel, ]n pre\ul unui calculator, costul soft-ului cre=te sensibil ]n raport cu costul datorat hard-ului. Se dezvolt[ modul de lucru interactiv, sistemele de gestiune a bazelor de date, apar limbaje de programare concurente. Genera\ia a V-a de calculatoare cuprinde perioada 19801990 =i se remarc[ at`t prin progrese tehnologice deosebite (grad ridicat de minituarizare datorat circuitelor cu integrate pe scar[ foarte larg[, viteze de ordinul miliardelor de opera\ii pe secund[, memorii externe de ordinul Gigaocte\ilor la pre\uri tot mai mici), c`t =i prin dezvoltarea impresionant[ a elementelor de inteligen\[ artificial[. Acest lucru a permis apari\ia unor limbaje specializate (de exemplu PROLOG PROgramare LOGic[) =i elaborarea mai eficient[ a unor sisteme expert care imit[ modul de ra\ionament al exper\ilor umani. Genera\ia a VI-a de calculatoare se dezvolt[ ]n prezent =i are la baz[ rezultatele ob\inute ]n opto electronic[ =i mai ales bioelectronic[.

2. ARHITECTURA CALCULATOARELOR

Calculatorul, ca sistem fizic destinat implementrii i prelucrrii automate a unor modele logico-matematice are la baz trei tipuri de resurse: resurse fizice (procesoare, memorie, dispozitive de intrare-ieire) sau resurse hard (hardware) resurse logice (sisteme de operare, programe utilitare, programe utilizator) sau resurse soft (software)
7

resurse informaionale date organizate i memorate pe supori de memorie extern.

Funcionarea calculatorului devine posibil prin activarea unui anumit tip de conexiuni existente ntre unitile sale cu destinaie special numite uniti funcionale. Arhitectura unui calculator cuprinde reprezentarea unitilor sale funcionale i a legturilor dintre ele. Exist diverse tipuri arhitecturale, funcie de o serie de criterii care iau n calcul aspecte privind timpul i costul prelucrrilor, necesitile de prelucrare i transmitere a datelor, tipul problemelor care sunt rezolvate etc. Arhitectura clasic (serial) e reprezentat de sistemul de calcul monoprocesor sau maina de calcul John von Neumann.

2.1. ARHITECTURA SERIAL


La modul cel mai general, un sistem de calcul von Neumann are la baz urmtoarele uniti funcionale: mediu de intrare unitate de intrare (UI) mediu de ieire unitate de ieire (UE) memorie unitate de memorie (UM) ansamblu de prelucrare unitate aritmetic i logic (UAL) sau de execuie element de comand i control unitate de comand i control (UCC) Unitatea de intrare (UI) preia sub controlul unitii de comand i control UCC informaia de la diverse dispozitive (periferice) de intrare, o aduce la forma standard de reprezentare i o transfer n unitatea de memorie. Informaia poate fi reprezentat de date sau instruciuni de executat. Exemple de dispozitive de intrare: tastatur, floppy disk, hard disk, CD-ROM, scanner etc. Unitatea de ieire (UE) preia sub controlul UCC informaia din memorie i o transfer ntr-o form adecvat dispozitivelor de ieire: videomonitor, imprimant, band magnetic, floppy disk, hard disk etc.
8

Unitatea de memorie (UM) are rolul de a stoca n locaii (celule) de memorie, identificabile dup adrese, date de intrare, seturi de instruciuni destinate execuiei (programe) i rezultate ale execuiei acestora. Unitatea aritmetic i logic (UAL) permite efectuarea unor operaii aritmetice sau logice conform instruciunilor programului. Citirea instruciunilor din memorie, decodificarea lor i transmiterea semnalelor de comand pentru execuia lor, ctre UAL sau unitile de intrareieire, precum i controlul bunei funcionri a ntregului sistem de calcul, cad n sarcina unitii de comand i control (UCC). Unitatea de comand i control (UCC) mpreun cu unitatea aritmetic i logic (UAL) formeaz unitatea central de prelucrare (UCP) sau procesorul calculatorului. Procesorul mpreun cu unitatea de memorie alctuiesc unitatea central a calculatorului (UC). ntre elementele funcionale de baz ale calculatorului exist ci de comunicaie care permit circulaia informaiei reprezentat prin adrese, date de prelucrat, comenzi. Din punct de vedere funcional, sistemul de calcul John von Neumann se poate reprezenta sub forma schemei din Figura 2.1.

UC UM UI UCC UAL procesor UE

Figura 2.1 Modul de funcionare al acestui tip de calculator se poate rezuma astfel. Datele n forma lor primar (neprelucrat) precum i programul sunt preluate cu
9

ajutorul dispozitivelor de intrare, aduse la forma standard de reprezentare i transferate n memorie unde sunt memorate n locaii identificabile prin adrese. Fiecare instruciune a programului este preluat de UCC, care decodific operaia ce trebuie executat, trimite UAL comanda corespunztoare i solicit memoriei transferul ctre UAL a datelor aflate la adresele specificate n instruciune. UAL execut operaiile cerute i depune sub controlul UCC rezultatele temporar n memorie sau le transmite dispozitivelor de ieire.

2.1.1. ARHITECTURA UNIT{|II DE MEMORIE (UM)


Memoria intern a calculatorului poate fi privit ca un ansamblu de locaii de memorie identificabile prin adrese. Se spune c memoria este adresabil. Componenta fizic de baz n construcia memoriei o reprezint bistabilul element care poate lua doar dou stri stabile. Strile bistabililor se asociaz n mod tradiional cu cifrele binare 0 sau 1 numite i bii (binary digit). n calculatoare, bistabilii se realizeaz cu ajutorul inelelor de ferit sau cu circuite integrate, iar cele dou stri corespund perechii de tensiuni (0V, 5V). Ca exemple de bistabili enumerm perechile de stri: perforat-neperforat, stins-aprins, magnetizat-nemagnetizat. Prezena bistabililor n construcia memoriei a impus codificarea binar a informaiei n calculator. O locaie de memorie poate fi privit ca o succesiune de bistabili, iar la nivel formal ca o configuraie binar (succesiune de bii). Pe m bii consecutivi se pot reprezenta 2m configuraii binare. Bitul reprezint cea mai mic unitate de date care poate fi reprezentat i prelucrat de calculator. O succesiune de 8 bii formeaz un octet sau byte. Ea este cea mai mic unitate de date adresabil. Capacitatea memoriei este exprimat de regul cu ajutorul multiplilor si: kilobytul, megabytul, terabytul, petabytul, exabytul. 1 Kilobyte = 1024 bytes (210 bytes) 1 Megabyte = 1024 Kb 1 Gigabyte = 1024 Mb 1 Terabyte = 1024 Gb 1 Petabyte = 1024 Tb 1 Exabyte = 1024 Pb
10

2, 3, 4 bytes consecutivi formeaz un cuvnt. Lungimea cuvntului difer de la un tip de calculator la altul. Reprezentarea n memorie a informaiei se realizeaz la nivel de cuvnt sau de multipli ai acestuia. Accesul la o locaie de memorie se face pe baza adresei sale. Dac adresa se formeaz pe o configuraie de m bii, se poate explora un spaiu de adresare n memorie de 2m cuvinte. Timpul de acces reprezint timpul scurs de la cererea unei date din memorie i pn la obinerea acesteia. Accesul la o locaie de memorie este aleator (direct), iar timpul de acces este aproximativ acelai pentru orice locaie. Transferul informaiei n memorie se numete scriere, iar extragerea datelor din memorie se numete citire. Executarea unei operaii de citire-scriere se poate face doar cunoscnd adresa locaiei de memorie implicate. Aceasta va fi transmis de ctre UCC prin canale de comunicaie ntr-un registru de adrese al memoriei. Un circuit special de decodificare (decodificator) preia informaia din registru de adrese, o prelucreaz identificnd locaia cu adresa cerut. Dac se emite un semnal de citire, datele de la adresa localizat sunt transferate n registru de date; dac semnalul emis este de scriere, datele din registru de date sunt transferate n memorie n locaia identificat. n Figura 1.2 este reprezentat schematic modul de citire/scriere din/n memorie.

Introducere adres Registru adres

Introducere sau extragere informaii

Registru de date Decodificator

Memorie intern

Semnal de comand citire

11

Semnal de comand scriere

Figura 2.2

2.1.2. ARHITECTURA UNIT{|II ARITMETICE +I LOGICE (UAL)


Unitatea aritmetic i logic (UAL) sau unitatea de execuie permite efectuarea unor operaii aritmetice i logice asupra operanzilor de la intrare conform comenzilor date de unitatea de comand i control. Intrrile n unitatea aritmetic i logic constau n instruciuni i operanzi, iar ieirile sunt reprezentate de rezultatul operaiei i diveri indicatori. Indicatorii de condiie se refer la semnul rezultatului, paritatea rezultatului, transport n afara rangului de semn etc., iar indicatorii de eroare semnalizeaz diferite erori (de exemplu, depirea capacitii de reprezentare). Operanzii i rezultatele operaiilor efectuate se memoreaz n zone speciale de memorie, numite registri. Schematic, o unitate aritmetic i logic cu doi registrii de intrare R1 i R2 i un registru de ieire RE este reprezentat n Figura 2.3.

Operand 1

Operand 2

Indicatori de condiie

R1 UAL RE

R2

C O M A N D A

Cod operaie

Ieir e Figura 2.3


12

2.1.3.

ARHITECTURA UNIT{|II DE COMAND{ +I CONTROL (UCC)

Unitatea de comand[ =i control (UCC) realizeaz[ citirea instruc\iunilor programului din memorie =i execu\ia lor, asigur`nd totodat[ =i buna func\ionare a celorlalte unit[\i. }n general, instruc\iunile programului sunt de dou[ tipuri: instruc\iuni de transfer de date, de calcul, de schimb de informa\ii cu echipamentele periferice; instruc\iuni de decizie care modific[ ordinea de execu\ie a instruc\iunilor programului. Schematic, o instruc\iune poate fi reprezentat[ astfel (Figura 2.4): Cod opera\ie Figura 2.4 Cod opera\ie indic[ opera\ia care trebuie efectuat[, iar ]n zona adrese se memoreaz[ adresa unui operand sau a unei instruc\iuni. Unitatea de comand[ =i control poate fi reprezentat[ schematic astfel (Figura 2.5): adrese

memorie

Adresa instruc\iunii urm[toare CP RI

Instruc\iune curent[ Indicator condi\ii

Comenzi UI, UE, UM, UAL Figura 2.5


13

}n registrul de instruc\iuni (RI) se p[streaz[ adresa curent[ citit[ din memorie pe toat[ durata execu\iei. }n zona contor program (CP) se afl[ adresa urm[toarei instruc\iuni care se va executa.

2.2. ARHITECTURA PARALEL


Calculatorul serial este construit dup[ principiile stabilite de John von Neumann. Conform acestor principii calculatorul este alc[tuit din cele cinci unit[\i func\ionale (unitatea de intrare, unitatea de ie=ire, unitatea de memorie care con\ine programul =i datele, unitatea aritmetic[ =i logic[, unitatea de comand[ =i control). Calculatorul serial are un singur procesor care execut[ o singur[ instruc\iune la un moment dat. Viteza de lucru a procesoarelor actuale este de peste 109 opera\ii pe secund[ =i, evident, se doresc viteze =i mai mari. Se consider[ ]ns[ c[ limita fizic[ a num[rului de opera\ii este ]n jur de 1010 opera\ii pe secund[. Acest lucru este impus de limita vitezei de propagare a semnalului electric, care este de aproximativ un metru ]ntr-o nanosecund[ (10-9 secunde). Dep[=irea limitei de 1010 opera\ii pe secund[ ar ]nsemna folosirea unor componente ale calculatorului cu dimensiuni sub ordinul milimetrilor, ceea ce este practic imposibil. Alternativa la aceast[ situa\ie o reprezint[ folosirea mai multor procesoare ]n construc\ia unui calculator. Aceast[ idee a prins contur ]n jurul anilor 1970. Abandonarea principiului lui John von Neumann un singur procesor care execut[ o singur[ instruc\iune la un moment dat, a ]nsemnat de fapt apari\ia calculatorului paralel.

14

Calculatorului paralel reprezint[ o colec\ie de procesoare, de obicei de acela=i tip, interconectate ]ntr-o anumit[ re\ea care permite coordonarea activit[\ilor lor =i schimbul de date. Distan\ele dintre procesoare sunt mici, iar ]ntreg ansamblul ob\inut contribuie la rezolvarea unor probleme. Aceste caracteristici sunt esen\iale pentru a deosebi un calculator paralel de un sistem distribuit. Astfel, de=i un sistem distribuit este v[zut tot ca o colec\ie de procesoare, diferen\a este c[, ]n acest caz, ele sunt distribuite pe o arie geografic[ mare, sunt de obicei de tip diferit, iar scopul urm[rit este utilizarea ]n comun a resurselor disponibile, precum =i colectarea =i transmiterea informa\iilor. Eficien\a calculatorului paralel se datoreaz[ proces[rii paralele a datelor. Acest lucru permite reducerea timpului de rezolvare a unei probleme utiliz`nd procesoare cu viteze nu foarte mari =i ]n consecin\[ ieftine. Din acest motiv, un calculator paralel nu este neap[rat mai scump dec`t unul serial. }n ciuda acestei realit[\i =i a faptului c[ la ora actual[ cel pu\in 25 de mari companii produc calculatoare paralele, totu=i, penetrarea lor pe pia\a calculatoarelor este destul de slab[. Motivul esen\ial ]l constituie tehnologia software relativ primitiv[ a calculatoarelor paralele. De-a lungul timpului fondurile pentru cercetare ]n software au vizat ]n special sectorul calculatoarelor seriale. Un software eficient pentru un calculator serial nu este obligatoriu eficient =i pentru calculatoare paralele. Crearea unor biblioteci performante de software destinat calculatoarelor paralele necesit[ timp =i bine]n\eles fonduri. Calculatoarele Cray =i Ciber (ap[rute ]n anii 1970) s-au num[rat printre primele calculatoare din lume care au utilizat paralelismul. Ele au la baz[ un procesor vectorial care implementeaz[ tehnica pipeline. Originea termenului pipeline o g[sim ]n industria petrolier[, unde desemneaz[ o linie de selec\ie
15

pentru hidrocarburile dintr-un produs petrolier de baz[. Aceast[ tehnic[ este asem[n[toare cu ansamblarea unui produs pe o band[ rulant[: la fiecare unitate de timp fiecare diviziune de opera\ii este ]n lucru. Urmeaz[ apoi o dezvoltare rapid[ de noi genera\ii de supercalculatoare care cunosc ]mbun[t[\iri substan\iale: dispar bufferele (zonele tampon) de mare vitez[, o parte din memorie e distribuit[ ]ntre procesoare, iar o parte este accesibil[ tuturor unit[\ilor, se imagineaz[ =i se pun ]n practic[ noi modalit[\i de interconectare a procesoarelor etc. Calculatoarele paralele ]=i g[sesc utilitatea mai ales ]n rezolvarea problemelor care necesit[ solu\ii rapide sau sunt de dimensiuni mari. Iat[ c`teva exemple: probleme de procesarea imaginilor, probleme de modelare =i simulare (de exemplu simularea numeric[ a z[c[mintelor de petrol), probleme de prevedere a fenomenelor meteorologice etc. Clasificarea sistemelor paralele se poate face dup[ mai multe criterii cum ar fi: num[rul de procesoare, viteza de lucru a procesoarelor, mecanismul de control al sistemului, modul de organizare al memoriei, topologia dispunerii procesoarelor. }n leg[tur[ cu num[rul de procesoare apare termenul de granula\ie. Granula\ia poate fi: fin[ - aproximativ 1000 de procesoare fiecare trat`nd date pu\ine; grosier[ - aproximativ 16 de procesoare care trateaz[ date multe; medie - aproximativ 64 de procesoare. O modalitate clar[ de a clasifica calculatoarele paralele o dator[m lui Flynn (1966).

16

Conform acestei clasific[ri exist[ patru categorii de calculatoare paralele: SISD (Single Instruction Single Data) - un singur set de instruc\iuni =i un singur set de date; SIMD (Single Instruction Multiple Data) un singur set de instruc\iuni =i mai multe seturi de date; MISD (Multiple Instruction Single Data) mai multe seturi de instruc\iuni =i un singur set de date;

MIMD (Multiple Instruction Multiple Data) mai multe seturi de instruc\iuni =i mai multe seturi de date.

2.2.1. SISTEME SISD


Un sistem SISD nu este altceva dec`t calculatorul serial clasic. La un moment dat este activ[ o singur[ instruc\iune (Single Instruction) care prelucreaz[ o singur[ dat[ (Single Data). Schematic un sistem SISD se poate reprezenta astfel (Figura 2.7):
Proceso r

CPU

SI O instruc\iun e

Ad
O ev dat[

Date

Figura 2.7

r at

CPU are semnifica\ia de unitate central[ de procesare (Central Procesor Unit). }n figura de mai jos (Figura 2.8) se poate observa modul de func\ionare al unui SISD

17

Program Testeaz[ } nmul\e=t e }mparte Scade Adun[


Unitate func\ional[

x+y x y

Surs[ de date

Figura 2.8

2.2.2. SISTEME SIMD


Un sistem SIMD este alc[tuit dintr-o unitate de control (MCU Master Control Unit) =i un num[r de procesoare identice. Unitatea de control transmite aceea=i instruc\iune la fiecare procesor ]n parte. Procesoarele execut[ aceea=i instruc\iune ]n acela=i timp (execu\ie sincron[) =i au memorie proprie. Figura de mai jos (Figura 2.9) reprezint[ schema unui sistem SIMD.
Date

SI

P1 P2 Pn

MD

MCU

Figura 2.9 Modul de func\ionare al unui astfel de sistem este sugerat de figura urm[toare (Figura 2.10).

18

Program Testeaz[ Multiplic[ Scade }mparte Adun[

Unitate func\ional[ Unitate func\ional[ Unitate func\ional[

x y x+y a b a+b v w v+w

Surs[ de date

Figura 2.10

Sistemele SIMD sunt folosite mai ales la rezolvarea unor probleme care permit execu\ia acelora=i opera\ii ]n acela=i timp. Problemele de procesare a imaginilor, de dinamica fluidelor sunt ] n acest sens ideale deoarece rezolvarea lor presupune execu\ia acelora=i opera\ii ]n diferite noduri ale grilelor folosite. Evident, cu ajutorul unui SIMD aceste calcule se pot efectua simultan.

2.2.3. SISTEME MISD

Clasa sistemelor MISD cuprinde colec\iile de procesoare pipeline, considerate a fi ]n general neeficiente. O singur[ dat[ este prelucrat[ succesiv de aceste procesoare dup[ principiul benzii rulante. Schematic un sistem MISD se prezint[ astfel (Figura 2.11):
MI P1 P2 Pn
19

SD

MCU

Date

Figura 2.11

2.2.4. SISTEME MIMD


}ntr-un sistem MIMD func\ionarea oric[rui procesor este independent[ de func\ionarea celorlalte. Modul de operare asincron este facilitat de resursele pe care le are la dispozi\ie fiecare procesor, cum ar fi: memorie local[, unitate aritmetic[ =i logic[ proprie, contor program propriu etc. Comunicarea dintre procesoare trebuie specificat[ explicit =i este posibil[ folosirea ]n comun a unui spa\iu de memorie. Schema unui sistem MIMD este ar[tat[ mai jos (Figura 2.12):

Date MI P2 P1 MD Memori e . . . Pn Figura 2.12 Modul de func\ionare al unui sistem MIMD este prezentat ]n urm[toarea schem[ (Figura 2.13): comun[

MC U

20

Program P1 } nmul\e=t e Test

Program P2 Scade

Program Pn Test

Test

} nmul\e=t e Adun[ }mparte Scade

}mparte Scade Adun[

}mparte Adun[ } nmul\e=t e

Unitate func\ional[

v-w a b a*b x y x+y

Surs[ de date

Unitate func\ional[ Unitate func\ional[

Figura 2.13

}NTREB{RI +I EXERCI|II
Ce este arhitectura unui calculator? Ce tipuri arhitecturale cunoa=te\i?

21

Care sunt unit[\ile func\ionale care alc[tuiesc arhitectura unui calculator serial? Descrie\i pe scurt arhitectura unit[\ii de memorie Descrie\i pe scurt arhitectura unit[\ii aritmetice =i logice Descrie\i pe scurt arhitectura unit[\ii de comand[ =i control Da\i o scurt[ defini\ie a calculatorului paralel Care sunt avantajele unui calculator paralel? Motiva\i de ce, ]n ciuda performan\elor, calculatoarele paralele nu cunosc o r[sp`ndire a=a de mare ca ma=inile de calcul seriale

Enumera\i c`teva domenii ]n care ]=i g[sesc utilitatea calculatoarele paralele Care este clasificarea lui Flynn?

3. BAZE DE NUMERA|IE
22

Orice num[r natural q 2 poate fi considerat o baz[ de


1. numera\ie. Cifrele ]n baza de numera\ie q sunt 0, 1, 2, ... , q

Baza 10 este evident cea mai cunoscut[ baz[ =i are cifrele


0, 1, 2, 3, 4, 5, 6, 7, 8, 9 .

Datorit[ utiliz[rii bistabililor ]n construc\ia

memoriei calculatoarelor, ]n informatic[ se utilizeaz[ reprezentarea numerelor ]n baza 2 sau puteri ale acesteia (baza 8 =i baza 16). Rezultatele ob\inute ]n analiza matematic[ ne arat[ c[ orice num[r real, se poate scrie ]ntr-o baz[ oarecare q 2 sub forma a n a n 1 a n 2 ... a1 a 0 . a 1 a 2 a 3 ... a i ... , unde a i sunt cifre ale bazei q , adic[ a i {0, 1, 2, ..., q 1} . }n informatic[, bazele uzuale sunt 2, 8 =i 16. Cifrele ]n baza 2 sunt {0, 1}, ]n baza 8, {0, 1, 2, 3, 4, 5, 6, 7}, iar ]n baza 16 sunt {0, 1, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. Exemple ]n baza 10 396.83, -25691, 48 ]n baza 2 1101.11, 111001.11, 110101 ]n baza 8 675.02, 0.36, -475 ]n baza 16 69A, DEA.AB5, CAD.39A

Calea cea mai simpl[ de conversie a unui num[r dintr-o baz[ ]n alta este utilizarea bazei 10 ca baz[ intermediar[. Din acest motiv, ]n continuare prezent[m conversia numerelor din baza 10 ] ntr-o baz[ oarecare =i invers.

23

3.1. CONVERSIA NUMERELOR DINTR-O BAZ{ }N ALTA


3.1.1. CONVERSIA NUMERELOR }NTREGI
Conversia unui num[r ]ntreg din baza oarecare q ]n baza 10 Conversia unui num[r ]ntreg din baza oarecare q ]n baza 10 se face utiliz`nd dezvoltarea polinomial[. Mai precis, dac[ num[rul ]ntreg N se reprezint[ ]n baza q sub forma
N q = a n a n 1 a n 2 ... a1 a 0

atunci reprezentarea ]n baza 10 va rezulta din dezvoltarea


N 10 = a n q n + a n 1 q n 1 + a n 2 q n 2 + ... + a1 q + a 0

Exemple
11010 ( 2 ) = 1 2 4 + 1 2 3 + 0 2 2 + 1 21 + 0 2 0 = 2610 AC 3( 16 ) = A 16 2 + C 161 + 3 16 0 = 10 16 2 + 12 16 + 3 16 0 = 275510

Conversia unui num[r ]ntreg din baza 10 ]n baza oarecare q Pentru a ]n\elege algoritmul de conversie dintr-o baz[ q ]n baza 10 s[ consider[m dezvoltarea polinomial[ (1)
N 10 = a n q n +a n 1 q n 1 +... + a1 q +a 0

Sarcina algoritmului este s[ identifice cifrele

q, an , an 1 , an 2 , ..., a 0 , practic a num[rului convertit ]n baza


N q = an an 1 ... a1 a 0 .

}mp[r\ind rela\ia (1) prin q ob\inem:


N 10 a = a n q n 1 + a n 1 q n 2 +... + a1 + 0 q q

|in`nd cont c[ expresia


( 0) N 10 = a n q n 1 + a n 1 q n 2 +... + a1

24

este ]ntreag[, iar 0 a0 < q deoarece este cifr[ ]n baza q, rezult[ c[


(0) a 0 se ob\ine ca rest al ]mp[r\irii num[rului N 10 la q, iar N 10 este (0) c`tul acestei ]mp[r\iri. Proced[m analog cu expresia N 10 =i

ob\inem
( 0) N 10 = a n q n 2 + a n 1 q n 3 +... + a 2 +

a1 a (1) = N 10 + 1 q q

Printr-un ra\ionament similar deducem c[ cifra a1 se ob\ine


(0) ca rest al ]mp[r\irii c`tului anterior N 10 la baza q.

}n general, ob\inem ]n ordine cifrele a 0 , a1 , a 2 , , a n pentru fiecare pas i aplicat rela\iei


( i 1) N 10 a (i ) = N 10 + i q q

i =0,1, 2, ..., n

( 1) = N 10 . unde N 10
(i ) Algoritmul se termin[ c`nd se ob\ine c`tul N 10 egal cu zero.

Exemple Convertim din baza 10 ]n baza 2, numerele 26, respectiv 2755 ob\inute ]n exemplul precedent, aplic`nd algoritmul descris. 26 2 26 13 0 12 1 2755 2752 3 2 1 1 2 0 16 172 160 12

2 6 6 0

2 3 2 1

16 10 10

16 0

Cifrele numerelor convertite se ob\in citind de la sf[r=it spre ]nceput resturile (cifrele ]ncercuite). Se ob\in rezultatele a=teptate: 2610 = 11010 2 =i 275510 = AC 316 .

25

3.1.2. CONVERSIA NUMERELOR REALE


Conversia p[r\ii ]ntregi a unui num[r real se face dup[ algoritmii prezenta\i mai sus. Mai jos prezent[m conversia p[r\ii frac\ionare. Partea frac\ionar[ Fq a unui num[r real pozitiv este:
Fq = 0.a 1 a 2 a 3 ... a m ...

Conversia p[r\ii frac\ionare a unui num[r real pozitiv dintr-o baz[ oarecare q ]n baza 10 Ca =i ]n cazul numerelor ]ntregi, conversia dintr-o baz[ q ]n baza 10 a unei frac\ii Fq se face utiliz`nd dezvoltarea sa polinomial[, adic[:
F10 = a 1 q 1 + a 2 q 2 + ... a m q m + ...

Exemple
0.11012 = 1 2 1 + 1 2 2 + 0 2 3 + 1 24 = 0.8125 0.2C16 = 2 10 1 + 12 16 2 = 0.17183

Conversia p[r\ii frac\ionare a unui num[r real pozitiv din baza 10 ]ntr-o baz[ oarecare q Pentru a afla cifrele num[rului F10 ]n baza q se porne=te de la dezvoltarea sa polinomial[, adic[: (2)
F10 = a 1 q 1 + a 2 q 2 + ... + a m q m +...

}nmul\ind rela\ia (2) cu q ob\inem:


q F10 = a 1 + a 2 q 1 +... a m q m +1 +...

=i deci a 1 = [ q F10 ] unde prin [ x ] ]n\elegem partea ] ntreag[ a num[rului x. Cifra a-2 o ob\inem printr-un procedeu analog pornind ] ns[ de la frac\ia:
(1) F10 = a 2 q 1 + ... + a m q m +1 + ...

(1) Deci a 2 = q F10 ,

=i analog unde,

( 2) a 3 = q F10

]
26

( 2) F10 = a 3 q 1 + a 4 q 2 ... + a m q m +2 + ...

=i a=a mai departe.


(i ) = num[r ]ntreg, Dac[ exist[ un num[r i ]ntreg astfel ]nc`t F10

atunci algoritmul se opre=te. }n caz contrar frac\ia este periodic[. Exemple Fie F10 = 0.171875 . Se dore=te conversia ]n baza 16. Aplic[m procedeul explicat mai sus =i avem:
0.171875 16 = 2.75 0.75 16 = 12 a 1 = 2 a 2 = C

Se ob\ine rezultatul 0.2C. Consider[m frac\ia 0.6 =i dorim conversia ei ]n baza 2. Ob\inem succesiv:
0.6 2 = 1.2 0.2 2 = 0.4 0.4 2 = 0.8 0.8 2 = 1.6 0.6 2 = 1.2 a 1 = 1 a 2 = 0 a 3 = 0 a 4 = 1 a 5 = 1

Se observ[ repetarea rezultatelor din patru ]n patru =i deci ob\inem frac\ia periodic[ 0.(1001)2.

3.1.3. PROCEDEE DE CONVERSIE RAPID{ } NTRE BAZELE 8, 16 +I BAZA 2


Conversia binar octal Fiecare din cifrele bazei 8 se reprezint[ ]n baza 2 (pe baza algoritmilor prezenta\i) prin configura\ii binare (triade) conform Tabelului 3.1: octal 0 1 2 3 4 5 6 binar 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0
27

triade

1 1 1 Tabelul 3.1

Conversia rapid[ unui num[r din octal ]n binar se face scriind ]n locul fiec[rei cifre octale triada corespunz[toare. Exemplu Num[rul 67.538 se scrie ]n baza 2 f[c`nd ]nlocuirile: 6 7 5 3 Se ob\ine: cu cu cu cu 1 1 1 0 1 1 0 1 0 1 1 1

67.538 = 110111. 1010112

Conversia rapid[ a unui num[r binar ]n octal se face astfel: pentru partea ]ntreag[ se marcheaz[ triadele ]ncep`nd de la virgul[ spre st`nga pentru partea frac\ionar[ se marcheaz[ triadele ]ncep`nd de la virgul[ spre dreapta fiecare triad[ este ]nlocuit[ cu valoarea corespunz[toare din baza 8 Exemplu 1 101 001.110 111 12 =151, 674 8 Conversia binar-hexazecimal Prezent[m mai jos (Tabelul 3.2) cu valorile cifrelor hexazecimale ]n binar (tetrade) hexa 0 1 2 3 4 5 6 7 8 binar 0000 0001 0010 0011 0100 0101 0110 0111 1000 Tabelul 3.2 hexa 9 A B C D E F Binar 1001 1010 1011 1100 1101 1110 1111

28

}n conversia binar-hexazecimal rolul triadelor este luat de tetrade, pa=ii algoritmului fiind identici cu cei ai conversiei binaroctal. Exemplu 110 1001 . 1101 1112 = 69, DE16 Observa\ie. Procedeele de conversie prezentate, binaroctal =i binar-hexazecimal se fac mecanic, f[r[ calcule =i din acest motiv sunt foarte rapide. O alt[ ra\iune pentru care sunt preferate bazele 8 =i 16 bazei 2 rezult[ din aspectul evident c[ numerele binare, datorit[ lungimii lor sunt mai greu de manipulat. Reguli de calcul ]n baza 2 =i baza 8. }n baza 2 adunarea =i ]nmul\irea se face conform Tabelului 3.3: + 0 1 0 1 0 1 1 10 Tabelul 3.3 La adunare se observ[ c[ apare transportul (bitul 1 din
10 = 1 +1 )

X 0 1

0 0 0

1 0 1

}n baza 8 tabelele pentru adunare =i ]nmul\ire sunt dup[ cum urmeaz[ (Tabelul 3.4):

29

+ 0 1 2 3 4 5 6 7

0 0 1 2 3 4 5 6 7

1 1 2 3 4 5 6 7 1 0

2 2 3 4 5 6 7 1 0 1 1

3 3 4 5 6 7 1 0 1 1 1 2

4 4 5 6 7 1 0 1 1 1 2 1 3

5 5 6 7 1 0 1 1 1 2 1 3 1 4

6 6 7 1 0 1 1 1 2 1 3 1 4 1 5

7 7 1 0 1 1 1 2 1 3 1 4 1 5 1 6

X 0 1 2

0 0 0 0

1 0 1 2 3 4 5 6 7

2 0 2 4 6 1 0 1 2 1 4 1 6

3 0 3 6 1 1 1 4 1 7 2 2 2 5

4 0 4 1 0 1 4 2 0 2 4 3 0 3 4

5 0 5 1 2 1 7 2 4 3 1 3 6 4 3

6 0 6 1 4 2 2 3 0 3 6 4 4 5 2

7 0 7 1 6 2 5 3 4 4 3 5 2 6 1

3 0 4 0 5 0 6 0 7 0

Tabelul 3.4

30

}NTREB{RI +I EXERCI|II
Care este reprezentarea ]n baza 2 =i 16 a numerelor: 3 265, 28, 293, 526? Care este valoarea ]n baza 10 a numerelor binare: 00110101, 01110101, 00010011? Converti\i ]n baza 10 numerele: 0. 11101, 11.010111, 10.0111, A3.267, ABA.BA Converti\i ]n bazele 2, 8, 16 numerele: 0.172, 62.845, 261.38, 1254.2968

31

4. REPREZENTAREA }N CALCULATOR A INFORMA|IEI


4.1. REPREZENTAREA NUMERELOR } NTREGI
Reprezentarea numerelor ]ntregi negative se poate realiza ]n trei moduri: reprezentare ]n modul =i semn (cod direct) reprezentare ]n complement fa\[ de 1 (cod invers) reprezentare ]n cod complement fa\[ de 2 (cod complementar) }n reprezentarea ]n modul =i semn (cod direct), bitul din extremitatea st`ng[ este folosit pentru codificarea semnului. Conven\ia este urm[toarea: dac[ num[rul este pozitiv, bitul de semn trebuie s[ aib[ valoarea 0 dac[ num[rul este negativ, bitul de semn trebuie s[ aib[ valoarea 1 Exemplu. Cifrele 7 =i 7 sunt reprezentate ]n binar pe 8 bi\i sub forma:
7 7 0 0 0 0 0 111 1 0 0 0 0 111

Modul de reprezentare ]n modul =i semn are urm[toarele dezavantaje: exist[ dou[ reprezent[ri pentru zero. De exemplu, ]ntr-o reprezentare pe 8 bi\i avem:
+0 0 0 0 0 0 0 00 0 1 0 0 0 0 00 0

Acest lucru creeaz[ probleme ]n realizarea circuitelor electronice pentru adunare.


32

bi\ii de semn trebuie trata\i separat cand se efectueaz[ opera\ii trebuie definit[ opera\ia de sc[dere a numerelor astfel reprezentate.

Complementul fa\[ de 1 (cod invers) al unui num[r reprezentat ]n binar se ob\ine prin ]nlocuirea fiec[rei cifre binare cu complementul ei fa\[ de 1. Complementul fa\[ de 1 al cifrei 0 este 1, iar al cifrei 1 este 0. Exemplu. Valorile 7 =i 7 sunt reprezentate ]n binar, pe 8 bi\i sub forma:
7 7 0000 0 11 1 1111 1 0 0 0

Opera\ia de sc[dere se reduce la o opera\ie de adunare prin reprezentarea sc[z[torului ]n cod invers. Dac[ rezultatul este negativ atunci el va fi reprezentat tot ]n cod invers. Dac[ apare transport ]n st`nga rangului de semn aceasta se va aduna la rangul cel mai pu\in semnificativ (cel mai din dreapta) al rezultatului. Exemple }ntr-o reprezentare pe 8 bi\i opera\ia 7 6 se efectueaz[ astfel:
7 = 0 0 0 0 0 111 6 = 0 0 0 0 0 11 0 6 = 1 1 1 1 1 0 0 1

]n cod direct ]n cod direct ]n cod invers 0 0 0 0 0 1 1 1 +1 1 1 1 1 0 0 1 10 0 0 0 0 0 0 0


+

(+7) +(-6) 1

0 0 0 0 0 0 0 1 Se observ[ cum transportul din st`nga rangului de semn se adun[ la ultimul bit.

33

}n aceea=i reprezentare pe 8 bi\i opera\ia 6-7 se efectueaz[ astfel: (+6) +(-7) - 1 0 0 0 0 0 1 1 0 +1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0

Se observ[ c[ 1 1 1 1 1 1 1 0 este reprezentarea cifrei 1 ] n cod invers pe o configura\ie de 8 bi\i. Observa\ie. +i ]n acest tip de reprezentare se men\ine dezavantajul reprezent[rii valorii zero sub dou[ forme, ]nt`lnit la codul direct. Exemplu (+5) +(-5) 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1

Se observ[ cele dou[ reprezent[ri pentru zero =i 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

Pentru a ]n\elege reprezentarea ]n cod complementar s[ scriem, de exemplu, opera\ia 8-3 sub forma
8 + (10 3) 10 = 8 + 7 10 = 15 10 = 5

Observ[m c[ rezultatul se poate ob\ine ]n felul urm[tor: se adun[ la desc[zut complementul fa\[ de 10 al sc[z[torului, adic[ se face opera\ia
8 + 7 = 15

rezultatul final (5) se ob\ine ignor`nd transportul care apare (adic[ 1)

34

Acest exemplu sugereaz[ ideea ca un num[r negativ ]n binar s[ fie reprezentat ]n cod complement fa\[ de 2 (cod complementar). Complementul fa\[ de 2 al unui num[r se ob\ine astfel: se ob\ine complementul fa\[ de 1 al num[rului se adun[ valoarea 1 la rangul cel mai semnificativ al num[rului Dac[ apare transport la st`nga rangului de semn acesta se ignor[, iar dac[ rezultatul este negativ aceasta este reprezentat tot ]n cod complementar fa\[ de 2. Observa\ie. Folosind acest cod, zero are o unic[ reprezentare. Exemplu 7 are valoarea 0 0 0 0 0 1 1 1 ]n binar 7 are codul invers 1 1 1 1 1 0 0 0 -7 are codul complementar 1 1 1 1 1 0 0 1 (+7) +(-7) 0 0 0 0 0 0 1 1 1 +1 1 1 1 1 0 0 1 10 0 0 0 0 0 0 0 se neglijeaz[

Se constat[ unicitatea reprezent[rii pentru zero. Calculatoarele moderne utilizeaz[ pentru reprezentarea numerelor ]ntregi negative codul complementar.

4.2. REALE

REPREZENTAREA

NUMERELOR

Reprezentarea numerelor reale se poate face sub dou[ moduri: ]n virgul[ fix[ ]n virgul[ mobil[
35

4.2.1. REPREZENTAREA }N VIRGUL{ FIX{


}n acest tip de reprezentare, virgula care desparte partea ] ntreag[ de partea subunitar[ are pozi\ie fix[. De exemplu, dac[ ] ntr-o reprezentare pe 8 bi\i, virgula este plasat[ dup[ 4 bi\i, num[rul N reprezentat ]n baza 2 are valorile extreme dup[ cum urmeaz[:
0000.0000 N 2 1111.1111

sau, corespunz[tor ]n baza 10,


0.0 N 10 15.9375

}n cazul ]n care primul bit este folosit pentru codificarea semnului, plaja de reprezentare pentru N10 va fi:
8.9375 N 10 7.9375

Se observ[ c[ puterea de reprezentare a numerelor reale ]n cazul folosirii virgulelor fixe este extrem de mic[. Din acest motiv folosirea virgulei fixe, ]n calculatoarele moderne se face numai dup[ ultimul rang, reprezent`ndu-se practic ]n aceast[ manier[ numai numerele ]ntregi.

4.2.2. REPREZENTAREA }N VIRGUL{ MOBIL{


}n reprezentarea ]n virgul[ mobil[ se porne=te de la un rezultat matematic cunoscut =i anume: orice num[r real fi reprezentat ]n mod unic sub forma (numit[ virgul[ mobil[ normalizat[):
= a qb

poate

unde

1 / q | a | < 1, q natural =i q 2, b num[r ]

ntreg,

este baza de reprezentare

a se nume=te mantis[ b se nume=te exponent

36

De exemplu, num[rul =1532,629 ]n baza 10 are reprezentarea ]n virgul[ mobil[ normalizat[:


= 0.1532629 10 4

Aici

are valoarea

4,

q valoarea

10,

iar

mantisa

a = 0.1532629

Condi\ia
1/ q | a | <1

este esen\ial[ pentru asigurarea unicit[\ii reprezent[rii. Pentru


q =10

condi\ia se scrie:
0.1 | a | <1

ceea ce este echivalent cu faptul c[ prima cifr[ dup[ virgul[ s[ fie diferit[ de 0. }n cazul ]n care se renun\[ la aceast[ restric\ie asupra mantisei, exist[ o infinitate de reprezent[ri echivalente. De exemplu, num[rul

de mai sus se poate scrie echivalent:

0.1532629 10 4 , 15.32629 10 2 , 1532629 10 4 , 0.01532629 10 5 etc.

Denumirea de virgul[ mobil[ vine tocmai de la deplasarea virgulei, func\ie de valoarea exponentului. Pentru a aduna dou[ numere scrise sub form[ normalizat[ trebuie ca ele s[ aib[ acela=i exponent. Dac[ exponen\ii sunt diferi\i, num[rul cu exponent mai mic este scris ]n virgul[ mobil[ nenormalizat[ astfel ]nc`t noul exponent ob\inut s[ fie egal cu cel mai mare dintre cei doi exponen\i. } nmul\irea se face ]nmul\ind mantisele =i adun`nd exponen\ii. Din cauza restric\iilor privind lungimea mantisei, aritmetica virgulei mobile difer[ de aritmetica obi=nuit[. Pentru a ilustra acest lucru, s[ presupunem c[ mantisei i se rezerv[ patru cifre zecimale =i s[ consider[m exemplele:
0.2345 10 3 + 0.32 10 2 = 0.2345 10 3 + 0.0320 10 3 = 0.2665 10 3 ; nu se

pierde nici o cifr[


0.3542 10 + 0.5342 10 1 = 0.3542 10 + 0.005342 10 = = 0.3542 10 + 0.0053 10 = 0.3595 10

se pierd ultimile dou[ cifre ale num[rului 0.005342


37

0.9568 10 2 + 0.8526 10 2 = 1.8094 10 2 = 0.1809 10 2 ; se pierde ultima

cifr[ a num[rului 1.8094 datorit[ opera\iei de normalizare.


0.1750 10 2 0.3210 10 5 = 0.056075 10 3 = 0.5607 10 2 ; se pierde

ultima cifr[ 5. }n programele ]n care calculele au un grad ridicat de complexitate, erorile se pot propaga, iar efectul este ob\inerea unui rezultat afectat de erori. Acest efect nedorit se poate contracara prin utilizarea unor metode numerice speciale, care ] nhib[ propagarea erorilor. Reprezentarea ]n virgul[ mobil[ se poate face sub dou[ forme: reprezentarea ]n virgul[ mobil[ simpl[ precizie =i reprezentarea ]n virgul[ mobil[ dubl[ precizie. Reprezentarea ]n virgul[ mobil[ simpl[ precizie se face pe 32 de bi\i =i are structura: 32 31 S 1 Caracteristic[ (c) 24 23

Frac\ie (f)

S reprezint[ semnul num[rului reprezentat, ocup[ un bit (bitul 32), iar valorile sale au semnifica\ia urm[toare:
S = 0 c`nd num[rul reprezentat are semnul negativ
S = 1 c`nd num[rul reprezentat are semnul pozitiv

Caracteristica c ocup[ 8 bi\i (bi\ii 24-31) =i con\ine valoarea exponentului la care se adaug[ valoarea 127, adic[:
c = e + 127

Folosirea acestei formule permite economisirea unui bit care ar fi necesar pentru memorarea semnului exponentului. Zona de 8 bi\i destinat[ caracteristicii este considerat[ totdeauna pozitiv[ =i deci:
0 c 2 8 1 = 255

38

Din acest motiv, valorile minime =i maxime ale exponentului sunt 127 respectiv 128. Cu alte cuvinte: dac[ c 127 atunci e 0 dac[ c < 127 atunci e 0

Frac\ia (f) este reprezentat[ ]n zona bi\ilor 1-23. Alinierea se face la st`nga, iar dac[ este cazul spa\iile libere se completeaz[ cu cifra zero. Reprezentarea ]n virgul[ mobil[ dubl[ precizie se face pe 64 de bi\i =i are structura: 64 63 S 1 Caracteristic[ (c) 53 52

Frac\ie (f)

C`mpurile din structur[ au aceea=i semnifica\ie ca la reprezentarea ]n virgul[ mobil[ simpl[ precizie. Difer[ doar lungimea caracteristicii (11 bi\i) =i a frac\iei (52 bi\i). Rela\ia dintre exponentul e =i caracteristica c este:
c = e + 1023

=i evident c are drept limite de reprezentare


0 c 211 1 = 2047

Valorile minime =i maxime ale exponentului sunt 1023 =i 1024, ceea ce arat[ o putere de reprezentare deosebit de mare ]n cazul folosirii virgulei mobile ]n dubl[ precizie.

4.3.

REPREZENTAREA CARACTERELOR ALFANUMERICE

Calculatoarele prelucreaz[ at`t informa\ie numeric[, c`t =i informa\ie nenumeric[ (texte). Pentru reprezentarea informa\iei numerice se folosesc algoritmii =i conven\iile prezentate.
39

Reprezentarea informa\iei nenumerice (litere mari =i mici, cifre zecimale, semne de punctua\ie, operatori aritmetici =i logici, simboluri pentru controlul comunica\iei =i editare etc.) se face pe baza unor coduri. Aceste coduri asociaz[ fiec[rui semn utilizat o configura\ie binar[. Pentru o mul\ime de m semne sunt necesare 2n configura\ii binare unde n este cel mai mic num[r natural cu proprietatea 2 n m . De exemplu, fiecare element al unei mul\imi de 30 de semne poate fi codificat utiliz`nd una din cele 2 5 = 32 configura\ii binare distincte, cu lungimea de la 5 bi\i. Se observ[ c[ dou[ din cele 32 configura\ii binare posibile nu sunt folosite (sunt cuvinte f[r[ sens). Conven\ia de reprezentare a caracterelor alfanumerice, ]n calculatoarele moderne este codul ASCII (American Standard Code for Information Interchange). O configura\ie binar[ din codul ASCII are 8 bi\i (se pot codifica 2 8 = 256 semne). Plajele de reprezentare sunt urm[toarele: 0 31 32 127 codificarea caracterelor de control. codificarea literelor mari =i mici, a cifrelor zecimale =i a semnelor speciale. 128 255 codificarea semnelor cu utilizare special[. Exist[ =i alte coduri folosite ]n sistemele de calcul. Dintre acestea amintim codul EBCDIC (Extended Binary Coded Decimal Interchange Code).

}NTREB{RI +I EXERCI|II
Afla\i complementul fa\[ de 2 pentru numerele: 27, 35, 56, 5 reprezentate pe c`te un octet fiecare. Care este structura reprezent[rii ]n virgula mobil[ simpl[ precizie?
40

Care este structura reprezent[rii ]n virgula mobil[ dubl[ precizie? Ce se ]n\elege prin virgul[ mobil[ normalizat[? Ce este codul ASCII?

5. SISTEME DE OPERARE NO|IUNI DE BAZ{


Sistemul de operare este o interfa\[ ]ntre componenta hardware =i utilizator, reprezentat prin programele sale, numite =i programe de aplica\ie. Mai precis, un sistem de operare este un ansamblu de programe de control care ghideaz[ un calculator ]n executarea sarcinilor sale =i asist[ programele de aplica\ie =i utilizatorul prin intermediul anumitor func\iuni. Rolul de interfa\[ om - calculator jucat de sistemul de operare este eviden\iat ]n figura de mai jos (Figura 5.1).
Hardwar e Sistem de operare Program de aplica\ie Utilizator

41

Figura 5.1 Un sistem de operare este alc[tuit din dou[ categorii de programe: programe de comand[ =i control programe de servicii

Programele de comand[ =i control coordoneaz[ =i controleaz[ toate func\iile sistemului de operare. Principalele componente ale sistemului de programe de comand[ =i control sunt: supervizorul sistemul de gestiune a intr[rilor/ie=irilor

Sarcinile supervizorului sunt urm[toarele: coordoneaz[ toate componentele sistemului de operare planific[, lanseaz[ =i urm[re=te execu\ia programelor depisteaz[ execu\ie Rutinele de baz[ sau frecvent folosite, ale supervizorului, sunt rezidente ]n memoria intern[. Celelalte sunt tranziente, adic[ sunt stocate ]n memoria auxiliar[ =i ]nc[rcate la nevoie ]n memoria intern[. Sistemul de gestiune al intr[rilor/ie=irilor coordoneaz[ modul de afectare al dispozitivelor periferice programelor, precum =i transferul datelor dintre dispozitivele de intrare/ie=ire =i memorie. Cea de-a doua component[ a unui sistem de operare programe de servicii- cuprinde: translatoare (asambloare, compilatoare, interpretoare) editoare de leg[turi (linkeditoare) ]nc[rc[toare editoare de text programe utilitare
42

=i

trateaz[

evenimentele

care

apar

la

programe bibliotecar programe pentru gestiunea opera\iilor de intrare/ie=ire pentru fi=iere =i baze de date

Deoarece sarcina de baz[ a unui sistem de operare este de a pune la dispozi\ia utilizatorului mijloace prin care s[ poat[ crea, stoca, prelucra, reg[si =i distruge informa\ia , func\iile sale de baz[ urm[resc realizarea acestor obiective. Prezent[m mai jos lista func\iilor de baz[ ale unui sistem de operare: preg[tirea =i lansarea ]n execu\ie a programelor de aplica\ie alocarea resurselor necesare execut[rii programelor planificarea execu\iei lucr[rilor dup[ anumite criterii, cum ar fi: timp de execu\ie, priorit[\i etc. folosirea utilitarelor pentru crearea unor facilit[\i de sortare (ordonare), creare biblioteci de programe, catalogare (depunere programe ]n bibliotec[) etc. coordonarea execu\iei mai multor programe, crearea unor facilit[\i de depanare etc. asistarea execu\iei programelor de aplica\ie folosind posibilit[\ile de comunicare om - calculator. Exist[ 4 tipuri de sisteme de operare: secven\iale cu multiprogramare

43

cu prelucrare multipl[ ]n timp real

}n sistemele de operare secven\iale (batchprocessing) prelucrarea programelor se face serial. Execu\ia programului poate s[ ]nceap[ numai dup[ ce a fost ]nc[rcat complet ]n memorie ]mpreun[ cu datele. Din acest motiv gradul de ocupare al procesorului este mic ]n raport cu timpul total folosit pentru execu\ia programului (pentru c`teva secunde de folosire a unit[\ii centrale se pierd mai mult de 5 minute). Sistemele de operare cu multiprogramare (multiprogramming) au ap[rut tocmai din nevoia de a m[ri gradul de utilizare al procesorului. }n acest scop, ]n memoria partajat[ corespunz[tor pot fi ]nc[rcate mai multe programe. Execu\ia lor se realizeaz[ prin multiplexarea unit[\ii centrale. Dac[, de exemplu, ]n timpul execu\iei programului P1, se solicit[ o opera\ie de intrare/ie=ire, se execut[ o ]ntrerupere I/O (Input/Output), iar procesorul va continua s[ execute instruc\iuni ale unui alt program P2 =i a=a mai departe. Acest tip de execu\ie (programare concurent[) este, evident, mai eficient din punct de vedere al gradului de utilizare al procesorului, iar viteza cu care se execut[ programele creeaz[ percep\ia execu\iei lor simultane. Gestiunea corect[ a memoriei partajate, a accesului programelor la resurse (memorie, procesor, unit[\i de intrare/ie=ire) sunt doar dou[ din problemele majore care apar ]n plus la aceste tipuri de sisteme de operare. Sistemele de prelucrare multipl[ se implementeaz[ pe calculatoarele cu mai multe procesoare (calculatoare paralele). Mai multe procesoare pot executa simultan acela=i program dac[ este descompus ]n mai multe sarcini (multitasking). Sistemele de operare ]n timp real se folosesc pentru conducerea operativ[ a unor dispozitive ai c[ror parametrii se modific[ continuu.
44

Fazele execu\iei unui program Programul poate fi privit ca o unitate de operare. Indiferent ]n ce limbaj este scris, pentru a fi executat, programul trebuie translatat (tradus) ]n cod-ma=in[. Exist[ dou[ tipuri mari de translatoare: compilatoarele =i interpretoarele. Modul de lucru al compilatorului este urm[torul. Se analizeaz[ sintactic programul surs[ =i se furnizeaz[ o list[ de erori. Dup[ eliminarea erorilor de c[tre programator, se ob\ine forma binar translatabil[ (BT) a programului. Formatul BT ] nseamn[ un num[r de module obiect f[r[ leg[tur[ ]ntre ele. Programul care realizeaz[ leg[turile dintre module este editorul de leg[turi (linkeditorul). Se ob\ine forma IMT (Imagine Translatabil[ a Memoriei). Este forma care va fi preluat[ de programul ]nc[rc[tor =i va fi ]nc[rcat[ la o adres[ concret[ de memorie ob\in`ndu-se formatul IMA (Imagine Absolut[ a Memoriei). }n aceast[ form[ programul poate fi executat. Compilatorul limbajelor de asamblare se nume=te asamblor. Fazele execu\iei unui program translatat prin compilare sunt prezentate mai jos (Figura 5.2):

cod surs[

compilat or

forma linkedito r t BT

] forma nc[rc[tor t IMT

forma execu\ie t IMA

Figura 5.2 Modul de lucru al interpretorului este urm[torul. Se analizeaz[ sintactic linie cu linie programul. Dac[ linia de program analizat[ este corect[ din punct de vedere sintactic atunci se =i execut[ ]nainte de a trece la analiza urm[toarei linii. Se observ[ c[ diferen\a esen\ial[ dintre compilator =i interpretor se refer[ la

45

momentul c`nd se face execu\ia ]n raport cu analiza sintactic[ a programului. La compilator execu\ia se face dup[ ce tot programul a fost translatat, la interpretor analiza sintactic[ a unei linii de program este urmat[ obligatoriu de execu\ia ei. Fiecare necesarul de din cele dou[ este mai metode mare de translatare trebuie prezint[ avantaje =i dezavantaje. C`nd se folose=te compilatorul, memorie (memoria s[ con\in[ at`t codul surs[ c`t =i codul obiect), dar modulele obiect rezultate pot fi catalogate ]n biblioteci =i folosite la nevoie. }n cazul interpretorului este nevoie de memorie relativ pu\in[, dar execu\ia programului este mai anevoioas[ deoarece presupune pentru fiecare linie, la fiecare rulare, at`t translatarea c`t =i execu\ia.

}NTREB{RI +I EXERCI|II
Da\i o defini\ie scurt[ a sistemului de operare Care sunt cele dou[ categorii de programe care alc[tuiesc un sistem de operare? Care sunt sarcinile supervizorului? Care este rolul sistemului de gestiune al intr[rilor/ie=irilor? Enumera\i componentele programelor de servicii Enumera\i func\iile de baz[ ale unui sistem de operare Enumera\i =i caracteriza\i tipurile de sisteme de operare Care sunt fazele de execu\ie ale unui program?

46

Care sunt deosebirile =i asem[n[rile dintre compilatoare =i interpretoare?

6. ETAPELE REZOLV{RII UNEI PROBLEME CU CALCULATORUL

Activitatea de rezolvare a problemelor cu calculatorul se bazeaz[ pe calit[\i cum ar fi: talent, creativitate, experien\[. Evident, ]n condi\iile cre=terii complexit[\ii problemelor de rezolvat, ]n scopul m[ririi eficien\ei acestei activit[\i, calit[\ile enumerate devin cu at`t mai necesare. Totu=i, acest lucru nu este suficient. }n timp, via\a a impus o nou[ abordare a activit[\ii
47

de rezolvare a problemelor cu calculatorul. Dorin\a =i nevoia de a ob\ine eficien\[ ]n acest domeniu au condus la conturarea unor etape bine definite, cu metode =i instrumente de lucru specifice. Astfel, o activitate care ]n trecut era v[zut[ mai ales ca un me=te=ug sau o art[, la ora actual[ este abordat[ tot mai des =i sub aspectul ei de activitate sistematic[. O list[ a etapelor pe care programatorul le parcurge ]n mod uzual ]n rezolvarea problemelor poate fi privit[ ca un important ajutor ]n ob\inerea unor rezultate bune. Evident, etapele pe care le enumer[m mai jos trebuie privite mai degrab[ ca un ghid, ]n sensul c[ parcurgerea lor con=tiincioas[ nu va conduce ]n mod obligatoriu la rezultatul scontat. A ignora aceste etape este ]ns[ la fel de d[un[tor cu a exagera importan\a lor. }n general, se accept[ ca fiind necesare urm[toarele faze ]n rezolvarea unei probleme cu calculatorul: 1. analiza problemei 2. proiectarea algoritmului de rezolvare 3. descrierea algoritmului 4. codificarea algoritmului (ob\inerea programului) 5. testarea programului 6. execu\ia programului, ob\inerea rezultatelor =i interpretarea lor 7. ]ntre\inerea programului }n prima etap[, etapa de analiz[ a problemei se are ]n vedere stabilirea modelului logico-matematic al problemei. Se identific[ cu claritate func\ia (sau func\iile) problemei, se stabilesc datele de ie=ire =i datele de intrare. Aceast[ etap[ are ca scop ] n\elegerea c`t mai exact[ a problemei pe care dorim s[ o rezolv[m. Etapa de proiectare a algoritmului are ca scop stabilirea algoritmului de rezolvare a problemei. Este etapa ]n care se precizeaz[ opera\iile pe care trebuie s[ le execute un calculator,
48

pentru a rezolva problema. }n cazul problemelor complexe este recomandabil[ descompunerea problemei ]n subprobleme care pot fi rezolvate mai u=or. Aceast[ tehnic[, numit[ top-down (de sus ]n jos) va avea ca efect final ob\inerea unui sistem de module conectate ]ntre ele dup[ logica impus[ de rezolvarea problemei. Practic, ]ntr-o prim[ faz[ se ob\ine o schi\[ general[ de rezolvare care se rafineaz[ succesiv p`n[ la ob\inerea comenzilor necesare execu\iei pe calculator. }mp[r\irea problemei ]n subprobleme prezint[ avantajul lucrului eficient ]n echip[ - subproblemele pot fi rezolvate simultan de c[tre membrii echipei. De asemenea, ob\inerea modulelor program prin implementarea fiec[rei subprobleme u=ureaz[ munca de depanare (depistarea erorilor) =i de ]ntre\inere a programului. Pe m[sur[ ce cre=te complexitatea problemelor de rezolvat, cre=te =i dificultatea de a descrie algoritmii c`t mai exact, f[r[ ambiguit[\i, utiliz`nd un limbaj natural. Din acest motiv s-au imaginat diferite forme de descriere (diagrama de structur[, scheme logice, pseudocod etc.) care, pe de o parte permit reprezentarea corect[ a algoritmilor ]ntr-o manier[ prietenoas[, natural[, iar pe de alt[ parte faciliteaz[ codificarea cu u=urin\[ ] ntr-un limbaj de programare. De=i foarte multe limbaje au caracter universal, totu=i anumite tr[s[turi ale problemei de rezolvat pot recomanda un anumit tip de limbaj. Astfel, pentru o problem[ ]n care predomin[ prelucr[rile numerice se va alege un limbaj puternic ] n acest sens, cum ar fi Fortran, Basic, Pascal etc. Pentru probleme ]n care opera\iile aritmetice au complexitate redus[, dar predomin[ prelucr[rile nenumerice (sortare, c[utare, reuniune de fi=iere etc.) se va alege un limbaj orientat pe aceste probleme (Cobol, dBase, FoxPro etc.). Dac[ problema necesit[ prelucr[ri ale unor baze de cuno=tin\e se pot folosi limbaje speciale ca Prolog, Lisp, Ada etc.
49

}n etapa de codificare, o importan\[ deosebit[ trebuie acordat[ stilului de programare. }n general se consider[ c[, stilul de programare este bun dac[ ]ndepline=te condi\ii cum ar fi: programul este ]nso\it de documenta\ia de analiz[ =i proiectare care trebuie s[ con\in[ elementele minimale descrierea func\iilor programului (ce face programul), diagrama de structur[ (schi\a general[ a programului) tabele de descriere a variabilelor de intrare =i ie=ire etc. exist[ procedee de validare a datelor. Se pot utiliza diverse procedee (sume de control, coduri autocorectoare, intervale de apartenen\[, scrierea cu ecou, verificarea unor rela\ii existente ]ntre variabilele de intrare etc.) programul este lizibil. Acest lucru se poate realiza prin folosirea scrierii indentate (]n fier[str[u) a liniilor de program, prin alegerea unor nume sugestive pentru identificatori, prin folosirea (neabuziv[) a comentariilor etc. Etapa de testare este etapa ]n care se elimin[ erorile programului. Erorile pot fi de natur[ sintactic[ sau de natur[ logic[. Eliminarea erorilor de natur[ sintactic[ se face ]n urma listelor de erori afi=ate de compilatoare. Stabilirea corectitudinii din punct de vedere logic a programului se poate face prin demonstra\ie matematic[ sau prin testarea programului folosind date de test. Deoarece demonstrarea matematic[ a corectitudinii este dificil[ chiar =i pentru programe mici, metoda uzual[ este metoda datelor de test. Datele de test trebuie alese cu grij[, astfel ]nc`t s[ se poat[ valida toate ramurile programului. Dac[ sunt erori se ] ncearc[ localizarea acestora folosind diverse metode.

50

O metod[ rapid[ const[ ]n afi=area unor mesaje din loc ]n loc, prin analiza c[rora se poate stabili zona unde se afl[ eroarea. Mediile moderne de programare, care asist[ programatorul ]n punerea la punct a programului ofer[ =i alte facilit[\i de depanare, cum ar fi: ferestre de observare ]n timpul execu\iei a unor variabile =i expresii, execu\ia pas cu pas a liniilor de program, puncte de oprire a execu\iei etc. O dat[ ]ndep[rtate erorile de sintax[ =i de logic[, programul poate fi executat. Rezultatele ob\inute sunt analizate, =i ]n urma interpret[rii lor se iau deciziile corespunz[toare. }n mod normal programele sunt proiectate spre a fi rulate (executate) la diverse intervale de timp, pe seturi de date diferite. Aplica\ia informatic[ ob\inut[ din unul sau mai multe programe trebuie privit[ =i ca un produs care sufer[ ]n timp un proces de uzur[ moral[. Activitatea de ]ntre\inere a programului const[ ]n modific[ri ale programelor ori de c`te ori este nevoie, f[cute tocmai ]n scopul de a men\ine aplica\ia la zi. Depanarea =i ]ntre\inerea programelor sunt dou[ din activit[\ile care pun ]n lumin[, ]n cel mai ]nalt grad, importan\a unui stil bun de programare. Este evident c[ aceste activit[\i vor fi ]ngreunate dac[ programele nu sunt suficient documentate, dac[ lipsesc comentariile, scrierea este neindentat[, iar logica programului se realizeaz[ prin folosirea abuziv[ a instruc\iunilor de salt.

}NTREB{RI +I EXERCI|II
Enumera\i etapele de rezolvare ale unei probleme cu calculatorul

51

Descrie\i pe scurt fiecare etap[ de rezolvare a unei probleme cu calculatorul Descrie\i c`teva tr[s[turi ale unui bun stil de programare

52

7. TIPURI DE DATE +I OPERA|II ELEMENTARE

}n acest paragraf vom prezenta, ]ntr-o manier[ general[, opera\iile elementare =i obiectele pe care le ]nt`lnim de obicei ]ntr-un limbaj de programare. Datele sunt obiectele folosite ]ntr-un limbaj de programare =i pot fi de dou[ tipuri: date elementare =i date structurate. Datele elementare sunt recunoscute de calculator =i se refer[, ]n majoritatea cazurilor la urm[toarele tipuri de date: date numerice date logice date alfanumerice

Datele numerice pot fi ]ntregi sau reale. Datele ]ntregi pot fii reprezentate ]n sistemul zecimal (-64, 9569, + 311 etc.) sau ]n alte siteme (de exemplu ]n sistemul hexazecimal: AD4, 6E3C etc.). Datele reale se reprezint[ ]n multe limbaje de programare sub dou[ forme: ]n nota\ie uzual[ (nota\ie cu punct), unde virgula e reprezentat[ printr-un punct (-69.43, 812.115, + 0.6395 etc.) ]n nota\ie =tiin\ific[ (exponen\ial[). }n acest caz succesiunile E b sau e b au semnifica\ia de 10 b . De exemplu, 0.52 E + 02,
0.52 10 2 , 3.25 10 7 .
3.25e 07

]nseamn[

Opera\iile care se fac ]n mod obi=nuit sunt opera\ii de adunare, sc[dere, ]nmul\ire, ]mp[r\ire, ridicare la putere.

45

Datele logice se refer[ la valorile logice (numite =i booleene) adev[rat =i fals. Opera\iile permise sunt cele cunoscute: conjunc\ie (+I), disjunc\ia (SAU), nega\ia (NU), SAU exclusiv etc. dac[ not[m cu 1 valoarea adevarat =i cu 0 valoarea fals, rezultatele acestor opera\ii sunt dup[ cum urmeaz[ (Tabelul 7.1): a 0 0 1 1 b 0 1 0 1 a SI b 0 0 0 1 a SAU b 0 1 1 1 Tabelul 7.1 Datele alfanumerice se refer[ la caractere =i =iruri de caractere. Asupra acestor tipuri de date sunt permise opera\ii cum ar fi compara\ia, copierea, concatenarea (alipirea) etc. De exemplu, prin concatenarea =irurilor Ploie=ti =i Vest rezult[ =irul Ploie=ti - Vest. Se observ[ c[ un tip de date este caracterizat printr-o mul\ime de valori =i o mul\ime de opera\ii care se aplic[ acelor valori. }n cadrul unui algoritm, datele se prezint[ sub forma variabilelor =i a constantelor. Constantele nu-=i modific[ valoarea ]n timpul execu\iei algoritmului. De exemplu, 6.29 este o constant[ real[. O variabil[ ]=i poate modifica valoarea pe parcursul execu\iei algoritmului. Numele unei variabile se asociaz[ cu adresa unei celule, iar valoarea ei la un moment dat, cu con\inutul acesteia. Variabilele pot fi clasificate ]n variabile statice =i dinamice. }n cazul variabilele statice numelui unei variabile i se asociaz[ adresa unei loca\ii de memorie pe toat[ durata execu\iei algoritmului. NU a 1 1 0 0 a SAU exclusiv b 0 1 1 0

46

Valoarea variabilei este dat[ de con\inutul acestei loca\ii la un moment dat. De exemplu, atribuirea: x3 se poate schi\a grafic sub forma: x 3 Prin atribuirea
x7
7

con\inutul loca\iei asociate lui x se schimb[ ]n 7, conform schi\ei: x 3

Unei variabile dinamice i se poate asocia pe parcursul execu\iei unui algoritm diferite adrese. O dat[ fixat[ adresa celulei asociate se poate prelucra con\inutul (informa\ia propriu-zis[) din celul[. ]n cazul static asocierea numevariabil[ adres[ celul[ este fix[ (static[), conform schi\ei s
leg[tur[ static[ 3

]n cazul dinamic, asocierea nume-variabil[ adres[celule este variabil[ (dinamic[), dup[ cum sugereaz[ schema urm[toare:
d

Datele avute ]n vedere p`n[ acum sunt date elementare, indivizibile ]n raport cu opera\iile pe care le prelucreaz[. Combina\ii valide sintactic de date (operanzi) =i opera\ii (operatori) formeaz[ expresii.

47

}NTREB{RI +I EXERCI|II
Da\i exemple de date ]ntregi, reale, alfanumerice Ce se ]n\elege prin variabile statice? Ce se ]n\elege prin variabile dinamice?

8. STRUCTURI DE DATE

Abordarea datelor sub aspectul lor elementar este ]n foarte multe situa\ii, nesatisf[c[toare. De foarte multe ori, este preferabil sau chiar imperios necesar ca datele s[ fie privite drept componente ale unor structuri de date mai complexe. Structurile de date folosite frecvent ]n algoritmi sunt: tabloul, ]nregistrarea, lista linear[ simplu ]nl[n\uit[, lista linear[ dublu ]nl[n\uit[, stiva, coada, arborele, graful. Tabloul reprezint[ o colec\ie omogen[ de date (de acela=i tip, numit tip de baz[). Tablourile modeleaz[ vectori, matrici, masive multidimensionale. Accesul la elementele unui tablou se face folosind indicii. De exemplu, componentele ha=urate ale vectorului a =i ale matricii b din Figura 8.1 se desemneaz[ prin a[3] =i b[1][2] . Numerele 3, 1 =i 2 dintre
48

parantezele p[trate sunt indici. Indicele 3 desemneaz[ a 3-a component[ din =irul de componente a[1] , a[2] , a[3] , a[4] , iar indicii 1 =i 2 se refer[ la elementul aflat pe linia 1 =i coloana 2 din matricea b de dimensiune 3 4

b Figura 8.1 Variabilele a[i ] 1 i 4 =i b[i ] [ j ] 1 i 3 , 1 j 4 se

numesc variabile indexate. Nota\ia indicelui =i implicit folosirea tablourilor are o importan\[ cov`r=itoare ]n prelucrarea datelor. Pentru a ilustra acest lucru, s[ presupunem c[, vrem s[ calcul[m suma a n numere reale cu n cunoscut. Dac[ n = 4 atunci, reprezent`nd cele 4 numere prin a, b, c =i d, vom avea algoritmul: Cite=te a, b, c, d
s a+b+c+ d

Scrie s Stop Dac[ n este mare (s[ zicem 100) merg`nd pe aceea=i idee, ar trebui s[ avem 100 de variabile =i s[ le prelucr[m conform algoritmului de mai sus. Evident, acest lucru este de neimaginat. Solu\ia const[ ]n a folosi n = 100 variabile indexate, xi ,
i = 1, n

=i de a calcula suma

x
i =1

folosind o

structur[ iterativ[ de control. }nregistr[rile modeleaz[ colec\ii neomogene de date. De exemplu, se presupunem c[ pentru fiecare persoan[ a unui colectiv ne intereseaz[ datele: nume (tip alfanumeric), v`rst[ (tip ]ntreg), salariu (tip real), sex (tip boolean). Pentru o persoan[ datele de tip diferit pot fi reunite ]ntr-o ]nregistrare ca ]n variabila ]nregistare info (Figura 8.2):

49

nume info Ionescu

v`rst[ 52 Figura 8.2

salariu 7 633 201

sex 1

nume, v`rst[, salariu, sex se numesc c`mpuri. Referirea la un c`mp se face folosind construc\ia nume_variabila.nume_camp De exemplu, info.nume se refer[ la =irul Ionescu, nume.varsta la valoarea 52 etc. }n mod natural listele de obiecte se pot memora ]n tablouri unidimensionale (vectori). De exemplu, lista de persoane Ionescu, Popescu, Georgescu, Vasilescu poate fi memorat[ ]n vectorul persoane (Figura 8.3): persoan e Ionesc u Popesc u Georgesc u Figura 8.3 Folosind structura tablou, dou[ elemente vecine din list[ sunt memorate la adrese vecine (de exemplu, vecinii Popescu =i Georgescu sun memorate la adresele vecine 2 =i 3). Aceast[ variant[ de implementare a listelor (numit[ static[) are avantajul unei parcurgeri rapide ]n ambele sensuri, ]n orice punct ne-am afla. Dificultatea apare la eliminarea sau ad[ugarea unui element nou ]n list[. Presupun`nd c[ vectorul ]n care se memoreaz[ lista are o dimensiune suficient[, introducerea persoanei Marinescu ]n list[ pe pozi\ia a 2-a implic[ deplasarea sub=irului Popescu, Georgescu, Vasilescu cu o pozi\ia spre dreapta conform schi\ei (Figura 8.4): Vasiles cu

Marinesc u
50

Ionescu

Popescu

Georges cu

Vasilesc u

Figura 8.4 Deplas[ri, dar de data asta, spre st`nga au loc =i atunci c`nd se elimin[ elemente din list[. De exemplu, dac[ din lista ini\ial[ se dore=te scoaterea persoanei Popescu acest lucru implic[ deplas[ri spre st`nga cu o pozi\ie (Figura 8.5).

Ionescu

Popescu

Georges

Vasilesc u

Figura 8.5 Aceste deplas[ri consum[ timp calculator a c[rui m[rime depinde de pozi\ia de inser\ie sau de =tergere. O solu\ie de implementare care rezolv[ elegant aceste probleme o reprezint[ listele ]nl[n\uite. }ntr-o list[ ] nl[n\uit[ elementele vecine din list[ nu sunt memorate obligatoriu la adrese vecine. Lista de mai sus poate fi implementat[ dinamic sub forma unei liste simplu ]nl[n\uite, ca ]n Figura 8.6:

Ionesc u

Popesc u

Georges cu Figura 8.6

Vasilesc u

Orice element al listei (nod) este alc[tuit din dou[ c`mpuri. Un c`mp unde se memoreaz[ informa\ia propriuzis[ (Ionescu, Popescu, Georgescu, Vasilescu etc.) =i un c`mp de leg[tur[, unde se memoreaz[ adresa urm[torului element din list[. Evident, consumul de memorie este mai mare dec`t ]n cazul listelor lineare implementate prin vectori (static), ]
51

ns[ avantajul apare la efectuarea opera\iilor de inser\ie =i =tergere. Astfel, inser\ia ]n list[ a persoanei Marinescu se realizeaz[, conform schi\ei de mai jos (Figura 8.7), foarte simplu, actualiz`nd corespunz[tor leg[turile. Ionesc u Popesc u

Georges cu

Vasilesc u

Marinesc u

Figura 8.7 +tergerea persoanei Popescu din list[ ini\ial[ se face memor`nd ]n c`mpul de adres[ al primului nod (Ionescu) adresa nodului Georgescu. }n felul acesta nodul Popescu r[m`ne izolat. Schi\a urm[toare ilustreaz[ acest lucru (Figura 8.8). Ionesc u Popesc u Georges cu Vasilesc u

Figura 8.8 Analiz`nd lista simplu ]nl[n\uit[ se observ[ c[ vizitarea vecinului drept se face cu u=urin\[, datorit[ sensului st`ngadreapta ]n care s-au f[cut ]nl[n\uirile. Realizarea leg[turilor ]n ambele sensuri (st`nga-dreapta =i dreapta-st`nga) presupune ca fiecare nod s[ aib[ dou[ c`mpuri de leg[tur[. Ceea ce se ob\ine este lista dublu ]nl[n\uit[, ilustrat[ mai jos (Figura 8.9):
Iones cu Popescu Georges cu Vasiles cu

Figura 8.9

52

Cu pre\ul introducerii unui c`mp de leg[tur[ pentru fiecare c`mp se ob\ine astfel o list[ dinamic[ cu facilit[\i de deplasare rapid[ ]n ambele sensuri. }n informatic[, deosebit de utile sunt dou[ tipuri particulare de liste: stiva =i coada. Stiva este lista liniar[ ]n care ad[ugarea =i extragerea unui element se fac pe la acela=i cap al listei. Se spune c[ opera\iile ]n stiv[ se fac dup[ disciplina LIFO (Last In First Out Ultimul Intrat Primul Ie=it). Pentru a face ad[ug[ri sau extrageri este nevoie s[ se =tie pozi\ia ultimului element din stiv[. Aceasta este memorat[ ]ntr-o variabil[ numit[ v`rf. }n figura de mai jos (Figura 8.10) se prezint[ schematic cele dou[ implement[ri static[ =i dinamic[.

v`rf

X X X

v`rf

Figura 8.10 Coada este lista liniar[ ]n care ad[ugarea elementelor se face pe la un cap, iar extragerea elementelor pe la cel[lalt cap. Disciplina specific[ unei cozi este FIFO (First In First Out Primul Intrat Primul Ie=it). Mai jos (Figura 8.11), ar[t[m schi\a celor dou[ modalit[\i de implementare: static[ =i dinamic[. X X X prim ultim prim
53

ultim

Figura 8.11 Variabilele prim =i ultim arat[ locul de unde se extrag, respectiv unde se adaug[ elemente. Deoarece foarte multe probleme se refer[ la obiecte aflate ]ntr-o rela\ie de ordin ierarhic (piramidal), structura adecvat[ pentru descrierea acestor rela\ii este arborele. Ca exemple de structuri arborescente amintim: structura unei armate, structura unei c[r\i, structura unei firme, organizarea teritorial[ a unei \[ri etc. Schi\a de mai jos (Figura 8.12) arat[ organizarea studen\ilor p`n[ la nivel de grupe ]n cadrul profilului matematic[ al Facult[\ii de Litere =i +tiin\e.

profilul matematic[-informatic[

An I

An 2

An 3

An 4

Grupa 1

Grupa 2

Grupa 3

Grupa 4

Grupa 5

Grupa 6

Grupa 7

Grupa 8

Figura 8.12 Elementele arborelui se numesc noduri. O pozi\ie aparte o ocup[ nodul etichetat profilul matematic[-informatic[ care se nume=te r[d[cin[. P[str`nd analogia cu un arbore ]ntors, nodurile Grupa1, Grupa2 etc. se numesc frunze (sau noduri terminale). Implementarea arborilor se poate face de obicei dinamic, ]ns[ exist[ =i variante statice. Pentru descrierea celor mai complexe rela\ii dintre obiecte se utilizeaz[ graful. Un graf foarte cunoscut este re\eaua de c[i ferate descris[ ]n mersul trenurilor. }n acest caz,

54

obiectele (nodurile) sunt sta\iile de cale ferat[, iar muchiile grafului sunt reprezent[rile c[ilor ferate care leag[ sta\iile. Alte exemple: re\eaua de drumuri dintr-un ora= (nodurile sunt intersec\iile), re\eaua de calculatoare din universitate etc. C`nd rela\iile dintre obiecte sunt nesimetrice modelarea se face cu ajutorul digrafului (directed graph graf direc\ionat). Mai jos (Figura 8.13), prezent[m digraful datoriilor dintre patru persoane: Ion, Gheorghe, Mihai, Andrei. O s[geat[ de la nodul a la nodul b se traduce prin a este dator lui b.

Ion 1 Mihai 3

Gheorg he 2 Andrei 4

Figura 8.13 Se observ[ c[ Andrei nu are datorii, la nici-un membru al listei =i, ]n acela=i timp, nici unul dintre ace=tia nu-i este dator. Implementarea se poate face at`t static c`t =i dinamic. }n implementarea static[ se folose=te matricea de adiacen\ [. Dac[ vom considera nodurile ca fiind numerotate 1, 2, , n matricea de adiacen\[ A are semnifica\ia:

0 ]ntre i =i j exist[ arc dac[ A[ i, j ] = 1


55

dac[ ]ntre i =i j nu exist[ arc

De exemplu, consider`nd codific[rile Ion 1, Gheorghe

2, Mihai 3, Andrei 4 matricea de adiacen\


[ ata=at[ este: 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0

A=

Implementarea dinamic[ ia forma listelor de adiacen\[. Pentru exemplul considerat, lista de adiacen\[ este urm[toarea:

Ion Gheorg he Mihai Andrei

Gheorghe Mihai Gheoghe


Mihai

}NTREB{RI +I EXERCI|II

Caracteriza\i tipul de date tablou. Exemplifica\i Da\i c`teva exemple de ]nregistr[ri Enumera\i avantajele =i dezavantajele implement[rilor statice =i dinamice ale listelor Caracteriza\i stiva. Da\i c`teva exemple. Caracteriza\i coada. Da\i c`teva exemple. Caracteriza\i arborele. Da\i c`teva exemple. Caracteriza\i graful. Da\i c`teva exemple.
56

9. ALGORITMI CARACTERISTICI +I DESCRIERE


De=i studiul algortimilor reprezint[ punctul central al =tiin\ei calculatoarelor, totu=i, no\iunea de algoritm nu are ] nc[ o defini\ie riguroas[. Intuitiv, un algoritm const[ dintr-o mul\ime ordonat[ de pa=i executabili, descri=i f[r[ ambiguitate, care definesc un proces finit. Cu ajutorul unui algoritm, un set de date de intrare, numit domeniul de defini\ie al algoritmului este transformat ]ntr-un set de date de ie=ire, numit domeniul de valori al algoritmului. Un algoritm se caracterizeaz[ prin:

57

generalitate furnizeaz[ rezultate pentru o mul\ime de date de intrare; finititudine procesul trebuie s[ fie finit pentru a furniza un rezultat concret; neambiguitate fiecare pas se execut[ dup[ reguli bine precizate.

Cerin\a ca pa=ii algoritmului s[ fie executabili se refer[ la capacitatea lor efectiv[ de a produce rezultate. De exemplu, comanda sorteaz[ ]n ordine cresc[toare toate numerele ] ntregi pozitive nu poate fi pasul unui algoritm, deoarece, a sorta toate numerele ]ntregi pozitive (o infinitate) este o ac\iune imposibil[. O posibilitate de a descrie un algoritm este limbajul natural. Datorit[ polisemiei unor termeni, limbajul natural nu este potrivit pentru reprezentarea algoritmilor. De foarte multe ori, ambiguitatea prezent[ ]ntr-un algoritm nu \ine de algoritmul ]nsu=i ci de modul s[u de reprezentare. Gradul de detaliere ]n reprezentarea unui algoritm poate s[ aib[ drept obiectiv nivelul opera\iilor executabile de c[tre un calculator. Descrierea rezultat[ este stufoas[ =i puternic ] ngreunat[ de omniprezen\a structurilor de salt condi\ionat =i necondi\ionat. Teorema de structur[ elaborat[ de Bhm =i Jacopini furnizeaz[ justificarea conceptului de programare structurat[ implementat ]n limbajele de programare moderne. Conform acestei teoreme, orice algoritm cu un singur punct de ]nceput =i un singur punct de terminare a execu\iei poate fi reprezentat ca o combina\ie de trei structuri algoritmice fundamentale: secven\a de dou[ sau mai multe opera\ii decizia alegerea unei opera\ii din dou[ alternative posibile itera\ia cu test ini\ial repetarea unei secven\e c`t timp este adev[rat[ o anumit[ condi\ie
58

Se observ[ c[ cele trei structuri de control corespund unor procese naturale ale ra\ionamentului uman: enumerare, decizie, repeti\ie. Acest lucru explic[ =i u=urin\a =i naturale\ea cu care sunt descri=i algoritmii folosind structurile de mai sus. De cele mai multe ori descrierea acestor structuri nu se face direct ]ntr-un limbaj de programare, ci se utilizeaz[ anumite conven\ii de reprezentare. Foarte des ]nt`lnite ]n practic[ sunt conven\iile de reprezentare sub form[ de schem[ logic[ =i pseudocod. Aceste conven\ii au avantajul lipsei de formalism (sunt mai intuitive) al limbajelor de programare =i totodat[ permit reprezentarea cu claritate a structurilor algoritmice fundamentale. Reprezentarea sub forma schemei logice folose=te simboluri grafice cu ]n\eles prestabilit. Cele mai uzuale simboluri sunt (Figura 9.1): Bloc terminal Bloc intrare ie=ire Bloc de calcul

Bloc de decizie

Bloc conector S[geat[ Figura 9.1 Pentru exemplificare s[ consider[m algoritmul de rezolvare al ecua\iei de gradul I. Fie deci ecua\ia
ax + b = 0

59

Variabilele de intrare sunt a =i b, iar variabila de ie=ire este x. }n limbaj natural, discu\ia ecua\iei de gradul I se poate face astfel: dac[ a 0 atunci ecua\ia este determinat[ =i are r[d[cina x = b / a dac[ a = 0 atunci analiz[m cazurile: dac[ b = 0 ecua\ia devine 0 x + 0 = 0 adic[ ecua\ia e nedeterminat[ dac[ b 0 ecua\ia devine 0 x + b = 0 adic[ ecua\ia este imposibil[ Se observ[ c[, de=i exemplul este destul de simplu, descrierea ]n limbaj natural este relativ greoaie. O descriere simpl[ =i clar[ este realizat[ mai jos (Figura 9.2) cu ajutorul Start schemei logice. Cite=t e a, b

Nu

Da

x b / a
Scrie x

Da

Nu

Scrie Ecua\ie nedeterminat[

Scrie Ecua\ie imposibil[

60

Stop

Figura 9.2 }n pseudocod, ]n locul simbolurilor grafice se utilizeaz[ cuvinte cu ]n\eles prestabilit (cuvinte cheie). Astfel, descrierea ecua\iei de gradul I ia forma: Cite=te a, b Dac[ a 0 Atunci x -b/a Scrie x Altfel Dac[ b = 0 Atunci Scrie Ecua\ie nedeterminat[ Altfel Scrie Ecua\ie imposibil[

Stop Se observ[ c[ modul de subordonare logic[ este sugerat cu ajutorul unor reguli de aliniere simple. Opera\ii elementare cum sunt citirea, scrierea, atribuirea, sf`r=it execu\ie, se pot reprezenta sub forma: Cite=te lista de variabile Scrie lista de expresii v expresie Stop Modul de reprezentare al celorlalte opera\ii complexe (decizia, itera\ia) va fi descris ]n paragrafele 9.2 =i 9.3.

9.1. SECVEN|A

61

O secven\[ este o suit[ de opera\ii care se execut[ ]n ordinea ]n care sunt scrise. De exemplu, descrierea algoritmului pentru calculul expresiei e = x + 1 este o secven\[ pe care o prezent[m mai jos: Cite=te x ex+1 Scrie e Stop

9.2. DECIZIA
Decizia are urm[toarele reprezent[ri ]n pseudocod =i schem[ logic[ (Figura 9.3):

Fals Dac[ conditie Atunci secventa1 Altfel secventa2


secventa2

Conditie

Adev[rat

secventa1

Start 9.3 Figura

Execu\ia structurii de decizie se face astfel: Cite=te se evalueaz[ conditie


a, b

dac[ conditie este adev[rat[ secventa1, ] Fals se execut[ Adevrat n caz contrar se execut[ secventa2

max b

a> b
Scrie max Stop

max a

Exemplu. Calculul maximului dintre dou[ numere a =i b

62

igura 9.3

Citeste a, b Daca a > b Atunci max a Astfel


max b

Scrie max Stop

9.3. ITERA|IA CU TEST INI|IAL


Itera\ia cu test final are urm[toarele reprezent[ri ]n pseudocod =i schem[ logic[ (Figura 9.4)

C`t timp conditie Execut[ secventa

conditie

Fals

Adevarat secventa

Figura 9.4 Efectul acestei structuri este urm[torul: se execut[ secventa c`t timp conditie este adev[rat[. Observa\ii. dac[ din start condi\ie ia valoarea Fals, secven\a nu se execut[ niciodat[ secventa trebuie s[ con\in[ enun\uri care s[ conduc[ la modificarea valorii de adevar a condi\iei dup[ un num[r finit de pa=i (condi\ia trebuie sa ia valoarea Fals la un moment dat pentru a se ie=i din ciclu, ]n caz contrar se produce o bucl[ etern[ sau un ciclu infinit).

63

Prezent[m mai jos un exemplu care con\ine o bucl[ etern[.


x7

C`t timp x > 6 Execut[ yx Stop Se observ[ c[ secven\a y x nu va modifica niciodat[ valoarea variabilei x. }n consecin\[, x va avea ] ntotdeauna valoarea 7, condi\ia x > 7 va fi ]ntotdeauna adev[rat[ =i, deci, secven\a y x se va executa de o infinitate de ori. Exemplu. Calculul sumei elementelor unui =ir. Sf`r=itul =irului este marcat de cifra zero.

Start

Cite=te x

s0

Cite=te x C`t timp x 0 Execut[

s s+ x
Cite=te x Scrie s Stop

x0
Da

Nu

Scrie x

Stop

s =s+x
Citeste x

9.4. ALTE STRUCTURI ALGORITMICE IMPLEMENTATE }N PROGRAME


64

9.4.1. FORME ECHIVALENTE PENTRU STRUCTURILE DE DECIZIE +I DE ITERA|IE CU TEST INI|IAL

Pentru a u=ura implementarea =i a spori claritatea programelor, majoritatea limbajelor de programare utilizeaz[ =i alte structuri algoritmice, echivalente logic cu structurile algoritmice fundamentale prezentate. Astfel, ]n cazul deciziei amintim decizia cu ramur[ vid[ =i decizia generalizat[ (sau selec\ia).

65

Decizia cu ramur[ vid[ are forma general[ (Figura 9.5):

Dac[ conditie Atunci secventa

Fals

conditie

Adevarat

secventa

Figura 9.5 Efectul deciziei cu ramur[ vid[ const[ ]n execu\ia condi\ionat[ a secven\ei: secventa se execut[ numai dac[ conditie este adev[rat[. Exemplu. Calculul maximului dintre dou[ numere a =i b utiliz`nd decizia cu ramur[ vid[.

Start Cite=te a, b

Cite=te a,b

max a
Nu

max a
Dac[ a < b Atunci
max b

a<b

Da

max b

Scrie max Stop


Scrie max

Stop

66

Decizia generalizat[ permite alegerea (selec\ia) unei alternative din mai multe posibile. Forma general[ a selec\iei este urm[toarea:

secventa1

secventan+1 Altf el expresie

Alege expresie Dintre C1: secventa1 C2: secventa2 . . . . . . Cn: secventan Altfel secventan+1

C1

C2

secventa2

C3 secventa3

Modul de execu\ie al deciziei generalizate este urm[torul: se evalueaz[ expresie

{1, 2, ..., n} astfel ]nc`t expresie dac[ exist[ i


execut[ secventai =i se iese din structur[

ci se

{1, 2, ..., n} expresie dac[ pentru orice i

ci se

execut[ secventan+1 =i se iese din structur[ Observa\ie. Secven\a secventan+1 este op\ional[. Exemplu. Se cite=te un caracter =i ]n func\ie de valoarea sa se scriu diferite mesaje. Algoritmul este descris ]n pseudocod. Citeste x Alege x Dintre a, A: Scrie (Ana) e: Scrie (Elena) m..a: Scrie (Mona, Nae, Oana) Altfel: Scrie (Ati tastat gresit)
67

Stop De regul[, ]n limbajele moderne de programare se implementeaz[ al[turi de itera\ia cu test ini\ial =i urm[toarele dou[ forme de echivalen\e: itera\ia cu contor (structura Pentru) itera\ia cu test final (structura Repet[ C`t Timp)

Itera\ia cu contor este un caz particular al itera\iei cu test ini\ial. Rolul central ]l ocup[ o variabil[ special[, numit[ variabil[ contor, care poate fi ini\ializat[, actualizat[ =i poate controla valoarea logic[ a condi\iei. Actualizarea ] nseamn[ modificarea cu o valoare constant[ (numit[ ra\ie sau pas) a variabilei contor. Reprezentarea ]n pseudocod =i sub form[ de schem[ logic[ a itera\iei cu contor este prezentat[ mai jos:

v vi

Pentru v vi, vf, r Execut[ Secventa


v vf Fals

Adev[rat vv+r secventa

Observa\ie. Situa\ia descris[ ]n schema logic[ de mai sus se refer[ la cazul vi vf =i ra\ia r > 0. C`nd vi > vf =i r < 0 condi\ia de test se schimb[ ]n v vf. Structura de control Pentru se folose=te c`nd se cunoa=te num[rul de itera\ii. Observa\iile f[cute la structura C`t timp r[m`n valabile =i aici.
68

Exemplu. Calculul sumei a n numere reale citite de la tastatur[ Cite=te n


s0

Pentru i 1, n Cite=te x

Execut[

s s+ x
Scrie s Stop Observa\ie. C`nd ra\ia lipse=te se consider[ c[ implicit are valoarea 1. Itera\ia cu test final se reprezint[ ]n pseudocod =i schem[ logic[ sub forma:

Repet[ secventa C`t timp conditie


Adev[rat

secventa

conditie

Fals

Observa\ii. Secventa se execut[ cel pu\in o dat[. Pentru a nu se cicla la infinit, secventa trebuie s[ con\in[ enun\uri care, dup[ un num[r finit de pa=i s[ conduc[ la valoarea de adev[r Fals pentru conditie. Exemplu. Calculul valorii citit de la tastatur[. Repet[ Cite=te x C`t Timp
y x y= x

pentru un num[r x real

x<0

Scrie y
69

Stop

9.4.2

PROCEDURI +I FUNC|II

Sunt frecvente cazurile ]n care o secven\[ de instruc\iuni este reluat[ pe parcursul unei algoritm schimb`ndu-se de fiecare dat[ numai valorile ini\iale ale variabilelor. Pentru a se evita scrierea acelora=i instruc\iuni de mai multe ori, acestea sunt organizate separat, sub forma unui subalgoritm =i apelate ]n algoritmul principal ori de c`te ori este nevoie.

70

Schematic, situa\ia se prezint[ astfel:

Algoritm

Algoritm principal

Subalgorit m

Instruc\iuni care se repet[

apel subalgoritm

Instruc\iuni

care se repet[

apel subalgoritm

Instruc\iun

i care se repet[

apel subalgoritm

Subalgoritmul poate lua forma unei proceduri sau a unei func\ii. ihgiggire }n pseudocod o procedur[ se reprezint[ astfel: Procedura nume_procedura (lista_de_parametri) corpul procedurii Sf`r=it Preciz[ri: cuvintele Procedura =i Sf`r=it sunt cuvinte rezervate nume_procedura este evident numele procedurii =i serve=te la identificarea instruc\iunilor care se apeleaz[ lista_de_parametrii reprezin[ parametrii formali sau fictivi; lista poate fi vid[

71

corpul procedurii con\ine instruc\iunile subalgoritmului

Apelul unei proceduri se face prin specificarea numelui procedurii urmat de lista de parametrii actuali sau efectivi cuprin=i ]ntre paranteze rotunde: nume_procedura (lista_de_parametri) +i ]n acest caz lista_de_parametrii poate sa fie vid[. Transferul informa\iei dinspre algoritmul principal spre procedur[ =i invers se face prin intermediul parametrilor. Exist[ =i posibilitatea de a transmite informa\ii prin variabile globale, adic[ variabile care sunt recunoscute (se v[d) =i ]n algoritmul principal =i ]n procedur[. Aceast[ ultim[ variant[ nu este recomandat[ deoarece, tocmai datorit[ caracterului lor global, valorile variabilelor pot fi modificate uneori din gre=eal[. Parametrii formali pot sau nu avea acelea=i nume cu parametrii actuali. Important este ]ns[ ca ]n ambele liste s[ existe un num[r egal de parametrii, iar parametrii formali =i actuali de pe aceea=i pozi\ie s[ fie de tipuri compatibile. Numele procedurii nu intervine ]n opera\iile expresiilor din algoritm. Rolul s[u este numai de a identifica instruc\iunile care se apeleaz[. Exemplu. Calculul combin[rilor de n luate c`te k
k Cn =

n! , k!(n k )!

utiliz`nd o procedur[ pentru calculul factorialului. Descrierea se face ]n pseudocod. Procedura Fact (m,Fm)
p 1

Pentru k 2, n Execut[
p p k

Fm p

Sf`r=it

72

Cite=te n, k Fact (n, Fn) Fact (k, Fk) Fact (n-k, Fnk)
C nk Fn /( Fnk Fk )

Scrie Cnk Stop La efectuarea apelului, se execut[ instruc\iunile din procedur[, iar dup[ terminare se revine ]n algoritmul principal la prima instruc\iune de dup[ apel. Un algoritm principal poate apela subalgoritmi diferi\i, iar fiecare subalgoritm poate apela la r`ndul s[u al\i subalgoritmi. }n exemplul de mai sus procedura Fact este apelat[ de trei ori. De fiecare dat[ parametrii formali m,Fm sunt pu=i ]n coresponden\[ cu parametrii actuali corespunz[tori. De exemplu, la apelul Fact(n,Fn) parametrul formal m prime=te valoarea parametrului actual n. Se execut[ instruc\iunile din procedur[ iar rezultatul (n!) calculat ]n Fm se ]ntoarce ]n algoritmul principal prin parametrul actual corespunz[tor Fn. Analog, dup[ apelul succesiv al procedurii, ]n Fnk se va afla valoarea k!, iar ]n Fnk valoarea (n-k)! }n pseudocod, o func\ie se reprezint[ astfel: Func\ia nume_functie (lista_de_parametri) corpul func\iei Sf`r=it Preciz[ri: cuvintele Func\ie =i Sf`r=it sunt cuvinte rezervate nume_functie este numele func\iei lista_de_parametri reprezint[ parametri formali sau fictivi; lista poate fi vid[

73

corpul functiei con\ine instruc\iunile subalgoritmului

Transferul informa\iei dinspre algoritm spre func\ie se face prin intermediul parametrilor formali la apelul func\iei. Rezultatul prelucr[rilor din corpul func\iei se ]ntoarce ]n algoritmul principal prin intermediul numelui func\iei. Din acest motiv, ]n corpul func\iei, nume_functie trebuie s[ primeasc[ cel pu\in o valoare. Numele func\iei urmat (dac[ e cazul) de list[ de parametri actuali cuprins[ ]ntre paranteze poate s[ fie operand ]ntr-o expresie; la apel construc\ia nume_functie(lista_parametri_actuali) va fi ]nlocuit[ cu rezultatul prelucr[rilor din corpul func\iei. Exemplu. Calculul expresiei
y = f ( x ) + 5.63
x + 2 daca x > 7 f ( x) = 10.25 daca x = 7 e x x daca x < 7

unde

Descrierea ]n pseudocod este urm[toarea: Func\ia f ( x) Dac[ x > 7 Atunci


f x +2

Altfel Dac[ x = 7
f 10.25

Altfel
f ex x

Sf`r=it Cite=te x
y f ( x ) + 5.63

Scrie y Stop

74

}NTREB{RI +I EXERCI|II

Ce este algoritmul. Da\i c`teva exemple. Enumera\i caracteristicile de baz[ ale algoritmului Enun\a\i teorema de structur[ Descrie\i ]n pseudocod secven\a. Da\i c`teva exemple. Descrie\i ]n pseudocod decizia. Da\i c`teva exemple. Descrie\i ]n pseudocod itera\ia. Da\i c`teva exemple. Explica\i rolul procedurilor =i func\iilor. Da\i 3 exemple de func\ii =i 3 exemple de proceduri

75

S-ar putea să vă placă și

  • Variabile
    Variabile
    Document6 pagini
    Variabile
    victor
    Încă nu există evaluări
  • Functii
    Functii
    Document1 pagină
    Functii
    victor
    Încă nu există evaluări
  • Structuri de Control
    Structuri de Control
    Document4 pagini
    Structuri de Control
    victor
    Încă nu există evaluări
  • Notiuni de Baza
    Notiuni de Baza
    Document2 pagini
    Notiuni de Baza
    victor
    Încă nu există evaluări
  • Constante
    Constante
    Document1 pagină
    Constante
    victor
    Încă nu există evaluări
  • Preluarea Datelor Din Formularele HTML
    Preluarea Datelor Din Formularele HTML
    Document2 pagini
    Preluarea Datelor Din Formularele HTML
    victor
    Încă nu există evaluări
  • Exemple
    Exemple
    Document2 pagini
    Exemple
    victor
    Încă nu există evaluări
  • Operatori
    Operatori
    Document3 pagini
    Operatori
    victor
    Încă nu există evaluări
  • Mysql Si PHP Incepatori PDF
    Mysql Si PHP Incepatori PDF
    Document68 pagini
    Mysql Si PHP Incepatori PDF
    Ionel Gherasim
    0% (1)
  • Bibliografie Partea I
    Bibliografie Partea I
    Document2 pagini
    Bibliografie Partea I
    victor
    Încă nu există evaluări
  • Functia Mail
    Functia Mail
    Document1 pagină
    Functia Mail
    victor
    Încă nu există evaluări
  • Carte Final
    Carte Final
    Document371 pagini
    Carte Final
    victor
    Încă nu există evaluări
  • Lucrul Cu Fisiere
    Lucrul Cu Fisiere
    Document2 pagini
    Lucrul Cu Fisiere
    victor
    Încă nu există evaluări
  • Partea II - IDD Programarea Icalculatoarelor
    Partea II - IDD Programarea Icalculatoarelor
    Document216 pagini
    Partea II - IDD Programarea Icalculatoarelor
    victor
    Încă nu există evaluări
  • Capitol 6
    Capitol 6
    Document18 pagini
    Capitol 6
    victor
    Încă nu există evaluări
  • Coperta IDD Aii
    Coperta IDD Aii
    Document2 pagini
    Coperta IDD Aii
    victor
    Încă nu există evaluări
  • Capitol 10
    Capitol 10
    Document22 pagini
    Capitol 10
    bracio
    Încă nu există evaluări
  • Capitol 9
    Capitol 9
    Document14 pagini
    Capitol 9
    victor
    Încă nu există evaluări
  • Capitol 2
    Capitol 2
    Document10 pagini
    Capitol 2
    victor
    Încă nu există evaluări
  • C.roman, C.nejnaru MCIM Curs
    C.roman, C.nejnaru MCIM Curs
    Document177 pagini
    C.roman, C.nejnaru MCIM Curs
    victor
    Încă nu există evaluări
  • Capitol 8
    Capitol 8
    Document8 pagini
    Capitol 8
    victor
    Încă nu există evaluări
  • Capitol 5
    Capitol 5
    Document12 pagini
    Capitol 5
    victor
    Încă nu există evaluări
  • Capitol 7
    Capitol 7
    Document14 pagini
    Capitol 7
    victor
    Încă nu există evaluări
  • Capitol 3
    Capitol 3
    Document10 pagini
    Capitol 3
    victor
    Încă nu există evaluări
  • BIBLIOGRAFIE
    BIBLIOGRAFIE
    Document3 pagini
    BIBLIOGRAFIE
    victor
    Încă nu există evaluări
  • Cap 7
    Cap 7
    Document27 pagini
    Cap 7
    victor
    Încă nu există evaluări
  • Cap 4
    Cap 4
    Document16 pagini
    Cap 4
    victor
    Încă nu există evaluări
  • Capitol 1
    Capitol 1
    Document18 pagini
    Capitol 1
    victor
    Încă nu există evaluări
  • Cap3 2
    Cap3 2
    Document18 pagini
    Cap3 2
    victor
    Încă nu există evaluări