Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.85 KB | None | 0 0
  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include <locale.h>
  3. #include <math.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8.  
  9. void delay(unsigned int mseconds)
  10. {
  11. clock_t goal = mseconds + clock();
  12. while (goal > clock());
  13. }
  14.  
  15.  
  16.  
  17. void funkcja(float* wspol, int* poczatek, int* koniec, float* tab_wynikowa, int rozmiar_wynikowej)
  18. {
  19.  
  20. for (int i = 0; i < rozmiar_wynikowej; i++)
  21. {
  22. tab_wynikowa[i] = (wspol[0] * sin((*poczatek + (i + *koniec) - (wspol[1] + wspol[2])))*0.5);
  23. }
  24.  
  25. }
  26.  
  27. void dziedzina(int* poczatek, int* koniec)
  28. {
  29. int p, k;
  30.  
  31. printf("Podaj dziedzine\nOd: ");
  32. while (scanf("%d", &p) == 0)
  33. {
  34. printf("Nieprawidlowe dane, sprobuj ponownie\nOd: ");
  35. while ('\n' != getchar());
  36. }
  37. *poczatek = p;
  38. printf("Do: ");
  39.  
  40. while (scanf("%d", &k) == 0)
  41. {
  42. printf("Nieprawidlowe dane, sprobuj ponownie\nDo: ");
  43. while ('\n' != getchar());
  44. }
  45. *koniec = k;
  46.  
  47. while ((p > k) || (p == k))
  48. {
  49. printf("Podana dziedzina jest niepoprawna, wprowadz ponownie\n");
  50. printf("Podaj dziedzine\nOd: ");
  51.  
  52. while (scanf("%d", &p) == 0)
  53. {
  54. printf("Nieprawidlowe dane, sprobuj ponownie\nOd: ");
  55. while ('\n' != getchar());
  56. }
  57. *poczatek = p;
  58. printf("Do: ");
  59.  
  60. while (scanf("%d", &k) == 0)
  61. {
  62. printf("Nieprawidlowe dane, sprobuj ponownie\nDo: ");
  63. while ('\n' != getchar());
  64. }
  65. *koniec = k;
  66.  
  67. }
  68.  
  69. }
  70.  
  71. void wspolczynniki(float* tab_wsp, int rozmiar)
  72. {
  73. printf("Podaj %d wspolczynniki: ", rozmiar);
  74.  
  75. while (scanf("%f", &tab_wsp[0]) == 0)
  76. {
  77. printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
  78. while ('\n' != getchar());
  79.  
  80. }
  81.  
  82. printf("Podaj drugi wspolczynniki: ");
  83. while (scanf("%f", &tab_wsp[1]) == 0)
  84. {
  85. printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
  86. while ('\n' != getchar());
  87.  
  88. }
  89. printf("Podaj trzeci wspolczynniki: ");
  90. while (scanf("%f", &tab_wsp[2]) == 0)
  91. {
  92. printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
  93. while ('\n' != getchar());
  94.  
  95. }
  96.  
  97.  
  98.  
  99. }
  100.  
  101.  
  102. void zaszumienie(float* wspol, int* a, int* b, float* tab_wynikowa, float* tab_zaszumiona, int rozmiar_wynikowej)
  103. {
  104.  
  105.  
  106. srand(time(NULL));
  107. for (int i = 0; i < rozmiar_wynikowej; i++)
  108. {
  109. tab_zaszumiona[i] = tab_wynikowa[i];
  110.  
  111.  
  112. }
  113. for (int i = 0; i < rozmiar_wynikowej; i++)
  114. {
  115.  
  116. tab_zaszumiona[i] = tab_zaszumiona[i] * (((rand() % (*b + 1 - *a)) + *a) * 0.3);
  117.  
  118.  
  119.  
  120. }
  121.  
  122. }
  123.  
  124.  
  125.  
  126.  
  127.  
  128. void zapis(float* tab_zaszumiona, int rozmiar_wynikowej, float* tab_wynikowa)
  129. {
  130. setlocale(LC_ALL, "polish_poland");
  131. FILE* plik;
  132. char nazwa[100];
  133.  
  134. printf("Podaj nazwe pliku do którego chcesz zapisac dane:");
  135. scanf("%s", &nazwa);
  136. if ((plik = fopen(strcat(nazwa, ".csv"), "w")) == NULL)
  137. {
  138. system("CLS");
  139. printf("Bład odczytu pliku\nBrak pliku lub plik otwarty w innym programie\nZamknij plik i uruchom ponownie program\n");
  140. system("PAUSE");
  141. system("EXIT");
  142. }
  143.  
  144.  
  145. for (int i = 0; i < rozmiar_wynikowej; i++)
  146. {
  147. fprintf(plik, "%f;%f\n", tab_wynikowa[i], tab_zaszumiona[i]);
  148.  
  149. }
  150.  
  151.  
  152.  
  153. fclose(plik);
  154.  
  155. }
  156.  
  157. void pobieranie_rozmiaru_tabeli(int* tab_rozmiar)
  158. {
  159. printf("Podaj ile elementow ma wygenerowac funkcja: ");
  160. int rozmiar = 0;
  161.  
  162. scanf("%d", &rozmiar);
  163. while (rozmiar <= 0)
  164. {
  165. printf("Nieprawidlowe dane, sprobuj ponownie:\n");
  166. scanf("%d", &rozmiar);
  167. //printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
  168. while ('\n' != getchar());
  169.  
  170. }
  171.  
  172. *tab_rozmiar = rozmiar;
  173.  
  174. }
  175.  
  176. void odczyt()
  177. {
  178. float* tabArgumentow;
  179. float* tabWartosci;
  180. char nazwa[100];
  181.  
  182. float x, y;
  183. int ilekomorekwpliku = 0;
  184. FILE* plik;
  185. printf("Podaj nazwe pliku z ktorego chcesz wczytac dane:");
  186. scanf("%s", &nazwa);
  187. if ((plik = fopen(strcat(nazwa, ".csv"), "r")) == NULL)
  188. {
  189. system("CLS");
  190. printf("Blad odczytu pliku\nBrak pliku lub plik otwarty w innym programie\nZamknij plik i uruchom ponownie program\n");
  191. system("PAUSE");
  192. system("EXIT");
  193.  
  194. }
  195. while (feof(plik) == 0)
  196. {
  197. ilekomorekwpliku++;
  198. fscanf(plik, "%f;%f\n", &x, &y);
  199.  
  200. }
  201.  
  202. rewind(plik);
  203.  
  204. if ((tabArgumentow = (float*)malloc(ilekomorekwpliku * sizeof(double))) == NULL)
  205. {
  206. printf("Blad odczytu tablicy argumentow\n");
  207. }
  208. if ((tabWartosci = (float*)malloc(ilekomorekwpliku * sizeof(float))) == NULL)
  209. {
  210. printf("Blad odczytu tablicy wartosci\n");
  211. }
  212.  
  213. for (int i = 0; i < ilekomorekwpliku; i++)
  214. {
  215. fscanf(plik, "%f;%f\n", &x, &y);
  216. tabWartosci[i] = x;
  217. tabArgumentow[i] = y;
  218.  
  219. }
  220. printf("Zostaly odczytane dane z %s\n", nazwa);
  221.  
  222. for (int i = 0; i < ilekomorekwpliku; i++)
  223. {
  224.  
  225. printf("%f ; %f\n", tabArgumentow[i], tabWartosci[i]);
  226.  
  227. }
  228.  
  229. free(tabWartosci);
  230. free(tabArgumentow);
  231.  
  232.  
  233. }
  234.  
  235. void sortowanie(float* tab_zaszumiona, int rozmiar_tab)
  236. {
  237.  
  238.  
  239. int i, j;
  240. float pomocnicza;
  241.  
  242. for (i = 0; i < rozmiar_tab - 1; i++)
  243. {
  244. for (j = 0; j < rozmiar_tab - 1; j++)
  245. {
  246. if (tab_zaszumiona[j] > tab_zaszumiona[j + 1])
  247. {
  248. pomocnicza = tab_zaszumiona[j + 1];
  249. tab_zaszumiona[j + 1] = tab_zaszumiona[j];
  250. tab_zaszumiona[j] = pomocnicza;
  251. }
  252. }
  253. }
  254.  
  255. }
  256.  
  257.  
  258. void filterson(float* tab_zaszumiona, int rozmiar_wynikowej, float* tab_wynikowa)
  259. {
  260. int szerokoscokna = 5;
  261. int wybor1 = 0;
  262. float tab_pomocnicza[5];
  263. float* ptab_pomocnicza;
  264. ptab_pomocnicza = tab_pomocnicza;
  265.  
  266. float* tab_przefiltrowana;
  267. tab_przefiltrowana = (float*)malloc(rozmiar_wynikowej * sizeof(float));
  268.  
  269. tab_przefiltrowana[0] = tab_zaszumiona[0];
  270. tab_przefiltrowana[1] = tab_zaszumiona[1];
  271. tab_przefiltrowana[rozmiar_wynikowej - 2] = tab_zaszumiona[rozmiar_wynikowej - 2];
  272. tab_przefiltrowana[rozmiar_wynikowej - 1] = tab_zaszumiona[rozmiar_wynikowej - 1];
  273.  
  274. for (int i = 0; i < rozmiar_wynikowej - 4; i++)
  275. {
  276.  
  277. for (int j = 0; j < 5; j++)
  278. {
  279. tab_pomocnicza[j] = tab_zaszumiona[j + i];
  280.  
  281. }
  282. sortowanie(ptab_pomocnicza, 5);
  283.  
  284.  
  285. tab_przefiltrowana[i + 2] = tab_pomocnicza[2];
  286. }
  287.  
  288.  
  289.  
  290.  
  291. printf("Czy chcesz zapisac odfiltrowany sygnal?\n1. Tak\n2. Nie\n");
  292. while (scanf("%d", &wybor1) == 0)
  293. {
  294. printf("Nieprawidlowe dane, sprobuj ponownie:\n");
  295. while ('\n' != getchar());
  296. }
  297.  
  298. if (wybor1 == 1)
  299. {
  300. zapis(tab_przefiltrowana, rozmiar_wynikowej, tab_wynikowa);
  301. }
  302.  
  303. }
  304.  
  305. void filtersonsredniej(float* tab_zaszumiona, int rozmiar_wynikowej, float* tab_wynikowa)
  306. {
  307. float srednia = 0;
  308. float pomoc = 0;
  309. int szerokoscokna = 5;
  310. int wybor=0;
  311. float tab_pomocnicza[5];
  312. float* ptab_pomocnicza;
  313. ptab_pomocnicza = tab_pomocnicza;
  314.  
  315. float* tab_przefiltrowana;
  316. tab_przefiltrowana = (float*)malloc(rozmiar_wynikowej * sizeof(float));
  317.  
  318. tab_przefiltrowana[0] = tab_zaszumiona[0];
  319. tab_przefiltrowana[1] = tab_zaszumiona[1];
  320. tab_przefiltrowana[rozmiar_wynikowej - 2] = tab_zaszumiona[rozmiar_wynikowej - 2];
  321. tab_przefiltrowana[rozmiar_wynikowej - 1] = tab_zaszumiona[rozmiar_wynikowej - 1];
  322.  
  323. for (int i = 0; i < rozmiar_wynikowej - 4; i++)
  324. {
  325. pomoc = 0;
  326. srednia = 0;
  327.  
  328. for (int j = 0; j < 5; j++)
  329. {
  330. tab_pomocnicza[j] = tab_zaszumiona[j + i];
  331. pomoc = tab_pomocnicza[j] + pomoc;
  332.  
  333. }
  334. srednia = pomoc * 0.2;
  335.  
  336.  
  337. tab_przefiltrowana[i + 2] = srednia;
  338. }
  339.  
  340.  
  341.  
  342. printf("Czy chcesz zapisac odfiltrowany sygnal?\n1. Tak\n2. Nie\n");
  343. while (scanf("%d", &wybor) == 0)
  344. {
  345. printf("Nieprawidlowe dane, sprobuj ponownie:\n");
  346. while ('\n' != getchar());
  347. }
  348.  
  349. if (wybor == 1)
  350. {
  351. zapis(tab_przefiltrowana, rozmiar_wynikowej, tab_wynikowa);
  352. }
  353.  
  354.  
  355. }
  356.  
  357.  
  358.  
  359. int main()
  360. {
  361.  
  362.  
  363.  
  364. int decyzja = 1;
  365. int decyzja2 = 1;
  366.  
  367.  
  368. printf("Witaj w programie filtrujacym zaszumiony sygnal funkcji.\n\n1. Wygeneruj funkcje\nWyjscie z programy- dowolny przycisk.\n");
  369.  
  370. while (scanf("%d", &decyzja) == 0)
  371. {
  372. printf("Nieprawidlowe dane, sprobuj ponownie:\n");
  373. while ('\n' != getchar());
  374. }
  375.  
  376. if (decyzja == 1)
  377. {
  378. system("cls");
  379.  
  380.  
  381. int a = 0;
  382. int* pd;
  383. pd = &a;
  384. int b = 0;
  385. int* kd;
  386. kd = &b;
  387. dziedzina(pd, kd);
  388.  
  389. float wspol[3];
  390. float* pwspol;
  391. pwspol = wspol;
  392. wspolczynniki(pwspol, 3);
  393.  
  394. int* tab_rozmiar;
  395. int rozmiar_wynikowej = 0;
  396. tab_rozmiar = &rozmiar_wynikowej;
  397. pobieranie_rozmiaru_tabeli(tab_rozmiar);
  398.  
  399. float* tab_wynikowa;
  400. tab_wynikowa = (float*)malloc(rozmiar_wynikowej * sizeof(float));
  401. funkcja(wspol, pd, kd, tab_wynikowa, rozmiar_wynikowej);
  402.  
  403. float* tab_zaszumiona;
  404. float* ptab_zaszumiona;
  405. tab_zaszumiona = (float*)malloc(rozmiar_wynikowej * sizeof(float));
  406. ptab_zaszumiona = tab_zaszumiona;
  407.  
  408. printf("Funkcja wygenerowana pomyslnie\n");
  409.  
  410. delay(2000);
  411. system("cls");
  412.  
  413.  
  414.  
  415. do
  416.  
  417. {
  418.  
  419. printf("Co chcesz zrobic z wygenerowana funkcja:\n1. Zaszum funkcje.\n2. Zapisz funkcje do pliku.\n3. Wczytaj funkcje z pliku.\n4. Filtr medianowy.\n5. Filtr sredniej ruchomej.\n6. Zakoncz program.\n");
  420.  
  421. while (scanf("%d", &decyzja2) == 0)
  422. {
  423. printf("Nieprawidlowe dane, sprobuj ponownie:\n");
  424. while ('\n' != getchar());
  425. }
  426.  
  427.  
  428. switch (decyzja2)
  429. {
  430. system("cls");
  431.  
  432. case 1:
  433.  
  434. zaszumienie(wspol, pd, kd, tab_wynikowa, ptab_zaszumiona, rozmiar_wynikowej);
  435. printf("Funkcja zaszumiona pomyslnie.\n");
  436. delay(2000);
  437. system("cls");
  438. break;
  439.  
  440. case 2:
  441.  
  442. zapis(ptab_zaszumiona, rozmiar_wynikowej, tab_wynikowa);
  443. printf("Funkcja zapisana pomyslnie.\n");
  444. delay(2000);
  445. system("cls");
  446. break;
  447.  
  448. case 3:
  449.  
  450. odczyt();
  451. printf("Funkcja zostala odczytana z pliku.\n");
  452. delay(2000);
  453. system("cls");
  454. break;
  455.  
  456. case 4:
  457.  
  458. filterson(ptab_zaszumiona, rozmiar_wynikowej, tab_wynikowa);
  459. delay(2000);
  460. system("cls");
  461. break;
  462.  
  463. case 5:
  464.  
  465. filtersonsredniej(ptab_zaszumiona, rozmiar_wynikowej, tab_wynikowa);
  466. delay(2000);
  467. system("cls");
  468. break;
  469.  
  470. case 6:
  471. return 0;
  472. break;
  473.  
  474. default: printf("Nie ma takiej opcji w menun sprobuj ponownie.\n");
  475. delay(2000);
  476. system("cls");
  477. break;
  478.  
  479. }
  480.  
  481. } while (decyzja2 != 6);
  482.  
  483.  
  484. }
  485. else
  486. {
  487.  
  488. system("cls");
  489. printf("Program zakonczyl dzialanie.\n");
  490. delay(2000);
  491. return 0;
  492. }
  493. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement