Advertisement
Hadix

lals

Nov 5th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.34 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include <time.h>
  7. #include <locale.h>
  8.  
  9.  
  10. #define SIZE 2
  11.  
  12. int *wczytywanieWspolczynnikow();
  13. int *wczytywanieZakresuDziedziny();
  14. float *generaowaniePrzebiegu();
  15. int wczytanieRozmiaruTablicyWyinikowej();
  16. void zapisywanieDoPliku();
  17. float *wczytywanieszumu();
  18. void odczytZpliku();
  19. void filtry();
  20.  
  21. int main()
  22. {
  23.     setlocale(LC_ALL, "polish_poland");
  24.  
  25.     float *tab3;                              //tablica pobierajaca dane
  26.     float *tab2;
  27.     float *mediany;
  28.     float *srednie;
  29.     float *zaszumiona;
  30.     int tab[SIZE];                            //rozmiar tablicy zawierajacej wspolczynniki A i B
  31.     int tab1[SIZE];                          //rozmiar tablicy zawierajacej elementy okreslajace zakres dziedziny
  32.  
  33.     int *ab = wczytywanieWspolczynnikow(tab);
  34.     int *dz = wczytywanieZakresuDziedziny(tab1);
  35.     int roz = wczytanieRozmiaruTablicyWyinikowej();   //wywołanie funkcji wczytujace rozmiar tablicy wynikowej
  36.     tab2 = malloc(roz * sizeof(int));
  37.     mediany = malloc((roz) * sizeof(int));
  38.     srednie = malloc((roz) * sizeof(int));
  39.     float *val = generaowaniePrzebiegu(ab, *dz, *(dz + 1), tab2, roz);
  40.     //float *zaszumiona;
  41.     zaszumiona = malloc(roz * sizeof(int));
  42.     for (int i = 0; i < roz; i++)
  43.         *(zaszumiona + i) = *(tab2 + i);
  44.     wczytywanieszumu(zaszumiona, roz);
  45.     //for (int j = 0; j < 100; j++)
  46.     //printf("%.3f \n", zaszumiona[j]);
  47.     filtry(zaszumiona, roz, mediany, srednie);
  48.     //zapisywanieDoPliku(zaszumiona, roz, mediany, srednie);
  49.     //free(zaszumiona);
  50.     //odczytZpliku();
  51.  
  52.  
  53. }
  54.  
  55.  
  56. float *generaowaniePrzebiegu(int x, int y, int z, float *arr2, int siz)   //funkcja pobiera tablice wspolczynnikow, dwa parametry określające dziedzine,
  57.                                                                           //tablice wynikową, rozmiar tablicy wynikowej
  58. {
  59.     int *a = x;                                                                //sprawdzenie czy zostaly przkazane prawidlowe parametry
  60.     int  b = y;
  61.     int  c = z;
  62.     int siiz = siz;       //rozmiar tablicy wynikowej
  63.     float *war;
  64.     war = arr2;
  65.     for (int i = 0; i < siiz; i++) {
  66.         *(war + i) = *a*sin(*(a + 1)*(b + i));
  67.         //printf("%.3f\n", *(war + i));
  68.     }
  69.     return war;
  70.  
  71.  
  72. }
  73.  
  74. int *wczytywanieWspolczynnikow(int arr[SIZE])
  75. {
  76.     int *wsp;
  77.     wsp = arr;
  78.     puts("Podaj wspolczynnik A:");
  79.     scanf("%d", wsp);
  80.     puts("Podaj wspolczynnik B:");
  81.     scanf("%d", (wsp + 1));
  82.     return wsp;
  83.  
  84. }
  85.  
  86. int *wczytywanieZakresuDziedziny(int arr1[SIZE])
  87.  
  88. {
  89.     int *wsp1;
  90.     wsp1 = arr1;
  91.     int a = 1;
  92.     int b = 100;
  93.     *wsp1 = a;
  94.     *(wsp1 + 1) = b;
  95.     return wsp1;
  96. }
  97.  
  98. int wczytanieRozmiaruTablicyWyinikowej()
  99. {
  100.     int rozmiar;
  101.     puts("Podaj rozmiar tablicy wynikowej");
  102.     scanf("%d", &rozmiar);
  103.     return rozmiar;
  104. }
  105.  
  106. float *wczytywanieszumu(float *szum, int size)
  107. {
  108.     int numer, amplituda;
  109.     int roz = size;
  110.     float *tmp;
  111.     tmp = szum;
  112.     srand(time(NULL));
  113.     int iloscp = rand() % roz;
  114.     for (int i = 0; i < iloscp; i++) {
  115.         numer = rand() % 1000;
  116.         amplituda = -5 + rand() % 9;
  117.         *(tmp + numer) += amplituda;
  118.     }
  119. }
  120.  
  121. void odczytZpliku()
  122. {
  123.     int x = 0;
  124.     int h = 0;
  125.     float *owyn = malloc(sizeof(float));
  126.     int *kol = malloc(sizeof(int));
  127.     FILE* plik = fopen("G:/dopobrania.csv", "r");
  128.     while (fscanf(plik, "%d;%f", &*(kol + x), &*(owyn + x)) != EOF)
  129.     {
  130.         printf("%d %f\n", *(kol + x), *(owyn + x));
  131.         owyn = realloc(owyn, (x + 1) * sizeof(float*));
  132.         kol = realloc(kol, (x + 1) * sizeof(int));
  133.         x++;
  134.     }
  135. }
  136.  
  137. void filtry(float *szum, int roz, float *med, float *sred)
  138. {
  139.     float *dof = szum; //wskaznik tablicy do filtracji
  140.     int size = roz;
  141.     float temp;
  142.     float pomoc[5];
  143.     int x = 0;
  144.     int wyborf = 0;
  145.     float suma = 0;
  146.     puts("Filtr medianowy wcisnij 1");
  147.     puts("Filtr sredniej ruchomej wcisnij 2");
  148.     do {
  149.         scanf("%d", &wyborf);
  150.     } while (wyborf != 1 && wyborf != 2);
  151.  
  152.     switch (wyborf) {
  153.  
  154.     case 1:
  155.         puts("Filtr medianowy");
  156.         for (int h = 0; h < size; h++) {
  157.             printf("%d %.3f\n", h, dof[h]);
  158.         }
  159.         med[0] = dof[0];
  160.         med[1] = dof[1];
  161.         med[size - 1] = dof[size - 1];
  162.         med[size - 2] = dof[size - 2];
  163.         for (int i = 0; i < size - 4; i++) {
  164.             x = 0;
  165.             for (int j = i; j < 5 + i; j++, x++)
  166.                 pomoc[x] = dof[j];
  167.  
  168.             for (int q = 0; q < 5; q++) {
  169.                 for (int w = 0; w < 4; w++) {
  170.                     if (pomoc[w] > pomoc[w + 1]) {
  171.                         temp = pomoc[w];
  172.                         pomoc[w] = pomoc[w + 1];
  173.                         pomoc[w + 1] = temp;
  174.  
  175.                     }
  176.                 }
  177.             }
  178.             med[i + 2] = pomoc[2];
  179.         }
  180.         for (int t = 0; t < size; t++) {
  181.             printf("%.3f", med[t]);
  182.         }
  183.         break;
  184.     case 2:
  185.         puts("Filtr sredniej ruchomej");
  186.         sred[0] = dof[0];
  187.         sred[1] = dof[1];
  188.         sred[size - 1] = dof[size - 1];
  189.         sred[size - 2] = dof[size - 2];
  190.         for (int i = 0; i < size - 4; i++) {
  191.             x = 0;
  192.             suma = 0;
  193.             for (int j = i; j < 5 + i; j++, x++) {
  194.                 pomoc[x] = dof[j];
  195.                 suma += pomoc[x];
  196.             }
  197.             sred[i + 2] = suma / 5;
  198.             //printf("%.3f\n", sred[i + 2]);
  199.         }
  200.         for (int h = 0; h < size; h++) {
  201.             printf("%.3f\n", sred[h]);
  202.         }
  203.         break;
  204.     }
  205. }
  206.  
  207. void zapisywanieDoPliku(float *wyn, int size, float *med, float *sred)
  208. {
  209.     int roz1 = size;
  210.     float *sum = wyn;
  211.     //printf("%.3f", *(sum));
  212.     FILE* plik;
  213.     plik = fopen("G:\wykres.csv", "w");
  214.     //fprintf(plik, "%.3f", *(sum));
  215.     for (int i = 0; i < roz1; i++) {
  216.         fprintf(plik, "%d;%.3f\n", i, *(sum + i));
  217.     }
  218.     for (int j = 0; j < size; j++) {
  219.         fprintf(plik, "%d;%.3f\n", j, med[j]);
  220.     }
  221.     for (int h = 0; h < size; h++) {
  222.         fprintf(plik, "%d;%.3f\n", h, sred[h]);
  223.     }
  224.     fclose(plik);
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement