Lab 4 Apa

Descărcați ca docx, pdf sau txt
Descărcați ca docx, pdf sau txt
Sunteți pe pagina 1din 21

Ministerul Educaţiei, Culturii și Cercetării

Universitatea Tehnică a Moldovei


Facultatea Calculatoare Informatică şi Microelectronică
Departamentul Ingineria Software şi Automatică

Raport
privind efectuarea
lucrării de laborator nr.4

Disciplina: Analiza și Proiectarea Algoritmilor


Tema: Analiza empirică a algoritmilor Dijkstra și Floyd

A realizat st.gr. TI-

A verificat Andrievschi-Bagrin Veronica

Chișinău 2018
Cuprin

Scopul lucrării.......................................................................................................................................3
Realizarea..............................................................................................................................................4
Anexa A................................................................................................................................................8
Anexa B...............................................................................................................................................14
Scopul lucrării

Tema: Metoda programării dinamice


Scopul lucrării:
1. Studierea metodei programării dinamice.
2. Analiza şi implementarea algoritmilor de programare dinamică.
3. Compararea tehnicii greedy cu metoda de programare dinamică.

Sarcina lucrării
Să se realizeze analiza empirică a algoritmilor Dijkstra și Floyd pentru
determinarea celor mai scurte drumuri dintr-un graf.
Realizarea

Noțiuni teoretice

Floyd

Fie G = <V, A> un graf orientat, unde V este mulţimea vârfurilor şi A este
mulţimea arcelor. Fiecărui arc i se asociază o lungime nenegativă. Vom presupune că
vârfurile sunt numerotate de la 1 la n şi că matricea L dă lungimea fiecărui arc:

L[i, i] = 0, L[i, j] 0 pentru i j, L[i, j] = dacă arcul (i, j) nu există.

Principiul optimalităţii este valabil: dacă cel mai scurt drum de la i la j trece prin
varful k, atunci porţiunea de drum de la i la k, cât şi cea de la k la j, trebuie să fie, de
asemenea, optime. Construim o matrice D care să conţină lungimea celui mai scurt
drum între fiecare pereche de vârfuri. Algoritmul de programare dinamică
iniţializează pe D cu L.
Dk[i, j] = min(Dk-1[i, j], Dk-1[i, k] Dk-1[k, j])
Dijkstra
Notăm cu C mulţimea vârfurilor disponibile (candidaţii) şi cu S mulţimea
vârfurilor deja selectate. În fiecare moment, S conţine acele vârfuri a căror distanţă
minimă de la sursă este deja cunoscută, în timp ce mulţimea C conţine toate celelalte
vârfuri. La început, S conţine doar vârful sursă, iar în final S conţine toate vârfurile
grafului. La fiecare pas, adăugam în S acel vârf din C a cărui distanţă de la sursă este
cea mai mică.

Numărul de iterații pentru fiecare algoritm în toate cazurile

Tabelul 1. Algoritmul Dijkstra


Cazul
Favorabil Mediu Nefavorabil
Nr.noduri
10 90 130 160
100 9900 32600 35800
500 112032 1070500 1146000
Tabelul 2. Algoritmul Floyd
Cazul
Favorabil Mediu Nefavorabil
Nr.noduri
10 36 108 102
100 4851 53872 51242
500 68985 2189570 1854786

Cazul favorabil
120000

100000

80000

60000

40000

20000

0
10 100 500

Dijkstra Floyd
Cazul mediu
2500000

2000000

1500000

1000000

500000

0
10 100 500

Dijkstra Floyd

Cazul defavorabil
2000000
1800000
1600000
1400000
1200000
1000000
800000
600000
400000
200000
0
10 100 500

Dijkstra Floyd
Concluzii
În urma efectuării lucrării de laborator nr.4, s-au dezvoltat noi abilități în
prelucrarea algoritmilor Floyd și Dijkstra pentru aflarea costului dumului minim într-
un graf neorientat.
Conform programului utilizat pentru determinarea numărului de iterații, s-a
dovedit că algoritmul Floyd este mai eficient, precum avem mai puține iterații. Un
avantaj foarte mare al algoritmului dat este că are doar 3 cicluri și poate fi cu ușurință
implementat în cod.
În urma analizii empirice s-a determinat că algoritmul Floyd ar fi unul mai
eficient în cazurile favorabile și random, în comparație cu Dijkstra.

