Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <time.h>
- #include <locale.h>
- #define SIZE 2
- int *wczytywanieWspolczynnikow();
- int *wczytywanieZakresuDziedziny();
- float *generaowaniePrzebiegu();
- int wczytanieRozmiaruTablicyWyinikowej();
- void zapisywanieDoPliku();
- float *wczytywanieszumu();
- void odczytZpliku();
- void filtry();
- int main()
- {
- setlocale(LC_ALL, "polish_poland");
- float *tab3; //tablica pobierajaca dane
- float *tab2;
- float *mediany;
- float *zaszumiona;
- float *srednie;
- int tab[SIZE]; //rozmiar tablicy zawierajacej wspolczynniki A i B
- int tab1[SIZE]; //rozmiar tablicy zawierajacej elementy okreslajace zakres dziedziny
- char wybor;
- do {
- scanf("%s", &wybor);
- } while (wybor != 'q' && wybor != 'w');
- switch (wybor) {
- case 'q':
- int *ab = wczytywanieWspolczynnikow(tab);
- int *dz = wczytywanieZakresuDziedziny(tab1);
- int roz = wczytanieRozmiaruTablicyWyinikowej(); //wywołanie funkcji wczytujace rozmiar tablicy wynikowej
- //case 'w':
- tab2 = malloc(roz * sizeof(int));
- mediany = malloc((roz) * sizeof(int));
- srednie = malloc((roz) * sizeof(int));
- float *val = generaowaniePrzebiegu(ab, *dz, *(dz + 1), tab2, roz);
- //float *zaszumiona;
- zaszumiona = malloc(roz * sizeof(int));
- for (int i = 0; i < roz; i++)
- *(zaszumiona + i) = *(tab2 + i);
- wczytywanieszumu(zaszumiona, roz);
- //for (int j = 0; j < 100; j++)
- //printf("%.3f \n", zaszumiona[j]);
- filtry(zaszumiona, roz, mediany, srednie);
- zapisywanieDoPliku(zaszumiona, roz, mediany, srednie);
- //free(zaszumiona);
- //odczytZpliku();
- }
- }
- float *generaowaniePrzebiegu(int x, int y, int z, float *arr2, int siz) //funkcja pobiera tablice wspolczynnikow, dwa parametry określające dziedzine,
- //tablice wynikową, rozmiar tablicy wynikowej
- {
- int *a = x; //sprawdzenie czy zostaly przkazane prawidlowe parametry
- int b = y;
- int c = z;
- int siiz = siz; //rozmiar tablicy wynikowej
- float *war;
- war = arr2;
- for (int i = 0; i < siiz; i++) {
- *(war + i) = *a*sin(*(a + 1)*(b + i));
- //printf("%.3f\n", *(war + i));
- }
- return war;
- }
- int *wczytywanieWspolczynnikow(int arr[SIZE])
- {
- int *wsp;
- wsp = arr;
- puts("Podaj wspolczynnik A:");
- scanf("%d", wsp);
- puts("Podaj wspolczynnik B:");
- scanf("%d", (wsp + 1));
- return wsp;
- }
- int *wczytywanieZakresuDziedziny(int arr1[SIZE])
- {
- int *wsp1;
- wsp1 = arr1;
- int a = 1;
- int b = 100;
- *wsp1 = a;
- *(wsp1 + 1) = b;
- return wsp1;
- }
- int wczytanieRozmiaruTablicyWyinikowej()
- {
- int rozmiar;
- puts("Podaj rozmiar tablicy wynikowej");
- scanf("%d", &rozmiar);
- return rozmiar;
- }
- float *wczytywanieszumu(float *szum, int size)
- {
- int numer, amplituda;
- int roz = size;
- float *tmp;
- tmp = szum;
- srand(time(NULL));
- int iloscp = rand() % roz;
- for (int i = 0; i < iloscp; i++) {
- numer = rand() % 100;
- amplituda = -5 + rand() % 9;
- *(tmp + numer) += amplituda;
- }
- }
- void odczytZpliku()
- {
- int x = 0;
- int h = 0;
- float *owyn = malloc(sizeof(float));
- int *kol = malloc(sizeof(int));
- FILE* plik = fopen("G:/dopobrania.csv", "r");
- while (fscanf(plik, "%d;%f", &*(kol + x), &*(owyn + x)) != EOF)
- {
- printf("%d %f\n", *(kol + x), *(owyn + x));
- owyn = realloc(owyn, (x + 1) * sizeof(float*));
- kol = realloc(kol, (x + 1) * sizeof(int));
- x++;
- }
- }
- void filtry(float *szum, int roz, float *med, float *sred)
- {
- float *dof = szum; //wskaznik tablicy do filtracji
- int size = roz;
- float temp;
- float pomoc[5];
- int x = 0;
- int wyborf = 0;
- float suma = 0;
- puts("Filtr medianowy wcisnij 1");
- puts("Filtr sredniej ruchomej wcisnij 2");
- do {
- scanf("%d", &wyborf);
- } while (wyborf != 1 && wyborf != 2);
- switch (wyborf) {
- case 1:
- puts("Filtr medianowy");
- for (int h = 0; h < size; h++) {
- printf("%d %.3f\n", h, dof[h]);
- }
- med[0] = dof[0];
- med[1] = dof[1];
- med[size - 1] = dof[size - 1];
- med[size - 2] = dof[size - 2];
- for (int i = 0; i < size - 4; i++) {
- x = 0;
- for (int j = i; j < 5 + i; j++, x++)
- pomoc[x] = dof[j];
- for (int q = 0; q < 5; q++) {
- for (int w = 0; w < 4; w++) {
- if (pomoc[w] > pomoc[w + 1]) {
- temp = pomoc[w];
- pomoc[w] = pomoc[w + 1];
- pomoc[w + 1] = temp;
- }
- }
- }
- med[i + 2] = pomoc[2];
- }
- for (int t = 0; t < size; t++) {
- printf("%.3f", med[t]);
- }
- break;
- case 2:
- puts("Filtr sredniej ruchomej");
- sred[0] = dof[0];
- sred[1] = dof[1];
- sred[size - 1] = dof[size - 1];
- sred[size - 2] = dof[size - 2];
- for (int i = 0; i < size - 4; i++) {
- x = 0;
- suma = 0;
- for (int j = i; j < 5 + i; j++, x++) {
- pomoc[x] = dof[j];
- suma += pomoc[x];
- }
- sred[i + 2] = suma / 5;
- //printf("%.3f\n", sred[i + 2]);
- }
- for (int h = 0; h < size; h++) {
- printf("%.3f\n", sred[h]);
- }
- break;
- }
- }
- void zapisywanieDoPliku(float *wyn, int size, float *med, float *sred)
- {
- int roz1 = size;
- float *sum = wyn;
- //printf("%.3f", *(sum));
- FILE* plik;
- plik = fopen("G:\wykres.csv", "w");
- //fprintf(plik, "%.3f", *(sum));
- for (int i = 0; i < roz1; i++) {
- fprintf(plik, "%d;%.3f\n", i, *(sum + i));
- }
- for (int j = 0; j < size; j++) {
- fprintf(plik, "%d;%.3f\n", j, med[j]);
- }
- for (int h = 0; h < size; h++) {
- fprintf(plik, "%d;%.3f\n", h, sred[h]);
- }
- fclose(plik);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement