Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Facultatea de Inginerie
Departamentul de Automatică, Energie şi Mediu
PROIECTAREA
ALGORITMILOR
Curs recapitulativ
Structura biletelor de
examen
Probleme recapitulative
Grila 1
Un arbore cu 9 noduri numerotate de la 1 la 9
este memorat cu ajutorul vectorului de ”tati”
TATA = (9,3,4,7,3,9,0,7,2).
Multimea tuturor nodurilor de tip frunza este:
a. { 8, 6, 1, 5 }
b. { 1, 6 }
c. { 8 }
d. { 1, 6, 8 }
Solutie: a)
Proiectarea Algoritmilor - curs 5
14
Grila 2
Care este numarul minim de muchii ce trebuie
eliminate astfel incat graful neorientat cu 6 noduri si
urmatoarea matrice de adiacenta sa fie eulerian?
0 1 1 1 1 0
1 0 0 1 1 1 a. 4
1 0 0 1 0 0
b. 1
1 1 1 0 1 0
c. 0
1 1 0 1 0 1
d. 2
0 1 0 0 1 0
Solutie: c)
Proiectarea Algoritmilor - curs 6
14
Grila 3
Se considera definitia: a. 1
long f(int n) b. -3
{ c. -4
d. 4
if (n == 0) return 1;
else
Solutie: d)
if (n == 1) return 4;
else return f(n-1) - f(n-2);
}
Stabiliti ce valoare returneaza apelul f(7).
Proiectarea Algoritmilor - curs 7
14
Grila 4
Intr-o lista simplu inlantuita circulara, fiecare
element retine in campul adr adresa elementului urmator
din lista. Daca p si q sunt adresele a doua elemente
distincte din lista astfel incat sunt satisfacute
conditiile p == q -> adr si q == p -> adr. Atunci lista are:
Probleme recapitulative
Problema 1:
Enunţ:
Sa se scrie o functie recursiva care
primeste un parametru n numar natural si
afiseaza cifrele sale in ordinea din el si
separate prin cate un spatiu.
void afis(int n)
{
if(n>0)
{
afis(n/10);
cout<<n%10<<" ";
}
}
Proiectarea Algoritmilor - curs 11
14
int main()
{
cout<<“Dati n = ”;
cin>>n;
afis(n);
return 0;
}
Problema 2:
Enunţ:
Scrieti o functie care primeste ca
parametru primul nod al unei liste liniare
simplu inlantuite si inverseaza primul nod
al listei cu ultimul. Primul nod al listei
rezultate va fi returnat ca rezultat al
functiei.
Problema 3:
Enunţ:
Se citesc 2 grafuri neorientate, unul
cu n noduri si m muchii, iar celalalt cu k
varfuri si l muchii, ambele date prin vectorul
muchiilor.
Sa se determine daca al doilea graf este
subgraf al primului.
#include<fstream.h>
#include<iostream.h>
ifstream f("date.in");
ifstream g("date2.in");
int a[100][100],b[100][100],n,m,k,l;
g>>k>>l;
for(i=1;i<=l;i++)
{
g>>x>>y;
b[x][y]=1;
b[y][x]=1;
}
}
int subgraf()
{
for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++)
if(a[i][j]!=b[i][j]) return 0;
return 1;
}
int main()
{
citire();
if(subgraf()) cout<<"da";
else cout<<"nu";
}
Exemplu:
Exemplu:
n=4 v=(-3, 8, 2, -5) DA
v=(-4, -7, -2, -8) NU
Solutii posibile:
rosu galben verde
rosu galben albastru
...
Exemplu:
n=1310=11012
Baftă!