//zalaczanie bibliotek #define _CRT_SECURE_NO_WARNINGS #include #include #include //deklaracja struktury struct sygnal { double amp, fs, ts, *taby, *tabx; int fp, lp; }; //prototypy funkcji double szum(); void wykres(int, double*, double*, char*); double funkcja (double, double); void zamien (double*, double*); void sortuj(int); void odszum(double*, int t, int, int); int main () { //deklaracje zmiennych struct sygnal s; char rs; int i, a, t; double T, tm, tn; int o=0; //program działa w petli, dopoki uzytkownik nie zdecyduje o zakonczeniu dzialania while(1) { s.amp=0; s.fp=0; s.ts=0; s.fs=0; //uzytkownik wybiera sygnal badz konczy dzialanie programu printf("Wybierz rodzaj sygnal do narysowania: \n a - sygnal nr 10;\n b - sygnal nr 15\n x - zakoncz dzialanie programu\n\n "); scanf (" %c",&rs); printf("\n"); //warunek wyjścia z pętli if(rs=='x') break; //pobranie wartosci zmiennych od uzytkownika printf ("Podaj amplitude\n"); scanf ("%lf", &s.amp); printf ("Podaj czestotliwosc probkowania\n"); scanf ("%d", &s.fp); printf ("Podaj czas sygnalu\n"); scanf ("%lf", &s.ts); printf ("Podaj czestotliwosc sygnalu\n"); scanf ("%lf", &s.fs); printf (" amp=%lf\n fp=%d\n fs=%lf\n ts=%lf\n\n",s.amp, s.fp, s.fs, s.ts); //obliczanie potrzebnych wartosci s.lp=(int)s.ts*s.fp+1; T=1/s.fs; // okres sygnału, upraszcza zapis a=s.amp*s.fs*4;// współczynik kierunkowy prostej będącej fragmentem sygnału //dynamiczna allokacja pamięci s.tabx=(double*)malloc(s.lp*sizeof(double)); s.taby=(double*)malloc(s.lp*sizeof(double)); //pentla zapisujaca wartosci argumentow do tablicy for (i=0; i=0+(T*o)) && (s.tabx[i]<(T/4)+(T*o))) { //wywołanie funkcji liczącej wartości dla argumentów z tabx i zapisującej je w taby printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]=funkcja(a, (s.tabx[i]-(T*o)))); } if ((s.tabx[i]>=(T/4)+(T*o)) && (s.tabx[i]<(T/2+T*o))) { printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]=(-s.amp)); } if ((s.tabx[i]>=(T/2)+(T*o)) && (s.tabx[i]<(3*T/4)+(T*o))) { printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]=funkcja(a, (s.tabx[i]-(T/2)-(T*o)))); } if ((s.tabx[i]>=(3*T/4)+(T*o)) && (s.tabx[i]<(7*T/8)+(T*o))) { printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]=(2*funkcja((-a), (s.tabx[i]-(3*T/4)-T*o)))); } if ((s.tabx[i]>=(7*T/8)+(T*o)) && (s.tabx[i]<=(T+T*o))) { printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]=(2*funkcja(a, (s.tabx[i]-T-T*o)))); } } } printf("\n\n"); break; case 'b': for (o=0; o<=(s.ts*s.fs); o++) { for (i=0; i=(0+T*o) && s.tabx[i]<((T/2)+T*o)) { printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]=(funkcja((a/2), (s.tabx[i]-T*o)))); } if (s.tabx[i]>=((T/2)+T*o) && s.tabx[i]<=(T*(o+1))) { s.taby[i]=s.amp*(-sin((s.tabx[i]-T*o-T/2)*3.14*2/T)); printf("y(%lf) = %lf\n", s.tabx[i], s.taby[i]); } } } printf("\n\n"); break ; } printf (" amp=%lf\n fp=%d\n fs=%lf\n ts=%lf\n\n",s.amp, s.fp, s.fs, s.ts); //wywołanie funkcji rysującej wykres wykres(s.lp, s.tabx, s.taby,"wykres.html"); printf("\n\n"); //petla podczas ktorej do wartosci taby[i] dodawana jest losowa wartosc, zaszumia wykres for(i=0; itx[i+1]) { zamien (&tx[i], &tx[i+1]); } } } } //funkcja odzszumiajaca wykres void odszum (double *ty, int t, int lp, int fp) { double *ntx, *nty, *sty; int i,j; //allokacja dodatkowych tablic ntx=(double*)malloc((lp-t+1)*sizeof(double)); nty=(double*)malloc((lp-t+1)*sizeof(double)); sty=(double*)malloc(t*sizeof(double)); /*petle, w których do tablicy sty wpisywanych jest, w kazdym przebiegu zewnetrzenej petli, t-kolejnych wartosci z tablicy ty, a mediana z nich jest zapisywana po kolei do tabeli nty*/ for (i=0; i<(lp-t+1); i++) { for (j=0; j\n"); fprintf(fp,"\n"); fprintf(fp,"\n"); fprintf(fp,"\n"); fprintf(fp,"\n"); fprintf(fp,"\n"); fprintf(fp,"
\n"); fprintf(fp,"\n"); fprintf(fp,"\n"); fclose(fp); system(nazwa); }