Sunteți pe pagina 1din 3

TGC

Seminar 2

Temă de laborator
Să se implementeze ı̂n un limbaj de programare la alegere (preferabil C++) pro-
gramele următoare:
1. estePermutare(int n, int* p) care ia ca argumente de intrare un ı̂ntreg
pozitiv n şi un (pointer la un) tablou de n numere ı̂ntregi şi afişează
mesajul

• "este permutare" dacă valorile p[0], . . . , p[n−1] conţin o permutare


a numerelor 1, . . . , n.
• "nu este permutare" ı̂n caz contrar.
Scrieţi un program care să citească de la consolă valorile lui p[0], . . . , p[n−1]
şi apoi să apeleze estePermutare(n,p) pentru a detecta dacă s-a citit o
permutare sau nu.
2. int factorial(int n) care calculează n!
3. int binom(int n, int k) care ia ca argumente de intrare două numere
ı̂ntregi n ≥ k ≥ 0 şi calculează C(n, k). Calculul trebuie făcut fără a
calcula factoriali, folosind formulele de calcul recursiv
C(n, k) = C(n − 1, k) + C(n − 1, k − 1) dacă n > k > 0,
C(n, 0) = C(n, n) = 1.
şi să se evite calculul repetat al aceloraşi valori C(n, k).

4. int rangPermutare(int n, int* p) care care ia ca argumente de in-


trare un ı̂ntreg pozitiv n şi un (pointer la) un tablou de n numere ı̂ntregi,
şi returnează rangul permutării

hp[0], p[1], . . . , p[n − 1]i.

Se presupune implicit că hp[0], p[1], . . . , p[n − 1]i este o permutare a nu-
merelor 1,2,. . . ,n.
5. permutareUrmatoare(int n, int* p) care ia ca argumente de intrare
un ı̂ntreg pozitiv n şi un (pointer la) un tablou de n numere ı̂ntregi, şi
afişează permutarea următoare a permutării

hp[0], p[1], . . . , p[n − 1]i.

Se presupune implicit că hp[0], p[1], . . . , p[n − 1]i este o permutare a nu-
merelor 1,2,. . . ,n.
6. permutareCuRang(int n,int k) care afişează permutarea lui {1, 2, . . . , n}
cu rangul k.
7. (Opţional) permutarePrecedenta(int n, int* p) care ia ca argumente
de intrare un ı̂ntreg pozitiv n şi un (pointer la) un tablou de n numere
ı̂ntregi, şi afişează permutarea următoare a permutării

hp[0], p[1], . . . , p[n − 1]i.

Se presupune implicit că hp[0], p[1], . . . , p[n − 1]i este o permutare a nu-
merelor 1,2,. . . ,n.
Pentru implementarea acestor teme, puteti edita fisierul Permute.cpp care poate
fi descărcat de pe site-ul cursului, ı̂n care trebuiesc completate stub-urile funcţiilor
care lipsesc.

Temă de casă
(1) Într-un sertar sunt 50 de perechi de ciorapi. Fiecare pereche sunt albi sau
negri, lungi sau scurţi, găuriţi sau nu. 22 perechi sunt albi, 4 din ele sunt
găuriţi, iar una din cele 4 sunt lungi. Zece perechi albe sunt lungi, 10
perechi negre sunt lungi, iar 5 perechi lungi sunt găuriţi. Exact 3 perechi
de ciorapi scurţi sunt găuriţi.
• Folosiţi principiul incluziunii şi excluziunii pentru a determina numărul
de perechi de ciorapi negri, scurţi şi negăuriţi.
• Desenaţi o diagramă Venn care să indice numărul de perechi de cio-
rapi cu fiecare combinaţie de caracteristici.
(2) Câte numere ı̂ntregi ı̂ntre 50 şi 150 inclusiv
(a) se divid cu 3?
(b) se divid cu 7?
(c) se divid cu 7 dar nu se divid cu 3?
(d) se divid cu 7 sau cu 3?
(e) nu se divid nici cu 7 nici cu 3?
(3) Câte numere ı̂ntregi de la 1 la 999 inclusiv
(a) se divid cu 7?
(b) se divid cu 7 şi nu se divid cu 11?
(c) se divid cu 7 şi 11?
(d) se divid cu 7 sau cu 11?
(e) Se divid cu doar unul din cifrele 7 sau 11?
(f) Au cifre distincte?
(g) Sunt pare şi au cifre distincte?
(4) Câte numere prime mai mici decât 168 există?

(5) Se consideră mulţimea ordonată A = {a, b, c, d} cu a < b < c < d.


(a) Să se enumere primele şapte 3-permutări ale mulţimii A ı̂n ordine
lexicografică.
(b) Care este rangul permutării hc, b, a, di ı̂n ordine lexicografică?
(c) Care este permutarea cu rangul 60 ı̂n ordine lexicografică?

(6) Se consideră mulţimea ordonată A = {a, b, c, d} cu a < b < c < d.


(a) Să se enumere primele 7 submulţimi ale lui A ı̂n ordinea crescătoare
a rangului dat de reprezentarea binară a submulţimii.
(b) Care este submulţimea cu rangul 14 a lui A ı̂n enumerarea dată de
reprezentarea binară a submulţimilor lui A?
(c) Ce rang are submulţimea {a, c, d} ı̂n enumerarea dată de reprezentarea
binară a submulţimilor lui A?

S-ar putea să vă placă și