Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #define DIMINIT 3
- int **initializare_matrice(int nl)
- {
- int i;
- int **m = (int **) malloc (nl * sizeof(int *));
- if(m != NULL)
- for(i = 0; i < nl; i++)
- m[i] = (int *) malloc (DIMINIT * sizeof(int));
- return m;
- }
- int **citire_matrice ( int **a, int nl)
- {
- int i, j, capacitate;
- capacitate = DIMINIT;
- j = 0;
- for(i = 0; i < nl; i++)
- {
- scanf("%d", &a[i][j]);
- while (a[i][j] != 0 )
- {
- if (j == capacitate - 1)
- {
- capacitate += DIMINIT;
- a[i] = (int *) realloc (a[i], capacitate * sizeof(int));
- }
- j++;
- scanf("%d", &a[i][j]);
- }
- j = 0;
- }
- return a;
- }
- float medie_linie(int *v)
- {
- int i = 0, s = 0;
- while(v[i] != 0)
- {
- s = s + v[i];
- i++;
- }
- if(i == 0)
- return 0;
- return (float) s / i;
- }
- void bubble_sort(float *v, int nl)
- {
- int i, j;
- float aux;
- for(i = 0; i < nl - 1; i++)
- for(j = i + 1; j < nl; j++)
- if (v[i] < v[j])
- {
- aux = v[i];
- v[i] = v[j];
- v[j] = aux;
- }
- }
- void bubble_sort_matrice(int **a, float *v, int nl)
- {
- int i, j;
- float aux;
- int *aux2;
- for(i = 0; i < nl - 1; i++)
- for(j = i + 1; j < nl; j++)
- if (v[i] < v[j])
- {
- aux = v[i];
- aux2 = a[i];
- v[i] = v[j];
- a[i] = a[j];
- v[j] = aux;
- a[j] = aux2;
- }
- }
- float *vector_medii( int **a, int nl)
- {
- int i;
- float *v;
- v = (float *) malloc(nl * sizeof(float));
- for(i = 0; i < nl; i++)
- v[i] = medie_linie(a[i]);
- // bubble_sort_matrice(a, v, nl);
- return v;
- }
- int determ_pozitie( int **a, int nl, float medie)
- {
- int i;
- for(i = 0; i < nl; i++)
- if(medie == medie_linie(a[i]))
- {
- return i;
- }
- return 0;
- }
- void afisare_linie( int **a, int i)
- {
- int j = 0;
- while (a[i][j] != 0)
- {
- printf("%d", a[i][j]);
- j++;
- if (a[i][j] != 0)
- {
- printf(" ");
- }
- }
- printf("\n");
- }
- float getMaxValueLessThan(float *v, int size, float upperBound)
- {
- upperBound -= 0.000001;
- float currentMax = 0.0;
- for (int i = 0; i < size; i++)
- {
- if (v[i] > currentMax && v[i] < upperBound)
- {
- currentMax = v[i];
- }
- }
- return currentMax;
- }
- void printLinesWithAverage(int **a, int size, float *v, float avg)
- {
- for (int i = 0; i < size; i++)
- {
- if (fabs(v[i] - avg) < 0.0001)
- {
- printf("%-10.3f", v[i]);
- afisare_linie(a, i);
- }
- }
- }
- int main ()
- {
- int **a, nl, i, index;
- float *v;
- scanf ("%d", &nl);
- a = initializare_matrice(nl);
- a = citire_matrice(a, nl);
- v = vector_medii(a, nl);
- // for (i=0;i<nl;i++) {
- // printf("%-10.3f",v[i]);
- // index=determ_pozitie(a,nl,v[i]);
- // afisare_linie(a,index);
- // }
- float crtMax = 11.0;
- crtMax = getMaxValueLessThan(v, nl, crtMax);
- while (crtMax > 0)
- {
- printLinesWithAverage(a, nl, v, crtMax);
- crtMax = getMaxValueLessThan(v, nl, crtMax);
- }
- free(v);
- for(i = 0; i < nl; i++)
- free(a[i]);
- free(a);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement