Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #define DIMINIT 3
  6.  
  7. int **initializare_matrice(int nl)
  8. {
  9. int i;
  10. int **m = (int **) malloc (nl * sizeof(int *));
  11. if(m != NULL)
  12. for(i = 0; i < nl; i++)
  13. m[i] = (int *) malloc (DIMINIT * sizeof(int));
  14. return m;
  15. }
  16.  
  17. int **citire_matrice ( int **a, int nl)
  18. {
  19. int i, j, capacitate;
  20. capacitate = DIMINIT;
  21. j = 0;
  22. for(i = 0; i < nl; i++)
  23. {
  24. scanf("%d", &a[i][j]);
  25. while (a[i][j] != 0 )
  26. {
  27. if (j == capacitate - 1)
  28. {
  29. capacitate += DIMINIT;
  30. a[i] = (int *) realloc (a[i], capacitate * sizeof(int));
  31. }
  32. j++;
  33. scanf("%d", &a[i][j]);
  34. }
  35. j = 0;
  36. }
  37. return a;
  38. }
  39.  
  40. float medie_linie(int *v)
  41. {
  42. int i = 0, s = 0;
  43. while(v[i] != 0)
  44. {
  45. s = s + v[i];
  46. i++;
  47. }
  48. if(i == 0)
  49. return 0;
  50. return (float) s / i;
  51. }
  52.  
  53. void bubble_sort(float *v, int nl)
  54. {
  55. int i, j;
  56. float aux;
  57. for(i = 0; i < nl - 1; i++)
  58. for(j = i + 1; j < nl; j++)
  59. if (v[i] < v[j])
  60. {
  61. aux = v[i];
  62. v[i] = v[j];
  63. v[j] = aux;
  64. }
  65. }
  66.  
  67. void bubble_sort_matrice(int **a, float *v, int nl)
  68. {
  69. int i, j;
  70. float aux;
  71. int *aux2;
  72. for(i = 0; i < nl - 1; i++)
  73. for(j = i + 1; j < nl; j++)
  74. if (v[i] < v[j])
  75. {
  76. aux = v[i];
  77. aux2 = a[i];
  78.  
  79. v[i] = v[j];
  80. a[i] = a[j];
  81.  
  82. v[j] = aux;
  83. a[j] = aux2;
  84. }
  85. }
  86.  
  87. float *vector_medii( int **a, int nl)
  88. {
  89. int i;
  90. float *v;
  91. v = (float *) malloc(nl * sizeof(float));
  92.  
  93. for(i = 0; i < nl; i++)
  94. v[i] = medie_linie(a[i]);
  95. // bubble_sort_matrice(a, v, nl);
  96. return v;
  97. }
  98.  
  99. int determ_pozitie( int **a, int nl, float medie)
  100. {
  101. int i;
  102. for(i = 0; i < nl; i++)
  103. if(medie == medie_linie(a[i]))
  104. {
  105. return i;
  106. }
  107. return 0;
  108. }
  109.  
  110. void afisare_linie( int **a, int i)
  111. {
  112. int j = 0;
  113. while (a[i][j] != 0)
  114. {
  115. printf("%d", a[i][j]);
  116. j++;
  117. if (a[i][j] != 0)
  118. {
  119. printf(" ");
  120. }
  121. }
  122. printf("\n");
  123. }
  124.  
  125. float getMaxValueLessThan(float *v, int size, float upperBound)
  126. {
  127. upperBound -= 0.000001;
  128. float currentMax = 0.0;
  129. for (int i = 0; i < size; i++)
  130. {
  131. if (v[i] > currentMax && v[i] < upperBound)
  132. {
  133. currentMax = v[i];
  134. }
  135. }
  136. return currentMax;
  137. }
  138.  
  139. void printLinesWithAverage(int **a, int size, float *v, float avg)
  140. {
  141. for (int i = 0; i < size; i++)
  142. {
  143. if (fabs(v[i] - avg) < 0.0001)
  144. {
  145. printf("%-10.3f", v[i]);
  146. afisare_linie(a, i);
  147. }
  148. }
  149. }
  150.  
  151. int main ()
  152. {
  153. int **a, nl, i, index;
  154. float *v;
  155.  
  156. scanf ("%d", &nl);
  157. a = initializare_matrice(nl);
  158. a = citire_matrice(a, nl);
  159. v = vector_medii(a, nl);
  160. // for (i=0;i<nl;i++) {
  161. // printf("%-10.3f",v[i]);
  162. // index=determ_pozitie(a,nl,v[i]);
  163. // afisare_linie(a,index);
  164. // }
  165. float crtMax = 11.0;
  166. crtMax = getMaxValueLessThan(v, nl, crtMax);
  167. while (crtMax > 0)
  168. {
  169. printLinesWithAverage(a, nl, v, crtMax);
  170. crtMax = getMaxValueLessThan(v, nl, crtMax);
  171. }
  172. free(v);
  173. for(i = 0; i < nl; i++)
  174. free(a[i]);
  175. free(a);
  176. return 0;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement