9 - enunturi si raspunsuri - proiecte cti
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