Advertisement
Tucancitto

FP - lucru cu pointeri (matrice)

Jan 28th, 2021 (edited)
790
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define for_(index, nr) for(int index = 0; index < nr; index++)
  4.  
  5. void alocareMemorie(int** matrice, int nrLinii, int nrColoane)
  6. {
  7.     if (matrice == NULL)
  8.     {
  9.         printf("Nu s-a putut aloca memorie matricei. ");
  10.         return 0;
  11.     }
  12.  
  13.     for_(i, nrLinii)
  14.     {
  15.         matrice[i] = (int*)calloc(nrColoane, sizeof(int));
  16.         if (matrice[i] == NULL)
  17.         {
  18.             printf("Nu s-a putut aloca memorie liniilor. ");
  19.             return 0;
  20.         }
  21.     }
  22. }
  23.  
  24. void citireMatrice(int** matrice, int nrLinii, int nrColoane)
  25. {
  26.     for_(i, nrLinii)
  27.     {
  28.         for_(j, nrColoane)
  29.         {
  30.             printf("matrice[%d][%d] = ", i, j);
  31.             scanf_s("%d", &matrice[i][j]);
  32.         }
  33.         puts("");
  34.     }
  35. }
  36.  
  37. void afisareMatrice(int** matrice, int nrLinii, int nrColoane)
  38. {
  39.     for_(i, nrLinii)
  40.     {
  41.         for_(j, nrColoane)
  42.             printf("%d ", matrice[i][j]);
  43.         puts("");
  44.     }
  45.     puts("");
  46. }
  47.  
  48. void eliberareMemorie(int** matrice, int nrLinii)
  49. {
  50.     for_(i, nrLinii) free(matrice[i]);
  51.     free(matrice);
  52. }
  53.  
  54. void BubbleSort(int* vector, int dimensiune)
  55. {
  56.     int ok = 0;
  57.     do
  58.     {
  59.         ok = 0;
  60.         for_(i, dimensiune - 1)
  61.             if (vector[i] > vector[i + 1])
  62.             {
  63.                 ok = 1;
  64.                 vector[i] = vector[i] + vector[i + 1];
  65.                 vector[i + 1] = vector[i] - vector[i + 1];
  66.                 vector[i] = vector[i] - vector[i + 1];
  67.             }
  68.     } while (ok == 1);
  69. }
  70.  
  71. // Cautare element in vector sortat crescator
  72. int CautareBinara(int* vector, int dimensiune, int deCautat)
  73. {
  74.     int st = 0, dr = dimensiune - 1;
  75.     while (st <= dr)
  76.     {
  77.         int mijloc = (st + dr) / 2;
  78.         if (vector[mijloc] == deCautat)
  79.             return mijloc;
  80.         else
  81.             if (vector[mijloc] < deCautat)
  82.                 st = mijloc + 1;
  83.             else
  84.                 dr = mijloc - 1;
  85.     }
  86.     return -1;
  87. }
  88.  
  89. void SortamSiCautam(int** matrice, int nrLinii, int nrColoane, int deCautat)
  90. {
  91.     for_(i, nrLinii)
  92.     {
  93.         BubbleSort(matrice[i], nrColoane);
  94.  
  95.         int gasit = CautareBinara(matrice[i], nrColoane, deCautat);
  96.         if (gasit != -1)
  97.             printf("Am gasit elementul pe care-l cautam: matrice[%d][%d] = %d \n", i + 1, gasit + 1, matrice[i][gasit]);
  98.         else
  99.             printf("Nu am gasit elementul pe linia %d a matricei \n", i + 1);
  100.     }
  101.     puts("");
  102. }
  103.  
  104. int main()
  105. {
  106.     int** matrice;
  107.     int nrLinii, nrColoane;
  108.  
  109.     printf("Dati numarul de linii: ");
  110.     scanf_s("%d", &nrLinii);
  111.     printf("Dati numarul de coloane: ");
  112.     scanf_s("%d", &nrColoane);
  113.  
  114.     matrice = (int**)calloc(nrLinii, sizeof(int*));
  115.  
  116.     alocareMemorie(matrice, nrLinii, nrColoane);
  117.     citireMatrice(matrice, nrLinii, nrColoane);
  118.  
  119.     printf("Matricea citita: \n");
  120.     afisareMatrice(matrice, nrLinii, nrColoane);
  121.  
  122.     int deCautat;
  123.     printf("Introduceti elementul pe care doriti sa-l cautati: ");
  124.     scanf_s("%d", &deCautat);
  125.  
  126.     SortamSiCautam(matrice, nrLinii, nrColoane, deCautat);
  127.  
  128.     printf("Matricea sortata: \n");
  129.     afisareMatrice(matrice, nrLinii, nrColoane);
  130.  
  131.     eliberareMemorie(matrice, nrLinii);
  132.  
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement