Advertisement
Guest User

Charakterystyki statystyczne zbioru liczb

a guest
May 25th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h> /*Dzieki tej bibiliotece mozemy pierwistkowac i potegowac. */
  4.  
  5.  
  6. void plik_odczyt(char *nazwa, float **tablica, int *dlugosc) /* Procedura odczytu liczb z pliku */
  7. {
  8.     int i,m;
  9.     FILE *plik;
  10.     plik=fopen( nazwa,"r"); /* Otwarcie pliku w trybie odczytu. */
  11.     if (plik == NULL)
  12.     {
  13.         printf("Blad otwarcia pliku!\n");
  14.         exit (1); /*Zamyka aplikacje i zwraca odpowiedni kod bledu. Numeracja do lokalizaji bledu. */
  15.     }
  16.     fscanf(plik,"%d",&m); /* Wczytanie ilosci liczb w pliku */
  17.     if(m < 1)
  18.     {
  19.         printf("Bledna ilosc liczb.\n");
  20.         exit (2);
  21.     }
  22.     *tablica = (float*) malloc(m * sizeof(float)); /* Dynamiczna alokacja pamieci tablicy jednowymiarowej. */
  23.  
  24.     for(i=0; i<m; ++i)
  25.         fscanf(plik,"%f",&(*tablica)[i]); /* Wczytanie liczb do tablicy. */
  26.  
  27.     *dlugosc=m;
  28.     fclose(plik);
  29. }
  30.  
  31. void srednie(float *tablica, int n, float *srednia_arytm, float *srednia_kwadr) /* Procedura do obliczenia sredniej arytmetycznej i kwadratowej liczb. */
  32. {
  33.     float suma=0,suma2=0;
  34.     int i;
  35.  
  36.     for(i = 0; i < n; ++i) /* Jeden obrot petli */
  37.     {
  38.         suma += tablica[i];
  39.         suma2 += pow(tablica[i], 2); /* pow - potega. */
  40.     }
  41.     *srednia_arytm = suma/n; /* Srednia arytmetyczna - suma liczb przez ich ilosc. */
  42.     *srednia_kwadr = sqrt(suma2/n); /* Srednia kwadratowa - suma  kwadratow liczb przez ich ilosc; calosc pod pierwiastkiem. */
  43. }
  44.  
  45. int piwot(float *tablica, int l, int r) { /* Sortowanie szybkie, wyznaczanie piwota. */
  46.     float pivot, t;
  47.     int i, j;
  48.     pivot = tablica[l];
  49.     i = l; j = r+1;
  50.  
  51.     while(1)
  52.     {
  53.         do ++i; while( tablica[i] <= pivot && i <= r );
  54.         do --j; while( tablica[j] > pivot );
  55.         if( i >= j ) break;
  56.         t = tablica[i]; tablica[i] = tablica[j]; tablica[j] = t;
  57.     }
  58.     t = tablica[l]; tablica[l] = tablica[j]; tablica[j] = t;
  59.     return j;
  60. }
  61.  
  62. void quickSort(float *t, int l, int r) /* Glowna czesc procedury sortowania szybkiego. */
  63. {
  64.     int j;
  65.  
  66.     if(l < r)
  67.     {
  68.         j = piwot(t, l, r);
  69.         quickSort(t, l, j-1);
  70.         quickSort(t, j+1, r);
  71.     }
  72. }
  73.  
  74. float mediana(float *tablica, int n) /* Mediana, uzycie quicksort. */
  75. {
  76.     float mediana = 0;
  77.     quickSort(tablica, 0, n-1);
  78.     if(n%2 == 1) {
  79.         mediana = tablica[(int)(n/2)];
  80.     }
  81.     else {
  82.         mediana = (tablica[(int)(n/2) - 1] + tablica[(int)(n/2)]) / 2;
  83.     }
  84.     return mediana; /* Procedura zwraca wynik. */
  85. }
  86.  
  87. int main(void)
  88. {
  89.     int n=0;
  90.     float *tablica;
  91.     float srednia_arytm, srednia_kwadr;
  92.  
  93.     plik_odczyt("dane.txt", &tablica, &n);  /* Wywolanie procedur. */
  94.  
  95.     srednie(tablica, n, &srednia_arytm, &srednia_kwadr);
  96.  
  97.     printf("Srednia arytmetyczna = %f", srednia_arytm); /* Wypisanie wynikow na ekran. */
  98.     printf("\nSrednia kwadratowa =  %f", srednia_kwadr);
  99.     printf("\nMediana = %f\n\n", mediana(tablica, n));
  100.  
  101.     free(tablica); /* Zwolnienie z pamieci tablicy dynamicznej. */
  102.  
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement