Guest User

Untitled

a guest
Feb 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <math.h>
  5. #include <stdlib.h>
  6. #include <conio.h>
  7. #include <time.h>
  8.  
  9. void dziedzina(double *dmin, double *dmax);
  10. void parametry(double wsp[]);
  11. void generuj2(double wsp[], double dmin, double dmax, double **wyniki, int *wielkosc);
  12.  
  13. void zamien(double *argument1, double *argument2);
  14. double sprawdz(void);
  15.  
  16.  
  17. int main(void)
  18. {
  19. double Dmin, Dmax;
  20. double tab[3];
  21. int rozmiar;
  22. double *wynikowa=NULL;
  23. int wybor;
  24.  
  25. setlocale(LC_ALL, "polish");
  26. //printf("podaj liczbe próbek: ");
  27. //scanf("%d", &rozmiar);
  28.  
  29. do
  30. {
  31. printf("\n\nMENU: \n\n");
  32. printf("\nWybierz opcje: \n1.Wpisz z konsoli dziedzine wielomianu\n2.Wpisz parametry wielomianu\n3.Generuj przebieg\n0.Zakoncz program\n\twybierz opcje:\n\n");
  33. wybor=sprawdz();
  34. while (wybor<0 || wybor>7)
  35. {
  36. printf("\nnie ma takiej opcji, wybierz jedna z menu: \n");
  37. wybor=sprawdz();
  38. }
  39. printf("\nwybrales opcje numer %d\n", wybor);
  40.  
  41. switch(wybor)
  42. {
  43. case 1: dziedzina(&Dmin, &Dmax); break;
  44. case 2: parametry(tab); break;
  45. case 3: generuj2(tab, Dmin, Dmax, &wynikowa, &rozmiar); break;
  46. //case 4: zapisz(wynikowa, rozmiar, Dmin, Dmax); break;
  47. //case 5: szum(wynikowa, rozmiar); break;
  48. //case 6: odczytaj(wynikowa, rozmiar, &Dmin, &Dmax); break;
  49. //case 7: aproksymacja(wynikowa, rozmiar, Dmin, Dmax); break;
  50.  
  51. }
  52. } while(wybor!=0);
  53. if (wybor==0)
  54. printf("\n\nKoniec programu\n");
  55.  
  56. free(wynikowa);
  57. getch();
  58. return 0;
  59. }
  60.  
  61.  
  62.  
  63. void dziedzina(double *dmin, double *dmax) /*funkcja pobieraj¹ca zakres dziedziny */
  64. {
  65. printf("podaj parametry okreslajace dziedzine: \n");
  66. *dmin=sprawdz();
  67. *dmax=sprawdz();
  68. while (*dmin>*dmax) /* pêtla sprawdzaj¹ca czy kolejnoœæ argumentów dziedziny nie wymaga zamiany */
  69. {
  70. zamien(dmin, dmax);
  71. printf("\npodales poczatek wiekszy niz koniec, wiec parametry dziedziny ulegly zamianie na wlasciwe\n ");
  72. }
  73. while (*dmin==*dmax) /*pêtla pilnuj¹ca, aby zbiór dziedziny nie by³ zbiorem pustym */
  74. {
  75. printf("\npoczatek dziedziny nie mo¿e byc równy koncowi! podaj jeszcze raz: \n");
  76. *dmin=sprawdz();
  77. *dmax=sprawdz();
  78. }
  79. printf("\nzakres Twojej dziedziny jest od %lf do %lf \n", *dmin, *dmax);
  80. }
  81.  
  82. void parametry(double wsp[]) /*funkcja pobieraj¹ca wspó³czynniki wielomianu */
  83. {
  84. int i;
  85. for (i=0; i<3; i++)
  86. {
  87. printf("podaj %d wspólczynnik wielomianu: ", i+1);
  88. wsp[i]=sprawdz();
  89. }
  90. printf("\nTwoje wspólczynniki to a=%lf, b=%lf, c=%lf \n", wsp[0], wsp[1], wsp[2]);
  91. }
  92.  
  93. void generuj2(double wsp[], double dmin, double dmax, double **wyniki, int *wielkosc) /* funkcja generuj¹ca przebieg wielomianu */
  94. {
  95. double x, delta=0;
  96. int i = 0;
  97. printf("podaj liczbe próbek: ");
  98. scanf("%d",wielkosc);
  99. *wyniki=(double*)malloc((*wielkosc)*sizeof(double));
  100. //*wyniki=(double*)calloc(*wielkosc,sizeof(double));
  101. if (*wyniki==NULL)
  102. {
  103. printf("\n\nblad pamieci!\n\n");
  104.  
  105. }
  106.  
  107. delta = (dmax - dmin)/(*wielkosc); /*delta oznacza ró¿nicê miêdzy dwoma kolejnymi argumentami dziedziny */
  108. printf("delta = %lf\n", delta);
  109.  
  110. x = dmin;
  111.  
  112. for(i=0; i<*wielkosc; i++)
  113. {
  114. *wyniki[i]=(wsp[0]*(x*x))+(wsp[1]*x)+wsp[2];
  115. printf("dla wartosci x = %1.2lf wartosc wielomianu wynosi: %1.2lf\n", x, *wyniki[i]);
  116. x = x + delta;
  117. }
  118. }
  119.  
  120.  
  121. void zamien(double *argument1, double *argument2) /* funkcja zamieniaj¹ca kolejnoœæ liczb okreœlaj¹cych zakres dziedziny w przyadku odwrotnego wprowadzenia ich przez u¿ytkownika */
  122. {
  123. double temp;
  124. temp=*argument1;
  125. *argument1=*argument2;
  126. *argument2=temp;
  127. }
  128.  
  129. double sprawdz(void) /*funkcja zabezpieczaj¹ca przed wprowadzeniem przez u¿ytkownika b³êdnych danych */
  130. {
  131. double wyjscie;
  132. char wartosc[100]; /* tablica znakowa przechowuj¹ca pocz¹tkowe dane wprowadzone przez u¿ytkownika */
  133. int poprawne_dane=0;
  134. char *nieprzeczytane_dane;
  135.  
  136. while(poprawne_dane==0)
  137. {
  138. scanf("%s", wartosc);
  139. /* 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 */
  140. wyjscie = strtod(wartosc, &nieprzeczytane_dane); /* jezeli wsyztskie dane byly poprawne to do 'nieprzeczytanych danych' zapisze siê tylko znak konca linii */
  141. if (*nieprzeczytane_dane != '\0')
  142. {
  143. printf("podales niewlasciwa wartosc, sprobuj jeszcze raz\n");
  144. poprawne_dane=0;
  145. }
  146. else
  147. {
  148. poprawne_dane=1; /* warunek koñcz¹cy pêtlê while */
  149. }
  150. }
  151. return wyjscie; /*funkcja zwraca wartosc typu double */
  152. }
Add Comment
Please, Sign In to add comment