Documente Academic
Documente Profesional
Documente Cultură
p
10. S se defineasc rezoluia i s se enune etapele metodei de inferen demonstrativ prin
rezoluie.
Raspuns:
Regula de inferen prin rezoluie n logica propoziional are urmtoarea form:
A v B, B v C sau A B, B C
A v C A C
Aplicarea ei implic urmtorii pai: (1) Se presupune mai nti ca negata teoremei este
adevrat. (2) Se demonstreaz plecnd de la negata teoremei, cu ajutorul axiomelor, c nu
poate fi adevrat. (3) Se deduce ca presupunerea fcut nu poate fi adevrat pentru c duce
la o contradicie. (4) Concluzia este c teorema trebuie sa fie adevrat, de vreme ce negata
acesteia nu poate s fie adevrat.
Tehnici de programare
1. Vizibilitatea i durata de via a unei variabile interne, n limbajul de programare C.
Raspuns:
Variabilele interne unei funcii: sunt vizibile doar n interiorul funciei respective. Din
punctul de vedere al duratei de via pot fi:
- automatice - sunt create cnd se intr n funcie i dispar cnd se revine din aceasta;
- statice - exist pe toat durata programului; nu sunt create i nici nu sunt distruse la fiecare
activare funciei; n consecin, pot fi folosite pentru transmiterea de valori de la un apel la
altul al aceleiai funcii.
n mod implicit, variabilele interne sunt automatice. Pentru a deveni statice, ele trebuie
declarate static.
2. Iniializarea implicit i explicit a variabilelor, n limbajul de programare C.
Raspuns:
n absena iniializrii explicite este garantat iniializarea cu zero doar a variabilelor externe
i statice. Variabilele automatice i registru au valori iniiale nedefinite.
Pentru variabilele externe i statice, valoarea de iniializare explicit trebuie s fie o expresie
constant; iniializarea se efectueaz o singur dat, n principiu nainte ca programul s
nceap execuia.
n cazul variabilelor automatice i registru, iniializarea se efectueaz de fiecare dat cnd
se intr n funcie sau n bloc. Valoarea de iniializare poate fi i o expresie care s implice
valori definite anterior, chiar i apeluri de funcii.
3. Comparai un apel recursiv cu un calcul iterativ echivalent ? Care dintre cele dou variante
este mai eficient?
Raspuns:
Comparaie ntre iteraie i recursivitate:
Iteraia
Recursivitatea
5
execuia repetat a unei secvene de
instruciuni
nou iteraie se execut doar n urma
evalurii unei condiii (la nceput sau
sfrit)
fiecare iteraie se execut pn la capt
i apoi se trece, eventual, la o nou
iteraie
se recomand atunci cnd algoritmul de
calcul este exprimat printr-o formul
iterativ
execuia repetat a unei funcii
un nou apel recursiv se execut tot n
urma evalurii unei condiii (pe
parcurs)
funcia recursiv se apeleaz din nou,
nainte de terminarea apelului
precedent
se recomand doar atunci cnd
problema este prin definiie recursiv
(recursivitatea consum resurse n
exces)
Dei, aparent, cele dou variante sunt echivalente, se impune totui urmtoarea remarc
general: dac algoritmului de calcul i corespunde o formul iterativ este de preferat s se
foloseasc aceasta n locul apelului recursiv, ntruct viteza de prelucrarea este mai mare i
necesarul de memorie mai mic.
4. Operatorii de adresare i derefereniere, n limbajul de programare C.
Raspuns:
Adresa locaiei de memorie n care este stocat o variabil se poate obine aplicnd
operatorul de adres (operatorul &) naintea numelui variabilei.
Operatorul de adres (&) se aplic numai obiectelor din memorie: variabile, funcii i
elemente de tablou. Operatorul & nu poate fi aplicat expresiilor, constantelor sau variabilelor
de tip register.
Pentru a obine valoarea obiectului indicat de un pointer, numit i rvalue, se utilizeaz
operatorul de indirectare (derefereniere), notat cu *.
Dac p este o variabil de tip pointer care are ca valoare adresa locaiei de memorie a
variabilei ntregi x (p indic spre x) atunci expresia *p reprezint o valoare ntreag
(valoarea variabilei x).
Operatorii unari * i & au o preceden mai mare dect operatorii aritmetici.
5. Ce operaii cu pointeri sunt permise n limbajul de programare C ?
Raspuns:
Operaiile permise cu pointeri sunt:
- atribuirea pointerilor de acelai tip;
- adunarea unui pointer cu un ntreg sau scderea unui ntreg;
- scderea sau compararea a doi pointeri care indic spre elemente ale aceluiai tablou;
- atribuirea valorii zero (NULL) sau compararea cu aceasta.
6. Cum se poate realiza (simula) n C, transmiterea argumentelor prin adres ?
Raspuns:
Funcia apelant trebuie s furnizeze celei apelate adresa variabilei ce va fi accesat (un
pointer ctre acea variabil), iar funcia apelat trebuie s declare parametrul ca fiind pointer
i s acceseze variabila indirect, prin intermediul acestuia.
O alt excepie este n cazul tablourilor: cnd numele unui tablou este folosit ca
argument,valoarea transmis funciei este adresa locaiei primului element al tabloului.
Folosind aceast valoare ca pe o variabil cu indici, funcia poate accesa i poate modifica
direct orice element al tabloului.
6
7. Descriei modurile de acces la fiiere permise n limbajul de programare C.
Raspuns:
Limbajul de programare C permite dou modaliti de acces la componentele unui fiier:
acces secvenial: componentele sunt prelucrate strict n ordinea n care sunt nregistrate n
fiier.
acces direct: componentele se pot prelucra n orice ordine, specificnd poziia n fiier a
componentei ce urmeaz s fie prelucrat. Pentru a putea ca, pe baza poziiei, s se calculeze
locul din fiier de unde urmeaz s se continue prelucrarea, programatorul trebuie s
cunoasc formatul fiierului i dimensiunea nregistrrilor.
8. Descriei procesul de rafinare a unui program n pai succesivi (Step Wise Refinement).
Raspuns:
Pasul 1 : Se scrie funcia principal(main) utiliznd, pe ct posibil, apeluri de funcii
corespunztoare operaiilor de baz care se disting n aceast faz. Se descriu structurile de
date aferente programului. Funciile apelate din funcia principal se definesc doar la modul
generic (prototip urmat de /*comentarii*/).
Paii 2, 3, ... : Se dezvolt funciile apelate direct din funcia principal (pasul 2), apoi
funciile apelate din acestea din urm (pasul 3) .a.m.d., pn la elaborarea, n amnunt, a
ntregului program.
9. Care este principiul de baz al metodei de rezolvare Devide and Conquer? Ilustrai aceast
tehnic n pseudocod.
Raspuns:
Metoda Devide and Conquer este o metod fundamental de proiectare a algoritmilor care
poate s conduc la soluii deosebit de eficiente.
Principiul de baz al acestei tehnici este acela de a descompune n mod repetat o problem
complex n dou sau mai multe subprobleme de acelai tip, urmat de combinarea soluiilor
acestor subprobleme pentru a obine soluia problemei iniiale. ntruct subproblemele
rezultate din descompunere sunt de acelai tip cu problema iniial, metoda se exprim n
mod natural printr-o funcie recursiv.
Apelul recursiv se continu pn n momentul n care subproblemele devin banale i soluiile
lor evidente.
10. Care sunt avantajele utilizrii tipurilor de date abstracte?
Raspuns:
Avantajele utilizrii tipurilor de date abstracte sunt:
Modularizarea aplicaiile din programarea real (de mari dimensiuni) pot fi
realizate din module(fiiere) care se proiecteaz, se codific, se compileaz, se
testeaz i se ntrein separat, fiecare modul avnd dimensiuni rezonabile.
Reutilizarea codului un modul realizat judicios are mari anse de a putea fi
utilizat i n alte aplicaii.
ncapsularea prin intermediul datelor abstracte, o parte din cod i date poate fi
ascuns de restul aplicaiei; astfel acestea sunt protejate fa de modificarea
accidental.
Programele devin independente de modul de reprezentare a datelor (de exemplu,
o mulime poate fi implementat printr-un tablou sau printr-o list ordonat, dar
partea de program ce definete operatorii tipului abstract poate s fie aceeai.
Se previne modificarea accidental a datelor. Utilizatorul tipului abstract este
forat s manipuleze datele doar prin intermediul operatorilor ce compun tipul
abstract (se reduce riscul unei distrugeri a datelor).
7
Programarea orientat pe obiecte
1. Enumerai i descriei pe scurt cel puin 3 caracteristici ale orientrii pe obiecte.
Raspuns:
- ncapsularea - gruparea unor elemente nrudite ntr-o unitate, care ulterior poate fi referit
printr-un nume unic.
- Pstrarea strii - odat creat un obiect poate participa n mai multe interaciuni cu alte
obiecte, iar efectul execuiei unei operaii se nregistreaz n variabilele de stare, astfel c la
urmtoarea interaciune obiectul pornete din alt stare.
- Motenirea - o clas derivat din alt clas motenete atributele i operaiile clasei din care
este derivat, fr a fi nevoie ca acestea s fie definite explicit n clasa derivat.
- Polimorfismul - un atribut (variabil) poate conduce la obiecte de clase diferite la momente
de timp diferite; o anumit operaie poate avea implementri diferite n clase diferite aflate n
relaie de motenire.
2. Cum se face transmiterea parametrilor n Java? Precizai efectul asupra tipurilor elementare
i asupra tipurilor referin (nu este necesar scrierea de cod).
Raspuns:
n Java parametrii se transmit ntotdeauna prin valoare, ceea ce nseamn c ntr-o metod se
lucreaz cu copii ale parametrilor, lsndu-se nemodificai parametrii din apel. Dac
parametrii sunt de tipuri elementare, orice modificare efectuat asupra lor n metod nu este
vizibil n punctul de apel. Dac parametrii sunt de tipuri referin, modificarea valorii
referinei nu este vizibil n punctul de apel; prin valoarea transmis a referinei se poate ns
modifica starea obiectului referit n momentul apelului.
3. Enumerai i caracterizai pe scurt cei 4 modificatori de acces pentru metode din Java.
Raspuns:
Modificatorii de acces pentru metode sunt: public, protected, private i package. O metod cu
modificatorul de acces public este vizibil peste tot unde clasa este vizibil. O metod cu
modificatorul de acces protected este vizibil n orice clas derivat din cea curent i n
clasele pachetului curent. O metod cu modificator de acces private este vizibil numai n
clasa curent. n absena unui modificator de acces se consider c metoda este vizibil n
clasele pachetului curent.
4. Ce se nelege prin polimorfism? Ilustrai printr-un exemplu (nu este necesar scrierea
complet a unui program).
Raspuns:
Polimorfismul este legat de conceptul de motenire. O metod (public sau protected) a unei
clase poate fi nlocuit cu alt implementare ntr-o subclas, iar la execuie selectarea
implementrii se face n funcie de tipul efectiv al obiectului (late binding), indiferent de
tipul declarat al referinei utilizate n apel. Astfel, dac exist o clas Vehicul i o clas
derivat Avion i o referin ref de tipul Vehicul, ref poate conduce la execuie fie spre
obiecte Vehicul, fie spre obiecte Avion, iar la apelul unei metode prin ref.oMetoda() se va
selecta implementarea corespunztoare tipului obiectului spre care indic momentan ref.
5. Prin ce se deosebete o interfa de o clas abstract?
Raspuns:
O interfa conine numai declaraii de metode, fr implementri (metode abstracte); o clas
care implementeaz interfaa trebuie s conin implementri pentru toate metodele interfeei
8
(posibil implementri nule) sau s fie declarat clas abstract. O clas abstract conine cel
puin o metod abstract, dar poate avea implementri pentru oricte alte metode. Utilizarea
claselor abstracte implic utilizarea motenirii, pe cnd o interfa poate fi implementat
indiferent de poziia clasei n ierarhia de clase.
6. Ce se poate ntmpla dac ntr-o metod este generat o excepie care nu este declarat n
clauza throws a metodei? (Explicai toate cazurile pe care le considerai posibile).
Raspuns:
Dac ntr-o metod este generat o excepie care nu este declarat n clauza throws a metodei,
pot fi deosebite urmtoarele situaii:
- excepia poate fi una dintre cele pentru care metoda are o clauz catch, care o trateaz;
- excepia poate fi de un subtip al unui tip prevzut n clauza throws a metodei, fiind
propagat n punctul de apel;
- excepia este neverificabil, conducnd probabil la terminarea execuiei programului.
7. Explicai cum se execut metodele sincronizate.
Raspuns:
Pentru a executa o metod sincronizat, firul de execuie din care se face apelul trebuie s
obin lactul obiectului pe care este apelat metoda. Dac lactul este liber, execuia metodei
poate ncepe. Pe durata execuiei nici un alt fir nu poate executa o metod sincronizat pentru
acelai obiect. Dac solicit acest lucru, firul va fi pus n ateptare pn la eliberarea
lactului. Cnd lactul devine liber, va fi ales ntr-o ordine oarecare unul din firele de
execuie n ateptare la acel obiect.
8. Dac un program conine la un moment dat 10 obiecte de un anumit tip (clas), cte
exemplare ale codului metodelor statice, ale codului metodelor ne-statice, ale cmpurilor
statice i ale cmpurilor ne-statice ale clasei vor exista n program? De ce?
Raspuns:
Codul metodelor statice i ne-statice ale unei clase se pstreaz n memorie ntr-un singur
exemplar, indiferent de numrul de obiecte active din clasa respectiv, deoarece nu este
modificat pe parcursul execuiei. De asemenea, variabilele statice (variabilele de clas) vor
exista ntr-un singur exemplar. Doar cmpurile (variabilele) de exemplar, care pstreaz
starea unui anumit obiect, trebuie s existe separat pentru fiecare obiect, adic de 10 ori n
acest caz.
9. Cte fire de execuie are un program cu interfa grafic n care s-a creat i activat un
obiect al unei clase derivate din Thread? Explicai.
Raspuns:
Un program cu interfa grafic (GUI) are implicit 2 fire de execuie cnd este lansat: firul
creat pentru execuia metodei main() i firul destinat execuiei codului de tratare a
evenimentelor. Aceasta nseamn c n cazul descris programul va avea 3 fire de execuie.
10. Cte clase ale unui program Java pot conine o metod main()? Cum se face lansarea n
execuie a programului?
Raspuns:
Oricte clase ale unui program Java pot conine o metod main(), ceea ce este util n special
pentru testarea programului. Pentru lansarea n execuie a programului se poate folosi numele
oricrei clase care conine o metod main():
java OClasaCuMetodaMain
n final trebuie desemnat clasa principal a programului i lansarea n execuie se va face cu
9
numele clasei respective.
Arhitectura calculatoarelor
1. S se analizeze problemele exponentului i mantisei la reprezentarea numerelor binare n
virgul flotant.
Raspuns:
Notaia tiinific prevede urmtoarea forma pentru un numr X de virgul
flotanta
E
X
M
X X B = , unde X
M
reprezint mantisa, B reprezint baza si X
E
reprezint
exponentul.
n ceea ce privete exponentul X
E
, pentru a diminua o potenial eroare n cmpul de
exponent se impune cel mai mic numr reprezentabil n cei e bii alocai exponentului. Pe de
alt parte, pentru a reprezenta numrul 0 avnd att exponentul ct i mantisa format din bii
de 0 exponentul se reprezint ntr-un cod exces de 2
e-1
-1, respectiv de 2
e-1
, dependent de
reprezentarea semn-mrime, respectiv complement de 2 a exponentului.
n ceea ce privete mantisa, chiar dac pe parcursul procesrii interne din calculator,
nu este restricionat forma numerelor de virgul flotant, la introducerea datelor n
calculator, precum i la extragerea rezultatelor s-a impus o forma unic, normalizat n care
se mpacheteaz numerele.
2. Soluii de mbuntaire a latenei operaiei de adunare la sumatoare binare paralele.
Raspuns:
Prin prisma parametrului reprezentat de latena operaiei de adunare, la polul cel mai
defavorabil se situeaz sumatoarele paralele pe principiul propagrii seriale a transportului.
Din clasa sumatoarelor avnd la baz acelai principiu mai fac parte sumatoarele carry
completion i Manchester (Kilburn).
La polul opus se situeaz sumatoarele paralele pe principiul anticiprii transportului.
Dificultile de natur tehnologic au condus la soluii de compromis, cum ar fi structura
arborescent multinivel cu anticipare a transportului sau construcii hibride. Derivat din
principiul anticiprii transportului se prezint metoda sumatoarelor paralele pe principiul
omiterii propagrii seriale a transportului, facilitat de proprietatea de prencrcare permis
de tehnologia CMOS. Bazat pe acelai principiu mai avem i sumatoare la care adunarea se
efectueaz prin aa numitul algoritm al sumei condiionat pe principiul selectrii prin
transport a sumei, respectiv sumatoarele paralele pe principiul condiionrii prin transport a
sumei.
3. S se prezinte principalele metode de nmulire a numerelor binare fr semn.
Raspuns:
Prima metod const n utilizarea de numrtoare prin intermediul crora denmulitul Y este
adunat de un numar X (nmulitor) de ori la el nsui. Metoda revendica un timp de calcul
prohibitiv. n ceea ce privete metoda de nmulire convenional, paper and pencil, pentru
implementare n calculator, ea se dovedete ca neadecvat ntruct stocarea intermediar a
produselor de un bit decelate solicit excesiv resursa memorie. O mbuntire sub acest ultim
aspect o reprezint metoda bazat pe formarea n mod iterativ a unui produs parial
cumulativ, uzitnd de iteraia
1
: 2
i
i i i
P P x Y
+
= + , unde P
i+1
este noul produs parial obinut
prin adunarea la precedentul (P
i
) a produsului de un bit al lui Y corespunztor deplasat la
stnga.
O mbuntire echivalent celei de mai sus prin prisma spaiului de memorare
revendicat este metoda bazat pe iteraia compus: :
i i i
P P x Y = + ,
1
1
: 2
i i
P P
+
= .
10
4. S se scoat n relief caracteristicile procedurii Robertson pentru nmulirea numerelor
binare ntregi.
Raspuns:
Procedura Robertson permite nmulirea numerelor binare reprezentate n complement de 2
plecnd de la definiia acestuia din urm n forma
2
2
1 '
1
0
2 2
n
n i
C n i
i
X x x
=
= +
. O alt
caracteristic o reprezint faptul c, n situaia cnd denmulitul Y este negativ, atunci cnd
se realizeaz deplasarea la dreapta, n rangul cel mai semnificativ al produsului cumulativ
trebuie introdus valoarea 1 n loc de 0 la ntlnirea primului bit de 1 din nmulitorul X. n
acest scop, se utilizeaz un bistabil fanion care, iniial este pus pe 0 i este basculat la primul
bit de 1 a lui X, cnd Y este negativ, asigurnd rmnerea fanionului n aceast stare pn la
finele procedurii.
5. S se scoat n relief caracteristicile procedurilor Booth.
Raspuns:
Ambele proceduri ale lui Booth asigur nmulirea binar n complement de 2. ntr-o prim
instan, Booth lanseaz o prim procedur menit a mbunti latena nmulirii dar aceasta
doar n cazul n care nmulitorul X conine iruri de 1-uri, sau iruri de 0-uri. n acest sens,
propune inspectarea simultan a 2 bii. n cazul c perechea de bii
1
01
i i
x x
= , atunci se
execut o operaie de adunare succedat de deplasarea la dreapta, iar n cazul c perechea de
bii
1
10
i i
x x
= sau
1
11
i i
x x
log
2
n +1