Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.98 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <stdio.h>
  5. #include <locale.h>
  6.  
  7.  
  8. #define wprowadzane_dane 3
  9.  
  10. void wczytaj(double* tablica_wspolczynnikow, double* po, double* ko, int* rozmiar);
  11. void przypisz_wartosci(double* tablica_wspolczynnikow, double poczatek, double koniec, double* tablica_wynikow, int rozmiar);
  12. void wyswietl_wyniki(double* tablica_wynikow, int rozmiar);
  13. void szum(double* tablica_szumu, double* tablica_wynikow, int rozmiar);
  14. int zapisywanie_CSV(double* tablica_wynikow, double* tablica_szumu, int rozmiar);
  15. int ile_miejsca();
  16. void odczyt_CSV(double* tablica_odczytana, double* szum_odczytany);
  17. void odszumianie_medianowe(double* szum_odczytany, int wielkosc);
  18. void odszumianie_srednia(double* szum_odczytany, int wielkosc);
  19.  
  20.  
  21.  
  22. int main()
  23. {
  24.  
  25. int rozmiar = 500;
  26.  
  27. double* tablica_wspolczynnikow = (double*)malloc(wprowadzane_dane * sizeof(double)); // 0 -amplituda , 1- przesuniecie, 2-czestotliwosc//
  28. double* tablica_wynikow;
  29. double* tablica_szumu;
  30. double* tablica_odczytana;
  31. double* szum_odczytany;
  32. double* tablica_odszumiona;
  33. setlocale(LC_ALL, "polish_poland");
  34.  
  35. double poczatek = 0;
  36. double koniec = 0;
  37. int wielkosc = 0;
  38. int a, c;
  39. char b;
  40.  
  41. do
  42. {
  43. printf("*****MENU*****\n");
  44. printf("Co chcailbys zrobic?\n");
  45. printf("1.Wygeneruj funkcje\n");
  46. printf("2.Odczytaj zapisana funkcje\n");
  47. printf("3.Wyjscie z programu\n");
  48.  
  49. scanf("%d", &a);
  50.  
  51.  
  52.  
  53. switch (a)
  54. {
  55. case 1:
  56.  
  57. wczytaj(tablica_wspolczynnikow, &poczatek, &koniec, &rozmiar); // funkcja wczytujaca parametry poczatkowe
  58. tablica_wynikow = (double*)malloc(rozmiar * sizeof(double));//malokacja potrzebnego rozmiaru
  59. tablica_szumu = (double*)calloc(rozmiar, sizeof(double));
  60. przypisz_wartosci(tablica_wspolczynnikow, poczatek, koniec, tablica_wynikow, rozmiar); // generacja funkcji
  61.  
  62.  
  63.  
  64. do//zapezpieczenie wejscia
  65. {
  66.  
  67. printf("Wyswietlic przypisane wartosci?\n");
  68. printf("Tak-1\nNie-2\n");
  69. b = getchar();
  70.  
  71.  
  72. system("cls");//czyszczenie konsoli
  73.  
  74.  
  75. } while ((b != '1') && (b != '2'));
  76.  
  77. if (b == '1')
  78. {
  79.  
  80. wyswietl_wyniki(tablica_wynikow, rozmiar);
  81.  
  82. }
  83.  
  84. printf("Chcesz zaszumic funkcje?\n");
  85. printf("Tak-1\nNie-2\n");
  86. do
  87. {
  88.  
  89.  
  90. if (scanf("%d", &b) == 1) //jezeli scanf wczyta
  91. {
  92.  
  93. if (b == 1)
  94. {
  95.  
  96. szum(tablica_szumu, tablica_wynikow, rozmiar);
  97. printf("Funkcja zostala zaszumiona\n");
  98.  
  99. printf("Wyswietlic zaszumiona funkcje?\n");
  100. printf("Tak-1\nNie-2\n");
  101. do
  102. {
  103.  
  104.  
  105. if (scanf("%d", &b) == 1)
  106. {
  107. if (b == 1)
  108. {
  109. wyswietl_wyniki(tablica_szumu, rozmiar);
  110. printf("Funkcja zostala zaszumiona\n");
  111. }
  112.  
  113.  
  114.  
  115. }
  116.  
  117.  
  118.  
  119.  
  120. } while (b != 1 && b != 2);
  121.  
  122. printf("Czy chcesz zapisac obie funkcje?\n");
  123. printf("Tak-1\nNie-2\n");
  124. do
  125. {
  126.  
  127.  
  128. if (scanf("%d", &b) == 1)
  129. {
  130.  
  131.  
  132. if ((zapisywanie_CSV(tablica_wynikow, tablica_szumu, rozmiar)) == 0)
  133. {
  134. printf("Zamknij plik!\n");
  135. exit(0);//blad pliku, komunikat i wyjscie
  136. }
  137.  
  138. else
  139. {
  140. printf("Zapisano!\n");
  141.  
  142. }
  143. }
  144.  
  145.  
  146.  
  147.  
  148. } while (b != 1 && b != 2);
  149.  
  150.  
  151. printf("Odszumic funkcje?\n");
  152. printf("Tak-1\nNie-2\n");
  153. do
  154. {
  155.  
  156. if (scanf("%d", &b) == 1)
  157. {
  158. if (b == 1)
  159. {
  160. wielkosc = ile_miejsca();//rozmiar potrzebny
  161. printf("1.Filtr średniej ruchomej\n");
  162. printf("2.Filtr medianowy\n");
  163. scanf("%d", &b);
  164.  
  165. if (b == 1)
  166. {
  167. odszumianie_srednia(tablica_szumu, wielkosc);
  168. printf("\n\n");
  169. }
  170. if (b == 2)
  171. {
  172. odszumianie_medianowe(tablica_szumu, wielkosc);
  173.  
  174. }
  175.  
  176. printf("Czy chcesz zapisac?\n");
  177. printf("Tak-1\nNie-2\n");
  178. do
  179. {
  180.  
  181.  
  182. if (scanf("%d", &b) == 1)
  183. {
  184.  
  185.  
  186. if ((zapisywanie_CSV(tablica_wynikow, tablica_szumu, rozmiar)) == 0)
  187. {
  188. printf("Zamknij plik!\n");
  189. exit(0);
  190. }
  191.  
  192. else
  193. {
  194. printf("Zapisano!\n");
  195.  
  196. }
  197. }
  198.  
  199.  
  200.  
  201.  
  202. } while (b != 1 && b != 2);
  203.  
  204. }
  205.  
  206.  
  207. if (b == 2)
  208. {
  209. break;
  210. }
  211.  
  212.  
  213.  
  214. }
  215.  
  216. } while (b != 1 && b != 2);
  217. }
  218.  
  219. if (b == 2)
  220. {
  221. break;
  222. }
  223. }
  224.  
  225.  
  226. break;
  227.  
  228. } while (b != 1 && b != 2);
  229.  
  230. if (b == 2)
  231. {
  232. printf("Czy chcesz zapisac funkcje?\n");
  233. printf("Tak-1\nNie-2\n");
  234. do
  235. {
  236.  
  237.  
  238. if (scanf("%d", &b) == 1)
  239. {
  240. if (b == 1)
  241. {
  242. if ((zapisywanie_CSV(tablica_wynikow, tablica_szumu, rozmiar) == 0))//sprawdza czy otworzyl plik
  243. {
  244. printf("Zamknij plik!!!\n");
  245. break;
  246. }
  247.  
  248. else
  249. {
  250. printf("\nZapisane\n");
  251.  
  252. }
  253. }
  254.  
  255.  
  256. }
  257.  
  258.  
  259.  
  260.  
  261. } while (b != 1 && b != 2);
  262.  
  263.  
  264. }
  265.  
  266.  
  267.  
  268. break;
  269.  
  270. case 2:
  271.  
  272. wielkosc = ile_miejsca();
  273. if (wielkosc == 0)
  274. {
  275. exit(0);
  276. }
  277. tablica_odczytana = (double*)malloc(wielkosc * sizeof(double));
  278. szum_odczytany = (double*)calloc(wielkosc, sizeof(double));//ustawienie pamieci
  279.  
  280. odczyt_CSV(tablica_odczytana, szum_odczytany);
  281.  
  282. printf("\nOdszumic funkcje?\n");
  283. printf("Tak-1\nNie-2\n");
  284. do
  285. {
  286.  
  287. if (scanf("%d", &b) == 1)
  288. {
  289. if (b == 1)
  290. {
  291. wielkosc = ile_miejsca();
  292. printf("1.Filtr średniej ruchomej\n");
  293. printf("2.Filtr medianowy\n");
  294. scanf("%d", &b);
  295.  
  296. if (b == 1)
  297. {
  298. odszumianie_srednia(szum_odczytany, wielkosc);
  299. printf("\n\n");
  300. }
  301. if (b == 2)
  302. {
  303. odszumianie_medianowe(szum_odczytany, wielkosc);
  304.  
  305. }
  306.  
  307.  
  308.  
  309. }
  310.  
  311.  
  312. }
  313.  
  314. } while (b != 1 && b != 2);
  315.  
  316. printf("Czy chcesz zapisac obie funkcje?\n");
  317. printf("Tak-1\nNie-2\n");
  318. do
  319. {
  320.  
  321.  
  322. if (scanf("%d", &b) == 1)
  323. {
  324.  
  325.  
  326. if ((zapisywanie_CSV(tablica_odczytana, szum_odczytany, wielkosc)) == 0)
  327. {
  328. printf("Zamknij plik!\n");
  329. exit(0);
  330. }
  331.  
  332. else
  333. {
  334. printf("Zapisano!\n");
  335.  
  336. }
  337. }
  338.  
  339.  
  340.  
  341.  
  342. } while (b != 1 && b != 2);
  343.  
  344. break;
  345.  
  346. case 3:
  347. system("cls");
  348. exit(0);//wyjscie
  349.  
  350.  
  351. default:
  352.  
  353. break;
  354. }
  355.  
  356.  
  357.  
  358. } while (a != 3);
  359.  
  360.  
  361. free(&tablica_odszumiona);
  362. free(&tablica_wspolczynnikow);
  363. free(&tablica_odczytana);
  364. free(&tablica_wynikow);
  365. free(&tablica_szumu);
  366.  
  367.  
  368. }
  369.  
  370.  
  371. void wczytaj(double* tablica_wspolczynnikow, double* po, double* ko, int* rozmiar) //przypisanie wartosci i sprawdzenie poprawnosci
  372. {
  373. printf("Podaj amplitude: ");
  374.  
  375.  
  376. while (1)
  377. {
  378. /*do
  379. {
  380. printf("\nAmplituda musi byc wieksza od 0\n");
  381. printf("Podaj amplitude: ");
  382. scanf("%lf", &tablica_wspolczynnikow[0]);
  383.  
  384. } while (*(tablica_wspolczynnikow) <= 0);*/
  385. while (scanf("%lf", &tablica_wspolczynnikow[0]) != 1)
  386. {
  387. int c;
  388. printf("Zla wartosc\n");
  389. while ((c = getchar()) != '\n' && c != EOF); //wyciągniecie znaków z bufora
  390. }
  391. if (*(tablica_wspolczynnikow) <= 0)
  392. {
  393. printf("Amplituda musi byc wieksza od 0!\n");
  394. }
  395. else
  396. break;
  397.  
  398. }
  399.  
  400.  
  401. printf("Podaj przesuniecie: ");
  402. scanf("%lf", &tablica_wspolczynnikow[1]);
  403.  
  404.  
  405. printf("Podaj faze: ");
  406. scanf("%lf", &tablica_wspolczynnikow[2]);
  407.  
  408. if (*(tablica_wspolczynnikow + 2) <= 0)
  409. {
  410. do
  411. {
  412. printf("\nFaza musi byc wieksza od 0\n");
  413. printf("Podaj faze: ");
  414. scanf("%lf", &tablica_wspolczynnikow[2]);
  415.  
  416. } while (*(tablica_wspolczynnikow + 2) <= 0);
  417. }
  418.  
  419.  
  420. printf("Podaj liczbę elementów: ");
  421.  
  422.  
  423.  
  424. while (1)
  425. {
  426. /*do
  427. {
  428. printf("\nRozmiar musi byc wieksza od 0\n");
  429. printf("Podaj rozmiar: ");
  430. scanf("%d", rozmiar);
  431.  
  432. } while (*(rozmiar) <= 0);*/
  433.  
  434. while (scanf("%d", rozmiar) != 1)
  435. {
  436. int c;
  437. printf("Zła wartosc!\n");
  438. while ((c = getchar()) != '\n' && c != EOF); //wyciągniecie znaków z bufora
  439.  
  440. }
  441. if (*rozmiar < 10)
  442. {
  443.  
  444. printf("Rozmiar musi byc conajmniej 10!\n");
  445. }
  446.  
  447. else
  448. {
  449. break;
  450. }
  451. }
  452.  
  453. do
  454. {
  455.  
  456. printf("Podaj poczatek dziedziny: ");
  457. scanf("%lf", po);
  458.  
  459. printf("Podaj koniec dziedziny: ");
  460. scanf("%lf", ko);
  461.  
  462. if (*po > * ko)
  463. printf("Poczatek musi byc mniejszy niz koniec :)\n"); //kontorla poprawnego zakresu
  464.  
  465. } while (*po > * ko);
  466. }
  467.  
  468. void przypisz_wartosci(double* tablica_wspolczynnikow, double poczatek, double koniec, double* tablica_wynikow, int rozmiar)
  469. {
  470. int i = 0;
  471.  
  472. double zakres = 0;
  473. zakres = fabs(poczatek - koniec); //okreslenie zakresu
  474.  
  475. for (i; i < rozmiar; i++)
  476. {
  477. *tablica_wynikow++ = tablica_wspolczynnikow[0] * fabs(sin(poczatek * tablica_wspolczynnikow[2]) + tablica_wspolczynnikow[1]);//petla wyliczajaca wartosci
  478.  
  479. poczatek += zakres / rozmiar;//skok funkcji
  480.  
  481. }
  482.  
  483.  
  484. }
  485.  
  486. void wyswietl_wyniki(double* tablica_wynikow, int rozmiar)
  487. {
  488. int i = 0;
  489.  
  490. for (i; i < rozmiar; i++)
  491. {
  492. printf("Wartosc %d wynosi: %lf\n", i + 1, *tablica_wynikow++);
  493. }
  494.  
  495. }
  496.  
  497. void szum(double* tablica_szumu, double* tablica_wynikow, int rozmiar)
  498. {
  499. int ilosc = 0;
  500. int dlugosc = 0;
  501. int start = 0;
  502. int i = 0;
  503. int j = 0;
  504. int x = 0;
  505. int amplituda = 0;
  506. srand(time(NULL)); //konieczne do losowania roznych wartosci(pseudo)
  507.  
  508. ilosc = (rand() % 9) + 1; //ilosc zaszumianych przedzialow
  509. dlugosc = (rand() % 15) + 2; // dlugosc zaszumianych przedzialow
  510. amplituda = 1 + rand() % 5; // losowanie amplitudy
  511. x = rand() % 3; // prawdopodobienstwo zaszumienia
  512.  
  513.  
  514. i = 0;
  515.  
  516. for (i; i < ilosc; i++)
  517. {
  518. start = rand() % (rozmiar + 1 - dlugosc); // losowanie poczatku zaszumienia
  519.  
  520. for (j; j < dlugosc; j++)
  521. {
  522. if ((x == 0) || (x == 2))
  523. tablica_szumu[start + j] = (tablica_wynikow[start + j] + amplituda) / 2;
  524.  
  525. amplituda = 1 + rand() % 5; //losowanie nowej amplitudy
  526. x = rand() % 3; //losowanie nowego prawdopodobienstwa
  527. }
  528.  
  529. j = 0;
  530.  
  531. }
  532.  
  533. for (i = 0; i < rozmiar; i++)
  534. {
  535.  
  536. if (tablica_szumu[i] == 0)//jezeli tablica nie ma wartosci to wpisz tam wartosc z generacji funkcji
  537. {
  538. tablica_szumu[i] = tablica_wynikow[i]; //uzupelnienie tablicy
  539. }
  540.  
  541. }
  542.  
  543.  
  544. }
  545.  
  546. int zapisywanie_CSV(double* tablica_wynikow, double* tablica_szumu, int rozmiar)
  547. {
  548. FILE* plik;
  549. int i = 0;
  550. setlocale(LC_ALL, "polish_poland");//zamiana kropek na przecinki
  551.  
  552. plik = fopen("tablice.csv", "w");
  553.  
  554. if (plik == NULL)//czy plik sie otworzyl
  555. {
  556. perror("Tablice.csv");//komunikat dlaczego blad
  557. return 0;
  558. }
  559.  
  560.  
  561.  
  562. for (i; i < rozmiar; i++)//zapis
  563. {
  564. fprintf(plik, "%lf;%lf\n", *tablica_wynikow++, *tablica_szumu++);
  565. }
  566.  
  567.  
  568. fclose(plik);
  569. return 1;
  570. }
  571.  
  572. int ile_miejsca()//znajduje rozmiar potrzebnej tablicy
  573. {
  574. FILE* plik;
  575. int i = 0;
  576. int c = 0;
  577. double x = 0;
  578. char tablica[100]; //tablica pomocnicza do znalezienia rozmiaru
  579.  
  580. plik = fopen("tablice.csv", "r");
  581. if (plik == NULL)
  582. {
  583. perror("Tablice.csv");//komunikat dlaczego blad
  584. return 0;
  585.  
  586. }
  587.  
  588. while (feof(plik) == 0)
  589. {
  590. fscanf(plik, "%s", tablica);
  591.  
  592. i++;
  593.  
  594. }
  595. c = i - 1;
  596. fclose(plik);
  597. return c;
  598. }
  599.  
  600. void odczyt_CSV(double* tablica_odczytana, double* szum_odczytany)
  601. {
  602. FILE* plik;
  603.  
  604. plik = fopen("tablice.csv", "r"); //plik do zapisu
  605.  
  606. rewind(plik); //przewiniecie pliku
  607. int i = 0;
  608.  
  609. printf("\n\nOdczytane wartości!!!\n");
  610. printf("Funkcja Szum");
  611.  
  612. while (feof(plik) == 0)//dopoki odczytuje-nie jest puste
  613. {
  614.  
  615.  
  616. if ((fscanf(plik, "%lf ; %lf", (tablica_odczytana + i), (szum_odczytany + i)) == 2))
  617. {
  618.  
  619. printf("\n %d.%lf %lf", i, tablica_odczytana[i], szum_odczytany[i]);
  620.  
  621. }
  622.  
  623. else
  624. break;
  625.  
  626. i++;
  627. }
  628.  
  629. if (feof(plik) != 0)
  630. printf("\nKoniec pliku\n");
  631.  
  632. fclose(plik);
  633. }
  634.  
  635. void odszumianie_medianowe(double* szum_odczytany, int wielkosc)
  636. {
  637. double a; // pomocnicza zmienna do przestawiania zmiennej
  638. double tablica[6]; //tablica pomocnicza do ustawienia zmiennych od najmniejszej do największej
  639. int i;
  640. int j;
  641.  
  642.  
  643. for (i = 0; i < wielkosc - 5; i++)
  644. {
  645.  
  646. for (j = 0; j < 5; j++)
  647. {
  648. tablica[j] = *(szum_odczytany + i + j);//przepisanie wartosci
  649. }
  650.  
  651.  
  652. for (j = 0; j < 5; j++)
  653. {
  654. if (tablica[j] > tablica[j + 1])//sortowanie bombelkowe
  655. {
  656. a = tablica[j + 1];
  657. tablica[j + 1] = tablica[j];
  658. tablica[j] = a;
  659. }
  660.  
  661.  
  662. }
  663. *(szum_odczytany + i + 2) = tablica[2];//przypisanie wartosci
  664.  
  665. }
  666.  
  667. printf("Odszumiona funkcja:\n");
  668.  
  669. for (j = 0; j < wielkosc; j++)
  670. {
  671.  
  672. printf("%d.%lf\n", j + 1, *(szum_odczytany + j));//wyswietlenie
  673.  
  674. }
  675. }
  676.  
  677.  
  678. void odszumianie_srednia(double* szum_odczytany, int wielkosc)
  679. {
  680. int i;
  681. int x = 0;
  682. double srednia;
  683. for (i = 1; i < (wielkosc - 1); i++)
  684. {
  685. srednia = 0;
  686. for (int j = 0; j < 3; j++)
  687. {
  688. srednia = srednia + *(szum_odczytany + i + j - 1);//sumuje trzy wyrazy obok siebie
  689.  
  690. }
  691. *(szum_odczytany + x + 1) = srednia / 3;//wpisuje wartosc do srodkowego
  692. x++;
  693. }
  694. printf("\n");
  695.  
  696. for (int j = 0; j < wielkosc; j++)
  697. {
  698.  
  699. printf("%d.%lf\n", j, *(szum_odczytany + j));//wyswietlenie
  700.  
  701. }
  702.  
  703. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement