Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <locale.h>
- #include <math.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <time.h>
- void dziedzina(double *dmin, double *dmax);
- void parametry(double wsp[]);
- void generuj2(double wsp[], double dmin, double dmax, double **wyniki, int *wielkosc);
- void zamien(double *argument1, double *argument2);
- double sprawdz(void);
- int main(void)
- {
- double Dmin, Dmax;
- double tab[3];
- int rozmiar;
- double *wynikowa=NULL;
- int wybor;
- setlocale(LC_ALL, "polish");
- //printf("podaj liczbe próbek: ");
- //scanf("%d", &rozmiar);
- do
- {
- printf("\n\nMENU: \n\n");
- printf("\nWybierz opcje: \n1.Wpisz z konsoli dziedzine wielomianu\n2.Wpisz parametry wielomianu\n3.Generuj przebieg\n0.Zakoncz program\n\twybierz opcje:\n\n");
- wybor=sprawdz();
- while (wybor<0 || wybor>7)
- {
- printf("\nnie ma takiej opcji, wybierz jedna z menu: \n");
- wybor=sprawdz();
- }
- printf("\nwybrales opcje numer %d\n", wybor);
- switch(wybor)
- {
- case 1: dziedzina(&Dmin, &Dmax); break;
- case 2: parametry(tab); break;
- case 3: generuj2(tab, Dmin, Dmax, &wynikowa, &rozmiar); break;
- //case 4: zapisz(wynikowa, rozmiar, Dmin, Dmax); break;
- //case 5: szum(wynikowa, rozmiar); break;
- //case 6: odczytaj(wynikowa, rozmiar, &Dmin, &Dmax); break;
- //case 7: aproksymacja(wynikowa, rozmiar, Dmin, Dmax); break;
- }
- } while(wybor!=0);
- if (wybor==0)
- printf("\n\nKoniec programu\n");
- free(wynikowa);
- getch();
- return 0;
- }
- void dziedzina(double *dmin, double *dmax) /*funkcja pobieraj¹ca zakres dziedziny */
- {
- printf("podaj parametry okreslajace dziedzine: \n");
- *dmin=sprawdz();
- *dmax=sprawdz();
- while (*dmin>*dmax) /* pêtla sprawdzaj¹ca czy kolejnoœæ argumentów dziedziny nie wymaga zamiany */
- {
- zamien(dmin, dmax);
- printf("\npodales poczatek wiekszy niz koniec, wiec parametry dziedziny ulegly zamianie na wlasciwe\n ");
- }
- while (*dmin==*dmax) /*pêtla pilnuj¹ca, aby zbiór dziedziny nie by³ zbiorem pustym */
- {
- printf("\npoczatek dziedziny nie mo¿e byc równy koncowi! podaj jeszcze raz: \n");
- *dmin=sprawdz();
- *dmax=sprawdz();
- }
- printf("\nzakres Twojej dziedziny jest od %lf do %lf \n", *dmin, *dmax);
- }
- void parametry(double wsp[]) /*funkcja pobieraj¹ca wspó³czynniki wielomianu */
- {
- int i;
- for (i=0; i<3; i++)
- {
- printf("podaj %d wspólczynnik wielomianu: ", i+1);
- wsp[i]=sprawdz();
- }
- printf("\nTwoje wspólczynniki to a=%lf, b=%lf, c=%lf \n", wsp[0], wsp[1], wsp[2]);
- }
- void generuj2(double wsp[], double dmin, double dmax, double **wyniki, int *wielkosc) /* funkcja generuj¹ca przebieg wielomianu */
- {
- double x, delta=0;
- int i = 0;
- printf("podaj liczbe próbek: ");
- scanf("%d",wielkosc);
- *wyniki=(double*)malloc((*wielkosc)*sizeof(double));
- //*wyniki=(double*)calloc(*wielkosc,sizeof(double));
- if (*wyniki==NULL)
- {
- printf("\n\nblad pamieci!\n\n");
- }
- delta = (dmax - dmin)/(*wielkosc); /*delta oznacza ró¿nicê miêdzy dwoma kolejnymi argumentami dziedziny */
- printf("delta = %lf\n", delta);
- x = dmin;
- for(i=0; i<*wielkosc; i++)
- {
- *wyniki[i]=(wsp[0]*(x*x))+(wsp[1]*x)+wsp[2];
- printf("dla wartosci x = %1.2lf wartosc wielomianu wynosi: %1.2lf\n", x, *wyniki[i]);
- x = x + delta;
- }
- }
- void zamien(double *argument1, double *argument2) /* funkcja zamieniaj¹ca kolejnoœæ liczb okreœlaj¹cych zakres dziedziny w przyadku odwrotnego wprowadzenia ich przez u¿ytkownika */
- {
- double temp;
- temp=*argument1;
- *argument1=*argument2;
- *argument2=temp;
- }
- double sprawdz(void) /*funkcja zabezpieczaj¹ca przed wprowadzeniem przez u¿ytkownika b³êdnych danych */
- {
- double wyjscie;
- char wartosc[100]; /* tablica znakowa przechowuj¹ca pocz¹tkowe dane wprowadzone przez u¿ytkownika */
- int poprawne_dane=0;
- char *nieprzeczytane_dane;
- while(poprawne_dane==0)
- {
- scanf("%s", wartosc);
- /* Funkcja strtod konwertuje ³añcuch znaków na liczbê zmiennoprzecinkow¹. £añcuch znaków jest konwertowany do chwili napotkania znaku nie poddaj¹cego siê konwersji */
- wyjscie = strtod(wartosc, &nieprzeczytane_dane); /* jezeli wsyztskie dane byly poprawne to do 'nieprzeczytanych danych' zapisze siê tylko znak konca linii */
- if (*nieprzeczytane_dane != '\0')
- {
- printf("podales niewlasciwa wartosc, sprobuj jeszcze raz\n");
- poprawne_dane=0;
- }
- else
- {
- poprawne_dane=1; /* warunek koñcz¹cy pêtlê while */
- }
- }
- return wyjscie; /*funkcja zwraca wartosc typu double */
- }
Add Comment
Please, Sign In to add comment