Advertisement
Hadix

xd

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