Advertisement
Tucancitto

Lab1 - Pb6

Mar 6th, 2021 (edited)
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.20 KB | None | 0 0
  1. // Complexitatea algoritmului: O(n^2), unde n este numarul de elevi
  2.  
  3. #include <iostream>
  4. #include <fstream>
  5.  
  6. void alocareMemorie(int**& matPrietenie, int nrElevi)
  7. {
  8.     matPrietenie = new int* [nrElevi];
  9.     for (int index = 0; index < nrElevi; ++index)
  10.         matPrietenie[index] = new int[nrElevi];
  11. }
  12.  
  13. void citire(int**& matPrietenie, int& nrElevi)
  14. {
  15.     std::ifstream fin("matrice.in");
  16.     fin >> nrElevi;
  17.  
  18.     alocareMemorie(matPrietenie, nrElevi);
  19.  
  20.     for (int i = 0; i < nrElevi; ++i)
  21.         for (int j = 0; j < nrElevi; ++j)
  22.             fin >> matPrietenie[i][j];
  23. }
  24.  
  25. /*
  26. void prieteni(int** matPrietenie, int nrElevi, int elevCurent)
  27. {
  28.     std::cout << "Prietenii elevului " << elevCurent + 1 << ": ";
  29.     for (int elev = 0; elev < nrElevi; ++elev)
  30.         if (elevCurent != elev && matPrietenie[elev][elevCurent] == 1 && matPrietenie[elevCurent][elev] == 1)
  31.             std::cout << elev + 1 << ' ';
  32.     std::cout << "\n";
  33. }
  34. */
  35.  
  36. int numarPrieteni(int** matPrietenie, int nrElevi, int elevCurent)
  37. {
  38.     int nrPrieteni = 0;
  39.     for (int elev = 0; elev < nrElevi; ++elev)
  40.         if (elevCurent != elev && matPrietenie[elev][elevCurent] == 1 && matPrietenie[elevCurent][elev] == 1)
  41.             nrPrieteni++;
  42.     return nrPrieteni;
  43. }
  44.  
  45. int maximPrieteni(int** matPrietenie, int nrElevi)
  46. {
  47.     int maxPrieteni = 0;
  48.     for (int elev = 0; elev < nrElevi; ++elev)
  49.         if (maxPrieteni < numarPrieteni(matPrietenie, nrElevi, elev))
  50.             maxPrieteni = numarPrieteni(matPrietenie, nrElevi, elev);
  51.     return maxPrieteni;
  52. }
  53.  
  54. bool esteAgreat(int** matPrietenie, int nrElevi, int elevCurent)
  55. {
  56.     for (int elev = 0; elev < nrElevi; ++elev)
  57.         if (elevCurent != elev && matPrietenie[elev][elevCurent] == 1)
  58.             return true;
  59.     return false;
  60. }
  61.  
  62.  
  63. void eleviCuNrMaximDePrieteni(int** matPrietenie, int nrElevi)
  64. {
  65.     int maxim = maximPrieteni(matPrietenie, nrElevi);
  66.  
  67.     std::cout << "a) Elevul (elevii) care are (au) cei mai multi prieteni si cati prieteni are (au): \n";
  68.  
  69.     for (int elev = 0; elev < nrElevi; ++elev)
  70.         if (numarPrieteni(matPrietenie, nrElevi, elev) == maxim)
  71.             std::cout << "Elevul " << elev + 1 << " are " << maxim << " prieteni. \n";
  72.  
  73.     std::cout << "\n";
  74. }
  75.  
  76. void eleviCareNuAuPrieteni(int** matPrietenie, int nrElevi)
  77. {
  78.     std::cout << "b) Elevul (elevii) care nu are (au) niciun prieten: \n";
  79.  
  80.     for (int elev = 0; elev < nrElevi; ++elev)
  81.         if (numarPrieteni(matPrietenie, nrElevi, elev) == 0)
  82.             std::cout << "Elevul " << elev + 1 << " nu are niciun prieten. \n";
  83.  
  84.     std::cout << "\n";
  85. }
  86.  
  87. void eleviCareNuSuntAgreati(int** matPrietenie, int nrElevi)
  88. {
  89.     std::cout << "c) Elevul (elevii) care nu este (sunt) agreat (agreati) de nimeni: \n";
  90.  
  91.     for (int elev = 0; elev < nrElevi; ++elev)
  92.         if (!esteAgreat(matPrietenie, nrElevi, elev))
  93.             std::cout << "Elevul " << elev + 1 << " nu este agreat de nimeni. \n";
  94. }
  95.  
  96. int main()
  97. {
  98.     int** matPrietenie, nrElevi;
  99.     citire(matPrietenie, nrElevi);
  100.  
  101.     /*
  102.     for (int elev = 0; elev < nrElevi; ++elev)
  103.         prieteni(matPrietenie, nrElevi, elev);
  104.     std::cout << "\n";
  105.     */
  106.  
  107.     eleviCuNrMaximDePrieteni(matPrietenie, nrElevi);
  108.     eleviCareNuAuPrieteni(matPrietenie, nrElevi);
  109.     eleviCareNuSuntAgreati(matPrietenie, nrElevi);
  110.  
  111.     for (int index = 0; index < nrElevi; ++index)
  112.         delete[]matPrietenie[index];
  113.  
  114.     delete[]matPrietenie;
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement