Variante bac 15-19 (5) ALOCARE DINAMICA


1.Într-o listă liniară simplu înlănţuită, alocată dinamic, fiecare element reţine în câmpul ref adresa următorului nod din listă sau NULL în cazul ultimului element al listei, iar în câmpul inf un număr întreg.
Adresa primului element al
listei este reţinută în variabila
prim, iar p este o variabilă de
acelaşi tip cu prim. Ce va
afişa pe ecran secvenţa
alăturată? 
p=prim;
while ((p->inf%2==0) && (p!=NULL))
p=p->ref;
if (p!=NULL)
cout<<(p->inf); 
else
cout<<"NU"; 
a. Prima valoare impară din listă, dacă
aceasta există şi NU în caz contrar.
b. Prima valoare pară din listă, dacă
aceasta există şi NU în caz contrar.
c. Toate valorile impare din listă dacă astfel
de valori există şi NU în caz contrar.
d. Toate valorile pare din listă dacă astfel de
valori există şi NU în caz contrar.
Raspuns : a. deoarece dupa structura while , p va contine adresa primei valori impare din lista, iar mai apoi structura if afiseaza valuarea, sau in “NU” daca un s-a gasita o valuare impara.
2. Într-o listă liniară simplu înlanţuită, alocată dinamic, fiecare element conţine în câmpul nr un număr real, iar în câmpul urm adresa elementului următor. Lista are cel puţin două elemente, iar variabila x memorează adresa primului element din listă. Cu ce pot fi completate punctele de suspensie din secvenţa următoare, astfel încât să afişeze cuvântul ADEVARAT dacă media aritmetică dintre valorile câmpului nr ale primelor două elemente din listă este mai mică sau cel puţin egală cu 4.75, respectiv cuvântul FALS în caz contrar?
if (.....)cout << ”ADEVARAT”; | printf(”ADEVARAT”);
else cout << ”FALS”; | printf(”FALS”); 
Raspuns: (x->nr+x->urm->nr)/2<=4.75)
3. Într-o listă liniară simplu înlănţuită, alocată dinamic, fiecare element memorează în câmpul nr un număr întreg, iar în câmpul urm adresa elementului următor din listă sau valoarea NULL dacă nu există un element următor. Lista conţine exact trei elemente ale căror
adrese sunt memorate în variabilele p, q şi r. Ştiind că p->nr==1, q->nr==2, r->nr==3, p->urm!=NULL şi r->urm==q, care este ordinea numerelor din listă? 
a. 1 3 2 b. 1 2 3 c. 2 1 3 d. 3 2 1
Raspuns: a. deoarece q, este dupa r, iar p un poate fi ultimul. Astfel singara varianta ramane: p , r , q (1 , 3 , 2).
4.  Fiecare element al unei liste circulare, nevide, alocată dinamic, memorează în câmpul val
o valoare întreagă, iar în câmpul adr adresa elementului următor. Ştiind că variabila p
reţine adresa unui element oarecare din listă, iar variabila q este de acelaşi tip cu p,
precizaţi care dintre următoarele variante tipăreşte toate elementele listei?
a. q=p;
while(q!=p) {cout<val;
q=q->adr;}
b. q=p;
while(q->adr!=p){cout<val;
q=q->adr;}
c. q=p;
do{ cout<val;
q=q->adr;
}while(q!=p);
d. q=p->adr;
while(q!=p) {cout<val;
q=q->adr;}
Raspuns: a
5. Fiecare element al unei liste liniare, simplu înlănţuite, alocată dinamic, reţine în câmpul nr un număr întreg, iar în câmpul adr adresa elementului următor din listă. Dacă p reţine adresa primului element, iar lista are cel puţin două elemente, care dintre următoarele secvenţe de instrucţiuni copiază în câmpul nr al celui de-al doilea element al listei, conţinutul câmpului nr al primului element din listă? 
a. p->nr=p->adr->nr; b. p->adr=p->nr;
c. p->adr->nr=p->nr; d. p->adr->adr->nr=p->nr;
Raspuns: c.