Guest User

Untitled

a guest
Apr 22nd, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int fpocetradku(FILE *vstup);
  6. void loadData(FILE *vstup, float *data, int radky);
  7. float fprumer(float *data, int radky);
  8. float fmaximum(float *data, int radky);
  9. float fminimum(float *data, int radky);
  10. float fbubblesort(float *data, int radky);
  11. float fmedian(float *data, int radky);
  12. float frozptyl(float *data, int radky);
  13. float fodchylka(float *data, int radky);
  14. void fregrese(float *data, int radky, float *a, float *b);
  15.  
  16. int main()
  17.  
  18. {
  19. FILE *vstup = NULL;
  20. char soubor[50];
  21. int radky;
  22. float *data;
  23. float prumer;
  24. float min,max;
  25. float median;
  26. float rozptyl;
  27. float odchylka;
  28. float a,b;
  29.  
  30. printf("\nZadej vstupni datovy soubor: ");
  31. scanf("%s",soubor);
  32. vstup = fopen(soubor,"rt");
  33. if( vstup == NULL){ printf("\nSoubor %s nelze otevrit\n",soubor);
  34. system("pause"); return 1; }
  35.  
  36. if(vstup!=NULL)
  37. /* spocitam kolik je tam radku */
  38. radky = fpocetradku(vstup);
  39. printf("pocet radku je: %d\n", radky);
  40.  
  41. /* alokuju pole */
  42. data = (float *)malloc(radky * sizeof(float));
  43.  
  44. /* nactu do nej data */
  45. loadData(vstup, data, radky);
  46.  
  47. /* uz soubor nepotrebuju */
  48. fclose(vstup);
  49.  
  50. prumer = fprumer(data, radky);
  51. printf("Prumer je: %f\n", prumer);
  52.  
  53. max = fmaximum(data, radky);
  54. printf("Maximalni cislo je: %f\n",max);
  55.  
  56. min = fminimum(data, radky);
  57. printf("Minimalni cislo je: %f\n",min);
  58.  
  59. median = fmedian(data,radky);
  60. printf("Median je: %f\n",median);
  61.  
  62. rozptyl = frozptyl(data, radky);
  63. printf("Rozptyl je: %f\n", rozptyl);
  64.  
  65. odchylka = fodchylka(data, radky);
  66. printf("Smerodatna odchylka je: %f\n", odchylka);
  67.  
  68. fregrese(data, radky, &a, &b);
  69. printf("Linearni regrese je dana primkou: y = %2f + %.2fx\n", a, b);
  70.  
  71. system("pause");
  72. return 0;
  73. }
  74.  
  75. int fpocetradku(FILE *vstup)
  76. {
  77. int radky = 0;
  78. int znak;
  79.  
  80. do
  81. {
  82. /* ctu znak po znaku */
  83. znak = fgetc(vstup);
  84.  
  85. /* hledam radky */
  86. if (znak == '\n')
  87. radky++;
  88.  
  89. } while (znak != EOF);
  90.  
  91. /* presunu se na zacatek souboru */
  92. fseek(vstup, 0, SEEK_SET);
  93.  
  94. return radky+1;
  95. }
  96. void loadData(FILE *vstup, float *data, int radky)
  97. {
  98. int i;
  99.  
  100. for (i = 0; i < radky; i++)
  101. fscanf(vstup, "%f\n", &data[i]);
  102. }
  103. float fprumer(float *data, int radky)
  104. {
  105. int i;
  106. float prumer = 0;
  107. float sprvku = 0;
  108.  
  109. for (i = 0; i < radky; i++)
  110. sprvku += data[i];
  111. prumer = sprvku / radky;
  112.  
  113. return prumer;
  114. }
  115. float fmaximum(float *data, int radky)
  116. {
  117. int i;
  118. float max = data[0];
  119.  
  120.  
  121. for (i = 0; i < radky; i++)
  122.  
  123. {
  124. if(data[i] > max)
  125. max = data[i];
  126. }
  127.  
  128. return max;
  129. }
  130. float fminimum(float *data, int radky)
  131. {
  132. int i;
  133. float min = data[0];
  134.  
  135.  
  136. for (i = 0; i < radky; i++)
  137.  
  138. {
  139. if(data[i] < min)
  140. min = data[i];
  141. }
  142.  
  143. return min;
  144. }
  145.  
  146.  
  147. void bubbleSort(float *data, int size)
  148. {
  149. int i, j, temp;
  150.  
  151. for (i = (size - 1); i > 0; i--)
  152. {
  153. for (j = 1; j <= i; j++)
  154. {
  155. if (data[j-1] > data[j])
  156. {
  157. temp = data[j-1];
  158. data[j-1] = data[j];
  159. data[j] = temp;
  160. }
  161. }
  162. }
  163. }
  164. float fmedian(float *data, int radky)
  165. {
  166. bubbleSort(data, radky);
  167.  
  168. return data[(int)(radky/2)];
  169. }
  170.  
  171. float frozptyl(float *data, int radky)
  172. {
  173. return pow(fodchylka(data, radky), 2);
  174. }
  175.  
  176. float fodchylka(float *data, int radky)
  177. {
  178. int i;
  179. float sum = 0;
  180. float prumer = fprumer(data, radky);
  181.  
  182. for (i = 0; i < radky; i++)
  183. sum += pow((data[i] - prumer), 2);
  184.  
  185. return sqrt(sum / (radky - 1));
  186. }
  187.  
  188. void fregrese(float *data, int radky, float *a, float *b)
  189. {
  190. float sumX, sumY, sumXY, sumX2;
  191. int i;
  192.  
  193. float *y = (float *)malloc(radky * sizeof(float));
  194.  
  195. if (y == NULL)
  196. return;
  197.  
  198. /* vypocet Y[i] */
  199. for (i = 0; i < radky; i++)
  200. y[i] = pow(data[i], 2);
  201.  
  202. /* suma X */
  203. sumX = 0;
  204. for (i = 0; i < radky; i++)
  205. sumX += data[i];
  206.  
  207. /* suma Y */
  208. sumY = 0;
  209. for (i = 0; i < radky; i++)
  210. sumY += y[i];
  211.  
  212. /* suma XY */
  213. sumXY = 0;
  214. for (i = 0; i < radky; i++)
  215. sumXY += data[i] * y[i];
  216.  
  217. /* suma X2 */
  218. sumX2 = 0;
  219. for (i = 0; i < radky; i++)
  220. sumX2 += pow(data[i], 2);
  221.  
  222. /* y = a + bx */
  223. *a = ((sumX2 * sumY) - (sumX * sumXY) ) / ( radky * sumX2 - (pow(sumX, 2)));
  224. *b = ((radky * sumXY) - (sumX * sumY) ) / ( radky * sumX2 - (pow(sumX, 2)));
  225.  
  226. free(y);
  227. }
Add Comment
Please, Sign In to add comment