Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_DEPRECATE
- #include <locale.h>
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- void delay(unsigned int mseconds)
- {
- clock_t goal = mseconds + clock();
- while (goal > clock());
- }
- void funkcja(float* wspol, int* poczatek, int* koniec, float* tab_wynikowa, int rozmiar_wynikowej)
- {
- for (int i = 0; i < rozmiar_wynikowej; i++)
- {
- tab_wynikowa[i] = (wspol[0] * sin((*poczatek + (i + *koniec) - (wspol[1] + wspol[2])))*0.5);
- }
- }
- void dziedzina(int* poczatek, int* koniec)
- {
- int p, k;
- printf("Podaj dziedzine\nOd: ");
- while (scanf("%d", &p) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie\nOd: ");
- while ('\n' != getchar());
- }
- *poczatek = p;
- printf("Do: ");
- while (scanf("%d", &k) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie\nDo: ");
- while ('\n' != getchar());
- }
- *koniec = k;
- while ((p > k) || (p == k))
- {
- printf("Podana dziedzina jest niepoprawna, wprowadz ponownie\n");
- printf("Podaj dziedzine\nOd: ");
- while (scanf("%d", &p) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie\nOd: ");
- while ('\n' != getchar());
- }
- *poczatek = p;
- printf("Do: ");
- while (scanf("%d", &k) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie\nDo: ");
- while ('\n' != getchar());
- }
- *koniec = k;
- }
- }
- void wspolczynniki(float* tab_wsp, int rozmiar)
- {
- printf("Podaj %d wspolczynniki: ", rozmiar);
- while (scanf("%f", &tab_wsp[0]) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
- while ('\n' != getchar());
- }
- printf("Podaj drugi wspolczynniki: ");
- while (scanf("%f", &tab_wsp[1]) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
- while ('\n' != getchar());
- }
- printf("Podaj trzeci wspolczynniki: ");
- while (scanf("%f", &tab_wsp[2]) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
- while ('\n' != getchar());
- }
- }
- void zaszumienie(float* wspol, int* a, int* b, float* tab_wynikowa, float* tab_zaszumiona, int rozmiar_wynikowej)
- {
- srand(time(NULL));
- for (int i = 0; i < rozmiar_wynikowej; i++)
- {
- tab_zaszumiona[i] = tab_wynikowa[i];
- }
- for (int i = 0; i < rozmiar_wynikowej; i++)
- {
- tab_zaszumiona[i] = tab_zaszumiona[i] * (((rand() % (*b + 1 - *a)) + *a) * 0.3);
- }
- }
- void zapis(float* tab_zaszumiona, int rozmiar_wynikowej, float* tab_wynikowa)
- {
- setlocale(LC_ALL, "polish_poland");
- FILE* plik;
- char nazwa[100];
- printf("Podaj nazwe pliku do którego chcesz zapisac dane:");
- scanf("%s", &nazwa);
- if ((plik = fopen(strcat(nazwa, ".csv"), "w")) == NULL)
- {
- system("CLS");
- printf("Bład odczytu pliku\nBrak pliku lub plik otwarty w innym programie\nZamknij plik i uruchom ponownie program\n");
- system("PAUSE");
- system("EXIT");
- }
- for (int i = 0; i < rozmiar_wynikowej; i++)
- {
- fprintf(plik, "%f;%f\n", tab_wynikowa[i], tab_zaszumiona[i]);
- }
- fclose(plik);
- }
- void pobieranie_rozmiaru_tabeli(int* tab_rozmiar)
- {
- printf("Podaj ile elementow ma wygenerowac funkcja: ");
- int rozmiar = 0;
- scanf("%d", &rozmiar);
- while (rozmiar <= 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n");
- scanf("%d", &rozmiar);
- //printf("Nieprawidlowe dane, sprobuj ponownie:\n ");
- while ('\n' != getchar());
- }
- *tab_rozmiar = rozmiar;
- }
- void odczyt()
- {
- float* tabArgumentow;
- float* tabWartosci;
- char nazwa[100];
- float x, y;
- int ilekomorekwpliku = 0;
- FILE* plik;
- printf("Podaj nazwe pliku z ktorego chcesz wczytac dane:");
- scanf("%s", &nazwa);
- if ((plik = fopen(strcat(nazwa, ".csv"), "r")) == NULL)
- {
- system("CLS");
- printf("Blad odczytu pliku\nBrak pliku lub plik otwarty w innym programie\nZamknij plik i uruchom ponownie program\n");
- system("PAUSE");
- system("EXIT");
- }
- while (feof(plik) == 0)
- {
- ilekomorekwpliku++;
- fscanf(plik, "%f;%f\n", &x, &y);
- }
- rewind(plik);
- if ((tabArgumentow = (float*)malloc(ilekomorekwpliku * sizeof(double))) == NULL)
- {
- printf("Blad odczytu tablicy argumentow\n");
- }
- if ((tabWartosci = (float*)malloc(ilekomorekwpliku * sizeof(float))) == NULL)
- {
- printf("Blad odczytu tablicy wartosci\n");
- }
- for (int i = 0; i < ilekomorekwpliku; i++)
- {
- fscanf(plik, "%f;%f\n", &x, &y);
- tabWartosci[i] = x;
- tabArgumentow[i] = y;
- }
- printf("Zostaly odczytane dane z %s\n", nazwa);
- for (int i = 0; i < ilekomorekwpliku; i++)
- {
- printf("%f ; %f\n", tabArgumentow[i], tabWartosci[i]);
- }
- free(tabWartosci);
- free(tabArgumentow);
- }
- void sortowanie(float* tab_zaszumiona, int rozmiar_tab)
- {
- int i, j;
- float pomocnicza;
- for (i = 0; i < rozmiar_tab - 1; i++)
- {
- for (j = 0; j < rozmiar_tab - 1; j++)
- {
- if (tab_zaszumiona[j] > tab_zaszumiona[j + 1])
- {
- pomocnicza = tab_zaszumiona[j + 1];
- tab_zaszumiona[j + 1] = tab_zaszumiona[j];
- tab_zaszumiona[j] = pomocnicza;
- }
- }
- }
- }
- void filterson(float* tab_zaszumiona, int rozmiar_wynikowej, float* tab_wynikowa)
- {
- int szerokoscokna = 5;
- int wybor1 = 0;
- float tab_pomocnicza[5];
- float* ptab_pomocnicza;
- ptab_pomocnicza = tab_pomocnicza;
- float* tab_przefiltrowana;
- tab_przefiltrowana = (float*)malloc(rozmiar_wynikowej * sizeof(float));
- tab_przefiltrowana[0] = tab_zaszumiona[0];
- tab_przefiltrowana[1] = tab_zaszumiona[1];
- tab_przefiltrowana[rozmiar_wynikowej - 2] = tab_zaszumiona[rozmiar_wynikowej - 2];
- tab_przefiltrowana[rozmiar_wynikowej - 1] = tab_zaszumiona[rozmiar_wynikowej - 1];
- for (int i = 0; i < rozmiar_wynikowej - 4; i++)
- {
- for (int j = 0; j < 5; j++)
- {
- tab_pomocnicza[j] = tab_zaszumiona[j + i];
- }
- sortowanie(ptab_pomocnicza, 5);
- tab_przefiltrowana[i + 2] = tab_pomocnicza[2];
- }
- printf("Czy chcesz zapisac odfiltrowany sygnal?\n1. Tak\n2. Nie\n");
- while (scanf("%d", &wybor1) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n");
- while ('\n' != getchar());
- }
- if (wybor1 == 1)
- {
- zapis(tab_przefiltrowana, rozmiar_wynikowej, tab_wynikowa);
- }
- }
- void filtersonsredniej(float* tab_zaszumiona, int rozmiar_wynikowej, float* tab_wynikowa)
- {
- float srednia = 0;
- float pomoc = 0;
- int szerokoscokna = 5;
- int wybor=0;
- float tab_pomocnicza[5];
- float* ptab_pomocnicza;
- ptab_pomocnicza = tab_pomocnicza;
- float* tab_przefiltrowana;
- tab_przefiltrowana = (float*)malloc(rozmiar_wynikowej * sizeof(float));
- tab_przefiltrowana[0] = tab_zaszumiona[0];
- tab_przefiltrowana[1] = tab_zaszumiona[1];
- tab_przefiltrowana[rozmiar_wynikowej - 2] = tab_zaszumiona[rozmiar_wynikowej - 2];
- tab_przefiltrowana[rozmiar_wynikowej - 1] = tab_zaszumiona[rozmiar_wynikowej - 1];
- for (int i = 0; i < rozmiar_wynikowej - 4; i++)
- {
- pomoc = 0;
- srednia = 0;
- for (int j = 0; j < 5; j++)
- {
- tab_pomocnicza[j] = tab_zaszumiona[j + i];
- pomoc = tab_pomocnicza[j] + pomoc;
- }
- srednia = pomoc * 0.2;
- tab_przefiltrowana[i + 2] = srednia;
- }
- printf("Czy chcesz zapisac odfiltrowany sygnal?\n1. Tak\n2. Nie\n");
- while (scanf("%d", &wybor) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n");
- while ('\n' != getchar());
- }
- if (wybor == 1)
- {
- zapis(tab_przefiltrowana, rozmiar_wynikowej, tab_wynikowa);
- }
- }
- int main()
- {
- int decyzja = 1;
- int decyzja2 = 1;
- printf("Witaj w programie filtrujacym zaszumiony sygnal funkcji.\n\n1. Wygeneruj funkcje\nWyjscie z programy- dowolny przycisk.\n");
- while (scanf("%d", &decyzja) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n");
- while ('\n' != getchar());
- }
- if (decyzja == 1)
- {
- system("cls");
- int a = 0;
- int* pd;
- pd = &a;
- int b = 0;
- int* kd;
- kd = &b;
- dziedzina(pd, kd);
- float wspol[3];
- float* pwspol;
- pwspol = wspol;
- wspolczynniki(pwspol, 3);
- int* tab_rozmiar;
- int rozmiar_wynikowej = 0;
- tab_rozmiar = &rozmiar_wynikowej;
- pobieranie_rozmiaru_tabeli(tab_rozmiar);
- float* tab_wynikowa;
- tab_wynikowa = (float*)malloc(rozmiar_wynikowej * sizeof(float));
- funkcja(wspol, pd, kd, tab_wynikowa, rozmiar_wynikowej);
- float* tab_zaszumiona;
- float* ptab_zaszumiona;
- tab_zaszumiona = (float*)malloc(rozmiar_wynikowej * sizeof(float));
- ptab_zaszumiona = tab_zaszumiona;
- printf("Funkcja wygenerowana pomyslnie\n");
- delay(2000);
- system("cls");
- do
- {
- 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");
- while (scanf("%d", &decyzja2) == 0)
- {
- printf("Nieprawidlowe dane, sprobuj ponownie:\n");
- while ('\n' != getchar());
- }
- switch (decyzja2)
- {
- system("cls");
- case 1:
- zaszumienie(wspol, pd, kd, tab_wynikowa, ptab_zaszumiona, rozmiar_wynikowej);
- printf("Funkcja zaszumiona pomyslnie.\n");
- delay(2000);
- system("cls");
- break;
- case 2:
- zapis(ptab_zaszumiona, rozmiar_wynikowej, tab_wynikowa);
- printf("Funkcja zapisana pomyslnie.\n");
- delay(2000);
- system("cls");
- break;
- case 3:
- odczyt();
- printf("Funkcja zostala odczytana z pliku.\n");
- delay(2000);
- system("cls");
- break;
- case 4:
- filterson(ptab_zaszumiona, rozmiar_wynikowej, tab_wynikowa);
- delay(2000);
- system("cls");
- break;
- case 5:
- filtersonsredniej(ptab_zaszumiona, rozmiar_wynikowej, tab_wynikowa);
- delay(2000);
- system("cls");
- break;
- case 6:
- return 0;
- break;
- default: printf("Nie ma takiej opcji w menun sprobuj ponownie.\n");
- delay(2000);
- system("cls");
- break;
- }
- } while (decyzja2 != 6);
- }
- else
- {
- system("cls");
- printf("Program zakonczyl dzialanie.\n");
- delay(2000);
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement