manual informatica 2014 ro

Upload: ionutzel04

Post on 02-Jun-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/10/2019 Manual Informatica 2014 RO

    1/82

  • 8/10/2019 Manual Informatica 2014 RO

    2/82

    2

    uprins

    1. ALGORITI!" #I PROGRAAR$....................................................................... 3

    1.1. C=9>=-3 ?3 !->=-3 ............................................................................................... 1.1.1. Cutri .......................................................................................................... 31.1.2. Sortri ........................................................................................................... 5

    1.2. M@>!@/@ 7ACB>-ACB3D E3 3F3@ @> 3M"@-A..................................................... G1.2.1. Metoda backtracking............. ......................................................................... 81.2.2. Metoda "divide et impera" ........................................................................... 12

    1.. C!C@">@ !!"H /3M7A@ @ "-!D-AMA-@ ....................................................... 11.3.1. Noiunea de cla......................................................................................... 13

    1.. -@/AI33 H>-@ C/A@............................................................................................ 221.!.1. a#ele teoretice............... ............................................................................. 221.!.2. $eclararea claelor derivate........................................................................ 221.!.3. %uncii virtuale ............................................................................................ 2!1.!.!. Clae abtracte ............................................................................................ 281.!.5. &nter'ee ....................................................................................................... 3(

    1.0. /3>@ ?3 3CI3!A-@ ............................................................................................ 21.5.1. )ite ............................................................................................................. 321.5.2. $icionare.................................................................................................... 3*

    1.. "-!7/@M@ "-!"9@ ............................................................................................. G

    2. BA%$ &$ &AT$ ....................................................................................................... '(

    2.1. 7AJ@ @ A>@ -@/AI3!A/@."-3M@/@ >-@3 5!-M@ !-MA/@ A/@ 9@3 -@/AI33 ... K2.1.1. Modelul relaional .......... ............................................................................. !(2.1.2. +rimele trei 'orme normale ale unei relaii................................. .................. !3

    2.2. 3>@-!DA-@A 7C9 !"@-A>!-3 3 A/D@7-A -@/AI3!A/=.............................. 0K2.. 3>@-!DA-@A 7AJ@/!- @ A>@ -@/AI3!A/@ C9 8/....................................... 02.. "-!7/@M@ "-!"9@ ............................................................................................. 0L

    3. STR)!T)RA #I *)+!,IIL$ SIST$$LOR &$ OP$RAR$. SIST$$ &$*I#I$R$............................................................................................................................ -(

    .1. 3>@M9/ @ 53?3@-@ 93................................................................................... K3.1.1. Structura &ntern a $icului ,N&-............................................................... *(3.1.2. ipuri de 'i/iere /i iteme de 'i/iere............................................................. *3

    .2. "-!C@@ 93 ..................................................................................................... N3.2.1. +rincipalele apeluri 0tem de getiune a proceelor ................................... *3.2.2. Comunicarea ntre procee prin pipe ........................................................... 13.2.3. Comunicarea ntre procee prin %&% ......................................................... 3

    .. 3>@-"-@>!A-@ A/@ 53?3@-@/!- @ C!M@J3

    ....................................................... NN3.3.1. %uncionarea unui interpretor de comen#i 4ell ........................................... 3.3.2. +rogramarea n 4ell ................... ................................................................ 8

    .. "-!7/@M@ "-!"9@ ............................................................................................. GK

    '. BIBLIOGRA*I$ G$+$RAL" ................................................................................ 2

  • 8/10/2019 Manual Informatica 2014 RO

    3/82

    1! "lgoritmic #i programare

    1!1! utri #i sortri

    1!1!1! utri

    atele se a+l #n memoria intern, #ntrOun ir de articole. Fom cuta un articol dup un

    cPmp al acestuia pe care #l vom considera c&eie de cutare. Hn urma procesului de cutare va

    re4ulta po4iia elementului cutat (dac acesta e6ist).

    otPnd cu k1 k2 .... knc&eile corespun4toare articolelor i cu ac&eia pe care o cutm,

    problema revine la a gsi (dac e6ist) po4iiapcu proprietatea a 6 kp.

    e obicei articolele sunt pstrate #n ordinea cresctoare a c&eilor, deci vom presupune c

    k17 k27 .... 7 kn.

    9neori este util s a+lm nu numai dac e6ist un articol cu c&eia dorit ci i s gsim #n ca4

    contrar locul #n care ar trebui inserat un nou articol avPnd c&eia speci+icat, ast+el #ncPt s se

    pstre4e ordinea e6istent.

    eciproblema cutriiare urmtoarea speci+icare*

    $ate anki i61n9:

    +recondiia; nN n1 /i k17 k27 .... 7 kn: kn9 au 17pn9 /i kp?17 a kp9.

    1!1!1!1! utare sec$enial

    ! prim metod este cutarea sec/e0ial, #n care sunt e6aminate succesiv toate c&eile.

    unt deosebite trei ca4uri* ak1, aQkn, respectiv k1< a kn, cutarea avPnd loc #n al treilea ca4.

    Subalgoritmul CautSecv(a, n, K, p) este: Rn, n1 i k1S k2S .... S knTRe caut p ast+el ca* (pU1 i a k1) sauT

    R (pUn'1 i aQkn) sau (1Spn) i (kpO1S a kp).Fie p := 0; RCa4ul V#nc negasitVTDaca k1atunci p := 1 altfel

    ac a > knatunci p := n + 1 altfelPentru i := 2; n execut

    Dac(p = 0) i (a ki) atunci p := i sfdacsfpentru

  • 8/10/2019 Manual Informatica 2014 RO

    4/82

  • 8/10/2019 Manual Informatica 2014 RO

    5/82

    0

    Funcia BinarySearch(a, n, K, St, Dr) este:

    DacSt Dr - 1atunci BinarySearch := Dr

    altfel m := (St+Dr) Div 2;

    Daca kmatunci BinarySearch := BinarySearch(a, n, K, St, m)

    altfel BinarySearch := BinarySearch(a, n, K, m, Dr)sfdac

    sfdac

    sf-BinarySearch

    Hn +uncia BinarySearch descris mai sus, variabilele St i Dr repre4int capetele

    intervalului de cutare, iar m repre4int mi$locul acestui interval. "rin aceast metod, #ntrOo

    colecie avPnd nelemente, re4ultatul cutrii se poate +urni4a dup cel mult log2ncomparri.

    eci comple6itatea #n cel mai ru ca4 este direct proporional cu log2n. 5r a insista asupra

    demonstraiei, menionm c ordinul de mrime al comple6itii medii este acelai.

    e observ c +uncia BinarySearch se apelea4 recursiv. e poate #nltura uor

    recursivitatea, aa cum se poate vedea #n urmtoarea +uncie*

    Funcia BinSeaNerec(a, n, K, St, Dr) este:

    Cttimp Dr St > 1 execut

    m := (St+Dr) Div 2;

    Daca km atunci Dr := m altfel St := m sfdacsfct

    BinSeaNerec := Dr

    sf-BinSeaNerec

    1!1!2! Sortri

    "rin sortare intern vom #nelege o rearan$are a unei colecii a+late #n memoria intern

    ast+el #ncPt c&eile articolelor s +ie ordonate cresctor (eventual descresctor).

    in punct de vedere al comple6itii algoritmilor problema revine la ordonarea c&eilor.

    eci speci+icarea problemei de sortare i0ter0este urmtoarea*

    $ate n@: [email protected]

    +recondiia; ki

  • 8/10/2019 Manual Informatica 2014 RO

    6/82

    1!1!2!1! Sortare prin selecie

    ! prim te&nic numit VSelecieV se ba4ea4 pe urmtoarea idee* se determin po4iia

    elementului cu c&eie de valoare minim (respectiv ma6im), dup care acesta se va intersc&imba

    cu primul element. Acest procedeu se repet pentru subcolecia rmas, pPn cPnd mai rmPne

    doar elementul ma6im.

    Subalgoritmul Selectie(n, K) este: Re +ace o permutare a celorTRn componente ale vectorului B ast+elT

    Rca k1k2.... knTPentru i := 1; n-1 execut

    Fie ind := i;

    Pentru j := i + 1; n execut

    Dackj< kindatunci ind := j sfdac

    sfpentru

    Daci < ind atunci t := ki; ki := kind; kind := t sfdac

    sfpentru

    sf-Selectie

    e observ c numrul de comparri este*

    (nO1)'(nO2)'...'2'1Un(nO1)W2

    indi+erent de natura datelor. eci comple6itatea medie, dar i #n cel mai ru ca4 este On29.

    1!1!2!2! %ubble sort

    Metoda VubbleSortV, compar dou cPte dou elemente consecutive iar #n ca4ul #n care

    acestea nu se a+l #n relaia dorit, ele vor +i intersc&imbate. "rocesul de comparare se va #nc&eia

    #n momentul #n care toate perec&ile de elemente consecutive sunt #n relaia de ordine dorit.

    Subalgoritmul BubbleSort(n, K) este:

    Repet

    Fie kod := 0; {Ipoteza "este ordine"}

    Pentru i := 2; n execut

    Dacki-1> kiatunci

    t := ki-1;

    ki-1:= ki;

    ki := t;

    kod := 1 {N-a fost ordine!}

    sfdac

    sfpentru

    pncnd kod = 0 sfrep {Ordonare}

    sf-BubbleSort

    Acest algoritm e6ecut #n cel mai ne+avorabil ca4 (nO1)'(nO2)' ... '2'1 U n(nO1)W2

    comparri, deci comple6itatea lui este On29.

    ! variant optimi4at a algoritmului VubbleSortV este *

  • 8/10/2019 Manual Informatica 2014 RO

    7/82

    N

    Subalgoritmul BubbleSort(n, K) este:

    Fie s := 0

    Repet

    Fie kod := 0; {Ipoteza "este ordine"}

    Pentru i := 2; n-s execut

    Dacki-1> kiatunci

    t := ki-1;

    ki-1

    := ki

    ;

    ki := t;

    kod := 1 {N-a fost ordine!}

    sfdac

    sfpentru

    s := s + 1

    pncnd kod = 0 sfrep {Ordonare}

    sf-BubbleSort

    1!1!2!&! 'uic(sort

    ! metod mai per+ormant de ordonare, care va +i pre4entat #n continuare, se numete

    VDuickSortV i se ba4ea4 pe te&nica Vdivide et imperaV dup cum se poate observa #n

    continuare. Metoda este pre4entat sub +orma unei proceduri care reali4ea4 ordonarea unui

    subir preci4at prin limita in+erioar i limita superioar a indicilor acestuia. Apelul procedurii

    pentru ordonarea #ntregului ir este * QuickSort(n, K, 1, n), unde nrepre4int numrul de

    articole ale coleciei date. eci

    Subalgoritmul SortareRapid(n, K) este:

    CheamQuickSort(n, K, 1, n)

    sf-SortareRapid

    "rocedura QuickSort(n, K, St, Dr)va reali4a ordonarea subirului kSt, kSt+1, ...,

    kDr. Acest subir va +i rearan$at ast+el #ncPt kSt s ocupe po4iia lui +inal (cPnd irul este

    ordonat). ac ieste aceast po4iie, irul va +i rearan$at ast+el #ncPt urmtoarea condiie s +ie

    #ndeplinit*

    k$kikl, pentru st $ S i S l dr (5)

    !dat reali4at acest lucru, #n continuare va trebui doar s ordonm subirul kSt, kSt+1,

    ... ,ki-1prin apelul recursiv al procedurii QuickSort(n, K, St, i-1)i apoi subirul ki+1,

    ...,kDr prin apelul QuickSort(n, K, i+1, Dr). esigur ordonarea acestor dou subiruri(prin apelul recursiv al procedurii) mai este necesar doar dac acestea conin cel puin dou

    elemente.

    "rocedura QuickSort este pre4entat #n continuare *

  • 8/10/2019 Manual Informatica 2014 RO

    8/82

    G

    Subalgoritmul QuickSort (n, K, St, Dr) este:

    Fie i := St; j := Dr; a := ki;

    Repet

    Cttimp kj a i (i < j) executj := j - 1 sfctki := kj;

    Cttimp ki a i (i < j) executi := i + 1 sfctkj := ki ;

    pncnd i = j sfrep

    Fie ki := a;

    DacSt < i-1 atunci CheamQuickSort(n, K, St, i - 1) sfdac

    Daci+1 < Dr atunci CheamQuickSort(n, K, i + 1, Dr) sfdac

    sf-QuickSort

    Comple6itatea algoritmului pre4entat este n29 #n cel mai ne+avorabil ca4, dar

    comple6itatea medie este de ordinul Onlog2n9.

    1!2! Metodele bac(trac(ing i di$ide et impera

    1!2!1! Metoda bac(trac(ing

    Metoda backtracking (cutare cu revenire) este aplicabil in general unor probleme ce au

    mai multe soluii.

    Fom considera #ntPi un e6emplu, dup care vom indica cPiva algoritmi generali pentru

    aceast metod.

    Pro4lema 1. (Denerarea permutrilor) 5ie n un numr natural. eterminai permutrile

    numerelor 1, 2, ..., n.

    ! soluie pentru generarea permutrilor, #n ca4ul particular n 6 3, ar putea +i*

    Subalgoritmul Permutri1 este:

    Pentru i1 := 1; 3 execut

    Pentru i2 := 1; 3 execut

    Pentru i3 := 1; 3 execut

    Fie posibil := (i1, i2, i3)

    Daccomponentele vectorului posibil sunt distincte

    atunci

    Tiprete posibilsfdac

    sfpentru

    sfpentru

    sfpentru

    sf-Permutri1

  • 8/10/2019 Manual Informatica 2014 RO

    9/82

    L

    1

    1

    1 2

    2

    1 2

    1 2

    2

    1

    1 2

    2

    1 2

    1 2

    1

    1 2

    2

    1 2

    1 2

    61

    62

    6 *igra 1.1. -epre4entare gra+ic a produsului carte4ian R1, 2, T

    !bservaii privind subalgoritmul+ermutri1*

    "entru noarecare nu putem descrie un algoritm care s conin ncicluri #n te6tul

    surs.

    umrul total de vectori veri+icai este , iar #n general nn. Fectoriipoibilveri+icai

    sunt repre4entai gra+ic #n 5igura 1.1 O +iecare vector este un drum de la rdcin (de sus)

    spre +run4e (ba4a arborelui).

    Algoritmul atribuie valori tuturor componentelorvectoruluiE, apoi veri'ic dac

    vectorul ete o permutare.

    ! #mbuntire a acestor algoritmi ar consta #n a veri+ica anumite condiii din problem #n

    timp ce se construiesc vectorii, evitPnd completarea inutil a unor componente.

    e e6emplu, dac prima component avectorului construit (poibil) este 1, atunci este

    inutil s atribuim celei de a doua componente valoarea 1, iar componentei a treia oricare din

    valorile 1, 2 sau . ac neste mare se evit completarea multor vectori ce au pre+i6ul (1, ...). Hn

    acest sens, (1, , ...) este un vector promitor(pentru a +i o permutare), #n sc&imb vectorul (1, 1,...) nu este. Fectorul (1, , ...) satis+ace anumite condiii de continuare (pentru a a$unge la

    soluie) O are componente distincte. odurile &aurate din 5igura 1.1 constituie valori care nu

    conduc la o soluie.

    Fom descrie un algoritm general pentru metoda 7actracking dup care vom particulari4a

    acest algoritm pentru problemele enunate la #nceputul seciunii. "entru #nceput vom +ace cPteva

    observaii i notaii privind metoda 7acktracking aplicat unei probleme #n care soluiile se

    repre4int pe vectori, nu neaprat de lungime +i6*

    spaiul de cutare a soluiilor (spaiul soluiilor posibile)* U 1E S2E ... E Sn;

    poibileste vectorul pe care se repre4int soluiile; poibilX1..kY 1 6 S2E ... 6 Sk este un vector care poate conduce sau nu la o soluie; k

    repre4int indice pentru vectorulpoibil, respectiv nivel #n arborele care red gra+ic procesul

    de cutare (5igura 1.2).

    poibilX1..kY este promitor dac satis+ace condiii care pot conduce la o soluie;

    oluie(n, k poibil) +uncie care veri+ic dac vectorul (promitor)poibilX1..kY este soluie

    a problemei.

  • 8/10/2019 Manual Informatica 2014 RO

    10/82

    1K

    tart

    61

    62

    6

    1

    . . . n

    1 n. . .

    1

    1 n. . .

    61

    . . . n

    1 n. . .

    1

    1 n. . .

    n

    . . . n

    1 n. . .

    1

    1 n. . .

    62

    1 n. . .

    . . .

    . . . . . .

    6. . .

    . . .

    6kO1

    1 n. . .6k. . . 6k'1 i. . .

    !atare pe 0i/el

    Cautare +ara succes*re/e0ire pe 0i/ell 671

    6kO1'1 . . . n

    . . .. . .

    1 . . .

    1 n

    . . .Cautare cu succes*pas i0 8ata

    6kO1

    6k

    6n. . .

    6k'1

    . . .. . .

    *igra 1.2.paiul soluiilor posibile pentru generarea permutrilor

    "rocesul de cutare poate +i urmrit #n algoritmul care urmea4*

    Algoritmul Backtracking este: {varianta nefinisat}

    Fie k := 1

    @Iniializeazcutarea pe nivelul k (= 1)

    Cttimp k > 0 execut {posibil[1..k-1] este promitor}

    @Caut(secvenial) pe nivelul k o valoare v, pentru a completa n

    continuare vectorul posibil[1..k-1] astfel nct posibil[1..k] s

    fie promitor

    Daccutarea este cu succes

    atunci Fie posibil[k] := v {posibil[1..k] este promitor}

    Dacsoluie(n, k, posibil)

    atunci {o soluie! (rmnem pe nivelul k)}

    Tiparete posibil[1..k]

    altfel {e doar un vector promitor}

    @Initializeaza cautarea pe nivelul k+1

    Fie k := k + 1 {pas n fa(pe nivelul k+1)}

    sfdac

    altfel {pas n spate (revenire pe nivelul k-1)}

    k := k - 1

    sfdac

    sfct

    sf-Backtracking

    "entru a +inisa acest algoritm trebuie s preci4m elementele nestandard pre4ente. Ast+el,avem nevoie de +uncia boolean

    condiii-continuare(k, posibil, v)

    +uncie care veri+ic dac vectorul promitorpoibilX1..kO1Y completat cu valoarea vconduce la

    un vector promitor.

    Apoi, pentru a iniiali4a cutarea la nivelulFavem nevoie de a alege un element +ictiv din

    mulimea SF, activitate reali4at de +uncia

  • 8/10/2019 Manual Informatica 2014 RO

    11/82

    11

    init(j)

    care returnea4 acest element +ictiv, care are rolul de a indica +aptul c din mulimea #nc nu sO

    a ales nici un element, deci dup el urmea4 primul element propriu din aceast mulime. "entru

    a cuta o valoare pe nivelul $, #n ipote4a c valoarea curent nu e bun, avem nevoie de +uncia

    boolean

    urmtor(j, v, nou)care este ruedac poate alege o valoare din SFcare urmea4 dup valoarea v, valoare notat

    prin nou i %ale #n ca4ul #n care nu mai e6ist alte valori #n SF, deci nu mai poate +i +cut

    alegerea. Cu aceste notaii algoritmul devine*

    Algoritmul Backtracking este: {versiune final}

    Fie k := 1;

    posibil[1] := init(1);

    Cttimp k > 0 execut {posibil[1..k-1] este promitor}

    Fie Gsit := false; v := posibil[k] ;

    Cttimp Urmtor(k, v,urm) i not Gsit execut

    Fie v := urm;

    Daccondiii-continuare(k, posibil, v) atunci

    Gsit := true

    sfdac

    sfct

    DacGsit

    atunci Fie posibil[k] := v; {posibil[1..k] este promitor}

    Dacsoluie(n, k, posibil)

    atunci {o soluie! (rmnem pe nivelul k)}

    Tiparete posibil[1..k]

    altfel {e doar un vector promitor}

    Fie k := k + 1; {pas n fa(pe nivelul k+1)}

    posibil[k] := init(k)

    sfdac

    altfel {pas n spate (revenire pe nivelul k-1)}

    k := k - 1;

    sfdacsfct

    sf-Backtracking

    "rocesul de cutare a unei valori pe nivelul ki +unciile condiii?continuareioluiesunt

    dependente de problema care se re4olv. e e6emplu, pentru generarea permutrilor +unciile

    menionate sunt*

    Funcia init(k) este:

    Init := 0

    sf-init;

    Funcia Urmtor(k, v, urm) este:

    Dac v < natunci Urmtor := True; urm := v + 1

    altfel Urmtor := False

    sfdac

    sf-urmator

    Funcia conditii-continuare(k, posibil, v) este:

    Kod := True; i := 1;

    Cttimp kod i (i < k) execut

    Dacposibil[i] = v atunci kod := False sfdac

    i := i + 1;

  • 8/10/2019 Manual Informatica 2014 RO

    12/82

  • 8/10/2019 Manual Informatica 2014 RO

    13/82

    1

    Metoda poate +i descris Zn +elul urmtor*

    :mparte* ac dimensiunea datelor este prea mare pentru a +i re4olvabil imediat,

    Zmparte problema Zn una sau mai multe subprobleme independente (similare

    problemei ini[iale).

    Stp;0e

  • 8/10/2019 Manual Informatica 2014 RO

    14/82

    1

    +uncii corespun4toare pentru iniiali4area vectorului, eliberarea 4onei de memorie ocupate iridicarea la ptrat, respectiv a+iarea elementelor vectorului. ! posibilitate de implementare amodulului este pre4entat #n +iierul /ector1.cpp*

    #include

    using namespace std;

    static int* e; //elementele vectorului

    static int d; //dimensiunea vectorului

    void init(int* e1, int d1) //initializare

    {

    d = d1;

    e = new int[d];

    for(int i = 0; i < d; i++)

    e[i] = e1[i];

    }

    void distr() //eliberarea zonei de memorie ocupata

    {

    delete [] e;

    }

    void lapatrat() //ridicare la patrat

    {

    for(int i = 0; i < d; i++)

    e[i] *= e[i];

    }

    void afiseaza() //afisare

    {

    for(int i = 0; i < d; i++)

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    15/82

    10

    !bservm c dei #n programul principal se lucrea4 cu doi vectori nu putem sOi +olosim#mpreun, deci de e6emplu modulul /ector1.cppnu poate +i e6tins ast+el #ncPt s reali4e4e iadunarea a doi vectori. Hn vederea #nlturrii acestui nea$uns sOau introdus tipurile abstractede date.

    1!&!1!2! Tipuri abstracte de date

    >ipurile abstracte de date reali4ea4 o legtur mai strPns #ntre datele problemei i operaiile(+unciile) care se re+er la aceste date. eclararea unui tip abstract de date este asemntoarecu declararea unei structuri, care #n a+ar de date mai cuprinde i declararea sau de+inirea+unciilor re+eritoare la acestea.

    e e6emplu #n ca4ul vectorilor cu elemente numere #ntregi putem declara tipul abstract*

    struct vect {

    int* e;int d;

    void init(int* e1, int d1);

    void distr() { delete [] e; }

    void lapatrat();

    void afiseaza();

    };

    5unciile declarate sau de+inite #n interiorul structurii vor +i numite 'uncii membruiar dateledate membru. ac o +uncie membru este de+init #n interiorul structurii (ca i +uncia ditrdin e6emplul de mai sus), atunci ea se consider +uncie inline. ac o +uncie membru sede+inete #n a+ara structurii, atunci numele +unciei se va #nlocui cu numele tipului abstracturmat de operatorul de re4oluie (**) i numele +unciei membru. Ast+el +unciile init, lapatrat

    i a'iea#avor +i de+inite #n modul urmtor*

    void vect::init(int *e1, int d1)

    {

    d = d1;

    e = new int[d];

    for(int i = 0; i < d; i++)

    e[i] = e1[i];

    }

    void vect::lapatrat()

    {

    for(int i = 0; i < d; i++)

    e[i] *= e[i];

    }void vect::afiseaza()

    {

    for(int i = 0; i < d; i++)

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    16/82

    1

    ei prin metoda de mai sus sOa reali4at o legtur #ntre datele problemei i +unciilere+eritoare la aceste date, ele nu sunt prote$ate, deci pot +i accesate de orice +uncie utili4ator,nu numai de +unciile membru. Acest nea$uns se poate #nltura cu a$utorul claselor.

    1!&!1!&! 0eclararea claselor

    9n tip abstract de date clas se declar ca i o structur, dar cuvPntul c&eie struct se#nlocuiete cu cla. Ca i #n ca4ul structurilor re+erirea la tipul de dat clas se +ace cunumele dup cuvPntul c&eie class (numele clasei). "rotecia datelor se reali4ea4 cumodi+icatorii de protecie* private, protected i public. up modi+icatorul de protecie se

    pune caracterul ^*]. Modi+icatorulprivateiprotectedrepre4int date prote$ate, iarpublicdateneprote$ate. omeniul de valabilitate a modi+icatorilor de protecie este pPn la urmtorulmodi+icator din interiorul clasei, modi+icatorul implicit +iind private. Menionm c i #nca4ul structurilor putem s +olosim modi+icatori de protecie, dar #n acest ca4 modi+icatorulimplicit estepublic.

    e e6emplu clasa vector se poate declara #n modul urmtor*

    class vector {

    int* e; //elementele vectorului

    int d; //dimensiunea vectorului

    public:

    vector(int* e1, int d1);

    ~vector() { delete [] e; }

    void lapatrat();

    void afiseaza();

    };

    e observ c datele membru e i d au +ost declarate ca date de tip private (prote$ate), iar

    +unciile membru au +ost declarate publice (neprote$ate). 7ine#neles, o parte din datelemembru pot +i declarate publice, i unele +uncii membru pot +i declarate prote$ate, dacnatura problemei cere acest lucru. Hn general, datele membru prote$ate pot +i accesate numaide +unciile membru ale clasei respective i eventual de alte +uncii numite 'unciiprietenesau +uncii'riend9.

    ! alt observaie important re+eritoare la e6emplul de mai sus este c iniiali4area datelormembru i eliberarea 4onei de memorie ocupat sOa +cut prin +uncii membru speci+ice.

    atele declarate cu a$utorul tipului de dat clas se numesc obiectele clasei, sau simpluobiecte. @le se declar #n mod obinuit #n +orma*

    nume_claslist_de_obiecte;

    e e6emplu, un obiect de tip vector se declar #n modul urmtor*

    vector v;

    3niiali4area obiectelor se +ace cu o +uncie membru speci+ic numit contructor. Hn ca4uldistrugerii unui obiect se apelea4 automat o alt +uncie membru speci+ic numit detructor.Hn ca4ul e6emplului de mai sus

  • 8/10/2019 Manual Informatica 2014 RO

    17/82

    1N

    vector(int* e1, int d1);

    este un constructor, iar

    ~vector() { delete [] e; }

    este un destructor.>ipurile abstracte de date de tip truct pot +i i ele considerate clase cu toate elementeleneprote$ate. Constructorul de mai sus este declarat #n interiorul clasei, dar nu este de+init, iardestructorul este de+init #n interiorul clasei. -e4ult c destructorul este o +uncie inline.e+inirea +unciilor membru care sunt declarate, dar nu sunt de+inite #n interiorul clasei se+ace ca i #n ca4ul tipurilor abstracte de date de tip struct, +olosind operatorul de re4oluie.

    1!&!1!4! Membrii unei clase! +ointerul tis

    -e+erirea la datele respectiv +unciile membru ale claselor se +ace cu a$utorul operatorilorpunct (.) sau sgeat (OQ) ca i #n ca4ul re+eririi la elementele unei structuri. e e6emplu, dacse declar*

    vector v;

    vector* p;

    atunci a+iarea vectorului v respectiv a vectorului re+erit de pointerul p se +ace prin*

    v.afiseaza();

    p->afiseaza();

    Hn interiorul +unciilor membru #ns re+erirea la datele respectiv +unciile membru ale clasei se+ace simplu prin numele acestora +r a +i nevoie de operatorul punct (.) sau sgeat (OQ). e+apt compilatorul generea4 automat un pointer special, pointerul t4i, la +iecare apel de+uncie membru, i +olosete acest pointer pentru identi+icarea datelor i +unciilor membru.

    "ointerul t4iva +i declarat automat ca pointer ctre obiectul curent. Hn ca4ul e6emplului demai sus pointerul t4ieste adresa vectorului vrespectiv adresa re+erit de pointerulp.

    ac #n interiorul corpului +unciei membru a'iea#ase utili4ea4 de e6emplu data membru d,atunci ea este interpretat de ctre compilator ca i t&isOQd.

    "ointerul t4ipoate +i +olosit i #n mod e6plicit de ctre programator, dac natura problemeinecesit acest lucru.

    1!&!1!! onstructorul

    3niiali4area obiectelor se +ace cu o +uncie membru speci+ic numit constructor. umeleconstructorului trebuie s coincid cu numele clasei. ! clas poate s aib mai muliconstructori. Hn acest ca4 aceste +uncii membru au numele comun, ceea ce se poate +acedatorit posibilitii de supra#ncrcare a +unciilor. 7ine#neles, #n acest ca4 numrul iWsau

  • 8/10/2019 Manual Informatica 2014 RO

    18/82

    1G

    tipul parametrilor +ormali trebuie s +ie di+erit, alt+el compilatorul nu poate s aleagconstructorul corespun4tor.

    Constructorul nu returnea4 o valoare. Hn acest ca4 nu este permis nici +olosirea cuvPntuluic&eie void.

    "re4entm #n continuare un e6emplu de tip clasa cu mai muli constructori, avPnd ca date

    membru numele i prenumele unei persoane, i cu o +uncie membru pentru a+iarea numeluicomplet.

    5iierulpersoana.h*

    class persoana {

    char* nume;

    char* prenume;

    public:

    persoana(); //constructor implicit

    persoana(char* n, char* p); //constructor

    persoana(const persoana& p1); //constructor de copiere

    ~persoana(); //destructor

    void afiseaza();};

    5iierulpersoana.cpp*

    #include

    #include

    #include "persoana.h"

    using namespace std;

    persoana::persoana()

    {

    nume = new char[1];*nume = 0;

    prenume = new char[1];

    *prenume = 0;

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    19/82

    1L

    persoana::~persoana()

    {

    delete[] nume;

    delete[] prenume;

    }

    void persoana::afiseaza()

    {

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    20/82

    2K

    unde lista_de_argumente respectiv l_arg_i repre4int lista parametrilor +ormali aiconstructorului clasei nume_clasarespectiv ai obiectului ob_i.

    in lista ob_1(l_arg_1), ob_2(l_arg_2), ..., ob_n(l_arg_n) pot s lipseascobiectele care nu au constructori de+inii de programator, sau obiectul care se iniiali4ea4 cu

    un constructor implicit, sau cu toi parametrii implicii.

    ac clasa conine date membru de tip obiect atunci se vor apela mai #ntPi constructoriidatelor membru, iar dup aceea corpul de instruciuni al constructorului clasei respective.

    5iierulpereche.cpp*

    #include

    #include "persoana.h"

    using namespace std;

    class pereche {

    persoana sot;

    persoana sotie;

    public:

    pereche() //definitia constructorului implicit

    { //se vor apela constructorii impliciti

    } //pentru obiectele sot si sotie

    pereche(persoana& sotul, persoana& sotia);

    pereche(char* nume_sot, char* prenume_sot,

    char* nume_sotie, char* prenume_sotie):

    sot(nume_sot, prenume_sot),

    sotie(nume_sotie, prenume_sotie)

    {

    }void afiseaza();

    };

    inline pereche::pereche(persoana& sotul, persoana& sotia):

    sot(sotul), sotie(sotia)

    {

    }

    void pereche::afiseaza()

    {

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    21/82

    21

    EF.afiseaza();

    return 0;

    }

    !bservm c #n ca4ul celui de al doilea constructor, parametrii +ormali ot i otie au +ostdeclarai ca i re+erine la tipulperoana. ac ar +i +ost declarai ca parametri +ormali de tip

    peroana, atunci #n ca4ul declaraiei*

    pereche AB(A, B);

    constructorul de copiere sOar +i apelat de patru ori. Hn ast+el de situaii se creea4 mai #ntPiobiecte temporale +olosind constructorul de copiere (dou apeluri #n ca4ul de +a), dup carese e6ecut constructorii datelor membru de tip obiect (#nc dou apeluri).

    1!&!1!3! 0estructorul

    estructorul este +uncia membru care se apelea4 #n ca4ul distrugerii obiectului. estructorulobiectelor globale se apelea4 automat la s+Pritul +unciei mainca parte a +unciei eEit. eci,nu este indicat +olosirea +unciei eEit#ntrOun destructor, pentru c acest lucru duce la un cicluin+init. estructorul obiectelor locale se e6ecut automat la terminarea blocului #n care sOaude+init. Hn ca4ul obiectelor alocate dinamic, de obicei destructorul se apelea4 indirect prinoperatorul delete (obiectul trebuie s +i +ost creat cu operatorul neH). @6ist i un mode6plicit de apelare a destructorului, #n acest ca4 numele destructorului trebuie precedat denumele clasei i operatorul de re4oluie.

    umele destructorului #ncepe cu caracterul _ dup care urmea4 numele clasei. Ca i #n ca4ulconstructorului, destructorul nu returnea4 o valoare i nu este permis nici +olosireacuvPntului c&eie void. Apelarea destructorului #n di+erite situaii este ilustrat de urmtorule6emplu. 5iierul destruct.cpp*

    #include

    #include

    using namespace std;

    class scrie { //scrie pe stdout ce face.

    char* nume;

    public:

    scrie(char* n);

    ~scrie();

    };

    scrie::scrie(char* n){

    nume = new char[strlen(n)+1];

    strcpy(nume, n);

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    22/82

    22

    }

    void functie()

    {

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    23/82

    2

    class nume_clas_derivat: lista_claselor_de_baz{

    //date membru noi i funcii membru noi

    };

    unde lista_claselor_de_bazeste de +orma*elem_1, elem_2, ..., elem_n

    i elem_ipentru orice 1 ` i ` n poate +ipublic clas_de_baz_i

    sau

    protected clas_de_baz_i

    sau

    private clas_de_baz_i

    Cuvintele c&eie public, protected i private se numesc i de aceast dat modi'icatori deprotecie. @i pot s lipseasc, #n acest ca4 modi+icatorul implicit +iind private. Accesul laelementele din clasa derivat este pre4entat #n tabelul 1.

    Accesul laelementele din clasa

    de ba4

    Modi+icatorii deprotecie re+eritoare

    la clasa de ba4

    Accesul laelementele din clasa

    derivat

    public public public

    protected public protected

    private public inaccesibil

    public protected protected

    protected protected protected

    private protected inaccesibilpublic private private

    protected private private

    private private inaccesibil

    abelul 1; acceul la elementele din claa derivat

    !bservm c elementele de tip privateale clasei de ba4 sunt inaccesibile #n clasa derivat.@lementele de tip protected i public devin de tip protected, respectiv private dacmodi+icatorul de protecie re+eritor la clasa de ba4 esteprotectedrespectivprivate, i rmPnnesc&imbate dac modi+icatorul de protecie re+eritor la clasa de ba4 este public. in acestmotiv #n general datele membru se declar de tip protected i modi+icatorul de proteciere+eritor la clasa de ba4 este public. Ast+el datele membru pot +i accesate, dar rmPn

    prote$ate i #n clasa derivat.

  • 8/10/2019 Manual Informatica 2014 RO

    24/82

    2

    1!4!&! uncii $irtuale

    oiunea de polimor+ism ne conduce #n mod +iresc la problematica determinrii+unciei membru care se va apela #n ca4ul unui obiect concret. considerm urmtorule6emplu. eclarm clasa de ba4 ba#a, i o clas derivat din acest clas de ba4, clasa

    derivata. Clasa de ba4 are dou +uncii membru*'unctiaG1i'unctiaG2. Hn interiorul +uncieimembru 'unctiaG2 se apelea4 'unctiaG1. Hn clasa derivat se supra#ncarc +uncia membru'unctiaG1, dar +uncia membru'unctiaG2nu se supra#ncarc. Hn programul principal se declarun obiect al clasei derivate i se apelea4 +uncia membru'unctiaG2motenit de la clasa de

    ba4. Hn limba$ul C'' acest e6emplu se scrie #n urmtoarea +orm.5iierul virtual1.cpp*

    #include

    using namespace std;

    class baza {

    public:

    void functia_1();void functia_2();

    };

    class derivata : public baza {

    public:

    void functia_1();

    };

    void baza::functia_1()

    {

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    25/82

    20

    Hns acest lucru nu este re4ultatul dorit, deoarece #n cadrul +unciei main sOa apelat +unciamembru 'unctiaG2motenit de la clasa de ba4, dar +uncia membru 'unctiaG1 apelat de

    'unctiaG2 sOa determinat #nc #n +a4a de compilare. Hn consecin, dei +uncia membru'unctiaG1 sOa supra#ncrcat #n clasa derivat nu sOa apelat +uncia supra#ncrcat ci +unciamembru a clasei de ba4.

    Acest nea$uns se poate #nltura cu a$utorul introducerii noiunii de +uncie membru virtual.ac +uncia membru este virtual, atunci la orice apelare a ei, determinarea +unciei membrucorespun4toare a ierar&iei de clase nu se va +ace la compilare ci la e6ecuie, #n +uncie denatura obiectului pentru care sOa +cut apelarea. Aceast proprietate se numete legaredinamic, iar dac determinarea +unciei membru se +ace la compilare, atunci se vorbete delegare tatic.

    Am v4ut c dac se e6ecut programul virtual1.cpp se apelea4 +unciile membru'unctiaG1i 'unctiaG2ale clasei de ba4. Hns +uncia membru'unctiaG1+iind supra#ncrcat#n clasa derivat, ar +i de dorit ca +uncia supra#ncrcat s +ie apelat #n loc de cea a clasei de

    ba4.

    Acest lucru se poate reali4a declarPnd 'unctiaG1ca +uncie membru virtual. Ast+el, pentruorice apelare a +unciei membru'unctiaG1, determinarea acelui e6emplar al +unciei membrudin ierar&ia de clase care se va e6ecuta, se va +ace la e6ecuie i nu la compilare. Ca urmare,+uncia membru'unctiaG1se determin prin legare dinamic.

    Hn limba$ul C'' o +uncie membru se declar virtual #n cadrul declarrii clasei respective #nmodul urmtor* antetul +unciei membru se va #ncepe cu cuvPntul c&eie virtual.

    ac o +uncie membru se declar virtual #n clasa de ba4, atunci supra#ncrcrile ei se vorconsidera virtuale #n toate clasele derivate ale ierar&iei.

    Hn ca4ul e6emplului de mai sus declararea clasei de ba4 se modi+ic #n +elul urmtor.

    class baza {

    public:

    virtual void functia_1();void functia_2();

    };

    -e4ultatul obinut prin e6ecuie se modi+ic ast+el*

    S-a apelat functia membru functia_2 a clasei de baza

    S-a apelat functia membru functia_1 a clasei derivate

    eci, #ntrOadevr se apelea4 +uncia membru'unctiaG1a clasei derivate.

    "re4entm #n continuare un alt e6emplu #n care apare necesitatea introducerii +unciilormembru virtuale. se de+ineasc clasa 'ractie re+eritoare la numerele raionale, avPnd ca

    date membru numrtorul i numitorul +raciei. Clasa trebuie s aib un constructor, valoareaimplicit pentru numrtor +iind 4ero iar pentru numitor unu, precum i dou +uncii membru*produ pentru a calcula produsul a dou +racii i inmultete pentru #nmulirea obiectuluicurent cu +racia dat ca i parametru. e asemenea, clasa'ractietrebuie s aib i o +unciemembru pentru a+iarea unui numr raional. 5olosind clasa 'ractieca i clas de ba4 se vade+ini clasa derivat 'ractieGcrie, pentru care se va supra#ncrca +uncia produast+el #ncPtconcomitent cu e+ectuarea #nmulirii s se a+ie4e pe tdout operaia respectiv. 5unciainmultetenu se va supra#ncrca, dar operaia e+ectuat trebuie s se a+ie4e pe dispo4itivulstandard de ieire i #n acest ca4. 5iierul fvirt1.cpp*

  • 8/10/2019 Manual Informatica 2014 RO

    26/82

  • 8/10/2019 Manual Informatica 2014 RO

    27/82

    2N

    r.afiseaza();

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    28/82

    2G

    void afiseaza();

    };

    up e+ectuarea acestei modi+icri prin e6ecutarea programului obinem*

    15 / 8

    15 / 8

    (3 / 4) * (5 / 2) = 15 / 8(3 / 4) * (5 / 2) = 15 / 8

    15 / 8

    15 / 8

    15 / 8

    eci, se observ c a+iarea operaiei sOa +cut de dou ori, pentru ambele e6presii. 5unciilevirtuale, ca i alte +uncii membru de +apt, nu trebuie neaprat supra#ncrcate #n claselederivate. ac nu sunt supra#ncrcate atunci se motenete +uncia membru de la un nivelsuperior.

    eterminarea +unciilor membru virtuale corespun4toare se +ace pe ba4a unor tabeleconstruite i gestionate #n mod automat. !biectele claselor care au +uncii membru virtuale

    conin i un pointer ctre tabela construit. e aceea gestionarea +unciilor membru virtualenecesit mai mult memorie i un timp de e6ecuie mai #ndelungat.

    1!4!4! lase abstracte

    Hn ca4ul unei ierar&ii de clase mai complicate, clasa de ba4 poate avea nite proprietigenerale despre care tim, dar nu le putem de+ini numai #n clasele derivate. e e6emplu sconsiderm ierar&ia de clase din +igura 1.

    !bservm c putem determina nite proprieti re+eritoare la clasele derivate. e e6emplu

    greutatea medie, durata medie de via i vite4a medie de deplasare. Aceste proprieti se vordescrie cu a$utorul unor +uncii membru. Hn principiu i pentru clasa animale6ist o greutatemedie, durat medie de via i vite4 medie de deplasare. ar aceste proprieti ar +i multmai greu de determinat i ele nici nu sunt importante pentru noi #ntrOo generalitate de acest+el. >otui pentru o tratare general ar +i bine, dac cele trei +uncii membru ar +i declarate #nclasa de ba4 i de+inite #n clasele derivate. Hn acest scop sOa introdus noiunea de 'unciemembru virtual pur.

    %igura 1. &erar4ie de clae re'eritoare la animale

  • 8/10/2019 Manual Informatica 2014 RO

    29/82

    2L

    5uncia virtual pur este o +uncie membru care este declarat, dar nu este de+init #n clasarespectiv. @a trebuiede+init #ntrOo clas derivat. 5uncia membru virtual pur se declar#n modul urmtor. Antetul obinuit al +unciei este precedat de cuvPntul c&eie virtual, iantetul se termin cu 6 (. up cum arat numele i declaraia ei, +uncia membru virtual

    pur este o +uncie virtual, deci selectarea e6emplarului +unciei din ierar&ia de clase se va+ace #n timpul e6ecuiei programului.

    Clasele care conin cel puin o +uncie membru virtual pur se vor numi clae abtracte.

    eoarece clasele abstracte conin +uncii membru care nu sunt de+inite, nu se pot crea obiecteaparinPnd claselor abstracte. ac +uncia virtual pur nu sOa de+init #n clasa derivat atuncii clasa derivat va +i clas abstract i ca atare nu se pot de+ini obiecte aparinPnd aceleiclase.

    considerm e6emplul de mai sus i s scriem un program, care re+eritor la unporumbel,ur sau caldetermin dac el este gras sau slab, rapid sau #ncet, respectiv tPnr sau btrPn.A+iarea acestui re4ultat se va +ace de ctre o +uncie membru a clasei animal care nu sesupra#ncarc #n clasele derivate. 5iierul abstract1.cpp*

    #include

    using namespace std;

    class animal {

    protected:

    double greutate; // kg

    double virsta; // ani

    double viteza; // km / h

    public:

    animal( double g, double v1, double v2);

    virtual double greutate_medie() = 0;

    virtual double durata_de_viata_medie() = 0;

    virtual double viteza_medie() = 0;

    int gras() { return greutate > greutate_medie(); }

    int rapid() { return viteza > viteza_medie(); }int tanar()

    { return 2 * virsta < durata_de_viata_medie(); }

    void afiseaza();

    };

    animal::animal( double g, double v1, double v2)

    {

    greutate = g;

    virsta = v1;

    viteza = v2;

    }

    void animal::afiseaza()

    {cout

  • 8/10/2019 Manual Informatica 2014 RO

    30/82

    K

    double greutate_medie() { return 0.5; }

    double durata_de_viata_medie() { return 6; }

    double viteza_medie() { return 90; }

    };

    class urs: public animal {

    public:

    urs( double g, double v1, double v2):

    animal(g, v1, v2) {}

    double greutate_medie() { return 450; }

    double durata_de_viata_medie() { return 43; }

    double viteza_medie() { return 40; }

    };

    class cal: public animal {

    public:

    cal( double g, double v1, double v2):

    animal(g, v1, v2) {}

    double greutate_medie() { return 1000; }

    double durata_de_viata_medie() { return 36; }

    double viteza_medie() { return 60; }

    };

    int main() {

    porumbel p(0.6, 1, 80);

    urs u(500, 40, 46);

    cal c(900, 8, 70);

    p.afiseaza();

    u.afiseaza();

    c.afiseaza();

    return 0;

    }

    !bservm c dei clasa animaleste clas abstract, este util introducerea ei, pentru c multe+uncii membru pot +i de+inite #n clasa de ba4 i motenite +r modi+icri #n cele trei clase

    derivate.

    1!4!! Interfee

    Hn limba$ul C'' nu sOa de+init noiunea de inter+a, care e6ist #n limba$ele ava sau C. arorice clas abstract, care conine numai +uncii virtuale pure, se poate considera o inter+a.7ine#neles, #n acest ca4 nu se vor declara nici date membru #n interiorul clasei. Clasaabstract animal conine atPt date membru, cPt i +uncii membru nevirtuale, deci ea nu se

    poate considera ca i un e6emplu de inter+a.

    Hn continuare introducem o clas abstract Ie4icul, care nu conine numai +uncii membruvirtuale pure, i dou clase derivate din aceast clas abstract. 5iierul vehicul.cpp*

    #include

    using namespace std;

    class Vehicul

    {

    public:

    virtual void Porneste() = 0;

  • 8/10/2019 Manual Informatica 2014 RO

    31/82

    1

    virtual void Opreste() = 0;

    virtual void Merge(int km) = 0;

    virtual void Stationeaza(int min) = 0;

    };

    class Bicicleta : public Vehicul

    {

    public:

    void Porneste();

    void Opreste();

    void Merge(int km);

    void Stationeaza(int min);

    };

    void Bicicleta::Porneste() {

    cout

  • 8/10/2019 Manual Informatica 2014 RO

    32/82

    2

    int main()

    {

    Vehicul *b = new Bicicleta;

    Traseu(b);

    Vehicul *m = new Masina;

    Traseu(m);

    delete m;

    delete b;

    }

    Hn +unc[ia mainsOau declarat dou obiecte dinamice de tip icicletarespectiv Maina

  • 8/10/2019 Manual Informatica 2014 RO

    33/82

  • 8/10/2019 Manual Informatica 2014 RO

    34/82

    post@ lLLLL, =l adaugSfarsit(l, e)

    descriere@ se adaug un element la s+Pritul listei

    pre@ lLLLL eTElement

    post@lJLLLL lJ este lZn care a +ost adugat ela s+PritadaugInceput(l, e)

    descriere@ se adaug un element la #nceputul listei

    pre@ lLLLL eTElement

    post@lJLLLL lJ este lZn care a +ost adugat ela Znceput

    valid(l,p)descriere@+uncie care veri+ic dac o po4iie #n list este valid

    pre@ lLLLL,pe opo#iie#n lpost@ valid adevrat dacpeste o po4iie valid #nl

    +als #n ca4 contrar

    adaugnainte(l,p, e)descriere@se adaug un element #naintea unei anumite po4iii #n list

    pre@ lLLLL eTElement,pe opo#iie#n l, valid(l p)

    post@lJLLLL lJestelZn care a +ost inserat e#nainte de po4iiapadaugDup(l,p, e)

    descriere@se adaug un element dup o anumit po4iie #n list

    pre@ lLLLL eTElement,pe opo#iie#n l, valid(l p)

    post@lJLLLL lJestelZn care a +ost inserat edup po4iiapterge(l,p, e)

    descriere@ se terge elementul din list situat pe o anumit po4iie

    pre@ lLLLL eTElement,pe opo#iie#n l, valid(l p)post@eTElement lJLLLL, lJeste ldin care a +ost

  • 8/10/2019 Manual Informatica 2014 RO

    35/82

    0

    pre@ lLLLLpost@ ultimU po4iia ultimului element din lsau o po4iie care nu e valid

    dac le vidurmtor(l,p)

    descriere* +uncie care returnea4 po4iia #n list urmtoare unei po4iiidate

    pre@ lLLLLpe opo#iie#n l, valid(l p)post@ urmatorU po4iia din lcare urmea4 po4iieipsau o po4iie care nu e

    valid dacpe po4iia ultimului element din listprecedent(l,p)

    descriere* +uncie care returnea4 po4iia #n list precedent unei po4iiidate

    pre@ lLLLLpe opo#iie#n l, valid(l p)post@precedentU po4iia din lcare precede po4iiapsau o po4iie care nu

    e valid dacpe po4iia primului element din listcaut(l, e)

    descriere@+uncie care caut un element #n listpre@ lLLLL eTElementpost@ cautU primapo4iie pe careaparee#n lsau o po4iie care nu e

    valid dac le apare(l, e)

    descriere@+uncie care veri+ic apartenena unui element #n list

    pre@ lLLLL eTElementpost@ apareU adevrat le

    +als contrarvid(l)

    descriere@+uncie care veri+ic dac lista este vid

    pre@ lLLLLpost@ vid adevrat #n ca4ul #n care le lista vid

    +als #n ca4 contrardim(l)

    descriere@+uncie care returnea4 numrul de elemente din list

    pre@ lLLLLpost@ dimnumrul de elemente din list

    iterator(l, i)descriere@se construiete un iterator pe list

    pre@ lLLLLpost@ieste un iterator pe lista l

    distruge(l)descriere@distruge o list

    pre@ lLLLLpost@lista l a +ost distrus

    -eamintim modul #n care va putea +i tiprit o list (ca orice alt container care poate +iiterat) +olosind iteratorul construit pe ba4a operaiei iteratordin inter+aa listei.

  • 8/10/2019 Manual Informatica 2014 RO

    36/82

    Subalgoritmul tiprire(l) este:

    {pre: l este o list}

    {post: se tipresc elementele listei}

    iterator(l, i) {se obine un iterator pe lista l}

    Cttimp valid(i) execut {ct timp iteratorul e valid}

    element(i, e) {e este elementul curent referit de iterator}

    @ tiprete e {se tiprete elementul curent}

    urmtor(i) {iteratorul referurmtorul element}

    sfctsf-tiprire

    O4ser/aCie

    Men[ionm +aptul c nu este o modalitate unanim acceptat pentru speci+icareaopera[iilor. pre e6emplu, pentru opera[ia adaugS'arit din inter+a[a TA& Lista o altmodalitatecorect de speci+icare ar +i una dintre cele de mai $os*

    adaugSfarsit(l, e)desc.@ se adaug un element la s+Pritul listei

    pre@ lLLLL eTElement

    post@lJLLLL lJU lReT, eeste pe ultima po4i[ie Zn lJ

    adaugSfarsit(l, e)descriere@ se adaug un element la s+Pritul listei

    pre@ lLLLL eTElement

    post@ lLLLL leste modi+icat prin adugarea lui e la s+Prit

  • 8/10/2019 Manual Informatica 2014 RO

    37/82

    N

    studentului, in+ormaii au6iliare, etc). 3n+ormaiile adiionale vor +i considerate ca+iind valoarea elementului.

    m #n continuare speci+icaia >ipului Abstract de ate &icio0ar.

    Tipul Abstract de Date DICIONAR

    dome0i

    DDDD6Rd = d este un dicionar cu elemente e >c /? cde tip T!9eie / de tipTDaloareT

    operaii (i0ter8aa mi0imal)

    creeaz(d)descriere@ se creea4 un dicionar vidpre@ true

    post@dDDDD,d este dicionarul vid (+r elemente)

    adaug(d, c, v)descriere@se adaug un element #n dicionar

    pre@ dDDDD cT!9eie vTDaloare

    post@dJDDDD dJUdRc, vT (se adaug #n dicionar perec&ea (c, v))caut(d, c)

    descriere@se adaug un element #n dicionar (dup c&eie)

    pre@dDDDD cT!9eiepost@ cautvTDaloare dac (c,v)d

    elementul nul al TDaloare #n ca4 contrarterge(d, c)

    descriere@se adaug un element #n dicionar (dup c&eie)

    pre@ dDDDD cT!9eiepost@/tergevTDaloare dac (c,v)d, dJ este ddin care a +ost

  • 8/10/2019 Manual Informatica 2014 RO

    38/82

    G

    descriere@se determin colecia valorilor din dicionar

    pre@ dDDDD

    post@cCCCColololol, ceste colecia valorilor din dicionarul dperechi(d, m)

    descriere@se determin mulimea perec&ilor (c&eie, valoare) din dicionar

    pre@ dDDDDpost@mMMMM, m este mulimea perec&ilor (c&eie, valoare) din dicionarul d

    iterator(d, i)descriere@se creea4 un iterator pe dicionar

    pre@ dDDDD

    post@iIIII, ieste iterator pe dicionarul ddistruge(d)

    descriere@distruge un dicionar

    pre@ dDDDDpost@dicionarul da +ost distrus

    -eamintim modul #n care va putea +i tiprit un dicionar (ca orice alt container carepoate +i iterat) +olosind iteratorul construit pe ba4a operaiei iterator din inter+aadicionarului.

    Subalgoritmul tiprire(d) este:

    {pre: d este un dicionar}

    {post: se tipresc elementele dicionarului}

    iterator(d, i) {se obine un iterator pe dicionarul d}

    Cttimp valid(i) execut {ct timp iteratorul e valid}

    element(i, e) {e este elementul curent referit de iterator}

    @ tiprete e {se tiprete elementul curent}

    urmtor(i) {iteratorul referurmtorul element}

    sfct

    sf-tiprire

    1!3! +robleme propuse

    1. criei un program #ntrOunul din limba$ele de programare "%t&on, C'', ava, C care*a. e+inete o clas BavPnd un atribut bde tip #ntreg i o metod de tiprire care

    a+iea4 atributul bla ieirea standard.b. e+inete o clas &derivat din B avPnd un atribut dde tip ir de caractere i de

    asemenea o metod de tiprire pe ieirea standard care va a+ia atributul b din

    clasa de ba4 i atributul d.c. e+inete o +uncie care construiete o list coninPnd* un obiect o1de tip B avPndbegal cu G; un obiect o2de tip & avPndbegal cu 0 i degal cu 0; un obiect o3de tip B avPndbegal cu O; un obiect o'de tip & avPndbegal cu L i degal cuL.

    d. e+inete o +uncie care primete o list cu obiecte de tip Bi returnea4 o listdoar cu obiectele care satis+ac proprietatea* bE-.

    e. "entru tipul de dat list utili4at #n program, scriei speci+icaiile operaiilor+olosite.

  • 8/10/2019 Manual Informatica 2014 RO

    39/82

  • 8/10/2019 Manual Informatica 2014 RO

    40/82

    K

    2! %aze de date

    2!1! %aze de date relaionale! +rimele trei forme normale ale uneirelaii

    2!1!1! Modelul relaional

    Modelul relaional de organi4are a ba4elor de date a +ost introdus de $.*.!odd#n 1LNKi este cel mai studiat i mai mult +olosit model de organi4are a ba4elor de date. 3n continuarese va +ace o scurt pre4entare a acestui model.

    5ie A! A"! ###! Ano mulime de atribute (coloane, constituani, nume de date, etc.) iFH?i&om>Ai& = domeniul valorilor posibile pentru atributulAi! unde prin sOa notat

    valoarea de nede'init (null). Faloarea de nede'initse +olosete pentru a veri+ica dac unuiatribut i sOa atribuit o valoare sau el nu are valoare (sau are valoarea nede+init). Aceastvaloare nu are un anumit tip de dat, se pot compara cu aceast valoare atribute de di+eritetipuri (numerice, iruri de caractere, date calendaristice, etc.).

    "lecPnd de la mulimile ast+el introduse, se poate de+ini o relaie de gradl 0 sub+orma urmtoare*

    ,...21 n$$$<

    i poate +i considerat ca o mulime de vectori cu cPte 0valori, cPte o valoare pentru +iecaredin atributele Ai. ! ast+el de relaie se poate memora printrOun tabel de +orma*

    R A1 ... Ai .. A0

    r1 a11 ... a1$ ... a1n

    ... ... ... ... ... ...

    ri ai1 ... ai$ ... ain

    ... ... ... ... ... ...

    rm am1 ... am$ ... amn

    unde liniile din acest tabel +ormea4 eleme0tele relaiei, sau tplri, sau 0registrri, care#n general sunt distincte, i .,...,1,,...,1, minF$a FiF == eoarece modul #n care se

    evidenia4 elementele relaiei$de mai sus seamn cu un tabel, relaia se mai numete ita4el. "entru a pune #n eviden numele relaiei (tabelului) i lista atributelor vom notaaceast relaie cu*

    [ ]n< ,...,, 21 .

    odell relaio0al al 0ei 4aze de dateconst dintrOo colecie de relaiice varia4 #ntimp (coninutul relaiilor se poate sc&imba prin operaii de adugare, tergere i actuali4are).

    ! 4az de date relaio0alconst din trei pri*

    1. &atele(relaii sau tabele, legturi #ntre tabele) i descrierea acestora;

  • 8/10/2019 Manual Informatica 2014 RO

    41/82

    1

    2. Regli de i0tegritate(pentru a memora numai valori corecte #n relaii);

    . Operatori de gesti0ea datelor.

    $Jempll 1. ST)&$+TI K+)$ A+)L+AST$RII A+)L&$ST)&I)M

    cu urmtoarele valori posibile*

    +)$ A+)L+AST$RII A+)L&$ST)&I)"op 3oan 1LG0 27arbu Ana 1LGN 1an -adu 1LG

    $Jempll 2. !ART$ KA)TORI TITL) $&IT)RA A+APARITI$M

    cu valorile*

    A)TORI TITL) $&IT)RA A+APARITI$ate, C.. An 3ntroduction to atabase

    %stemsAddisonOesle%"ublis&ing Comp.

    2KK

    9llman, .,idom, .

    A 5irst Course in atabase %stems AddisonOesle% '"renticeOall

    2K11

    elman, ". >&e cience o+ atabaseManagement

    3r:in, 9A 1LL

    -amakris&nan, -. atabase Management%stems

    McDra:Oill 2KKN

    "entru +iecare relaie se poate preci4a un atribut sau o colecie de atribute, din cadrulrelaiei, numit c9eie, cu rol de identi+icare a elementelor relaiei (c&eia ia valori di+erite

    pentru #nregistrri di+erite din relaie, deci +iecare #nregistrare se poate identi+ica prinvaloarea c&eii). ac se d cPte o valoare pentru atributele din c&eie, se poate determina linia(una singur) #n care apar aceste valori. Fom presupune c nici o submulime de atribute dinc&eie nu este c&eie. eoarece toate elementele relaiei sunt di+erite, o c&eie e6ist totdeauna

    (#n cel mai ru ca4 c&eia este +ormat din toate atributele relaiei). "entru e6emplul 1 se poatealege 9M@ ca i c&eie (atunci #n ba4a de date nu pot e6ista doi studeni cu acelai nume),iar pentru e6emplul 2 se poate alege grupul de atribute RA9>!-3, >3>/9, @3>9-A,AfA"A-3>3@T ca i c&eie, sau s se introduc un nou atribut (de e6emplu C!>A) pentruidenti+icare.

    "entru anumite relaii pot +i alese mai multe c&ei. 9na dintre c&ei (un atribut simplu sauun atribut compus din mai multe atribute simple) se alege c9eie pri0cipal (primar), iarcelelalte se vor considera c9ei sec0dare. istemele de gestiune a ba4elor de date nu permite6istena a dou elemente distincte #ntrOo relaie cu aceeai valoare pentru oricare c&eie(principal sau secundar), deci preci4area unei c&ei constituie o restricie pentru ba4a dedate.

    $Jempll 3. ORAR K%I ORA SALA PRO*$SOR !LASA &IS!IPLI+AMcu orarul pe o sptmPn. e pot alege ca i c&ei urmtoarele mulimi de atribute*

    RJ3, !-A, A/AT; RJ3, !-A, "-!5@!-T; RJ3, !-A, C/AAT.

    Falorile unor atribute dintrOo relaie pot s apar #n alt relaie. "lecPnd de la o relaieR2 se pot cuta #nregistrrile dintrOo relaie R1dup valorile unui ast+el de atribut (simplusau compus). 3n relaia R2 se stabilete un atribut A, numit c9eie eJter0. Falorile

  • 8/10/2019 Manual Informatica 2014 RO

    42/82

    2

    atributului Ase caut printre valorile c&eii din relaia R1. Cele dou relaii R1i R2nu esteobligatoriu s +ie distincte.

    $Jempl*

    !LAS$ Xcod, pro+ilY$L$DI Xnrmatricol, nume, clasa, datanasteriiY.

    /egtura o putem stabili #ntre relaia !LAS$ (considerat ca printe pentru legtur) irelaia $L$DI(ca membru pentru legtur) prin egalitatea !LAS$.cod$L$DI.clasa. 9neianumite clase (memorat #n relaia !LAS$), identi+icat printrOun cod, #i corespund toielevii din clasa cu codul respectiv.

    "rin c9eie eJter0 se pot memora legtri 1@0 #ntre entiti* la o clas corespund

    oricPi elevi, iar unui elev #i este asociat cel mult o clas.C&eia e6tern se poate +olosi i pentru a memora legtri m@0#ntre entiti.

    5ie dou entiti* discipli0ei stde0i. /a o disciplin sunt VinscriiV mai muli studeni, iarun student are asociate mai multe discipline. Farianta de memorare cuprinde o relaieintermediar.

    "entru ca valorile dintrOo ba4 de date s +ie corecte, la de+inirea ba4ei de date se potpreci4a anumite restricii de i0tergritate(ele sunt veri+icate de sistemul de gestiune a ba4eide date la modi+icarea datelor din tabele). Aceste restricii se re+er la o coloan, la un tabel,la o legtur #ntre dou tabele*

    restricii asociate coloa0ei@o ot ull O coloana nu poate s primeasc valori nede+initeo "rimar% Be% O coloana curent se de+inete c&eia primaro 9nique O valorile coloanei sunt unice

    v v

    /1 /2cei

    "6ceie e7tern

  • 8/10/2019 Manual Informatica 2014 RO

    43/82

    o C&eck(condiie) O se d condiia pe care trebuie s o #ndeplineasc valorilecoloanei (condiii simple, care au valoarea truesau'ale)

    o 5oreign Be% -@5@-@C@ tabelfparinte X(numefcoloana)Y X!n 9pdate actiuneYX!n elete actiuneY O coloana curent este c&eie e6tern

    restricii asociate ta4elli@o "rimar% ke%(lista coloane) O de+inirea c&eii primare pentru tabel

    o 9nique(lista coloane) O valorile sunt unice pentru lista de coloane preci4ato C&eck(condiie) O pentru a preci4a condiia pe care trebuie s o #ndeplineasc

    valorile unei liniio 5oreign Be% numefc&eiefe6terna(listafcoloane) -@5@-@C@ tabelfparinte

    X(listafcoloane)Y X!n 9pdate actiuneY X!n elete actiuneY O se de+inete c&eiae6tern

    2!1!2! +rimele trei forme normale ale unei relaii

    3n general anumite date se pot repre4enta #n mai multe moduri prin relaii (la modelulrelaional). "entru ca aceste date s se poat prelcra cNt mai simpl (la o operaie de

    actuali4are a datelor s nu +ie necesare teste suplimentare) este necesar ca relaiile #n care sememorea4 datele s veri+ice anumite condiii (s aib un anumit nivel de normali4are).

    "Pn #n pre4ent se cunosc mai multe 8orme 0ormalepentru relaii, dintre care cele maicunoscute sunt* 15, 25, 5, 7C5, 5, 05. Avem urmtoarele inclu4iuni pentrurelaii #n di+erite +orme normale*

    ac o relaie nu este de o anumit +orm normal, atunci ea se poate descompune #nmai multe relaii de aceast +orm normal.

    &e8i0iie. "entru descompunerea unei relaii se +olosete operatorul de proiecie. 5ie[ ]n< ,...,, 21 o relaie i piii ,...,, 21= o submulime de atribute,

    n ,...,, 21 . "rin proieciarelaiei Rpe se #nelege relaia*

    { } ,)()(,...,, ,...,, 2121 == piiip iii

  • 8/10/2019 Manual Informatica 2014 RO

    44/82

    &e8i0iie. "entru compunerea relaiilor se +olosete operatorul de oi0 0atral. 5ie[ ],< , [ ],S dou relaii peste mulimile de atribute ,, , = h. "rin oi0l

    0atralal relaiilor Ri Sse #nelege relaia*

    ( ) .)()(,)(,)(),(Y,,X == riS

  • 8/10/2019 Manual Informatica 2014 RO

    45/82

    0

    @ste posibil ca #n diverse aplicaii practice s apar atribute (simple sau compuse) ceiau mai multe valori pentru un element din relaie. Aceste atribute +ormea4 un atri4trepetiti/.

    $Jempll '. 5ie relaia*

    ST)&$+T K+)$ A+)L+AST$RII GR)PA &IS!IPLI+A +OTAM

    cu atributul 9M@ ca i c&eie. 3n acest e6emplu perec&ea R3C3"/3A, !>AT este ungrup repetitiv. "utem avea urmtoarele valori #n aceast relaie*

    +)$ A+)L+AST$RII GR)PA &IS!IPLI+A +OTA"op 3oan 1LLG 221 7a4e de date

    isteme de operare"robabiliti

    1KLG

    Murean Ana 1LLL 222 7a4e de dateisteme de operare"robabiliti"roiect individual

    GN1KL

    $Jempll Q. 5ie relaia*

    !ART$ K!ota +meAtori Titl $ditra A0Apariie Lim4a !/i0te!9eieM

    cu atributul !otaca i c&eie i atributele repetitive +meAtorii !/i0te!9eie. Atributul!otapoate avea o semni+icaie e+ectiv (s e6iste o cot asociat la +iecare carte) sau s +ieintrodus pentru e6istena c&eii (valorile s +ie distincte, eventual pot s +ie generate automat).

    Grprile repetiti/ecrea4 +oarte multe greuti #n memorarea diverselor relaii i dinaceast cau4 se #ncearc e/itarealor, +r #ns a pierde date. ac RKAMeste o relaie, undeA este mulimea atributelor, iar +ormea4 un grup repetitiv (atribut simplu sau compus),atunci Rse poate descompune #n dou relaii +r ca s +ie atribut repetitiv. ac !este oc&eie pentru relaia R, atunci cele dou relaii #n care se descompune relaia R sunt@

    [ ] ( ) =

    C @-33, D-9"AY,R$%)LTAT$ X9M@, 3C3"/3A, !>AY.

    $Jempll . -elaia CA->@ din e6emplul 0 se descompune #n urmtoarele trei relaii(#n relaia CA->@ e6ist dou grupuri repetitive)*

    !ARTI XCota, >itlu, @ditura, AnApariie, /imbaY,A)TORI XCota, umeAutorY,!)DI+T$!$I$ XCota, CuvPntC&eieY.

    O4ser/aie. ac o carte nu are autori sau cuvinte c&eie asociate, atunci ea va aveacPte o #nregistrare #n relaiile A9>!-3 sau C9F3>@fC@3@ #n care al doilea atribut arevaloarea 0ll. ac se dorete eliminarea acestor #nregistrri, atunci relaia !ART$nu se va

    putea obine din cele trei relaii numai prin $oin natural (sunt necesari operatori de $oine6tern).

    &e8i0iie. ! relaie este de prima 8orm 0ormal >1+*?dac ea 0 co0i0e grpri(de atribute) repetiti/e.

  • 8/10/2019 Manual Informatica 2014 RO

    46/82

    istemele de gestiune a ba4elor de date relaionale permit descrierea numai a relaiilorce se a+l #n 15. @6ist i sisteme ce permit gestiunea relaiilor nonO15 (e6emplu !racle,unde o coloan poate +i un obiect sau o colecie de date, sau mai recent ba4ele de date

    o8/).

    9rmtoarele +orme normale ale unei relaii utili4ea4 o noiune +oarte important, ianume depe0de0a 80cio0al dintre diverse submulimi de atribute. tabilireadependenelor +uncionale este o sarcin a administratorului ba4ei de date i depinde desemni+icaia (semantica) datelor ce se memorea4 #n relaie. !peraiile de actuali4are adatelor din relaie (#nserare, tergere, modi+icare) nu trebuie s modi+ice dependenele+uncionale (dac pentru relaie e6ist ast+el de dependene).

    &e8i0iie. 5ie [ ]n< ,...,, 21 o relaie i { }n ,...,,, 21 dou submulimi deatribute. Atributul (simplu sau compus) este depe0de0t 80cio0alde atributul (simplusau compus), notaie* , dac i numai dac +iecare valoare a lui din R are asociato /aloare precis i 0icpentru (aceast asociere este valabil tot timpul e6isteneirelaiei R). ! valoare oarecare a lui poate s apar #n mai multe linii ale lui R i atunci+iecare dintre aceste linii conine aceeai valoare pentru atributul , deci*

    ( ) ( ) = rr implic ( ) ( ) = rr .

    Faloarea din implicaia (dependena) se numete determinant, iar estedeterminat.

    O4ser/aie. ependena +uncional se poate +olosi ca o proprietate >restricie? pe careba4a de date trebuie s o #ndeplineasc pe perioada e6istenei acesteia* se adaug, elimin,modi+ic elemente #n relaie numai dac dependena +uncional este veri+icat.

    $Jiste0a 0ei depe0de0e 80cio0ale#ntrOo relaie #nseamn c anumite asocieri devalori se memorea4 de mai multe ori, deci apare o red0da0. "entru e6empli+icarea unor

    probleme care apar vom lua relaia urmtoare, care memorea4 re4ultatele la e6amene pentru

    studeni*

    $Jempll . $A$+ K+meStde0t &iscipli0a +ota !adr&idacticM

    unde c&eia este RNumeStudent $iciplinaT. eoarece unei discipline #i corespunde un singurcadru didactic, iar unui cadru didactic pot sOi corespund mai multe discipline, putem cere cas +ie #ndeplinit restricia (dependena) A$iciplinaBACadru$idacticB.

    $Jame0 +meStde0t &iscipli0a +ota !adr&idactic1 Alb Ana Matematic 1K -us >eodor2 Costin Constantin 3storie L "opa orea Alb Ana 3storie G "opa orea @nisei @lena Matematic L -us >eodor

    0 5rian 5lorin Matematic 1K -us >eodorac pstrm o ast+el de dependen +uncional, atunci pot apare urmtoarele probleme*

    Risip de spai* aceleai asocieri se memorea4 de mai multe ori. /egtura dintredisciplina de Matematic i pro+esorul

  • 8/10/2019 Manual Informatica 2014 RO

    47/82

    N

    de date va conine erori (va +i inconsistent). ac la prima #nregistrare se sc&imbvaloarea atributului Cadru$idactici nu se +ace aceeai modi+icare i la #nregistrrile i0, atunci modi+icarea va introduce o eroare #n relaie.

    A0omalii la 0serare* la adugarea unei #nregistrri trebuie s se cunoasc valorileatributelor, nu se pot +olosi valori nede+inite pentru atributele implicate #n dependenele+uncionale.

    A0omalii la tergere* la tergerea unor #nregistrri se pot terge i asocieri (#ntre valori)ce nu se pot re+ace. e e6emplu, dac se terg #nregistrrile 2 i , atunci asocierea dintre

    $iciplinai Cadru$idacticse pierde.

    Anomaliile de mai sus apar datorit e6istenei unei dependene +uncionale #ntremulimi de atribute. "entru a elimina situaiile amintite trebuie ca aceste dependene(asocieri) de valori s se pstre4e #ntrOo relaie separat. "entru aceasta este necesar ca relaiainiial s se descompun, +r ca prin descompunere s se piard date sau s se introducdate noi prin compunerea de relaii (trebuie ca descompunerea Vs +ie bunV). ! ast+el dedescompunere se +ace #n momentul proiectrii ba4ei de date, cPnd se pot stabili dependenele+uncionale.

    O4ser/aii. e pot demonstra uor urmtoarele proprieti simple pentru dependenele+uncionale*

    1. ac Ceste o c&eie pentru [ ]n< ,...,, 21 , atunci { }nC ,...,,, 21 .2. ac , atunci , numit depe0de0a 80cio0al tri/ial saure8leJi/itatea.

    ==

    )()()()( 2121 rrrr

    . ac , atunci , cu .

    ===

    )()()()()()( 212121 rrrrrr

    . ac i , atunci , care este proprietatea de tra0ziti/itate a

    dependenei +uncionale.

    ===

    )()()()()()( 212121 rrrrrr

    0. ac i , atunci , unde = .

    )()()()(

    )()()()()()( 21

    21

    212121 rrrr

    rrrrrr

    ==

    ===

    &e8i0iie. 9n atribut A (simplu sau compus) se numete primdac e6ist o c&eie C iAC (C este o c&eie compus, sau A este c&iar o c&eie a relaiei). ac un atribut nu esteinclus #n nici o c&eie, atunci se numete 0eprim.

    &e8i0iie. 5ie [ ]n< ,...,, 21 i { }n ,...,,, 21 . Atributul este complet

    depe0de0t 80cio0al de dac este dependent +uncional de (deci ) i nueste dependent +uncional de nici o submulime de atribute din ( ! , nu esteadevrat).

    O4ser/aie. ac atributul 0 este complet depe0de0t 80cio0al de (decieste dependent de o submulime a lui ), atunci este un atri4t comps.

    &e8i0iie. ! relaie este de a doa 8orm 0orml >2+*?dac* este de prima 8orm 0ormal,

  • 8/10/2019 Manual Informatica 2014 RO

    48/82

    G

    orice atri4t 0eprim (simplu sau compus) (deci care nu este inclus #ntrOo c&eie) estecomplet depe0de0t 80cio0al de oricare c9eie a relaiei.

    O4ser/aie. ac o relaie este de prima +orm normal (15) i nu este de a doua+orm normal (25), atunci are o c9eie comps(dac o relaie nu este de a doua +ormnormal, atunci e6ist o dependen +uncional cu atribut inclus #ntrOo c&eie).

    "entru a preci4a modul de descomp0erepentru ca4ul general, +ie [ ]n< ,...,, 21 orelaie i { }nC ,...,, 21= o c&eie. "resupunem c e6ist , =C h ( esteun atribut nec&eie), dependent +uncional de C ( este complet dependent+uncional de o submulime strict de atribute din c&eie). ependena se poateelimina dac relaia Rse descompune #n urmtoarele dou relaii*

    [ ] ( )[ ] = 3+*? dac este 2+* i orice

    atri4t 0eprim 0 este tra0ziti/ depe0de0t de oricare c9eie a relaiei.ac ! este o c9eie i un atribut tran4itiv dependent de c&eie, atunci e6ist un

    atribut care veri+ic* C (dependen care este veri+icat totdeauna) i .eoarece relaia este 25, obinem c este complet dependent de !, deci C# . e aicideducem c o relaie ce este 25 i nu este 5 are o dependen , iar este atributneprim. Aceast dependen se poate elimina prin descompunerea relaiei - #n modasemntor ca la eliminarea dependenelor de la 25.

  • 8/10/2019 Manual Informatica 2014 RO

    49/82

  • 8/10/2019 Manual Informatica 2014 RO

    50/82

    0K

    "entru a elimina dependena +uncional amintit mai sus trebuie s +acem urmtoareadescompunere pentru relaiaPLA+I*I!AR$$*

    PLA+I*I!AR$$ K&ata !adrdid Ora Stde0tM

    R$PARTI%AR$SALI K!adrdid &ata SalaM.

    up aceast descompunere nu mai e6ist dependene +uncionale, deci relaiile sunt de

    tipul 7C5, dar a disprut c&eia asociat restriciei preci4ate la punctul de mai sus* RSala$ata raT. ac se mai dorete pstrat o ast+el de restricie, atunci ea trebuie veri+icatalt+el (de e6emplu, prin program).

    2!2! Interogarea %0 cu operatori din algebra relaional

    "entru a eJplicalimba$ul de interogare (cererea de date) ba4at pe algebra relaiilor vompreci4a la #nceput tiprile de co0diiice pot apare #n cadrul di+eriilor operatori relaionali.

    1. "entru a veri+ica dac un atribut #ndeplinete o condiie simpl se +ace compararea acestuiacu o anumit /aloare, sub +orma*

    nume atribut operator'relaional/aloare2. ! relaie cu o singur coloan poate +i considerat ca o mulime. 9rmtoarea condiie

    testea4 dac o anumit valoare aparine sau nu unei mulimi*

    numefatribut$%&

    '()

    &NN&S

    &N&Srelaiefcufofcoloan

    . ou relaii (considerate ca mulimi de #nregistrri) se pot compara prin operaiile deegalitate, di+erit, inclu4iune, neinclu4iune. 3ntre dou relaii cu acelai numr decoloane i cu aceleai tipuri de date pentru coloane (deci #ntre dou mulimicomparabile) putem avea condiii de tipul urmtor*

    relaie

    **

    $

    **

    %

    &

    **

    '

    **

    (

    )

    =

    &NN&S&N&S

    relaie

    . >ot condiieeste i oricare din construciile urmtoare*

    condiie9

    N condiie

    condiie1 N$ condiie2

    condiie1 < condiie2

    unde condiie, condiie1, condiie2 sunt condiii de tipurile 1O.

    3n primul tip de condiie apare construcia valoare, care poate +i una din tipurileurmtoare. "entru +iecare construcie se ia #n valoareo anumit relaie curent, care re4ultdin conte6tul #n care apare aceasta.

    0meatri4t O care preci4ea4 valoarea atributului dintrOo #nregistrare curent. acpreci4area numai a numelui atributului crea4 ambiguitate (e6ist mai multe relaiicurente care conin cPte un atribut cu acest nume), atunci se va +ace o cali+icare aatributului cu numele relaiei sub +orma* relaie.atri4t.

  • 8/10/2019 Manual Informatica 2014 RO

    51/82

    01

    eJpresieO dac se evaluea4 e6presia, iar dac apar i denumiri de atribute, atunci acestease iau dintrOo #nregistrare curent.

    !O)+T>5? *RO relaieO preci4ea4 numrul de #nregistrri din relaia speci+icat.

    [ ]( )atributnume$&S&NC

    M&N

    M-

    IP

    S,M

    C,N

    f

    ***

    $

    **

    *

    %

    &

    ***

    '

    **

    *

    (

    )

    O care determin o valoare plecPnd de la toate

    #nregistrrile din relaia curent. /a determinarea acestei valori se iau toate valorileatributului preci4at ca argument (din toate #nregistrrile), sau numai valorile distincte,dup cum lipsete sau apare cuvPntul 3>3C>. Falorile ast+el determinate sunt*numrul de valori (pentru C!9>), suma acestor valori (apare 9M, valorile trebuie s+ie numerice), valoarea medie (apare AFD, valorile trebuie s +ie numerice), valoareama6im (apare MA), respectiv valoarea minim (apare M3).

    3n continuare se vor preci4a operatoriicare se pot +olosi pentru i0terogarea 4azelor

    de date relaio0ale. Selecia(sau proiecia ori4ontal) a unei relaii RO determin o nou relaie ce are aceeai

    sc&em cu a relaiei R. in relaia R se iau numai #nregistrrile care #ndeplinesc ocondiie c. otaia pentru acest operator este* )(

  • 8/10/2019 Manual Informatica 2014 RO

    52/82

  • 8/10/2019 Manual Informatica 2014 RO

    53/82

  • 8/10/2019 Manual Informatica 2014 RO

    54/82

    0

    1LLL O se complectea4 8/ cu posibiliti de gestiune orientate obiect, re4ultPnd8/ (sau 8/1LLL)

    2KK O se adaug noi tipuri de date # noi +uncii, re4ultPnd 8/2KK.

    !oma0da S$L$!T este +olosit pentru interogarea ba4elor de date (obinerea dein+ormaii). Aceast comand este cea mai comple6 din cadrul sistemelor ce conin comen4i8/. Comanda permite obinerea de date din mai multe surse de date. @a are, printre altele,+unciile de selectie, proiectie, produs carte4ian, $oin i reuniune, intersecie i di+eren dinlimba$ul de interogare a ba4elor de date relaionale ba4at pe algebra relaiilor. inta6acomen4ii este dat #n continuare.

    S$L$!T[ ] [ ][ ] $

    %&

    '()

    555

    6

    7

    888

    9

    :

    *$

    *%

    &

    *'

    *(

    )

    ...cNmpASeJpcNmpASeJp

    5

    KP$R!$+TM0TOP

    &ISTI+!T

    ALL

    *RO srsa1 KaliasM Ksrsa2 KaliasMM...

    K[$R$ co0diieM

    KGRO)P BW listacNmpri KADI+G co0diieMM

    K555

    6

    7

    888

    9

    :

    *$

    *%

    &

    *'

    *(

    )

    L$!Tcoma0daS$

    $!$PT

    I+T$RS$!T

    KALLM)+IO+

    556

    7

    889

    :

    556

    7

    889

    :56

    789

    :

    $%&

    '()

    $%&

    '()

    56

    789

    :

    $%&

    '()

    $%&

    '()

    !!!08S

    "S

    nrc9mp

    c9mp%*/08/;

    08S

    "S

    nrc9mp

    c9mp%*/08/

    Aceast comand selectea4 date din srselede date preci4ate #n clau4a *RO. "entrupreci4area (cali+icarea) cPmpurilor (dac este necesar, deci dac +olosirea numai a numeluicPmpului produce ambiguitate, adic e6ist mai multe cPmpuri cu acest nume #n sursele dedate) se poate +olosi numele tabelului sau un nume sinonim (alias local numai #n comanda

    @/@C>) stabilit #n *ROdup numele sursei de date. ac se de+inete un ValiasV, atuncicali+icarea se +ace numai cu el (nu se va mai +ace cu numele tabelului).

    ! construcie numit srsapoate +i*

    1. un ta4elsau /ie\din ba4a de date2. (i0strci0eselect). eJpresieoi0, sub +orma*

    srsa1 KaliasM operator'(oinsrsa2 KaliasM O+ condiie'legatur >eJpresieoi0?

    O co0diieeleme0tar de legtur dintre dou surse de date (preci4ate prin eJpresieta4el?este de +orma*

    Kaliassrsa1.McNmp1 operatorKaliassrsa2.McNmp2unde operatorpoate +i* ]E E E ] ]. Cei doi termeni ai comparatiei trebuie s aparinla tabele di+erite.

    !o0diiile de legtrdintre dou surse de date sunt de +orma*

    co0deleme0tara KA+& co0deleme0taraM ...

    >co0diie?

  • 8/10/2019 Manual Informatica 2014 RO

    55/82

    00

    ! eJpresie oi0are ca re4ultat un tabel i este de +orma*

    Srsa1

    55555

    6

    7

    88888

    9

    :

    **

    $

    **

    %

    &

    **

    '

    **

    (

    )

    KO)T$RM*)LL

    KO)T$RMRIGT

    KO)T$RML$*T

    I++$R

    ZOI+ Srsa2 O+ co0ditie

    Zoi0l co0diio0al, din algebra relaional, notat prin Srsa1c- Srsa2, este preci4at

    prin Srsa1 I++$R ZOI+ srsa2 O+ co0diiei determin acele #nregistrri din produsulcarte4ian al celor dou surse care #ndeplinesc condiia din O+.

    Zoi0l eJter0 stN0ga, preci4at prin Srsa1 L$*T KO)T$RM ZOI+ srsa2 O+co0diie determin o surs nou ce are ca atribute concatenarea atributelor din cele dousurse, iar #nregistrrile se obin ast+el* se iau #nregistrrile care se obin prin $oinul condiionalSrsa1

    c- Srsa2,la care se adaug #nregistrrile din srsa1care nu sOau +olosit la acest $oincondiional combinate cu valoarea nullpentru toate atributele corespun4toare din Srsa2.

    Zoi0l eJter0 dreapta, preci4at prin Srsa1 RIGT KO)T$RM ZOI+ srsa2 O+

    co0diie determin o surs nou ce are ca atribute concatenarea atributelor din cele dousurse, iar #nregistrrile se obin ast+el* se iau #nregistrrile care se obin prin $oinul condiionalSrsa1

    c- Srsa2,la care se adaug #nregistrrile din srsa2care nu sOau +olosit la acest $oincondiional combinate cu valoarea nullpentru toate atributele corespun4toare din Srsa1.

    Zoi0l eJter0 total, preci4at prin Srsa1 *)LL KO)T$RM ZOI+ srsa2 O+ co0diiese obine prin reuniunea re4ultatelor obinute de $oinul e6tern stPnga i $oinul e6tern dreapta.

    Alte tipuri de e6presii $oin*

    ursa1 ZOI+ursa2 )SI+G(listafcoloane)

    ursa1 +AT)RAL ZOI+ursa2

    ursa1 !ROSS ZOI+ursa2ac #n clau4a *ROapar mai multe srse de date (care se vor evalua la un tabel),

    atunci #ntre un ast+el de tabel O pe care #l vom numi ta4el pri0cipal, i celelalte tabele esteindicat s e6iste anumite legtri(stabilite prin co0diii). "lecPnd de la +iecare #nregistrare atabelului principal se determin #nregistrrile din celelalte tabele asociate prin ast+el delegturi (deci #nregistrrile ce veri+ic o condiie). ac legtura (condiia) nu se stabilete,atunci se consider c ea asocia4 toate #nregistrrile din celelalte tabele pentru +iecare#nregistrare a tabelului principal (se consider c valoarea condiiei este treatunci cPnd ealipsete). Aceast condiie de legtur dintre sursele de date se preci4ea4 prin*

    *RO srsa1K srsa2M ... [$R$ co0diielegtr

    5olosind sursele de date din 5-!M i eventuala condiie de legtur (dac e6ist mai

    multe surse de date) va re4ulta un ta4elrezltat, cu coloanele obinute prin concatenareacoloanelor din sursele de date, iar #nregistrrile sunt determinate dup cum sunt e6plicate maisus.

    3n ta4elrezltatse pot pstra toate #nregistrrile obinute din sursele de date, sau sepoate +ace o 8iltrareprin utili4area unei condiii de +iltrare. Aceasta condiie de +iltrare va +itrecut #n clau4a [$R$ #n continuarea condiiei de legtur. Cu o condiie de +iltrarecondiia din @-@ este de +orma*

    [$R$ co0diie8iltrare

  • 8/10/2019 Manual Informatica 2014 RO

    56/82

    0

    [$R$ co0diielegtr A+& co0diie8iltrare

    Condiia de +iltrare din clau4a @-@ poate +i construit dup urmtoarele reguli.

    !o0diiile eleme0tare de 8iltrarepot +i de una din +ormele urmtoare*

    eJpresie operatorrelatio0al eJpresie

    eJpresie K+OTM B$T[$$+ /almi0 A+& /almaJpentru a veri+ica dac valoarea unei e6presii este cuprins #ntre dou valori (valmin ivalmaE) sau nu este cuprins #ntre aceste valori (apare +OT)

    cNmp >+OT? LI^$ a4lo0

    up LI^$apare un /ablon(ca un ir de caractere) ce preci4ea4 o mulime de valori.3n +uncie de sistemul de gestiune +olosit, e6ist un caracter #n ablon ce preci4ea4 loculunui singur caracter necunoscut #n cPmp, sau un caracter #n ablon ce preci4ea4 un irnepreci4at de caractere #n cPmp.

    [ ] [ ]

    ( ) $%&

    '()

    es4selecti

    .../aloare/aloareI++OTeJpresie

    e veri+ic dac valoarea e6presiei apare (sau nu O cu +OT) #ntrOo list de valori sau #ntrOo subselecie. ! s4selecieeste o surs de date generat cu comanda S$L$!Ti careare numai un singur cPmp O cu valori de acelai tip cu valorile e6presiei. Aceast condiiecorespunde testului de Vaparte0e0V al unui element la o mulime.

    cNmp operatorrelatio0al*$

    *%

    &

    *'

    *(

    )

    SO$

    A+W

    ALL

    >s4selectie?

    Falorile cPmpului din stPnga operatorului relaional i valorile singurului cPmp dinsubselecie trebuie s +ie de acelai tip. e obine valoarea adevratpentru condiie dac

    valoarea din partea stPng este #n relaia dat de operator pentru*o toate valorile din subselectie (apare ALL),

    o cel puin o valoare din subselectie (apare A+Wsau SO$).

    Condiii ec&ivalente*

    _eJpresie I+ >s4selecie?_ ec&ivalent cu VeJpresie A+W >s4selecie?_

    _eJpresie +OT I+ >s4selecie?_ ec&ivalent cu VeJpresie ]E ALL >s4selecie?_

    K+OTM $ISTS >s4selectie?

    Cu $ISTS se obtine valoarea adevrat dac #n subselecie e6ist cel puin o#nregistrare, i 'aldac subselecia este vid. "re4ena lui +OT inversea4 valorile deadevr.

    ! co0diie de 8iltrarepoate +i*o condiie elementaro (condiie)o 0otcondiieo condiie1 a0dcondiie2o condiie1 orcondiie2

  • 8/10/2019 Manual Informatica 2014 RO

    57/82

    0N

    ! condiie elementar poate avea una din valorile* tre 8alse 0ll. Faloarea null seobine dac unul din operan4ii utili4ai are valoarea null. Falorile de adevr pentru operatoriinot, and, or sunt date #n continuare*

    true +alse null0ot +alse true null

    a0d true +alse null or true +alse nulltrue true +alse null true true true true+alse +alse +alse +alse +alse true +alse nullnull null +alse null null true null

    in aceast succesiune de valori se pot selecta toate cPmpurile din toate tabelele (apareVV dup numele comen4ii), sau se pot construi cPmpuri ce au ca valoare re4ultatul unoreJpresii. CPmpurile cu aceeai denumire #n tabele di+erite se pot cali+ica prin numele saualiasOul tabelelor surs. umele cPmpului sau e6presiei din tabelul re4ultat este stabilitautomat de sistem (#n +unctie de e6presia ceOl generea4), sau se poate preci4a prin clau4a ASce urmea4 e6presiei (sau cPmpului). 3n acest +el putem construi valori pentru o nou#nregistrare #ntrOun ta4el8i0al.

    @6presiile se preci4ea4 cu a$utorul operan4ilor (cPmpuri, re4ultatul unor +uncii) i aoperatorilor corespun4tori tipurilor de operan4i.

    3n tabelul +inal se pot include toate sau numai o parte din #nregistrri, dup cum epreci4at printrOun predicat ce apare #n +aa listei de coloane** A// O toate #nregistrrile 3>3C> O numai #nregistrrile distinte >!" n O primele n #nregistrri >!" n "@-C@> O primele n #nregistrri

    3nregistrrile din Vta4ell 8i0alV se pot ordo0a cresctor (AC) sau descresctor(@C) dup valorile unor cPmpuri, preci4ate #n clau4a OR&$R BW. CPmpurile se pot

    preci4a prin nume sau prin po4iia lor (numrul cPmpului) #n lista de cPmpuri din comandaS$L$!T (preci4area prin po4iie este obligatorie atunci cPnd se dorete sortarea dupvalorile unei e6presii). !rdinea cPmpurilor din aceast clau4 preci4ea4 prioritatea c&eilorde sortare.

    Mai multe #nregistrri consecutive din Vtabelul +inal pot +i grpate #ntrOo singur#nregistrare, deci un grup de #nregistrri se #nlocuiete cu o singur #nregistrare. 9n ast+el degrup este preci4at de /alorile com0e ale cPmpurilor ce apar #n clau4a GRO)P BW.VTa4ell 0oV se sortea4 (automat de ctre sistem) creasctor dup valorile cPmpurilor dinGRO)P BW. 3nregistrrile consecutive din +iierul ast+el sortat, ce au aceeai valoare pentrutoate cPmpurile din GRO)P BW, se #nlocuiesc cu o singur #nregistrare. "re4ena unei ast+elde #nregistrri poate +i condiionat de valoarea adevrat pentru o condiie ce se trece #n

    clau4a ADI+G."entru grupul de #nregistrri ast+el preci4at (deci pentru o mulime de valori) se pot

    +olosi urmtoarele +uncii*

    ..

    /

    0

    11

    2

    356

    789

    :

    $%&

    '()

    cNmp&ISTI+!T

    ALLADG sau ADG>KALLM? eJpresie?

    "entru grupul de #nregistrri se iau toate valorile (cu ALL, care este i valoareaimplicit) sau numai valorile distincte (apare &ISTI+!T) ale cPmpului sau e6presiei

  • 8/10/2019 Manual Informatica 2014 RO

    58/82

  • 8/10/2019 Manual Informatica 2014 RO

    59/82

    0L

    2!4! +robleme propuse

    I.a. Se cere o 4az de date relaio0al, cu tabele #n 5, ce gestionea4 urmtoarele

    in+ormaii dintrOo +irm de so+t* acti/iti* cod activitate, descriere, tip activitate;

    a0gaai* cod anga$at, nume, list activiti, ec&ipa din care +ace parte, liderulec&ipei;

    unde* o acti/itateeste identi+icat prin Vcod activitateV; un a0gaateste identi+icat prin Vcod anga$atV; un anga$at +ace parte dintrOo singur ec9ip, iar ec&ipa are un lider, care la rPndul

    su este anga$at al +irmei; un anga$at poate s participe la reali4area mai multor activiti, iar la o activitate

    pot s participe mai muli anga$ai;Zsti8icaic tabelele obinute sunt #n 5.

    4. "entru ba4a de date de la punctul a, s se re4olve, +olosind algebra relaional sa

    electO8/, urmtoarele interogri*41. umele anga$ailor care lucrea4 la cel puin o activitate de tipul "+roiectare"i0lucrea4 la nici o activitate de tipul "etare".42. umele anga$ailor care sunt liderii unei ec&ipe cu cel puin 1K anga$ai.

    II.a. e cere o ba4 de date relaional, cu tabele #n 5, ce gestionea4 urmtoarele

    in+ormaii dintrOo +acultate* discipli0e* cod, denumire, numr credite, lista studenilor care au dat e6amen; stde0ti* cod, nume, data naterii, grupa, anul de studiu, speciali4area, lista

    disciplinelor la care a dat e6amene (inclusiv data e6amenului i nota obinut).Zsti8icaic tabelele sunt #n 5.

    4. "entru ba4a de date de la punctul a, +olosind algebra relaional i instructiuni

    @/@C>O8/, se cer studenii (nume, grupa, nr.discipline promovate) ce au promovat#n anul 2K1 peste 0 discipline. ac un student are la o disciplin mai multe e6amenecu note de promovare, atunci disciplina se numr o singur dat.

    III.a. e cere o ba4 de date relaional, cu tabele #n 5, ce gestionea4 urmtoarele

    in+ormaii despre absolvenii #nscrii pentru e6amnul de licen* r.matricol, Cod idenumire secie absolvit, >itlul lucrrii, Cod i nume cadru didactic #ndrumtor, Codi denumire departament de care aparine cadrul didactic #ndrumtor, /ista de resurseso+t necesare pentru susinerea lucrrii (e6. C.et, C'', etc.), /ista de resurse &ardnecesare pentru susinerea lucrrii (-am GDb, F -eader, etc.). usti+icai c tabelelesunt #n 5.

    4. "entru ba4a de date de la punctul a, +olosind algebra relaional i instructiuni

    @/@C>O8/ cel puin o dat +iecare, se cer urmtoarele liste (e6plicai modul deobinere a listelor)*

    i. Absolvenii (nume, titlu lucrare, nume cadru didactic) pentru care cadruldidactic #ndrumtor aparine de un departament dat prin denumire.

    ii. "entru departament se cere numrul de absolveni care au cadrul didactic#ndrumtor de la acest departament.

    iii. Cadrele didactice care nu au #ndrumat absolveni la lucrarea de licen.iv. umele absolvenilor care au nevoie de urmatoarele dou resurse so+t* !racle i

    C.

  • 8/10/2019 Manual Informatica 2014 RO

    60/82

    K

    &! Structura #i funciile sistemelor de operare!Sisteme de fi#iere

    &!1! Sistemul de i#iere

  • 8/10/2019 Manual Informatica 2014 RO

    61/82

    1

    disc sub +orma unei liste (numitiOlist). umrul de ordine al unui inod #n cadrul iOlistei serepre4int pe doi octei i se numete iOnumr. Acest iOnumr constituie legtura dintre +iieri programele utili4ator.

    "artea cea mai mare a discului este re4ervat 4onei +iierelor. Alocarea spaiului pentru +iierese +ace printrOo variant elegant de inde6are. 3n+ormaiile de plecare pentru alocare sunt

    +i6ate #n inoduri.

    &!1!1!2! 0irectori #i I>noduri

    tructura unei intrri #ntrOun +iier director este ilustrat #n +igura de mai $os

    Strctra 0ei i0trri 0 director

    eci, #n director se a+l numele +iierului i re+erina spre inodul descriptor al +iierului.9n inod are, de regul, #ntre i 12G de octei i el conine in+ormaiile din tabelul urmtor*

    &!1!1!&! Scema de alocare a blocurilor disc pentru un fi#ier

    5iecare sistem de +iiere 9ni6 are cPteva constante proprii, printre care amintim*lungimea unui bloc, lungimea unui inod, lungimea unei adrese disc, cPte adrese de prime

    blocuri se #nregistrea4 direct #n inod i cPte re+erine se trec #n lista de re+erine indirecte.3ndi+erent de valorile acestor constante, principiile de #nregistrare W regsire sunt aceleai.

    "entru +i6area ideilor, vom alege aceste constante cu valorile #ntPlnite mai +recvent lasistemele de +iiere de$a consacrate. Ast+el, vom presupune c un bloc are lungimea de 012octei. ! adres disc se repre4int pe octei, deci #ntrOun bloc se pot #nregistra 12G ast+el dese adrese. 3n inod trec direct primele 1K adrese de blocuri, iar lista de adrese indirecte are elemente. Cu aceste constante, #n +igura de mai $os este pre4entat structura pointerilorspre blocurile ataate unui +iier 9ni6.

  • 8/10/2019 Manual Informatica 2014