Professional Documents
Culture Documents
PROBLEME PROPUSE
• Metoda interschimbarii (Bubble sort) [1, pag 11], [3, pag. 64-69];
11. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
pentru o structura de date tablou alocat static
12. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
pentru o structura de date tablou alocat dinamic (folosind malloc).
13. Implementati metoda de sortare folosind numai structuri de control for.
14. Implementati metoda de sortare folosind numai structuri de control while si
do…while.
15. Analizati complexitatea metodei in cazul cel mai defavorabil.
16. Aplicati metoda de sortare asupra unui sir specificat si pe baza functiei C descrise
vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
• Metoda selectiei (min, max, min-max, heap) [3, pag. 69-74], [1, pag. 97-98,
192-196];
17. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_min pentru o structura de date tablou alocat static
18. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_min pentru o structura de date tablou alocat dinamic (folosind malloc).
19. Implementati metoda de sortare sel_min folosind numai structuri de control for.
20. Implementati metoda de sortare sel_min folosind numai structuri de control while
si do…while.
21. Analizati complexitatea metodei sel_min in cazul cel mai defavorabil.
22. Aplicati metoda de sortare sel_min asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
23. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_max pentru o structura de date tablou alocat static
24. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_max pentru o structura de date tablou alocat dinamic (folosind malloc).
25. Implementati metoda de sortare sel_max folosind numai structuri de control for.
26. Implementati metoda de sortare sel_max folosind numai structuri de control while
si do…while.
27. Analizati complexitatea metodei sel_max in cazul cel mai defavorabil.
28. Aplicati metoda de sortare sel_max asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
29. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_min_max pentru o structura de date tablou alocat static
30. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_min_max pentru o structura de date tablou alocat dinamic (folosind malloc).
31. Implementati metoda de sortare sel_min_max folosind numai structuri de control
for.
32. Implementati metoda de sortare sel_min_max folosind numai structuri de control
while si do…while.
33. Analizati complexitatea metodei sel_min_max in cazul cel mai defavorabil.
34. Aplicati metoda de sortare sel_min_max asupra unui sir specificat si pe baza
functiei C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
35. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_heap pentru o structura de date tablou alocat static
36. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sel_heap pentru o structura de date tablou alocat dinamic (folosind malloc).
37. Implementati metoda de sortare sel_heap folosind numai structuri de control for.
38. Implementati metoda de sortare sel_heap folosind numai structuri de control while
si do…while.
39. Analizati complexitatea metodei sel_heap in cazul cel mai defavorabil.
40. Aplicati metoda de sortare sel_heap asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
• Metoda insertiei directe [3, pag. 63, 64], [1, pag. 64-65]. O varianta mai rapida
a metodei foloseste cautarea binara [1, pag. 98] pentru a stabili locul insertiei.
Se obtine algoritmul descris in [1, pag. 136];
41. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
ins_dir pentru o structura de date tablou alocat static
42. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
ins_dir pentru o structura de date tablou alocat dinamic (folosind malloc).
43. Implementati metoda de sortare ins_dir folosind numai structuri de control for.
44. Implementati metoda de sortare ins_dir folosind numai structuri de control while
si do…while.
45. Analizati complexitatea metodei ins_dir in cazul cel mai defavorabil.
46. Aplicati metoda de sortare ins_dir asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
47. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
ins_bin pentru o structura de date tablou alocat static
48. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
ins_bin pentru o structura de date tablou alocat dinamic (folosind malloc).
49. Implementati metoda de sortare ins_bin folosind numai structuri de control for.
50. Implementati metoda de sortare ins_bin folosind numai structuri de control while
si do…while.
51. Analizati complexitatea metodei ins_bin in cazul cel mai defavorabil.
52. Aplicati metoda de sortare ins_bin asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
53. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sort_num pentru o structura de date tablou alocat static
54. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
sort_num pentru o structura de date tablou alocat dinamic (folosind malloc).
55. Implementati metoda de sortare sort_num folosind numai structuri de control for.
56. Implementati metoda de sortare sort_num folosind numai structuri de control
while si do…while.
57. Analizati complexitatea metodei sort_num in cazul cel mai defavorabil.
58. Aplicati metoda de sortare sort_num asupra unui sir specificat si pe baza functiei
C descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
59. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
isort pentru o structura de date tablou alocat static
60. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
isort pentru o structura de date tablou alocat dinamic (folosind malloc).
61. Implementati metoda de sortare isort folosind numai structuri de control for.
62. Implementati metoda de sortare isort folosind numai structuri de control while si
do…while.
63. Analizati complexitatea metodei isort in cazul cel mai defavorabil.
64. Aplicati metoda de sortare isort asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
• Sortare prin partitionare (numita si sortare rapida… qsort) [1, pag. 214-215],
[3, pag. 65-69].
65. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
qsort pentru o structura de date tablou alocat static
66. Scrieti o functie C sau metoda C++/Java care implementeaza metoda de sortare
qsort pentru o structura de date tablou alocat dinamic (folosind malloc).
67. Implementati metoda de sortare qsort folosind numai structuri de control for.
68. Implementati metoda de sortare qsort folosind numai structuri de control while si
do…while.
69. Analizati complexitatea metodei qsort in cazul cel mai defavorabil, pivotul fiind
elementul de la mijloc al secventei de partitionat.
70. Analizati complexitatea metodei qsort in cazul cel mai defavorabil, pivotul fiind
intotdeauna primul element al secventei de partitionat.
71. Analizati complexitatea metodei qsort in cazul cel mai defavorabil.
72. Aplicati metoda de sortare ins_dir asupra unui sir specificat si pe baza functiei C
descrise vedeti ce rezultat se obtine la pasul k (k fiind cel putin 2).
- Tablouri.
a) Tablouri alocate static
73. [Transpusa unei matrice-1] Fie A un tablou patratic, alocat static, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
construiasca tabloul B care contine elementele transpusei matricei stocate in A.
73. [Transpusa unei matrice-2] Fie A un tablou patratic, alocat static, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
modifice tabloul A pentru a contine elementele transpusei matricei A, fara a folosi un
tablou suplimentar.
74. [Explorare pe linii] Fie A un tablou patratic, alocat static, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se parcurga
elementele tabloului, linie cu linie, si sa se calculeze, pentru fiecare linie suma
elementelor. Sa se memoreze elementele tabloului A, in ordinea vizitarii, in tabloul
unidimensional B.
75. [Explorare pe coloane] Fie A un tablou patratic, alocat static, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
parcurga elementele tabloului, coloana cu coloana, si sa se calculeze, pentru fiecare
coloana, suma elementelor. Sa se memoreze elementele tabloului A, in ordinea
vizitarii, in tabloul unidimensional B.
76. [Explorare Dia] Fie A un tablou patratic, alocat static, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma
elementelor de pe diagonala tabloului. Sa se memoreze elementele de pe diagonala
tabloului A in tabloul unidimensional B.
77. [Explorare TriD] 76. Fie A un tablou patratic, alocat static, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
calculeze suma elementelor din regiunea TriD. Sa se memoreze elementele din
regiunea TriD a tabloului A (intai elementele situate deasupra diagonalei principale,
apoi elementele de pe diagonala principala, iar in final cele situate sub diagonala
principala) in tabloul unidimensional B.
78. [Explorare Banda(r,s)] Fie A un tablou patratic, alocat static, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
calculeze suma elementelor din regiunea Banda(r, s), pentru r si s specificate. Sa se
memoreze elementele din regiunea Banda(r, s) a tabloului A (incepand din partea
superioara) in tabloul unidimensional B.
79. [Explorare Inf3] Fie A un tablou patratic, alocat static, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma
elementelor din regiunea Inf3. Sa se memoreze elementele din regiunea Inf3 a
tabloului A (incepand din partea superioara) in tabloul unidimensional B.
80. [Explorare Sup3] Fie A un tablou patratic, alocat static, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma
elementelor din regiunea Sup3. Sa se memoreze elementele din regiunea Sup3 a
tabloului A (incepand din partea superioara) in tabloul unidimensional B.
81. [Transpusa unei matrice-3] Fie A un tablou patratic, alocat dinamic, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
construiasca tabloul B care contine elementele transpusei matricei stocate in A.
82. [Transpusa unei matrice-4] Fie A un tablou patratic, alocat dinamic, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
modifice tabloul A pentru a contine elementele transpusei matricei A, fara a folosi un
tablou suplimentar.
83. [Explorare pe linii] Fie A un tablou patratic, alocat dinamic, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
parcurga elementele tabloului, linie cu linie, si sa se calculeze, pentru fiecare linie
suma elementelor. Sa se memoreze elementele tabloului A, in ordinea vizitarii, in
tabloul unidimensional B, alocat dinamic.
84. [Explorare pe coloane] Fie A un tablou patratic, alocat dinamic, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
parcurga elementele tabloului, coloana cu coloana, si sa se calculeze, pentru fiecare
coloana, suma elementelor. Sa se memoreze elementele tabloului A, in ordinea
vizitarii, in tabloul unidimensional B, alocat dinamic.
85. [Explorare Dia] Fie A un tablou patratic, alocat dinamic, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma
elementelor de pe diagonala tabloului. Sa se memoreze elementele de pe diagonala
tabloului A in tabloul unidimensional B, alocat dinamic.
86. [Explorare TriD] 76. Fie A un tablou patratic, alocat dinamic, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
calculeze suma elementelor din regiunea TriD. Sa se memoreze elementele din
regiunea TriD a tabloului A (intai elementele situate deasupra diagonalei principale,
apoi elementele de pe diagonala principala, iar in final cele situate sub diagonala
principala) in tabloul unidimensional B, alocat dinamic.
87. [Explorare Banda(r,s)] Fie A un tablou patratic, alocat dinamic, care contine
elementele unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se
calculeze suma elementelor din regiunea Banda(r, s), pentru r si s specificate. Sa se
memoreze elementele din regiunea Banda(r, s) a tabloului A (incepand din partea
superioara) in tabloul unidimensional B, alocat dinamic.
88. [Explorare Inf3] Fie A un tablou patratic, alocat dinamic, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma
elementelor din regiunea Inf3. Sa se memoreze elementele din regiunea Inf3 a
tabloului A (incepand din partea superioara) in tabloul unidimensional B, alocat
dinamic.
89. [Explorare Sup3] Fie A un tablou patratic, alocat dinamic, care contine elementele
unei matrice cu n randuri si n coloane (acestea fiind de tip float). Sa se calculeze suma
elementelor din regiunea Sup3. Sa se memoreze elementele din regiunea Sup3 a
tabloului A (incepand din partea superioara) in tabloul unidimensional B, alocat
dinamic.
95. Scrieti functia C sau metoda C++/Java pentru concatenarea a n liste simple,
alocate dinamic.
96. Scrieti functia C sau metoda C++/Java pentru cautarea unui element dupa cheie,
intr-un grup de liste simple, alocate dinamic.
97. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa cheie
(inaintea primului element mai mic/mare decit cel specificat, dupa primul element mai
mic/mare decat cel specificat), intr-o lista simpla, alocata dinamic.
98. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa pozitie
(inaintea unui element, dupa un element, la inceput, la sfarsit), intr-o lista simpla,
alocata dinamic.
99. Scrieti functia C sau metoda C++/Java care realizeaza interclasarea a doua liste
simple sortate crescator, alocate dinamic, astfel incat lista rezultat sa ocupe acelasi
spatiu.
c) Liste duble
100. Scrieti functia C sau metoda C++/Java pentru concatenarea a n liste duble,
alocate static/dinamic.
101. Scrieti functia C sau metoda C++/Java pentru cautarea unui element dupa cheie,
intr-un grup de liste duble, alocate static/dinamic.
102. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa cheie
(inaintea primului element mai mic/mare decit cel specificat, dupa primul element mai
mic/mare decat cel specificat), intr-o lista dubla, alocata static/dinamic.
103. Scrieti functia C sau metoda C++/Java pentru inserarea unui element dupa
pozitie (inaintea unui element, dupa un element, la inceput, la sfarsit), intr-o lista
dubla, alocata static/dinamic.
104. Scrieti functia C sau metoda C++/Java care realizeaza interclasarea a doua liste
duble, sortate crescator, alocate static/dinamic, astfel incat lista rezultat sa ocupe
acelasi spatiu.
d) Liste circulare
107. [Problema lui Josephus] In Masada (Galileea) s-a decis ca erau prea multi
prizonieri si ei trebuie executati. 1000 prizonieri (numerotati de la 1 la 1000) au fost
asezati in cerc, iar celui cu numarul 1 i s-a dat o sabie. El a fost instruit sa omoare cu
ea prizonierul situat la stanga, dupa care sa dea sabia urmatorului prizonier viu (din
stanga); acesta va trebui sa faca aceleasi operatii. Procedeul se repeta pana ramane un
singur prizonier, care va fi eliberat. Din Masada a iesit Josephus.
a) Ce pozitie ocupa el in cercul celor 1000 prizonieri ?
b) Deoarece ultima miscare genereaza controverse (raman doi prizonieri si unul
ii da sabia celuilalt sa il omoare), se decide sa fie lasati liberi ultimii doi prizonieri.
Pe ce loc era camaradul lui Josephus, care a scapat din Masada ?
1
Se dă un număr de trei turnuri, identificate cu a, b si c. Turnul a contine n discuri de
dimensiuni diferite aranjate în ordine crescatoare în raport cu dimensiunea lor.
- Arbori : clase de arbori (oarecare, binari, de sortare/cautare, AVL, heap, B si
B+), metode de reprezentare, metode de explorare, aplicatii.
http://www.ginfo.ro/8_3/hanoi.shtml
123. Sa se scrie o functie C sau o metoda C++/Java care insereaza un nou nod intr-un
arbore echilibrat 2 (AVL).
124. Sa se scrie o functie C sau o metoda C++/Java care sterge un nod intr-un arbore
echilibrat (AVL), cu pastrarea proprietatii arborelui.
125. Sa se scrie o functie C sau o metoda C++/Java care insereaza unei chei noi intr-
un arbore heap cu pastrarea proprietatii arborelui.
126. Sa se scrie o functie C sau o metoda C++/Java care sterge o cheie dintr-un arbore
heap cu pastrarea proprietatii arborelui.
127. Pentru un sir de chei se cere sa se verifice daca este un heap (ansamblu).
128. Pentru o expresie aritmetica se cere forma poloneza prefix (parcurgerea arborelui
binar asociat in preordine)
129. Pentru o expresie aritmetica se cere forma poloneza inversa (parcurgerea
arborelui binar asociat in postordine)
130. Pentru un text cu n caractere se cere sa se construiasca arborele Huffman si codul
sirului (algoritmul de compresie Huffman).
131. Sa se scrie o functie sau metoda C++/Java pentru cautarea unei chei intr-un
arbore oarecare specificat prin legaturi FIU, FRATE, PARINTE.
132. Sa se scrie o functie sau metoda C++/Java pentru cautarea unei chei intr-un
arbore binar de sortare.
133. Sa se scrie o functie sau metoda C++/Java pentru cautarea unei chei intr-un
arbore echilibrat (AVL).
134. Sa se scrie o functie sau o metoda C++/Java pentru inserare unei chei intr-o
tabela de dispersie.
135. Sa se scrie o functie sau o metoda C++/Java pentru stergerea unei chei dintr-o
tabela de dispersie.
136. Pentru o anumita functie se cere verificarea proprietatilor acesteia pentru a vedea
daca poate fi folosita ca functie de dispersie (hash).
a) Functii hash simple: Cormen (h(k) = k mod m), Knuth (h(k) = k(k+3) mod m)
b) Functii de dispersie pentru siruri
137. Sa se scrie o functie sau metoda C++/Java pentru implementarea algoritmului
Knuth-Morris-Pratt.
2
http://frankeman.sitesfree.com/licenta/tdaarbori1.html
142. [Jocul vietii] Se consideră o matrice de dimensiune NxM (N linii, M coloane).
Matricea are în total NxM celule. În unele din aceste celule se găsesc viruşi, maxim
un virus în celulă. O celulă se învecinează cu 8 alte celule. Celulele de pe marginea
matricii se învecinează doar cu 5 alte celule, iar celulele din colţurile matricii se
învecinează doar cu 3 alte celule. Populaţia de viruşi evoluează în etape, după
următoarele reguli:
1. O celulă care la etapa K este goală şi are exact trei viruşi vecini, va da
naştere unui virus în etapa K+1.
2. O celulă care la etapa K conţine un virus şi are doi sau trei vecini viruşi, va
păstra virusul şi la etapa K+1.
3. În orice altă situaţie o celulă care la etapa K conţine sau nu virus, la etapa
K+1 va deveni goală.
Scrieţi un program C care citeşte de la tastatură dimensiunea matricii (N şi M),
generează o configuraţie iniţială aleatoare a populaţiei de viruşi şi pe urmă afişează
evoluţia populaţiei de viruşi, aşteptând afişarea unei taste după fiecare etapă.
Programul îşi va încheia execuţia în momentul când utilizatorul va apăsa tasta 'x'.
Bibliografie
3
Numai pentru proiecte de laborator