Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdlib.h>
- #include <math.h>
- #include <stdio.h>
- #include <locale.h>
- #define wprowadzane_dane 3
- void wczytaj(double* tablica_wspolczynnikow, double* po, double* ko, int* rozmiar);
- void przypisz_wartosci(double* tablica_wspolczynnikow, double poczatek, double koniec, double* tablica_wynikow, int rozmiar);
- void wyswietl_wyniki(double* tablica_wynikow, int rozmiar);
- void szum(double* tablica_szumu, double* tablica_wynikow, int rozmiar);
- int zapisywanie_CSV(double* tablica_wynikow, double* tablica_szumu, int rozmiar);
- int ile_miejsca();
- void odczyt_CSV(double* tablica_odczytana, double* szum_odczytany);
- void odszumianie_medianowe(double* szum_odczytany, int wielkosc);
- void odszumianie_srednia(double* szum_odczytany, int wielkosc);
- int main()
- {
- int rozmiar = 500;
- double* tablica_wspolczynnikow = (double*)malloc(wprowadzane_dane * sizeof(double)); // 0 -amplituda , 1- przesuniecie, 2-czestotliwosc//
- double* tablica_wynikow;
- double* tablica_szumu;
- double* tablica_odczytana;
- double* szum_odczytany;
- double* tablica_odszumiona;
- setlocale(LC_ALL, "polish_poland");
- double poczatek = 0;
- double koniec = 0;
- int wielkosc = 0;
- int a, c;
- char b;
- do
- {
- printf("*****MENU*****\n");
- printf("Co chcailbys zrobic?\n");
- printf("1.Wygeneruj funkcje\n");
- printf("2.Odczytaj zapisana funkcje\n");
- printf("3.Wyjscie z programu\n");
- scanf("%d", &a);
- switch (a)
- {
- case 1:
- wczytaj(tablica_wspolczynnikow, &poczatek, &koniec, &rozmiar); // funkcja wczytujaca parametry poczatkowe
- tablica_wynikow = (double*)malloc(rozmiar * sizeof(double));//malokacja potrzebnego rozmiaru
- tablica_szumu = (double*)calloc(rozmiar, sizeof(double));
- przypisz_wartosci(tablica_wspolczynnikow, poczatek, koniec, tablica_wynikow, rozmiar); // generacja funkcji
- do//zapezpieczenie wejscia
- {
- printf("Wyswietlic przypisane wartosci?\n");
- printf("Tak-1\nNie-2\n");
- b = getchar();
- system("cls");//czyszczenie konsoli
- } while ((b != '1') && (b != '2'));
- if (b == '1')
- {
- wyswietl_wyniki(tablica_wynikow, rozmiar);
- }
- printf("Chcesz zaszumic funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1) //jezeli scanf wczyta
- {
- if (b == 1)
- {
- szum(tablica_szumu, tablica_wynikow, rozmiar);
- printf("Funkcja zostala zaszumiona\n");
- printf("Wyswietlic zaszumiona funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if (b == 1)
- {
- wyswietl_wyniki(tablica_szumu, rozmiar);
- printf("Funkcja zostala zaszumiona\n");
- }
- }
- } while (b != 1 && b != 2);
- printf("Czy chcesz zapisac obie funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if ((zapisywanie_CSV(tablica_wynikow, tablica_szumu, rozmiar)) == 0)
- {
- printf("Zamknij plik!\n");
- exit(0);//blad pliku, komunikat i wyjscie
- }
- else
- {
- printf("Zapisano!\n");
- }
- }
- } while (b != 1 && b != 2);
- printf("Odszumic funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if (b == 1)
- {
- wielkosc = ile_miejsca();//rozmiar potrzebny
- printf("1.Filtr średniej ruchomej\n");
- printf("2.Filtr medianowy\n");
- scanf("%d", &b);
- if (b == 1)
- {
- odszumianie_srednia(tablica_szumu, wielkosc);
- printf("\n\n");
- }
- if (b == 2)
- {
- odszumianie_medianowe(tablica_szumu, wielkosc);
- }
- printf("Czy chcesz zapisac?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if ((zapisywanie_CSV(tablica_wynikow, tablica_szumu, rozmiar)) == 0)
- {
- printf("Zamknij plik!\n");
- exit(0);
- }
- else
- {
- printf("Zapisano!\n");
- }
- }
- } while (b != 1 && b != 2);
- }
- if (b == 2)
- {
- break;
- }
- }
- } while (b != 1 && b != 2);
- }
- if (b == 2)
- {
- break;
- }
- }
- break;
- } while (b != 1 && b != 2);
- if (b == 2)
- {
- printf("Czy chcesz zapisac funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if (b == 1)
- {
- if ((zapisywanie_CSV(tablica_wynikow, tablica_szumu, rozmiar) == 0))//sprawdza czy otworzyl plik
- {
- printf("Zamknij plik!!!\n");
- break;
- }
- else
- {
- printf("\nZapisane\n");
- }
- }
- }
- } while (b != 1 && b != 2);
- }
- break;
- case 2:
- wielkosc = ile_miejsca();
- if (wielkosc == 0)
- {
- exit(0);
- }
- tablica_odczytana = (double*)malloc(wielkosc * sizeof(double));
- szum_odczytany = (double*)calloc(wielkosc, sizeof(double));//ustawienie pamieci
- odczyt_CSV(tablica_odczytana, szum_odczytany);
- printf("\nOdszumic funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if (b == 1)
- {
- wielkosc = ile_miejsca();
- printf("1.Filtr średniej ruchomej\n");
- printf("2.Filtr medianowy\n");
- scanf("%d", &b);
- if (b == 1)
- {
- odszumianie_srednia(szum_odczytany, wielkosc);
- printf("\n\n");
- }
- if (b == 2)
- {
- odszumianie_medianowe(szum_odczytany, wielkosc);
- }
- }
- }
- } while (b != 1 && b != 2);
- printf("Czy chcesz zapisac obie funkcje?\n");
- printf("Tak-1\nNie-2\n");
- do
- {
- if (scanf("%d", &b) == 1)
- {
- if ((zapisywanie_CSV(tablica_odczytana, szum_odczytany, wielkosc)) == 0)
- {
- printf("Zamknij plik!\n");
- exit(0);
- }
- else
- {
- printf("Zapisano!\n");
- }
- }
- } while (b != 1 && b != 2);
- break;
- case 3:
- system("cls");
- exit(0);//wyjscie
- default:
- break;
- }
- } while (a != 3);
- free(&tablica_odszumiona);
- free(&tablica_wspolczynnikow);
- free(&tablica_odczytana);
- free(&tablica_wynikow);
- free(&tablica_szumu);
- }
- void wczytaj(double* tablica_wspolczynnikow, double* po, double* ko, int* rozmiar) //przypisanie wartosci i sprawdzenie poprawnosci
- {
- printf("Podaj amplitude: ");
- while (1)
- {
- /*do
- {
- printf("\nAmplituda musi byc wieksza od 0\n");
- printf("Podaj amplitude: ");
- scanf("%lf", &tablica_wspolczynnikow[0]);
- } while (*(tablica_wspolczynnikow) <= 0);*/
- while (scanf("%lf", &tablica_wspolczynnikow[0]) != 1)
- {
- int c;
- printf("Zla wartosc\n");
- while ((c = getchar()) != '\n' && c != EOF); //wyciągniecie znaków z bufora
- }
- if (*(tablica_wspolczynnikow) <= 0)
- {
- printf("Amplituda musi byc wieksza od 0!\n");
- }
- else
- break;
- }
- printf("Podaj przesuniecie: ");
- scanf("%lf", &tablica_wspolczynnikow[1]);
- printf("Podaj faze: ");
- scanf("%lf", &tablica_wspolczynnikow[2]);
- if (*(tablica_wspolczynnikow + 2) <= 0)
- {
- do
- {
- printf("\nFaza musi byc wieksza od 0\n");
- printf("Podaj faze: ");
- scanf("%lf", &tablica_wspolczynnikow[2]);
- } while (*(tablica_wspolczynnikow + 2) <= 0);
- }
- printf("Podaj liczbę elementów: ");
- while (1)
- {
- /*do
- {
- printf("\nRozmiar musi byc wieksza od 0\n");
- printf("Podaj rozmiar: ");
- scanf("%d", rozmiar);
- } while (*(rozmiar) <= 0);*/
- while (scanf("%d", rozmiar) != 1)
- {
- int c;
- printf("Zła wartosc!\n");
- while ((c = getchar()) != '\n' && c != EOF); //wyciągniecie znaków z bufora
- }
- if (*rozmiar < 10)
- {
- printf("Rozmiar musi byc conajmniej 10!\n");
- }
- else
- {
- break;
- }
- }
- do
- {
- printf("Podaj poczatek dziedziny: ");
- scanf("%lf", po);
- printf("Podaj koniec dziedziny: ");
- scanf("%lf", ko);
- if (*po > * ko)
- printf("Poczatek musi byc mniejszy niz koniec :)\n"); //kontorla poprawnego zakresu
- } while (*po > * ko);
- }
- void przypisz_wartosci(double* tablica_wspolczynnikow, double poczatek, double koniec, double* tablica_wynikow, int rozmiar)
- {
- int i = 0;
- double zakres = 0;
- zakres = fabs(poczatek - koniec); //okreslenie zakresu
- for (i; i < rozmiar; i++)
- {
- *tablica_wynikow++ = tablica_wspolczynnikow[0] * fabs(sin(poczatek * tablica_wspolczynnikow[2]) + tablica_wspolczynnikow[1]);//petla wyliczajaca wartosci
- poczatek += zakres / rozmiar;//skok funkcji
- }
- }
- void wyswietl_wyniki(double* tablica_wynikow, int rozmiar)
- {
- int i = 0;
- for (i; i < rozmiar; i++)
- {
- printf("Wartosc %d wynosi: %lf\n", i + 1, *tablica_wynikow++);
- }
- }
- void szum(double* tablica_szumu, double* tablica_wynikow, int rozmiar)
- {
- int ilosc = 0;
- int dlugosc = 0;
- int start = 0;
- int i = 0;
- int j = 0;
- int x = 0;
- int amplituda = 0;
- srand(time(NULL)); //konieczne do losowania roznych wartosci(pseudo)
- ilosc = (rand() % 9) + 1; //ilosc zaszumianych przedzialow
- dlugosc = (rand() % 15) + 2; // dlugosc zaszumianych przedzialow
- amplituda = 1 + rand() % 5; // losowanie amplitudy
- x = rand() % 3; // prawdopodobienstwo zaszumienia
- i = 0;
- for (i; i < ilosc; i++)
- {
- start = rand() % (rozmiar + 1 - dlugosc); // losowanie poczatku zaszumienia
- for (j; j < dlugosc; j++)
- {
- if ((x == 0) || (x == 2))
- tablica_szumu[start + j] = (tablica_wynikow[start + j] + amplituda) / 2;
- amplituda = 1 + rand() % 5; //losowanie nowej amplitudy
- x = rand() % 3; //losowanie nowego prawdopodobienstwa
- }
- j = 0;
- }
- for (i = 0; i < rozmiar; i++)
- {
- if (tablica_szumu[i] == 0)//jezeli tablica nie ma wartosci to wpisz tam wartosc z generacji funkcji
- {
- tablica_szumu[i] = tablica_wynikow[i]; //uzupelnienie tablicy
- }
- }
- }
- int zapisywanie_CSV(double* tablica_wynikow, double* tablica_szumu, int rozmiar)
- {
- FILE* plik;
- int i = 0;
- setlocale(LC_ALL, "polish_poland");//zamiana kropek na przecinki
- plik = fopen("tablice.csv", "w");
- if (plik == NULL)//czy plik sie otworzyl
- {
- perror("Tablice.csv");//komunikat dlaczego blad
- return 0;
- }
- for (i; i < rozmiar; i++)//zapis
- {
- fprintf(plik, "%lf;%lf\n", *tablica_wynikow++, *tablica_szumu++);
- }
- fclose(plik);
- return 1;
- }
- int ile_miejsca()//znajduje rozmiar potrzebnej tablicy
- {
- FILE* plik;
- int i = 0;
- int c = 0;
- double x = 0;
- char tablica[100]; //tablica pomocnicza do znalezienia rozmiaru
- plik = fopen("tablice.csv", "r");
- if (plik == NULL)
- {
- perror("Tablice.csv");//komunikat dlaczego blad
- return 0;
- }
- while (feof(plik) == 0)
- {
- fscanf(plik, "%s", tablica);
- i++;
- }
- c = i - 1;
- fclose(plik);
- return c;
- }
- void odczyt_CSV(double* tablica_odczytana, double* szum_odczytany)
- {
- FILE* plik;
- plik = fopen("tablice.csv", "r"); //plik do zapisu
- rewind(plik); //przewiniecie pliku
- int i = 0;
- printf("\n\nOdczytane wartości!!!\n");
- printf("Funkcja Szum");
- while (feof(plik) == 0)//dopoki odczytuje-nie jest puste
- {
- if ((fscanf(plik, "%lf ; %lf", (tablica_odczytana + i), (szum_odczytany + i)) == 2))
- {
- printf("\n %d.%lf %lf", i, tablica_odczytana[i], szum_odczytany[i]);
- }
- else
- break;
- i++;
- }
- if (feof(plik) != 0)
- printf("\nKoniec pliku\n");
- fclose(plik);
- }
- void odszumianie_medianowe(double* szum_odczytany, int wielkosc)
- {
- double a; // pomocnicza zmienna do przestawiania zmiennej
- double tablica[6]; //tablica pomocnicza do ustawienia zmiennych od najmniejszej do największej
- int i;
- int j;
- for (i = 0; i < wielkosc - 5; i++)
- {
- for (j = 0; j < 5; j++)
- {
- tablica[j] = *(szum_odczytany + i + j);//przepisanie wartosci
- }
- for (j = 0; j < 5; j++)
- {
- if (tablica[j] > tablica[j + 1])//sortowanie bombelkowe
- {
- a = tablica[j + 1];
- tablica[j + 1] = tablica[j];
- tablica[j] = a;
- }
- }
- *(szum_odczytany + i + 2) = tablica[2];//przypisanie wartosci
- }
- printf("Odszumiona funkcja:\n");
- for (j = 0; j < wielkosc; j++)
- {
- printf("%d.%lf\n", j + 1, *(szum_odczytany + j));//wyswietlenie
- }
- }
- void odszumianie_srednia(double* szum_odczytany, int wielkosc)
- {
- int i;
- int x = 0;
- double srednia;
- for (i = 1; i < (wielkosc - 1); i++)
- {
- srednia = 0;
- for (int j = 0; j < 3; j++)
- {
- srednia = srednia + *(szum_odczytany + i + j - 1);//sumuje trzy wyrazy obok siebie
- }
- *(szum_odczytany + x + 1) = srednia / 3;//wpisuje wartosc do srodkowego
- x++;
- }
- printf("\n");
- for (int j = 0; j < wielkosc; j++)
- {
- printf("%d.%lf\n", j, *(szum_odczytany + j));//wyswietlenie
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement