Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h> /*Dzieki tej bibiliotece mozemy pierwistkowac i potegowac. */
- void plik_odczyt(char *nazwa, float **tablica, int *dlugosc) /* Procedura odczytu liczb z pliku */
- {
- int i,m;
- FILE *plik;
- plik=fopen( nazwa,"r"); /* Otwarcie pliku w trybie odczytu. */
- if (plik == NULL)
- {
- printf("Blad otwarcia pliku!\n");
- exit (1); /*Zamyka aplikacje i zwraca odpowiedni kod bledu. Numeracja do lokalizaji bledu. */
- }
- fscanf(plik,"%d",&m); /* Wczytanie ilosci liczb w pliku */
- if(m < 1)
- {
- printf("Bledna ilosc liczb.\n");
- exit (2);
- }
- *tablica = (float*) malloc(m * sizeof(float)); /* Dynamiczna alokacja pamieci tablicy jednowymiarowej. */
- for(i=0; i<m; ++i)
- fscanf(plik,"%f",&(*tablica)[i]); /* Wczytanie liczb do tablicy. */
- *dlugosc=m;
- fclose(plik);
- }
- void srednie(float *tablica, int n, float *srednia_arytm, float *srednia_kwadr) /* Procedura do obliczenia sredniej arytmetycznej i kwadratowej liczb. */
- {
- float suma=0,suma2=0;
- int i;
- for(i = 0; i < n; ++i) /* Jeden obrot petli */
- {
- suma += tablica[i];
- suma2 += pow(tablica[i], 2); /* pow - potega. */
- }
- *srednia_arytm = suma/n; /* Srednia arytmetyczna - suma liczb przez ich ilosc. */
- *srednia_kwadr = sqrt(suma2/n); /* Srednia kwadratowa - suma kwadratow liczb przez ich ilosc; calosc pod pierwiastkiem. */
- }
- int piwot(float *tablica, int l, int r) { /* Sortowanie szybkie, wyznaczanie piwota. */
- float pivot, t;
- int i, j;
- pivot = tablica[l];
- i = l; j = r+1;
- while(1)
- {
- do ++i; while( tablica[i] <= pivot && i <= r );
- do --j; while( tablica[j] > pivot );
- if( i >= j ) break;
- t = tablica[i]; tablica[i] = tablica[j]; tablica[j] = t;
- }
- t = tablica[l]; tablica[l] = tablica[j]; tablica[j] = t;
- return j;
- }
- void quickSort(float *t, int l, int r) /* Glowna czesc procedury sortowania szybkiego. */
- {
- int j;
- if(l < r)
- {
- j = piwot(t, l, r);
- quickSort(t, l, j-1);
- quickSort(t, j+1, r);
- }
- }
- float mediana(float *tablica, int n) /* Mediana, uzycie quicksort. */
- {
- float mediana = 0;
- quickSort(tablica, 0, n-1);
- if(n%2 == 1) {
- mediana = tablica[(int)(n/2)];
- }
- else {
- mediana = (tablica[(int)(n/2) - 1] + tablica[(int)(n/2)]) / 2;
- }
- return mediana; /* Procedura zwraca wynik. */
- }
- int main(void)
- {
- int n=0;
- float *tablica;
- float srednia_arytm, srednia_kwadr;
- plik_odczyt("dane.txt", &tablica, &n); /* Wywolanie procedur. */
- srednie(tablica, n, &srednia_arytm, &srednia_kwadr);
- printf("Srednia arytmetyczna = %f", srednia_arytm); /* Wypisanie wynikow na ekran. */
- printf("\nSrednia kwadratowa = %f", srednia_kwadr);
- printf("\nMediana = %f\n\n", mediana(tablica, n));
- free(tablica); /* Zwolnienie z pamieci tablicy dynamicznej. */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement