9 - enunturi si raspunsuri - proiecte cti

Upload: silvia-adelina-mateescu

Post on 08-Feb-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    1/42

    1

    Logic i structuri discrete

    1. Presupunem c exist 200 de studeni din anul I care particip la cursurile de calculatoare,matematic i fizic. Rezultatele au artat c 90 de studeni particip la calculatoare, 110 lamatematic i 60 la fizic. Mai departe 20 de studeni particip la calculatoare i matematic. 20de studeni particip la calculatoare i fizic i 30 la matematic i fizic. Ne intereseaz s aflmcati studeni particip la toate cele trei cursuri.Soluie:S numim cele trei grupe C, M, P. Prin urmare vrem s aflm PMC .

    90C

    110M

    60P

    20MC

    20PC

    30PM

    PMCPMPCMCPMC200 90 + 110 + 60202030

    + PMC = 190 + PMC .

    10 PMC

    2. Folosind regulile de inferen din logica propoziional, s se stabileasc valoarea de adevr aurmtoarei afirmaii:Dac fie soia mea fie eu am fi adus banii cu noi, atunci am fi putut plti icina la restaurant i taxiul. Dac am fi pltit taxiul n-ar fi trebuit s mergem pe jos acas. Dar a

    trebuit s mergem pe jos acas. Deci, soia mea nu a adus banii.

    Soluie:Notm cuS = soia a adus banii, E = eu am adus banii, C = cina pltit, T = taxiul pltit,MA = mers pe jos acas.Facem urmtoarele inferene:

    1. (S E)=> (CT)

    2. T=>MA

    3. MA > S

    4. (MA) din 3, prin dubl negaie5. T din 2,4, prin modus tollens

    6. (CT) => T tautologie

    7. (CT) din 6,5, prin modus tollens

    8. (S E) din 1,7, prin modus tollens

    9. S E din 8, prin De Morgan

    10.S din 9, prin simplificare

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    2/42

    2

    3. S se aplice rezoluia pentru a rezolva urmtoarea problem de inferen:S presupunem c:

    (a) Exist un dragon.

    (b) Dragonul doarme npetera sa sau vneaz n pdure.(c) Dac dragonul este flmnd, atunci nu poate dormi.

    (d) Dac dragonul este obosit, atunci nu poate vna.

    (i) Ce face dragonul cnd este flmnd?

    Soluie: Introducem predicatele:

    Dragon(x) : x este un dragon

    Poate(x,y,z): ypoate s fac x nzFace(x,y,z) : y facex nz

    Flmnd(x) : x este flmndObosit(x) : x este obosit

    Presupunem, de asemenea, Poate(x,y,z) Face(x,y,z). (*)

    Transformm presupunerile (a), (b), (c) i (d) n clauze:

    (a) Dragon(A) (b) Face(doarme,A,peter), Face(vneaz, A, pdure) (c) Poate(doarme,A peter) Flmnd(A)(d) Poate(vneaz,A ,pdure) Obosit(A)

    Transformm presupunerile (a)-(d) i (*) n form de mulime-teoretic:

    (1) {Dragon(x)}

    (2) {Face(doarme, A, peter), Face(vneaz,A ,pdure)}(3) {Flmnd(A), Poate(doarme,A ,peter)}(4) {Obosit(A), Poate(vneaz,A, pdure)}(5) {Poate(x,y,z), Face(x,y,z)}

    (i) Adugm urmtoarele clauze clauzelor de la (1) la (5):

    (6) {Flmnd(A)}(7) {Face(x,y,z)}

    Clauza (7) reprezint scopul rezoluiei. Vom ncerca s concluzionm , prin instaniereaadecvat a variabilelor x,y iz.

    (8) {Face(doarme, A, peter)}, x= vneaz,y = A, z =pdure din (2) i (7)(9) {Poate(doarme, A, peter)} din (5) i (8)(10) {Poate(doarme, A, peter)} din (3) i (6)(11) din (9) i (10)

    (ii) Adugm urmtoarele clauze clauzelor (1)-(5).

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    3/42

    3

    (6) (Obosit(A)}

    (7) {Face(x,y,z)} apoi

    (8) {Face(vneaz, A, pdure)}, x = doarme, y = A, z = peter din (2) i (7)(9) {Poate(vneaz, A, pdure)} din (5) i (8)(10) {Poate(vneaz, A, pdure)} din (4) i (6)

    (11) din (9) i (10)Tehnici de programare

    1. Dai o soluie recursiv, n limbajul de programare C, pentru Algoritmul lui Euclid de aflare acelui mai mare divizor comun a dou numere ntregi.Formularea n cuvinte a algoritmului este urmtoarea:Dac unul dintre numere este zero, c.m.m.d.c. al lor este cellalt numr.Dac nici unul dintre numere nu este zero, atunci c.m.m.d.c. nu se modific dac se nlocuiete

    unul dintre numere cu restul mpririi sale cu cellalt.

    Soluie:

    int cmmdc(int m, int n) {

    int r;r=m % n;while (r != 0) {

    m=n;n=r;r=m % n;

    }return n;

    }

    2. S se scrie o funcie care inverseaz in situ coninutul unui ir de caractere. Se vor folosioperaii cu pointeri.

    Soluie:

    char *strrev (char *sir){

    char *initial = sir;char *urmator = sir;char temp;

    while (*sir) sir++;while (urmator < sir){

    temp = *(--sir);*sir = *urmator;*urmator++ = temp;

    }return (initial);

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    4/42

    4

    }3. Folosind operaiile pe bii din limbajul de programare C, s se scrie o funcie,contorbiti,care s numere biii cu valoarea 1 din argumentul su x, de tipul ntreg frsemn.Soluie:

    /* contorbiti: numara bitii cu valoarea 1 din x */int contorbiti (unsigned x) {int b;for(b=0; x!=0; x>>=1)

    if (x & 01)b++;

    return b;}

    Programarea orientat pe obiecte

    1. S se creeze o clas MyException derivat din clasa Exception ce conine:

    - un constructor ce are ca parametru un ir de caractere ce va fi furnizat de serviciulgetMessage() al excepiei. Serviciul getMessage() nu va fi suprascris.

    - o metod ce returneaz de cte ori a fost instaniat, att ea (clasa MyException) ct i oricesubclas a sa. Dup ce ai implementat metoda precum i mecanismul de numrare, explicaidatorit crui fapt metoda returneaz i cte instane ale subclaselor au fost create.

    Creai ntr-o metod main trei obiecte de tip MyException care vor fi ataate pe rnd aceleiaireferine. Apelai pentru fiecare obiect creat dou servicii furnizate de acesta.

    Rezolvare:

    class MyException extends Exception {private static int instanceNo = 0;//acest constructor trebuie sa se apeleze la

    //fiecare instantiere a clasei, precum si a eventualelor subclase

    public MyException(String message){

    super(message);instanceNo++;

    }

    public static int getInstanceNo(){

    return instanceNo;}

    public static void main(String[] argv){MyException e;//serviciile ce se doresc a fi apelate sunt

    //mostenite de la clasa Exception

    //getMessage(), toString(), printStackTrace()...

    //se poate apela si getInstanceNo(), dar aceasta fiind statica, nu se recomanda//apelul prin intermediul referintei unui obiect

    e = new MyException("primul caz");

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    5/42

    5

    System.out.println(e.getMessage());

    System.out.println(e.getInstanceNo());

    e = new MyException("al doilea caz");System.out.println(e.getMessage());

    System.out.println(e.toString());

    e = new MyException("al treilea caz");e.printStackTrace();System.out.println(e.toString());

    }

    }2. Folosind clasa ArrayList creai o clas Biblioteca ce poate stoca un numr nelimitat de obiectede tip Carte. O carte are dou atribute ce stocheaz titlul precum i autorul cr ii iar afiareaacesteia pe ecran va furniza utilizatorului valorile atributelor menionate.Clasa Biblioteca ofer doar dou servicii, unul pentru adugarea de elemente de tip Carte i altulpentru afiarea elementelor coninute. Se cere implementarea claselor menionate precum icrearea ntr-o metod main a unei biblioteci ce are trei cri. Crile ce exist n bibliotec vor fi

    tiprite.Rezolvare:

    import java.util.*;

    class Carte {private String autor, titlu;

    public Carte(String autor, String titlu)

    {this.autor = autor;

    this.titlu = titlu;

    }

    public String toString(){return autor + " " + titlu;

    }

    }class Biblioteca {

    private ArrayList carti = new ArrayList();

    public void add(Carte c){

    carti.add(c);}

    public String toString(){

    //se poate si parcurge colectia cu iteratori, dar ar fi inutil din moment ce exista//metoda toString() din ArrayList care face acest lucru

    return carti.toString();

    }

    public static void main(String[] argv){Carte c1 = new Carte("colectiv", "abecedar");

    Carte c2 = new Carte("UPT", "Java");

    Carte c3 = new Carte("INFO", "Java");Biblioteca b = new Biblioteca();

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    6/42

    6

    b.add(c1);

    b.add(c2);

    b.add(c3);System.out.println(b);

    }

    }3. Respectnd cerinele enunate i principiile POO, s se implementeze n Java interfaai clasele descrise mai jos.Interfaa Intrare conine:- o metod denumit continut, fr argumente i care returneaz o referin StringClasa Fisier implementeaz interfaa Intrare i conine:- un atribut de tip String denumit informatie, specific fiecrui obiect Fisier n parte- un constructor ce permite setarea atributului anterior cu o valoare String dat ca parametruconstructorului- implementarea metodei continut ntoarce valoarea atributului informatie descris mai sus

    Clasa Director implementeaz interfaa Intrare i conine:

    - un atribut denumit intrari de tip ArrayList; cmpul este specific fiecrei instane aacestei clase si se va iniializa cu un obiect list gol- o metoda adauga cu un singur parametru; acesta trebuie s fie declarat n aa fel nct s poatreferi att obiecte a clasei Director, ct i obiecte a clasei Fisier dar s NU poat referi orice felde obiect Java (ex. NU va putea referi un obiect String); metoda introduce n lista anterioarreferina primit ca parametru- obligatoriu n implementarea metodei continut se parcurge lista intrari i se apeleaz metodacontinut pe fiecare referin din lista concatenndu-se String-urile ntoarse de aceste apeluri;metoda va returna o referin spre String-ul rezultat n urma concatenriin toat aceast ultim clas, obiectele Fisier si obiectele Director din list trebuie s fie tratateuniform.

    Rezolvare:interface Intrare {

    String continut();

    }class Fisier implements Intrare {

    private String informatie;

    public Fisier(String informatie) {

    this.informatie = informatie;}

    public String continut() {

    return informatie;}

    }

    class Director implements Intrare {

    private ArrayList intrari = new ArrayList();public void adauga(Intrare intr) {

    intrari.add(intr);

    }public String continut() {

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    7/42

    7

    String tmp = "";

    for(Intrare i : intrari) {

    tmp = tmp + i.continut();}

    return tmp;

    }}

    Arhitectura calculatoarelor

    1. Se consider urmtorul format ipotetic inspirat de formatul de virgul flotant IEEE 754,prezentat prin lungimea cmpurilor specifice n urmtorul tabel:

    Semn Exponent Mantis

    Considernd ca normalizarea se face similar formatului IEEE 754, se cere s se calculeze cel mai

    mic si cel mai mare numr pozitiv normalizat care se pot reprezenta utiliznd formatul propus.

    Rezolvare:Valoarea bias-ului corespunztoare codului binar de reprezentare a exponentului pentru formatulipotetic este: 1 5 12 1 2 1 15nbias

    n consecin, numerelor normalizate le corespund exponeni din intervalul [-13, 15]Cel mai mic numr pozitiv normalizat:

    x3=2-13

    *1.0000000000=2-13

    Cel mai mare numr pozitiv normalizat:

    x4=215

    *1.1111111111=215

    *(2 - 2-10

    )= 216

    - 25

    2. Se considera urmtorul algoritm de implementare a operaiei de nmulire binar dupprocedura lui Booth cu creterea bazei sistemului de numeraie la baza 4, redat prin ordinogramadin figura urmtoare.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    8/42

    8

    Begin

    BEGIN

    ?No

    A[8:0] :=0, COUNT:=0,

    M:=INBUS

    Yes

    S0

    S1 c0

    Q[7:0]:=INBUS,

    Q[-1]:=0

    S2 c1

    Q[1]Q[0]Q[-1]="001"

    or

    Q[1]Q[0]Q[-1]="010"

    Q[1]Q[0]Q[-1]="101"

    or

    Q[1]Q[0]Q[-1]="110"

    No

    A:=A+M

    YesS3 c2

    Q[1]Q[0]Q[-1]

    =

    "011"

    No Q[1]Q[0]Q[-1]

    =

    "100"

    No

    A:=A-M

    YesS4 c2,c3

    A:=A+2*M

    YesS5 c2,c4

    A:=A-2*M

    YesS6 c2,c3,c4

    COUNT3=1

    ?

    No

    A[8]:=A[8], A[7]:=A[8],

    A[6:0].Q:=A.Q[7:1],

    COUNT:=COUNT+1

    NoS7 c5OUTBUS:=A[8:1],

    Q[1]:=0

    S8 c6

    Yes

    OUTBUS:=A[0].Q[7:1]

    S9 c7

    End

    S0 END

    Se cere sinteza unitii de control asociat dispozitivului de nmulire care implementeazalgoritmul Booth radix 4, prin metoda Sequence Counter. Se urmrete proiectarea optim prinprisma latenei de execuie a procedurii.

    Rezolvare:n figura urmtoare este sintetizat unitatea de control prin metoda Sequence Counter pentrualgoritmul de nmulire a numerelor binare Booth radix 4.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    9/42

    9

    Modulo-2

    Sequence Counter

    S

    R

    Qc0

    c1

    Cycle0

    Begin

    Clock

    Reset

    END

    S

    R

    Q

    Cycle1

    Q[-1]

    Q[0]Q[1]

    c2

    c3

    c4

    COUNT3c5

    S

    R

    Q

    Cycle2c6

    c7

    3. S se nmulteasca dup procedura lui Booth numerele -101 si -11, organiznd rezolvarea subform tabelar, prin indicarea pas cu pas a coninutului regitrilor i a semnalelor de control

    activate.

    Rezolvare:Cei 2 operanzi, reprezentai n complement de 2 au urmtoarea configuraie:-101(10)=10011011(2)

    -11(10)=11110101(2)Operaia de nmulire dup procedura lui Booth este prezentat n urmtorul tabel:

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    10/42

    10

    A Q M CountControl

    signals

    0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 0 c0(input)

    1 0 0 1 1 0 1 1 0 c1(input)

    - 1 1 1 1 0 1 0 1

    0 0 0 0 1 0 1 1 c2,c3(-)

    0 0 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 1 c4(shift)0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0 1 0 c4(shift)

    + 1 1 1 1 0 1 0 1

    1 1 1 1 0 1 1 1 c2(+)

    1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 c4(shift)

    - 1 1 1 1 0 1 0 1

    0 0 0 0 0 1 1 0 c2,c3(-)

    0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 0 c4(shift)

    0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 c4(shift)

    + 1 1 1 1 0 1 0 1

    1 1 1 1 0 1 1 0 c2(+)

    1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 c4(shift)

    1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 c4(shift)- 1 1 1 1 0 1 0 1

    0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 c2,c3(-)

    0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 c4(shift)

    0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1

    Rezultatul operaiei de nmulire, evideniat si in tabelul anterior, este:0000010001010111(2)=1111(10).

    Circuite i semnale numerice

    1. Se da schema din fig. 1

    a. Se cere sa se ridice diagramele de timp din punctele V i, VA, VB, VC, VD.b. Sa se determine duratele de timp de la iesirea VDpentru urmatoarele: P1, P2, P3sunt porti

    TTL, VH= 3,5 V, VL= 0,2 V, VT= 1,5 V, T1=T2=10s. Timpul de propagare pe porti sepoate neglija in raport cu ceilalti timpi din figura.

    P1

    R

    0.3 k

    C1 nF

    P2P3

    A B

    C D

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    11/42

    11

    Fig. 1

    Raspuns:

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    12/42

    12

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    13/42

    13

    2. Se da urmatoarea schema:

    VCC

    P1

    P2

    P3

    P4

    Q1

    Q2

    Q3

    X

    RE

    Se cere sa se dimensioneze rezistenta RE, unde portile P1, P2, P3, P4 sunt porti TTL cu

    collector in gol, iar Q1, Q2, Q3sunt porti TTL standard.Se da: VCC= 5 V, VOH= 3,5 V, VOL= 0,2 V, IOL= 16 mA, I00= +250 A, IiL= -1,6 mA,

    IiH= 40 A, IC0= 0.

    Raspuns:

    a) Pentru VX= VOH= 3,5 VVCC

    P1

    P2

    P3

    P4

    Q1

    Q2

    Q3

    XIiH

    IiH

    IiH

    I00

    I00

    I00

    I00

    IRE

    RE

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    14/42

    14

    b) Pentru VX= VL= 0,2 V. Cazul cel mai defavorabil este cand o singura poarta P are laiesire VOL. Fie P1

    VCC

    P1

    P2

    P3

    P4

    Q1

    Q2

    Q3

    XIiL

    IiL

    IiL

    IC0

    IC0

    IC0

    IC0

    IRE

    RE

    c)

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    15/42

    15

    3. Se da urmatoarea schema de interconectare la o magistrala

    P1

    P2

    P3

    P4

    Q1

    QN

    C1

    A1

    C2

    A2

    C3

    A3

    C4

    A4

    Portile P1, P2, P3, P4sunt porti cu impedanta ridicata din cadrul familiei de circuite TTL. Pentru a

    nu exista coliziuni pe magistrala o singura poarta P trebuie sa furnizeze valoarea logica 0 sau1, celelalte porti P trebuie sa fie pe impedanta ridicata. Fie parta P 1activa si P2, P3, P4suntcomandata cu semnalele C2, C3, C4sa functioneze cu iesirile pe impedanta ridicata.

    Se cere sa se specific cate porti TTL standard (Q) mai pot fi conectate pe magistrala de mai sus.

    Se da pentru portile TTL: IOH= -5,2 mA, IOL= 16 mA, IOLZ(impedanta ridicata)= -40 A.

    Raspuns:

    a) Pentru cazul cand pe magistrala se doreste transmiterea 1 logic VMAG=VH=3,5 V (VZiesire cu impedanta ridicata)

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    16/42

    16

    P1

    P2

    P3

    P4

    Q1

    QN

    VC1=VH

    A2

    A3

    A4

    VA1=VL

    VC2=VL

    VC3=VL

    VC4=VL

    VH

    VHZ

    VHZ

    VHZ

    IOH

    IOHZ

    IOHZ

    IOHZ

    IiH

    IiH

    Schema curentilor pe magistrala este:

    Se mai pot conecta pentru acest caz 127 de porti (utilizatori)

    b) Pentru cazul cand pe magistrala se doreste transmiterea 0 logicVMAG=VL=0,2 V

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    17/42

    17

    P1

    P2

    P3

    P4

    Q1

    QN

    VC1=VH

    A2

    A3

    A4

    VA1=VH

    VC2=VL

    VC3=VL

    VC4=VL

    VH

    VHZ

    VHZ

    VHZ

    IOL

    IOLZ

    IOLZ

    IOLZ

    IiL

    IiL

    Suma curentilor pe magistrala trebuie sa satisfaca conditia

    Se ia numar intreg Nb= 9

    Numarul de porti Q ce pot fi conectate la magistrala este

    N=9 este numarul de utilizatori e pot fi conectati simultan pe magistrala.

    Proiectarea i analiza algoritmilor

    1. S se scrie funcia de suprimare a unui nod dintr-un arbore binar ordonat implementat cupointeri. Se vor trata cele trei cazuri specifice: i) nodul de ters nu are fii, este terminal; ii) nodulde ters are un singur fiu; iii) nodul de ters are ambii fii. Pentru cazul iii) se va alege nodulnlocuitor ca fiind maximul din subarborele stng sau minimul din subarborele drept al nodului

    de ters.

    Rezolvare

    typedef struct nod{

    int cheie;

    struct nod *st;struct nod *dr;

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    18/42

    18

    }NOD;

    NOD *rad=NULL;

    NOD* sterge(NOD *p,int cheie){NOD *q=NULL;

    NOD *r=NULL;

    if(p){

    if(cheiecheie)

    {

    // cautare in subarborele stangp->st=sterge(p->st,cheie);

    }

    elseif(cheie>p->cheie)

    {

    // cautare in subarborele drept

    p->dr=sterge(p->dr,cheie);}

    else

    if(cheie==p->cheie){

    // nodul de sters nu are fii

    if(p->st==NULL && p->dr==NULL)

    {free(p);

    return NULL;

    }

    // nodul de sters are fiu stang

    if(p->st!=NULL && p->dr==NULL)

    {q=p->st;

    free(p);

    return q;}

    // nodul de sters are fiu drept

    if(p->st==NULL && p->dr!=NULL){

    q=p->dr;

    free(p);return q;

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    19/42

    19

    }

    // nodul de sters are ambii fiiif(p->st!=NULL && p->dr!=NULL)

    {

    // se merge pe subarborele drept// ce contine cheile mai mari

    q=p->dr;

    r=q;// subarborele drept se parcurge pe stanga

    // pentru a gasi minimul

    while(q->st!=NULL)

    {// nodul q este minimul din subarbore

    // nodul r este parintele nodului q

    r=q;q=q->st;

    }

    // se salveaza un eventual nod din dreapta lui q in stanga lui r

    r->st=q->dr;

    // se leaga nodul q de fiii lui p

    q->st=p->st;q->dr=p->dr;

    // se leaga nodul q de parintele lui p

    return q;}

    }

    }

    return p;

    }

    2. S se scrie structura de date i funcia ce afieaz factorul de umplere pentru fiecare pagin aunui arbore B de ordin N. Factorul de umplere este dat de raportul dintre numrul de chei dintr-opagin i capacitatea maxim a paginii. Pentru o pagin a unui arbore de ordinul 2, ce conine 3chei procentul de umplere este 0.75.

    Rezolvare

    #define N 2#define NN (2*N)

    typedef struct nod{

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    20/42

    20

    int chei[NN];

    int nn;

    struct nod* fii[NN+1];} NOD;

    void factor_umplere(NOD *p)

    { if(p){

    printf("%lf",p->nn/(double)NN);

    for(int i=0;inn+1;i++){

    factor_umplere(p->fii[i]);

    }

    }}

    3. S se scrie rutinele pentru: i) inseria unui nod de tip PARCARE ntr-o list nlnuit deparcri modelat prin nume; ii) inseria unui nod de tip AUTOMOBIL modelat prinnumr denmatriculare de forma AA-00-AAA (de exemplu TM-01-UPT) la un nod PARCARE creat

    anterior i identificat prin nume.

    Rezolvare

    typedef struct automobil

    {

    char numar[16];struct automobil *urm;

    } AUTOMOBIL;

    typedef struct parcare{

    char nume[16];

    struct automobil *prim_a,*ultim_a;struct parcare *urm;

    } PARCARE;

    PARCARE *prim=0, *ultim=0;

    void adaugare_parcare(char *nume){

    PARCARE *p=0;

    p=(PARCARE*)malloc(sizeof(PARCARE));strcpy(p->nume,nume);

    p->prim_a=0;

    p->ultim_a=0;p->urm=0;

    if(prim==NULL)

    {

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    21/42

    21

    prim=ultim=p;

    }

    else{

    ultim->urm=p;

    ultim=p;}}

    void adaugare_automobil(char *numar,char *nume){

    PARCARE *p=0;

    AUTOMOBIL *a=0;

    for(p=prim;p;p=p->urm)

    {

    if(strcmp(p->nume,nume)==0){

    break;

    }

    }

    if(p)

    {a=(AUTOMOBIL*)malloc(sizeof(AUTOMOBIL));

    strcpy(a->numar,numar);

    a->urm=0;

    if(p->prim_a==NULL)

    {

    p->prim_a=p->ultim_a=a;}

    else

    {

    p->ultim_a->urm=a;p->ultim_a=a;

    }

    }}

    Fundamente de inginerie software

    1. Pentru codul de mai jos desenati diagrama de secventa incepand cu apelul din linia marcata cu*** si pana la revenirea din acel apel. Nota: Apelurile catre System.out se ignora. In plus,NU

    trebuie trasate bare de activare si valori returnate

    interface DispozitivAlarma {public int start();

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    22/42

    22

    }class Senzor {

    private DispozitivAlarma alarma;public Senzor(DispozitivAlarma alarma) { this.alarma = alarma; }private void declanseaza() {

    int i = alarma.start();System.out.println("Informari:" + i);

    }public void alarmare() { declanseaza(); }

    }class Simplu implements DispozitivAlarma {

    public int start() {System.out.println("Alarma!");return 1;

    }}class Lant implements DispozitivAlarma {

    private DispozitivAlarma next;public Lant(DispozitivAlarma disp) { this.next = disp; }public int start() {

    proceseaza();return (1 + next.start());

    }public void proceseaza() {

    System.out.println("Alarma intermediara!");}

    }class Test {

    public static void main(String argv[]) {Simplu s = new Simplu();Lant l1 = new Lant(s);Lant l2 = new Lant(l1);Lant l3 = new Lant(l2);Senzor sen= new Senzor(l3);/***/sen.alarmare();

    }}

    RASPUNS: Solutia este data de diagrama de secventa de mai jos:

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    23/42

    23

    2. Sa se scrie o suita de teste white-box (glass-box) prin care sa se faca testarea cailor pentru

    pseudo-codul de mai jos. Justificati alegerea facuta.

    Nota: se puncteaza doar testcase-urile concrete justificate. Discutia abstracta, fara date de testconcrete nu se puncteaza.

    Nota:nu se cere deloc implementare in jUnit / cppUnit!int error;int max(int tab[], int entries) {

    if(entries

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    24/42

    24

    1.entries = 0 ; tab[] = {} - multimea vida - aceste test exerseaza cazul in care se intra in primulif.

    2.entries = 1 ; tab[] = {7} - acest test exerseaza cazul in care nu se intra in primul if, sideasemenea nu se intra in for

    3.entries = 2 ; tab[] = {3, 7} - testul exerseaza cazul in care ciclul for se executa o singura

    data, si in care se intra in al doilea if (cel imbricat in for)4.entries = 2 ; tab[] = {-2, -5} - testul exerseaza cazul in care ciclul for se executa o singuradata, si in care NU se intra in al doilea if (cel imbricat in for).

    5.entries = 3 ; tab[] = {0; -2; 5} - acest test vizeaza cazul in care ciclul for se executa de douaori.

    3. Se da urmatorul document de specificare a cerintelor pentru un sistem de gestionare a unui

    magazin:Cumparatorii vor avea acces on-line la sistem, pentru a consulta oferta de produse amagazinului. La cerere, un cumparator poate alege online un numar de produse si poate ceretiparirea descrierii acelor produse, incluzand si pretul fiecarui produs. Vanzatorii vor accesasistemul pentru a realiza, daca este posibil, marcarea ca rezervata a unui anumit produs, pe oanumita cantitate specificata. In cazul efectuarii rezervarii, sistemul va calcula costul, pe baza

    unor tabele de tarife. Vanzatorul va confirma plata in avans, iar sistemul va tipari un bon.Cumparatorii, prin intermediul vanzatorilor, vor avea posibilitatea sa renuntetotal sau partial la orezervare de produse, caz in care sistemul va trebui sa calculeze suma de rambursat.Gestionarea bazei de date cu informatii legate de produse si preturi va fi efectuata de catre unsef de raion. Informatiile despre produse vor putea fi modificate si de catre vanzatori. Toateoperaiile cu excepia consultrii ofertei de produse de ctre cumparator presupun o loginare

    prealabil in sistem.Se cere:

    a. Identificai toi actorii i use-case-urile (user stories) pentru sistemul descris mai sus.Justificai alegerea fcut!

    b. Reprezentai actorii i use-case-urile identificate n UML sub forma unei Use-CaseDiagram

    c. Daca dorim sa dam factor comun descrierea functionalitatii de loginare intre diferiteleuse-case-uri care o contin, cum se reprezenta acest lucru intr-o Use-Case Diagram?

    RASPUNS:a.Actorii si use-case-urile identificate sunt redate in diagrama de mai jos. Cei trei actori au

    fost indentificati pe baza faptului ca (1) sunt exteriori sistemului si (2) introduc informatii

    in sistem si/sau beneficiaza de use-case-urile sistemului. Cele 6 use-case-uri principale

    (toate mai putin cel de loginare) au fost identificate pe baza faptului ca reprezinta acelefunctionalitati majore ale sistemului care produc un beneficiu direct pentru (cel putin) un

    actor.

    b. A se vedea diagrama UML de Use Case desenata mai jos

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    25/42

    25

    c. Pentru a da factor comun functionalitatea de loginare se foloseste relatia uses,reprezentata in UML printr-o sageata indreptata spre use-case-ul secundar (de tip fish

    level) denumit Loginare in Sistem. Utlizarea relatiei este reprezentata in diagrama demai jos:

    Solutie Alternativa

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    26/42

    26

    Fundamente de ingineria calculatoarelor

    1. Se da urmatorul cod MIPS care opereaz pe ntregi:

    L: ADD R1, R2, R3SUB R3, R1, R2AND R2, R2, R5SW 0(R2), R3SW 16(R2), R1XOR R9, R7, R2BZ R1, L

    Aratati, marcand fiecare artificiu utilizat, precum si fiecare stall, cum se executa codul inpipeline-ul MIPS daca:

    Beneficiem doar de artificiul cu tactul

    Stagiul de MEM pentru instructiunile de tip Load/store se executa intr-o unitate distincta(e diferit de MEM-ul corespunzator celorlate instructiuni) si dureaza 2 cc in loc de 1,neparalelizabil (ca si la DIV). Notati aceste doua impulsuri cu MEM1, respectiv MEM2

    Branch-ul este tratat in maniera freeze & flush si se decide in ciclul de EX

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    27/42

    27

    Soluie:

    Notaii:(s)stall in acel stagiu(t)artificiul cu tactul utilizat

    Punctaj

    Ce se puncteaza Punctaj Unde se afla Cum e marcat Total

    Artificiul cu tactul marcat

    corect

    2 puncte

    /marcaj

    cc5 si cc9 (t) 2x2=4 p

    Stall 0.5puncte/marcaj

    corect

    cc3, cc4, cc7,cc8, cc12(toate

    3), cc15 (toate

    3)

    (s) 6x0.5=3p

    Tratare branch 2 puncte Ultimele 2 linii 1x2p=2p

    Oficiu 1 punct 1p

    Total= 10 p

    2. Se d urmtorul cod. Se consider pipeline-ul MIPS standard, beneficiind de artificiul cutactul, forwarding i bypassing. Unitile de multiply au nevoie de 4 cc pt execuia efectiv a

    nmulirii, n loc de 7(standard), iar cele de adunare de fp au nevoie doar de 2cc, n loc de 4(standard). Branch-urile se trateaz n maniera predict as taken.

    XOR R3,R3,R3foo L.D F6, 0(R1)

    L.D F8, 0(R2)MUL.D F10, F6, F8ADD.D F4, F4, F10ADDI R1, R1, #-8ADDI R2, R2, #-8ADDI R3, R3, #16BZ R3, foo

    Artai cum se execut urmtorul cod n pipeline. Marcati toate artificiile folosite si stall-urile,iar la branch precizai care este ramura folosit.

    Soluie:

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    28/42

    28

    Initial R3 =0 (din R3=R3 XOR R3), apoi R3=R3+16=0+16=16 => bucla se executa cat timp

    R3=0, dar cum R3=16 => nu se sare niciodata=> se alege ramura de jos a branch-ului

    Punctaj

    Ce se puncteaza Punctaj Unde se afla Cum e marcat Total

    artificiul cu tactul marcat

    corect

    2 puncte/marcaj cc6 (t) 1x2=2 p

    Stall 0.5puncte/marcaj

    corect

    cc5,cc8(ambele),

    cc9(ambele),

    cc10(ambele),

    cc13 (toate 3)

    (s)/stall 5x0.5=2.5p

    Tratare branch 2 puncte Ultimele 2 linii 1x2p=2p

    Forwarding 0.5 puncte 6 ->7; 10->11,

    15->16

    sageata 3x0.5=1.5p

    Selectare ramur corectbranch

    1 punct 1p

    Oficiu 1 punct 1pTotal= 10 p

    3. Se d urmtorul cod. Se consider pipeline-ul MIPS standard, beneficiind de artificiul cutactul, forwarding i bypassing. Unitile de multiply au nevoie de 4 cc pt execuia efectiv anmulirii, n loc de 7 (standard), iar cele de adunare de fp au nevoie doar de 3cc, n loc de 4(standard). Branch-urile se trateaz n maniera predict as taken.

    SUB R3, R3, R3foo ADDI R1, R1, #-8

    L.D F8, 0(R2)L.D F6, 0(R1)ADD.D F10, F6, F8ADDI R2, R2, #-8MUL.D F4, F4, F10ADDI R3, R3, #-1BGEZ R3, foo

    Artai cum se execut urmtorul cod n pipeline. Marcati toate artificiile folosite si stall-urile, iar la branch precizai care este ramura folosit.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    29/42

    29

    Soluie:

    Initial R3 =0 (din R3=R3 - R3), apoi R3=R3+(-1)=0+(-1)=-1 => bucla se executa cat timp

    R3>=0, dar cum R3=-1 => nu se sare niciodata => se alege ramura de jos a branch-ului

    Punctaj

    Ce se puncteaza Punctaj Unde se afla Cum e marcat Total

    artificiul cu tactul marcatcorect

    2 puncte/marcaj cc7 (t) 1x2=2 p

    Stall 1 punct/marcajcorect

    cc5,cc10(ambele)

    (s)/stall 2x1=2p

    Tratare branch 2 puncte Ultimele 2

    linii

    Stalll/stagiu, if 1x2p=2p

    Forwarding 0.5 puncte 5 ->6; 7 ->8,

    10->11, 12-

    >13

    sageata 4x0.5=2p

    Selectare ramur corectbranch

    1 punct 1p

    Oficiu 1 punct 1pTotal= 10 p

    Sisteme de operare

    1. Scrieti un program care ruleaz, una cte una, comenzile date ca i argumente n linia decomand pn cnd una din ele ntoarce o valoare de ieire diferit de zero.Programul va fi scris n limbajul C, folosind apelurile sistem i funciile din biblioteca standardPOSIX. Nu este necesar s includei fiiere antet.Indicaii:

    pot fi utile:

    int execl(char *file, const char *arg0, ... );

    //idem execlp

    pid_t fork(void);

    pid_t wait (int *status);

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    30/42

    30

    Rspuns:#include #include #include #include #include

    #include

    #define err_sys(expr,cmp) do\if ((expr) cmp) {\perror("eroare");\exit(EXIT_FAILURE);\

    } while(0);#define err_neg(expr) err_sys(expr, < 0)#define err_null(expr) err_sys(expr, == NULL)

    int executa(char *cmd){

    pid_t pid;int status;

    err_neg( pid = fork() );if (pid == 0) {

    execlp(cmd,cmd,NULL);exit(0);

    }err_neg( wait(&status) );return WIFEXITED(status) && (WEXITSTATUS(status) == 0);

    }

    int main(int argc, char *argv[]){

    int i;

    for (i=1; i

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    31/42

    31

    //idem execlpint dup2(int old, int new);int pipe(int fildes[2]);pid_t fork(void);pid_t wait (int *status);

    Rspuns:#include #include #include #include #include

    #define err_sys(expr,cmp) do\if ((expr) cmp) {\perror("eroare");\exit(EXIT_FAILURE);\

    } while(0);#define err_neg(expr) err_sys(expr, < 0)#define err_null(expr) err_sys(expr, == NULL)

    int main(int argc, char *argv[]){

    int pipe1[2];int pid1, pid2;

    if (argc != 4)exit(EXIT_FAILURE);

    err_neg( pipe(pipe1) );pid1 = fork();err_neg(pid1);if (pid1 == 0) {

    close(pipe1[0]);dup2(pipe1[1], STDOUT_FILENO);execlp(argv[1], argv[1], NULL);exit(EXIT_FAILURE);

    }close(pipe1[1]);pid2 = fork();err_neg(pid2);if (pid2 == 0) {

    dup2(pipe1[0], STDIN_FILENO);execlp(argv[2], argv[2], NULL);exit(EXIT_FAILURE);

    }close(pipe1[0]);wait(NULL);wait(NULL);exit(EXIT_SUCCESS);

    }

    3. S se scrie un program format din dou procese, cu comportamentul descris n continuare.Aproximativ o dat la secund, primul proces l informeaz pe al doilea de scurgerea acestuiinterval de timp. Al doilea proces numr continuu ncepnd de la 1, iar cnd se adun un numrde 7 notificri de la primul proces, afieaz numrul curent i se termin.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    32/42

    32

    Programul va fi scris n limbajul C, folosind apelurile sistem i funciile din biblioteca standardPOSIX. Nu este necesar s includei fiiere antet.Indicatie:semnalele utilizator sunt SIGUSR1 si SIGUSR2;

    pot fi utile:

    typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);

    pid_t fork(void);

    pid_t wait(int *status);

    int kill(pid_t pid, int sig);

    unsigned int sleep(unsigned int seconds);

    Rspuns

    #include #include #include #include #include #include int count=0;long num;void cntev(int sig){

    count++;printf(" %d",count); fflush(stdout);if(count==7){

    printf(".\nThe number: %ld.\n", num);exit(0);

    }}

    int main(){

    long i;int pid, status;

    if((pid=fork())

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    33/42

    33

    for(i=0;i

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    34/42

    34

    adiacent( X, Y, g( _, Arce ) ) if

    aparine( m( X, Y ), Arce);

    aparine( m( Y, X ), Arce).

    Comentarii :1.not( aparine( ... ) )implementeaz un mecanism de detecie a unui ciclu n cadrul unui drum

    parial.2.Predicatul adiacent furnizeaz ca rezultat un nod ce definete extremitatea muchiei cutate.Deoarece n definirea grafului nu se impune o restricie privind ordinea de scriere a nodurilor,devine necesar prezena dublei verificri de apartenen ( determininat de prezena uneisimetrii n scrierea unuei muchii, o muchie poate apare de forma m(a,b) sau m(b,a)).

    2. Se cere

    Descriei succint tehnica cutrii n adncime ntr-un graf definit printr-un set de axiomede forma:

    s(a,b). s(b,d). s(a,c). s(b,e)....atunci cnd adncimea de cutare este limitat

    Reprezentai graphic procedura de cutare n adncime ntr-un graf cnd adncimea decutare este limitat Scrieti utiliznd limbajul Prolog procedura de cutare n adncime ntr-un graf cnd

    adncimea de cutare este limitatRspunsDesenul sugereaz urmtoarea procedur recursiv de cutare a unui drum : gsesc drumul de laY la Z i gsesc un drum de la A la X, care continu cu drumul parial astfel nct nodul X(extremitatea muchiei ce conine pe y) s nu fie prezent n drumul parial.Spre deosebire de cazul n care nu se pune problema gsirii unui cost, simultan cu construciadrumului parial se va calcula i costul acestuia, definit de suma costurilor muchiilor din drum. Indescrierea muchiei este inclus costul acesteia sub forma :s( nod1, nod2, cost).

    Pentru exemplul dat, tehnica cautarii in adancime cu limitarea adancimii de cautare apare deforma:

    rezolva(Start, Solutie) if

    caut_a([ ], Start, Solutie, Adancime_max).caut_a(Drum, Nod, [Nod|Drum] ) if

    apartine(Nod,Tinte).

    caut_a(Drum,Nod,Sol,Max)if

    Max>0,s(Nod, Nod1),

    not(apartine(Nod1,Drum)),

    Max1=Max-1,

    caut_a([Nod|Drum], Nod1, Sol, Max1).

    3. Se cere

    Descriei succint tehnica cutrii n ltime ntr-un graf definit printr-un set de axiome deforma:

    s(a,b). s(b,d). s(a,c). s(b,e)....

    Reprezentai graphic procedura de cutare n lime ntr-un graf. Scrieti utiliznd limbajul Prolog procedura de cutare n lime ntr-un graf.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    35/42

    35

    RspunsCutarea n limeTehnica de cutare asigur parcurgerea acelor noduri care sunt mai apropiate de nodul de start.Ca urmare rezult un proces ce tinde s se dezvolte n laimea spaiului alternativelor posibile, (v.figura de mai jos). Apelul in acest caz este de forma:

    ?-rezolv(a,Sol).Sol=[a, c, f]

    Strategia ridic problema meninerii n atenie a unui set de noduri ( si nu a unuia singur ca incazul cautarii in adancime) care reprezint vrfurile arborelui la care s-a ajuns cu operaia decutare la un moment dat. Acest set de noduri nu este suficient, motiv pentru care se menine natenie un set de drumuri posibile. Acestea drumuri posibile, sunt reprezentate fiecare printr-olist de noduri, al cror prim element va fi intotdeauna nodul cel mai recent generat, iar ultimulelement va fi intotdeauna nodul de strat. La un moment dat, cutarea este iniiat de un singurdrum i respectiv de un singur element de forma [ [Nod_Start ] ], care este dezvoltat in unul saumai multe drumuri din care la un moment dat se selecteaza drumul solutie.Pentru a exemplifica procedeul, pentru exemplul dat n figur avem:1)primul drum conine nodul de start de la care se iniiaz procesul de cutare:

    [ [ a ] ]2)se genereaz o extensie a nodului de start rezultand

    [ [b, a], [c, a] ]

    3)se scoate primul drum din set i se genereaz o extensie a acestuia rezultand[ [d, b, a] , [e , h, a] ].

    Drumurile noi rezultate se amplaseaz la sfarsitul drumului iniial sub forma:[ [c, a], [d, b, a], [e ,h, a] ]

    4) Se scoate [c, a] si extensiile care apar se adauga la drum

    [ [d, b, a], [e, b, a], [f, c, a], [g, c, a ] ]5)operaia continu pn n momentul n care drumul ce urmeaz a fi extins prezint ca nod decretere nodul int. Pentru exemplul dat, situaia apare sub forma:

    [ [f, c, a], [g, c, a], [h, d, b, a], [i, e, b, a], [j, e, b, a] ]Cu observatia ca Soluiereprezint un drum ce pleac din start i ajunge n int iDrumeste o

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    36/42

    36

    lista a drumurilor ce se dezvolta pe parcurs strategia de cautare prezinta aspectul.

    rezolv (Start, Solutie) ifcaut_l([ [Start] ], Solutie).

    caut_l ([ [Nod|Drum]| _ ], [Nod|Drum]) if

    apartine(Nod,Tinte).

    caut_l ([ [Nod|Drum]| Drumuri], Solutie) iffindall (Nod1,s(Nod,Nod1), Noi_noduri),

    adaug ([Nod|Drum], Noi_noduri, Noi_drumuri),!,

    conc (Drumuri, Noi_drumuri, Drumuri1),caut_l (Drumuri1,Sol) ;

    caut_l (Drumuri,Sol).

    adaug ( _, [ ], [ ]).

    adaug (Drum, [Nod1|Rest], [ [Nod1|Drum] | Drumuri_noi]) ifnot(apartine(Nod1,Drum)),

    adaug(Drum,Rest,Drumuri_noi).

    %conc implementeaza procedura de concatenare

    Comentarii1) Prin findall se genereaz toi succesorii(alternative) posibili ai unui nod dat. Acestea suntincluse intr-o list de noi alternative.2)adaugutilizeaz noile alternative pentru a crea noi drumuri posibile plecnd de la drumul carea iniiat construirea alternativelor not(apartine) verific dac nu exist alternative identice, caz ncare se renun la direcia de dezvoltare n cauz (drum este o variant moart, care seabandoneaz).3)concpune noile drumuri gsite la sfritul listei iniiale.4) deoarece este posibil ca prin findall s nu se determine nici o alternativ posibil (nu maiexist succesori), operaia de cutare va continua pe lista iniial, minus drumul abandonat.Dezavantaj : cantitatea mare de memorie.

    Avantaj: soluie optim5)aceeai problem se poate pune i pentru cutarea n lime, referitoare la limitarea adncimiide cutare.

    Sisteme ncorporate

    1. Prezentai soluia pentru conectarea unui circuit de memorie extern de 64 KO la unmicrocontroler care nu are magistrale externe.

    Rspuns:

    Circuitul de memorie se va lega la microcontroler prin intermediul liniilor de port. Toate

    transferurile ntre microcontroler i circuitul de memorie, precum i tranziiile semnalelor decomand se vor realiza prin program. Dezavantajele soluiei:

    a. nu se poate aplica la memorie de program, ntruct microcontrolerul nu dispune de resurseleinterne necesare pentru a prelua i interpreta cod de instruciune;b. soluia este lent, ntruct toate tranziiile semnalelor de comand se fac prin program.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    37/42

    37

    2.Desenai schema pentru comanda a 8 LED-uri i citirea a 8 semnale externe de ctre unmicrocontroler 8051.

    Rspuns:Exist 2 soluii:a. conectarea n spaiul de I/E, utiliznd liniile de port;b. conectarea n spaiul de memorie, utiliznd magistralele de adrese/date.Schema n cazul a. este:

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    38/42

    38

    3.Prezentai soluia pentru conectarea unui circuit de memorie de 64 KO ca memorie extern deprogram i a unui alt circuit de 64 KO ca memorie extern de date.Rspuns:

    Soluia se bazeaz pe caracteristica microcontrolerului 8051, valabil la multe altemicrocontrolere, de a activa semnale de comanda diferite pentru accesul la memoria de program

    i la cea de date. Ca atare, utiliznd 16 linii de adrese se vor putea gestiona 64 KO memorie deprogram i 64 KO memorie de date. Semnalul de comand /PSEN va fi folosit pentru comandamemoriei externe de cod i semnalele de comand /RD i /WR se vor folosi pentru comandamemoriei externe de date. ntruct circuitele de memorie, att pentru memoria de program ct ipentru cea de date, acoper nntregime spaiul de memorie extern a microcontrolerului, nu estenecesar decodificator de memorii.

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    39/42

    39

    P0.0-7

    /EA

    ALE

    P2.0-7

    /PSEN

    /RD

    /WR

    8

    0C

    5

    1

    D0-7

    A0-7

    A8-15

    /OE

    /CE

    Memoria

    de

    program

    extern

    (64 ko)

    R

    E

    G

    STB

    D0-7

    A0-7

    A8-15

    /CS

    /WE

    /OE

    Memoria

    de

    date

    extern

    (64 ko)

    Baze de date

    Nota: Pentru rezolvarea problemelor propuse se poate folosi i limbajul SQL sau PL/SQL, dar cudefinirea cheilor primare i externe.

    1. Se consider dou fiiere dintr-o baz de date existent pentru rezervare locuri la avion.Fiierul Curseconine datele pentru fiecare curs din orarul de zbor.Fiierul Pasagericonine datele pentru toi pasagerii din toate cursele. Toi pasagerii unei curse

    vor avea acelai cod curs CodC.

    Curse

    CodC Pilot Copilot Avion Oras1 Ora1 Oras2 Ora2 PretR NrLoc

    Pasageri

    CodC CNP NumeP Adresa DataN Tel Pret

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    40/42

    40

    S se afieze informaiile despre o curs de avion i lista pasagerilor din acea curs folosindcomenzi simpe din limbajul XBase. Se recomand forma de afiare:

    CodC Oras1 Ora1 Oras2 Ora2 Pilot Copilot TipAv

    Ro234-

    0609

    Timisoara

    TSR

    8:30 Bucuresti 9:30 Popescu Adam B747

    Lista Pasageri

    CNP Nume Pas Adresa Telefon DataN Pret

    SET TALK OFF

    CLEARUSE Curse INDEX Icodc IN 1 ALIAS CS

    USE Pasageri INDEX Icodc, Inume IN 2 ALIAS PS

    SET RELATION TO Codc INTO PSACCEPT Cod cursa: TO VcodcSEEK VCodc

    ? CodC Pilot Copilot Avion Oras1 Ora1 Oras2 Ora2 ? REPL(=,120)? Codc, Pilot, Copilot, Avion, Oras1, Ora1, Oras2, Ora2

    ?

    ? LISTA PASAGERI

    ?SELECT PS

    ? CNP Nume Pasager Adresa Tel DataN Pret ? REPL(-,120)DO WHILE Codc=Vcodc

    ? CNP, NumeP, Adresa, Tel, DataN, Pret

    SKIPENDDO

    2. Considerm o baz de date normalizat pentru eviden studeni care cuprinde tabelele:STUD

    CodS Nume Adresa DataN Bursa Telefon CNP ......

    NOTE

    CodS CodC NOTA Data

    CURS

    CodC Titlu NumeProf

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    41/42

    41

    Folosind comenzi simple Xbase se cere afiarea notelor unui student dat prin nume sub forma:

    CODS: AC321 Nume: Popescu Bogdan Adresa: Bogdanesi 3 Bursa:150

    Situatia notelor

    Curs Nota Data Nume profSisteme de operare 9 23-01-2011 Popovici

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

    USE Stud INDEX Inume, Icods IN 1 ALIAS ST

    USE Note INDEX Icodsn IN 2 ALIAS NT

    USE CURS INDEX Icodc IN 3 ALIAS CS

    SET RELATION Cods INTO NoteSelect 2

    SET RELATION Codc INTO Curs

    Select 1

    ACCEPT Nume Student: TO VnumeSEEK VnumeIF EOF()? Studentul + Vnume + Nu existaELSE

    ? Cods: + Cods, Nume: + Nume, Adresa: + Adresa, Bursa: ,Bursa?? Situatia notelor ?

    ? Curs Nota Data Nume Prof ? ------------------------------------------------------------------------------------

    Select 2DO WHILE Cods=Vcods

    ? CS-->Titlu, Nota, Data, CS-->NumeProfSKIP

    ENDDO

    ENDIF

    3.Considerm o baz de date normalizat pentru eviden studeni care cuprinde tabelele:

    STUD

    CodS Nume Adresa DataN Bursa Telefon CNP ......

    NOTECodS CodC NOTA Data

    CURS

    CodC Titlu NumeProf

    Folosind comenzile XBase elementare pentru dialog i SQL pentru cutarea informaiilor, s sescrie secvene de program care realizeaz funciile:

  • 7/22/2019 9 - Enunturi Si Raspunsuri - Proiecte Cti

    42/42

    Afiare Cods, Nume student, Bursa, pentru toi studenii care au medii mai mari dect ovaloare N

    Afiare pentru un student dat prin Cods toate notele, Titlul cursului pentru fiecare not iNume profesor.

    Se va ine cont c rezultatul unei comenzi SQL se obine ntr-o zona de lucru din care se poate

    afia direct folosind comanda BROWSE, iar variabilele citite sunt externe precedate de :.

    ACCEPT Media minima: TO NSELECT ST.Cods,ST.Nume, AVG(NT.Nota) Media FROM Stud ST, Note NT

    WHERE ST.Cods=NT.Cods GROUP BY ST.Cods,ST.Nume,ST.Bursa,

    HAVING AVG(NT.Nota)>:NBrowse && - afisare rezultat

    Wait

    ACCEPT Dati Cod student TO Vcods

    SELECT ST.Cods, ST.Nume,NT.Nota,CS.Titlu,CS.NumeP ProfesorFROM Stud ST, Note NT, Curs CS

    WHERE ST.Cods=:Vcods AND ST.Cods=NT.Cods AND NT.Codc=CS.CODCBROWSE

    Wait