Advertisement
Guest User

program1

a guest
Nov 30th, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.44 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<stdlib.h>
  5. #include<time.h>
  6. #include<math.h>
  7. #include<string.h>
  8. #define PI 3.141592653591
  9.  
  10. void ZapisCSV(float **, int, char *);
  11. void RysujWykres(float **, int, char *);
  12. float *generator_szumu(int);
  13. float **generator(int, int, int, int);
  14. void OdczytCSV(char *, float**);
  15. float *Srednia(float **, int);
  16. void Skuteczna(float **, int);
  17. void Sortuj(float *, int);
  18.  
  19.  
  20. int main() {
  21.  
  22. int f, fp, n, i, N;
  23. float **dane;
  24. float **tab;
  25. printf("Podaj czestotliwosc - f, czestotliwosc probkowania - fp, ilosc okresow - n: \n");
  26. scanf("%d%d%d", &f, &fp, &n);
  27. N = (fp / f)*n;
  28. dane = generator(f, fp, n, N);
  29. dane[2] = generator_szumu(N);
  30.  
  31. for (i = 0; i<N; i++) {
  32. printf("szum= %f\n", generator_szumu(N)[i]);
  33. dane[3][i] = dane[1][i] + dane[2][i];
  34. }
  35.  
  36.  
  37. //for(i=0;i<N;i++) printf("t=%f y=%f\n",dane[0][i], generator(f,fp,n,N)[1][i]);
  38.  
  39.  
  40.  
  41.  
  42. printf("Menu:\n");
  43. printf("1. Rysuj wykres.\n2. Zapis do pliku\n3. Odczyt z pliku\n4.Odszumianie\n5.Filtr medianowy\n");
  44. int znak = 0;
  45.  
  46. do
  47. {
  48. printf("Twoj wybor to: ");
  49. scanf("%d", &znak);
  50. switch (znak)
  51. {
  52. case 1: RysujWykres(dane, N, "wykres_google.html");
  53. system("wykres_google.html");
  54. break;
  55. case 2: ZapisCSV(dane, N, "plikCSV.csv");
  56. break;
  57. case 3: char nazwa[20];
  58. printf("Podaj nazwe pliku do odczytu: ");
  59. scanf("%s", &nazwa);
  60. OdczytCSV(nazwa,dane);
  61. system(nazwa);
  62. break;
  63. case 4:
  64. dane[3] = Srednia(dane, N);
  65. break;
  66. case 5: Skuteczna(dane, N);
  67. break;
  68. default: break;
  69. }
  70.  
  71.  
  72. } while (znak != 0);
  73.  
  74.  
  75.  
  76. system("pause");
  77. return 0;
  78. }
  79.  
  80. void ZapisCSV(float **dane, int N, char *nazwa) {
  81.  
  82. FILE *Wsk_do_pliku;
  83. int i;
  84. Wsk_do_pliku = fopen(nazwa, "w");
  85.  
  86. for (i = 0; i<N; i++) {
  87.  
  88. fprintf(Wsk_do_pliku, "%f;%f\n", dane[0][i], dane[1][i]);
  89.  
  90. }
  91.  
  92. fclose(Wsk_do_pliku);
  93. }
  94. void OdczytCSV(char *nazwa, float **dane) {
  95. int i, l_wierszy;
  96. FILE *wsk;
  97. float **tab;
  98. char znak;
  99. wsk = fopen(nazwa, "r");
  100. l_wierszy = 0;
  101. while (!feof(wsk)) {
  102. znak = fgetc(wsk);
  103. if (znak == '\n')
  104. l_wierszy++;
  105. }
  106. printf("\nW pliku jest %d linii\n", l_wierszy);
  107.  
  108.  
  109. rewind(wsk);
  110. for (i = 0; i < l_wierszy; i++)
  111. {
  112. float a, b;
  113. fscanf(wsk, "%f;%f\n", &a, &b);
  114. dane[0][i] = a;
  115. dane[1][i] = b;
  116. }
  117.  
  118. fclose(wsk);
  119.  
  120.  
  121.  
  122. }
  123.  
  124.  
  125.  
  126. void RysujWykres(float **dane, int l_linii, char *nazwa) {
  127. FILE *Wsk_do_pliku;
  128. int i;
  129.  
  130. Wsk_do_pliku = fopen(nazwa, "w");
  131.  
  132. fprintf(Wsk_do_pliku, "<html>\n");
  133. fprintf(Wsk_do_pliku, "<head>\n");
  134. fprintf(Wsk_do_pliku, "<script_ type=\"text/javascript_\" src=\"https://www.google.com/jsapi\"></script_>\n");
  135. fprintf(Wsk_do_pliku, "<script_ type=\"text/javascript_\">\n");
  136. fprintf(Wsk_do_pliku, "google.load(\"visualization\", \"1\", {packages:[\"corechart\"]});\n");
  137. fprintf(Wsk_do_pliku, "google.setOnLoadCallback(drawChart);\n");
  138. fprintf(Wsk_do_pliku, "function drawChart() {\n");
  139. fprintf(Wsk_do_pliku, "var data = google.visualization.arrayToDataTable([\n");
  140. fprintf(Wsk_do_pliku, "['i', 'sinus','sinus+szum']");
  141.  
  142. //
  143. for (i = 0; i<l_linii; i++) {
  144. fprintf(Wsk_do_pliku, ",\n[%f, %f, %f]", dane[0][i], dane[1][i], dane[3][i]); //przekazanie danych na wykres
  145. }
  146.  
  147. //
  148.  
  149. fprintf(Wsk_do_pliku, "\n]);\n");
  150.  
  151. fprintf(Wsk_do_pliku, "var options = {\n");
  152. fprintf(Wsk_do_pliku, "title: 'rozklad Gaussa'\n");
  153. fprintf(Wsk_do_pliku, "};\n");
  154. fprintf(Wsk_do_pliku, "var chart = new google.visualization.LineChart(document.getElementById('chart_div'));\n");
  155. fprintf(Wsk_do_pliku, "chart.draw(data, {\n");
  156. fprintf(Wsk_do_pliku, "colors: ['red']\n");
  157. fprintf(Wsk_do_pliku, "}\n");
  158. fprintf(Wsk_do_pliku, ");\n");
  159. fprintf(Wsk_do_pliku, "}\n");
  160. fprintf(Wsk_do_pliku, "</script_>\n");
  161. fprintf(Wsk_do_pliku, "</head>\n");
  162. fprintf(Wsk_do_pliku, "<body>\n");
  163. fprintf(Wsk_do_pliku, "<div id=\"chart_div\" style=\"width: 1280px; height: 720px;\"></div>\n");
  164. fprintf(Wsk_do_pliku, "</body>\n");
  165. fprintf(Wsk_do_pliku, "</html>\n");
  166.  
  167. fclose(Wsk_do_pliku);
  168.  
  169. }
  170.  
  171. float *generator_szumu(int N) {
  172.  
  173. int i;
  174. float *szum;
  175. srand(time(NULL));
  176. szum = (float*)calloc(N, sizeof(float));
  177.  
  178. for (i = 0; i<N; i++) {
  179.  
  180. szum[i] = (rand() % 1000)*1.0 / 5000;
  181. }
  182.  
  183.  
  184. return szum;
  185. }
  186.  
  187. float **generator(int f, int fp, int n, int N)
  188. {
  189.  
  190.  
  191. float tp;
  192. int i, j;
  193.  
  194. float **tab;
  195.  
  196. tp = 1.0 / fp;
  197.  
  198. // alokacja pamięci (tablica 2D)//
  199. tab = (float**)calloc(2, sizeof(float*));
  200.  
  201. for (i = 0; i<4; i++) {
  202. tab[i] = (float*)calloc(N, sizeof(float));
  203. }
  204.  
  205. // generator sinusa
  206.  
  207. for (j = 0; j<n; j++) {
  208.  
  209.  
  210.  
  211.  
  212. for (i = 0; i<(fp / f); i++) {
  213.  
  214. tab[0][j*(fp / f) + i] = tp*(j*(fp / f) + i); //czas
  215. tab[1][j*(fp / f) + i] = fabs(sin(2 * PI*(f / 2)*tp*i)); //wartosci
  216.  
  217. //printf("t=%f y=%f \n",tab[0][j*(fp/f)+i], tab[1][j*(fp/f)+i]);
  218. }
  219. }
  220. return tab;
  221. }
  222.  
  223.  
  224. float *Srednia(float **dane, int n)
  225. {
  226. float *odfiltrowany;
  227. odfiltrowany = (float*)calloc(n, sizeof(float));
  228. int i;
  229.  
  230. for (i = 0; i < n - 1; i++)
  231. {
  232. odfiltrowany[i] = (dane[3][i] + dane[3][i + 1]) / 2;
  233. printf("%lf\n", odfiltrowany[i]);
  234. }
  235.  
  236. return odfiltrowany;
  237. }
  238.  
  239.  
  240. void Skuteczna(float ** dane, int n)
  241. {
  242.  
  243. int i;
  244. for (i = 0; i < n - 2; i++)
  245. {
  246. float *tmp;
  247. tmp = (float*)calloc(3, sizeof(float));
  248. tmp[0] = dane[3][i];
  249. tmp[1] = dane[3][i + 1];
  250. tmp[2] = dane[3][i + 2];
  251. Sortuj(tmp,3);
  252. dane[3][i] = tmp[1];
  253. }
  254. }
  255.  
  256.  
  257.  
  258. void Sortuj(float *dane, int n)
  259. {
  260. int i,j;
  261.  
  262. for (i = 0; i < n; i++)
  263. {
  264. for (j = 0; j < n - 1; j++)
  265. {
  266. if (dane[j] > dane[j + 1])
  267. {
  268. float temp = dane[j + 1];
  269. dane[j + 1] = dane[j];
  270. dane[j] = temp;
  271. }
  272. }
  273. }
  274.  
  275. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement