Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int fpocetradku(FILE *vstup);
- void loadData(FILE *vstup, float *data, int radky);
- float fprumer(float *data, int radky);
- float fmaximum(float *data, int radky);
- float fminimum(float *data, int radky);
- float fbubblesort(float *data, int radky);
- float fmedian(float *data, int radky);
- float frozptyl(float *data, int radky);
- float fodchylka(float *data, int radky);
- void fregrese(float *data, int radky, float *a, float *b);
- int main()
- {
- FILE *vstup = NULL;
- char soubor[50];
- int radky;
- float *data;
- float prumer;
- float min,max;
- float median;
- float rozptyl;
- float odchylka;
- float a,b;
- printf("\nZadej vstupni datovy soubor: ");
- scanf("%s",soubor);
- vstup = fopen(soubor,"rt");
- if( vstup == NULL){ printf("\nSoubor %s nelze otevrit\n",soubor);
- system("pause"); return 1; }
- if(vstup!=NULL)
- /* spocitam kolik je tam radku */
- radky = fpocetradku(vstup);
- printf("pocet radku je: %d\n", radky);
- /* alokuju pole */
- data = (float *)malloc(radky * sizeof(float));
- /* nactu do nej data */
- loadData(vstup, data, radky);
- /* uz soubor nepotrebuju */
- fclose(vstup);
- prumer = fprumer(data, radky);
- printf("Prumer je: %f\n", prumer);
- max = fmaximum(data, radky);
- printf("Maximalni cislo je: %f\n",max);
- min = fminimum(data, radky);
- printf("Minimalni cislo je: %f\n",min);
- median = fmedian(data,radky);
- printf("Median je: %f\n",median);
- rozptyl = frozptyl(data, radky);
- printf("Rozptyl je: %f\n", rozptyl);
- odchylka = fodchylka(data, radky);
- printf("Smerodatna odchylka je: %f\n", odchylka);
- fregrese(data, radky, &a, &b);
- printf("Linearni regrese je dana primkou: y = %2f + %.2fx\n", a, b);
- system("pause");
- return 0;
- }
- int fpocetradku(FILE *vstup)
- {
- int radky = 0;
- int znak;
- do
- {
- /* ctu znak po znaku */
- znak = fgetc(vstup);
- /* hledam radky */
- if (znak == '\n')
- radky++;
- } while (znak != EOF);
- /* presunu se na zacatek souboru */
- fseek(vstup, 0, SEEK_SET);
- return radky+1;
- }
- void loadData(FILE *vstup, float *data, int radky)
- {
- int i;
- for (i = 0; i < radky; i++)
- fscanf(vstup, "%f\n", &data[i]);
- }
- float fprumer(float *data, int radky)
- {
- int i;
- float prumer = 0;
- float sprvku = 0;
- for (i = 0; i < radky; i++)
- sprvku += data[i];
- prumer = sprvku / radky;
- return prumer;
- }
- float fmaximum(float *data, int radky)
- {
- int i;
- float max = data[0];
- for (i = 0; i < radky; i++)
- {
- if(data[i] > max)
- max = data[i];
- }
- return max;
- }
- float fminimum(float *data, int radky)
- {
- int i;
- float min = data[0];
- for (i = 0; i < radky; i++)
- {
- if(data[i] < min)
- min = data[i];
- }
- return min;
- }
- void bubbleSort(float *data, int size)
- {
- int i, j, temp;
- for (i = (size - 1); i > 0; i--)
- {
- for (j = 1; j <= i; j++)
- {
- if (data[j-1] > data[j])
- {
- temp = data[j-1];
- data[j-1] = data[j];
- data[j] = temp;
- }
- }
- }
- }
- float fmedian(float *data, int radky)
- {
- bubbleSort(data, radky);
- return data[(int)(radky/2)];
- }
- float frozptyl(float *data, int radky)
- {
- return pow(fodchylka(data, radky), 2);
- }
- float fodchylka(float *data, int radky)
- {
- int i;
- float sum = 0;
- float prumer = fprumer(data, radky);
- for (i = 0; i < radky; i++)
- sum += pow((data[i] - prumer), 2);
- return sqrt(sum / (radky - 1));
- }
- void fregrese(float *data, int radky, float *a, float *b)
- {
- float sumX, sumY, sumXY, sumX2;
- int i;
- float *y = (float *)malloc(radky * sizeof(float));
- if (y == NULL)
- return;
- /* vypocet Y[i] */
- for (i = 0; i < radky; i++)
- y[i] = pow(data[i], 2);
- /* suma X */
- sumX = 0;
- for (i = 0; i < radky; i++)
- sumX += data[i];
- /* suma Y */
- sumY = 0;
- for (i = 0; i < radky; i++)
- sumY += y[i];
- /* suma XY */
- sumXY = 0;
- for (i = 0; i < radky; i++)
- sumXY += data[i] * y[i];
- /* suma X2 */
- sumX2 = 0;
- for (i = 0; i < radky; i++)
- sumX2 += pow(data[i], 2);
- /* y = a + bx */
- *a = ((sumX2 * sumY) - (sumX * sumXY) ) / ( radky * sumX2 - (pow(sumX, 2)));
- *b = ((radky * sumXY) - (sumX * sumY) ) / ( radky * sumX2 - (pow(sumX, 2)));
- free(y);
- }
Add Comment
Please, Sign In to add comment