Anexa A

Pseudocod Floyd
Pseudocod Dijkstra

Listingul programului
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define max 500
#define INF INT_MAX
using namespace std;
unsigned long long MS[max][max], MV[max][max], MVdij[max][max],
MVfloid[max][max], n, parent[max], visited[max],
path[max], disvec[max][max];
int count1 = 0, count2 = 0, tmpi, u, possition = 0, start, finish;
void RESET() {
count1 = 0;
count2 = 0;
for (int i = 0; i<n; i++) {
parent[i] = 0;
visited[i] = 0;
for (int j = 0; j<n; j++) {
MVdij[i][j] = MV[i][j];
MVfloid[i][j] = MV[i][j];
}
}

}
//cazul defavorabil
void nr_virf_defavorabil() {
cout << "Numarul de virfuri: ";
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)

if (j > i) {
MS[i][j] = rand() % 1000;
}
else if (i > j) {
MS[i][j] = MS[j][i];
}
}
}
void costurile_defavorabil() {

for (int i = 0; i<n; i++) {


for (int j = 0; j<n; j++) {
if (MS[i][j] && i != j) {

MV[i][j] = MS[i][j];
}
else
MV[i][j] = INF;
}
}
RESET();
}
//cazul favorabil
void nr_virf_favorabil() {
cout << "Numarul de virfuri: ";
cin >> n;

for (int i = 0; i<n; i++) {


for (int j = 0; j<n; j++)

MS[i][i + 1] = rand() % 1000;


}
}
void costurile_favorabil() {

for (int i = 0; i<n; i++) {


for (int j = 0; j<n; j++) {
if (MS[i][j] && i != j) {

MV[i][j] = MS[i][j];
}
else
MV[i][j] = INF;
}
}
RESET();
}
//cazul mediu
void nr_virf_mediu() {
cout << "Numarul de virfuri: ";
cin >> n;

for (int i = 0; i < n; i++) {


for (int j = 0; j < n; j++)
if (i % 2 == 0 && j % 2 == 0) {
j = j + 1;
MS[i][j] = rand() % 1000;
}
else if (i % 2 != 0 && j % 2 != 0) {
j = j + 1;
MS[i][j] = rand() % 1000;
}
else if (i > j) {
MS[i][j] = MS[j][i];
}
}
}
void costurile_mediu() {

for (int i = 0; i<n; i++) {


for (int j = 0; j<n; j++) {
if (MS[i][j] && i != j) {

MV[i][j] = MS[i][j];
}
else
MV[i][j] = INF;
}
}
RESET();
}
void DIJKSTRA() {
int distance[max],disvec[max][max],visited[max];
cout << "Introduceti 2 virfuri unde doriti sa cautati" << endl;
cout << "Din "; cin >> start; cout << "In "; cin >> finish;
for (int ji = 0; ji < n; ji++) {
for (int i = 0; i < n; i++) {
distance[i] = INF;
visited[i] = 0;
}

distance[start - 1] = 0;
int st = 0;
for (int i = 0; i < n; i++) {
disvec[st][i] = distance[i];
}
for (int i = 0; i < n - 1; i++) {
int min = INF;
for (int i = 0; i < n; i++) {
if (!visited[i] && distance[i] <= min) {
min = distance[i];
tmpi = i;
count1++;
}
}
u = tmpi;
visited[u] = 1;
for (int i = 0; i < n; i++) {
if (!visited[i] && MVdij[u][i] && distance[u] != INF && distance[u] +
MVdij[u][i] < distance[i]) {
distance[i] = distance[u] + MVdij[u][i];
count1++;
}
}
st++;
for (int i = 0; i < n; i++) {
disvec[st][i] = distance[i];
count1++;
}
}

int k = finish - 1;
path[possition] = finish - 1;
while (path[possition] != start - 1) {
if (disvec[st][k] == disvec[st - 1][k]) {
st--;
}
else {
for (int j = 0; j < n; j++) {
if (disvec[st][k] == disvec[st - 1][j] + MVdij[j][k]) {
path[++possition] = j;
k = j;
st--;
break;
}
}
}
}
}
cout << "Drumul minin de la " << start << " pina la " << finish << " este " <<
distance[finish - 1] << "." << endl;
cout << "Numarul de iteratii : " << count1 << endl;

}
void FLOYD() {
int start, finish;
cout << "Introduceti 2 virfuri pentru a afla drumul minim" << endl;
cout << "Din "; cin >> start; cout << "In "; cin >> finish;
for (int k = 0; k<n; k++)
for (int i = 0; i<n; i++)
for (int j = 0; j<n; j++) {
count2++;
if (MVfloid[i][k] && MVfloid[k][j] && i != j)
if (MVfloid[i][k] + MVfloid[k][j]<MVfloid[i][j] || MVfloid[i][j] ==
0) {
MVfloid[i][j] = MVfloid[i][k] + MVfloid[k][j];
count2++;
}
}
cout << "Drumul minim de la " << start << " pina la " << finish << " este " <<
MVfloid[start - 1][finish - 1] << "." << endl;
cout << "Numarul de iteratii : " << count2 << endl;
}

int main() {
double t1, t2;
int ChooseMenu;
int x;
x: while (true) {
system("cls");
cout << "1. Cazul favorabil." << endl
<< "2. Cazul mediu." << endl
<< "3. Cazul defavorabil." << endl
<< "0. Exit." << endl;
cout << endl << ">>> ";
cin >> ChooseMenu;
system("cls");
switch (ChooseMenu) {
case 1: {
while (true) {
system("cls");
cout << "1. Introduceti numarul de virfuri." << endl
<< "2. Algoritmul Floyd." << endl
<< "3. Algoritmul Dijkstra." << endl
<< "0. Meniul principal." << endl;
cout << endl << ">>> ";
cin >> ChooseMenu;
system("cls");
switch (ChooseMenu) {
case 1: {
nr_virf_favorabil();
costurile_favorabil();
break;
}
case 2: {

FLOYD();

break;
}
case 3: {

DIJKSTRA();

break;
}
case 0: {
RESET();
goto x;
}
default: {
cout << "Optiune gresita" << endl;
break;
}
}
system("pause");
system("cls");
}
case 2: {
while (true) {
system("cls");
cout << "1. Introduceti numarul de virfuri." << endl
<< "2. Algoritmul Floyd." << endl
<< "3. Algoritmul Dijkstra." << endl
<< "0. Meniul principal." << endl;
cout << endl << ">>> ";
cin >> ChooseMenu;
system("cls");
switch (ChooseMenu) {
case 1: {
nr_virf_mediu();
costurile_mediu();
break;
}
case 2: {

FLOYD();

break;
}
case 3: {

DIJKSTRA();

break;
}
case 0: {
RESET();
goto x;
}
default: {
cout << "Optiune gresita" << endl;
break;
}
}
system("pause");
system("cls");
}
case 3: {
while (true) {
system("cls");
cout << "1. Introduceti numarul de virfuri." << endl
<< "2. Algoritmul Floyd." << endl
<< "3. Algoritmul Dijkstra." << endl
<< "0. Meniul principal." << endl;
cout << endl << ">>> ";
cin >> ChooseMenu;
system("cls");
switch (ChooseMenu) {
case 1: {
nr_virf_defavorabil();
costurile_defavorabil();
break;
}
case 2: {

FLOYD();

break;
}
case 3: {

DIJKSTRA();

break;
}
case 0: {
RESET();
goto x;
}
default: {
cout << "Optiune gresita" << endl;
break;
}
}
system("pause");
system("cls");
}
case 0: {
return 0;
}
default: {
cout << "Optiune gresita" << endl;
break;
}}}}}
system("pause");
system("cls");}}

Anexa B

Cazul favorabil

Fig 1. Alg.Floyd 10 noduri

Fig 2. Alg.Dijkstra 10 noduri


Fig 3. Alg.Floyd 100 noduri

Fig 4. Alg.Dijkstra 100 noduri

Fig 5. Alg.Floyd 500 noduri


Cazul defavorabil

Fig 6. Alg.Floyd 10 noduri

Fig 7. Alg.Dijkstra 10 noduri

Fig 8. Alg.Floyd 100 noduri

Fig 9. Alg.Dijkstra 100 noduri

Fig 10. Alg.Floyd 500 noduri

Fig 11. Alg.Dijkstra 500 noduri

Cazul mediu

Fig 12. Alg.Floyd 10 noduri

Fig 13. Alg.Dijkstra 10 noduri


Fig 14. Alg.Floyd 100 noduri

Fig 15. Alg.Dijkstra 100 noduri

Fig 16. Alg.Floyd 500 noduri

Fig 17. Alg.Dijkstra 500 noduri

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

  • IoT Laborator NR 2
    IoT Laborator NR 2
    Document10 pagini
    IoT Laborator NR 2
    crismaruion
    Încă nu există evaluări
  • Lab 3 MMC
    Lab 3 MMC
    Document4 pagini
    Lab 3 MMC
    Adrian Bodorin
    Încă nu există evaluări
  • Lab NR 4 MMC2 Duca Dumitru TI 194
    Lab NR 4 MMC2 Duca Dumitru TI 194
    Document11 pagini
    Lab NR 4 MMC2 Duca Dumitru TI 194
    Santa Claus
    Încă nu există evaluări
  • Lab 1 ASDN
    Lab 1 ASDN
    Document7 pagini
    Lab 1 ASDN
    Cobilas Vasile
    Încă nu există evaluări
  • Bac Info 2020 Testul 2
    Bac Info 2020 Testul 2
    Document5 pagini
    Bac Info 2020 Testul 2
    Silviu L
    Încă nu există evaluări
  • Raport CDE Lab.2
    Raport CDE Lab.2
    Document7 pagini
    Raport CDE Lab.2
    crismaruion
    100% (1)
  • MMC Lab2
    MMC Lab2
    Document6 pagini
    MMC Lab2
    Mihail Boran
    Încă nu există evaluări
  • Metode Numerice2
    Metode Numerice2
    Document9 pagini
    Metode Numerice2
    verginarojnita
    Încă nu există evaluări
  • Raport: La Disciplina Metode Și Modele de Calcul 1
    Raport: La Disciplina Metode Și Modele de Calcul 1
    Document9 pagini
    Raport: La Disciplina Metode Și Modele de Calcul 1
    Anya Mr
    Încă nu există evaluări
  • Lab APA 4
    Lab APA 4
    Document12 pagini
    Lab APA 4
    AlionaCrigan
    Încă nu există evaluări
  • Laborator-3 MMC
    Laborator-3 MMC
    Document4 pagini
    Laborator-3 MMC
    Dan
    Încă nu există evaluări
  • MMC Lab3 Rap
    MMC Lab3 Rap
    Document4 pagini
    MMC Lab3 Rap
    I LOVE ME
    Încă nu există evaluări
  • Grafica Laborator Nr.3
    Grafica Laborator Nr.3
    Document5 pagini
    Grafica Laborator Nr.3
    Cebotari Ion
    100% (2)
  • Lab 4 MN
    Lab 4 MN
    Document3 pagini
    Lab 4 MN
    nn nnn
    Încă nu există evaluări
  • Metode Și Modele de Calcul 2
    Metode Și Modele de Calcul 2
    Document6 pagini
    Metode Și Modele de Calcul 2
    I LOVE ME
    Încă nu există evaluări
  • MMC2 Modulul2
    MMC2 Modulul2
    Document16 pagini
    MMC2 Modulul2
    ViorelRotari
    Încă nu există evaluări
  • Sofroni Maxim Ai-211 MN Lab3
    Sofroni Maxim Ai-211 MN Lab3
    Document7 pagini
    Sofroni Maxim Ai-211 MN Lab3
    Максим Софрони
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document4 pagini
    Lab 4
    Viktor Dobrovolschi
    Încă nu există evaluări
  • Laborator-2mmc Balan Ion
    Laborator-2mmc Balan Ion
    Document12 pagini
    Laborator-2mmc Balan Ion
    Ion Bn
    Încă nu există evaluări
  • Lab 7 Cazacu POO
    Lab 7 Cazacu POO
    Document8 pagini
    Lab 7 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Lucrarea de Laborator NR 5 POO
    Lucrarea de Laborator NR 5 POO
    Document4 pagini
    Lucrarea de Laborator NR 5 POO
    Alexandru Burdeniuc
    Încă nu există evaluări
  • ASDN2
    ASDN2
    Document6 pagini
    ASDN2
    Viktor Dobrovolschi
    Încă nu există evaluări
  • Laborator-4 MMC1 Balan Ion
    Laborator-4 MMC1 Balan Ion
    Document6 pagini
    Laborator-4 MMC1 Balan Ion
    Ion Bn
    Încă nu există evaluări
  • Lab 6 Cazacu POO
    Lab 6 Cazacu POO
    Document5 pagini
    Lab 6 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Laborator 1 MMC
    Laborator 1 MMC
    Document9 pagini
    Laborator 1 MMC
    Cristian Popa
    Încă nu există evaluări
  • LFA Lab - 2
    LFA Lab - 2
    Document15 pagini
    LFA Lab - 2
    RoscaFlorin
    100% (1)
  • Lab 3 BTD
    Lab 3 BTD
    Document6 pagini
    Lab 3 BTD
    Trifan Petru
    100% (1)
  • TAP Lab4
    TAP Lab4
    Document10 pagini
    TAP Lab4
    Cristian Batir
    Încă nu există evaluări
  • CR-191 MIPI Axenti Alina Lab4
    CR-191 MIPI Axenti Alina Lab4
    Document6 pagini
    CR-191 MIPI Axenti Alina Lab4
    Alina Axenti
    Încă nu există evaluări
  • Lab 5 BTD Axenti
    Lab 5 BTD Axenti
    Document6 pagini
    Lab 5 BTD Axenti
    Alina Axenti
    100% (1)
  • POO Lab7
    POO Lab7
    Document6 pagini
    POO Lab7
    Dani Ela
    Încă nu există evaluări
  • Ll1 Mmc1 Mereuta Ana Ti-192
    Ll1 Mmc1 Mereuta Ana Ti-192
    Document11 pagini
    Ll1 Mmc1 Mereuta Ana Ti-192
    Anya Mr
    Încă nu există evaluări
  • Lucrarea de Laborator NR 4 POO
    Lucrarea de Laborator NR 4 POO
    Document10 pagini
    Lucrarea de Laborator NR 4 POO
    Alexandru Burdeniuc
    Încă nu există evaluări
  • Laboratorul Nr1 La Grafica Pe Calculator Gc.
    Laboratorul Nr1 La Grafica Pe Calculator Gc.
    Document4 pagini
    Laboratorul Nr1 La Grafica Pe Calculator Gc.
    Ion Damaschin
    Încă nu există evaluări
  • Lab 4 MMC
    Lab 4 MMC
    Document3 pagini
    Lab 4 MMC
    Adrian Bodorin
    Încă nu există evaluări
  • AC Lab 4
    AC Lab 4
    Document4 pagini
    AC Lab 4
    DanuIepuras
    Încă nu există evaluări
  • Lab2 MN CR-212 V14
    Lab2 MN CR-212 V14
    Document8 pagini
    Lab2 MN CR-212 V14
    Tabureanu Marian
    Încă nu există evaluări
  • Lab6 CDE
    Lab6 CDE
    Document8 pagini
    Lab6 CDE
    Dinu Dogaru
    Încă nu există evaluări
  • SOMIPP Lab 5
    SOMIPP Lab 5
    Document5 pagini
    SOMIPP Lab 5
    Augusta Bucataru
    Încă nu există evaluări
  • ASDN Lucrarea Individuala, Galusca Sergiu
    ASDN Lucrarea Individuala, Galusca Sergiu
    Document10 pagini
    ASDN Lucrarea Individuala, Galusca Sergiu
    Sergiu Gl
    Încă nu există evaluări
  • Laborator 6 AC
    Laborator 6 AC
    Document6 pagini
    Laborator 6 AC
    Alexandru Dumbrava
    Încă nu există evaluări
  • Raport GC Lab 1
    Raport GC Lab 1
    Document6 pagini
    Raport GC Lab 1
    Nickolae Enachi
    Încă nu există evaluări
  • PSLab 4
    PSLab 4
    Document5 pagini
    PSLab 4
    Victor Turculet
    Încă nu există evaluări
  • Grafica Pe Calculator Lab 1 Java
    Grafica Pe Calculator Lab 1 Java
    Document4 pagini
    Grafica Pe Calculator Lab 1 Java
    OpreaEugen
    Încă nu există evaluări
  • Lab1 MMC
    Lab1 MMC
    Document4 pagini
    Lab1 MMC
    Gheorghe Rotari
    Încă nu există evaluări
  • Lab 2 POO AI-191
    Lab 2 POO AI-191
    Document8 pagini
    Lab 2 POO AI-191
    Carolin
    Încă nu există evaluări
  • Laboratorul 2 PPE
    Laboratorul 2 PPE
    Document4 pagini
    Laboratorul 2 PPE
    crismaruion
    Încă nu există evaluări
  • Lab 3 Somipp
    Lab 3 Somipp
    Document14 pagini
    Lab 3 Somipp
    Augusta Bucataru
    Încă nu există evaluări
  • Metode Si Modele de Calcul
    Metode Si Modele de Calcul
    Document11 pagini
    Metode Si Modele de Calcul
    I LOVE ME
    Încă nu există evaluări
  • Raport Lab 3 MN
    Raport Lab 3 MN
    Document5 pagini
    Raport Lab 3 MN
    Max Calpacci
    Încă nu există evaluări
  • Lab MMC2
    Lab MMC2
    Document5 pagini
    Lab MMC2
    Maxim
    Încă nu există evaluări
  • Lab 4 APA
    Lab 4 APA
    Document20 pagini
    Lab 4 APA
    Cristi Poselețchi
    Încă nu există evaluări
  • Lab 1 BTD
    Lab 1 BTD
    Document9 pagini
    Lab 1 BTD
    megadanyx
    Încă nu există evaluări
  • LAB 3 Apa
    LAB 3 Apa
    Document14 pagini
    LAB 3 Apa
    Cristi Poselețchi
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document17 pagini
    Laborator 3
    DorelDjj
    Încă nu există evaluări
  • CDE (Lab 2)
    CDE (Lab 2)
    Document5 pagini
    CDE (Lab 2)
    BlandjLdhui
    Încă nu există evaluări
  • Laborator-3 MMC Balan Ion
    Laborator-3 MMC Balan Ion
    Document6 pagini
    Laborator-3 MMC Balan Ion
    Ion Bn
    100% (1)
  • Lab 4 APA
    Lab 4 APA
    Document19 pagini
    Lab 4 APA
    SlavicCaldare
    Încă nu există evaluări
  • Fisa Probleme Arbori Cu Radacina Static
    Fisa Probleme Arbori Cu Radacina Static
    Document9 pagini
    Fisa Probleme Arbori Cu Radacina Static
    Antoneta Lazarescu
    Încă nu există evaluări
  • Tema 1
    Tema 1
    Document14 pagini
    Tema 1
    tevomil811
    Încă nu există evaluări
  • Informatica Clasa A XI A
    Informatica Clasa A XI A
    Document19 pagini
    Informatica Clasa A XI A
    Адриа Мини
    Încă nu există evaluări
  • Probleme Informatica
    Probleme Informatica
    Document4 pagini
    Probleme Informatica
    ANCA BEATRICE BULUGU
    Încă nu există evaluări
  • IoT2 Raport
    IoT2 Raport
    Document10 pagini
    IoT2 Raport
    crismaruion
    Încă nu există evaluări
  • Lab 6 Sda
    Lab 6 Sda
    Document16 pagini
    Lab 6 Sda
    crismaruion
    Încă nu există evaluări
  • Lab 7 Sda
    Lab 7 Sda
    Document12 pagini
    Lab 7 Sda
    crismaruion
    Încă nu există evaluări
  • Raport 5 CDE
    Raport 5 CDE
    Document7 pagini
    Raport 5 CDE
    crismaruion
    Încă nu există evaluări
  • Examen PPe
    Examen PPe
    Document11 pagini
    Examen PPe
    crismaruion
    100% (2)
  • Raport4 Lab4 AC
    Raport4 Lab4 AC
    Document3 pagini
    Raport4 Lab4 AC
    crismaruion
    Încă nu există evaluări
  • Laboratorul 2 PPE
    Laboratorul 2 PPE
    Document4 pagini
    Laboratorul 2 PPE
    crismaruion
    Încă nu există evaluări