Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. /*******************************************************************************
  2. *
  3. * Sprawdzian umiejętności programowania: programowanie strukturalne.
  4. *
  5. * Rozwiązując ten test masz zmienić treść definicji funkcji fun. Wszystkie pozo-
  6. * stałe fragmenty programu muszą pozostać i to bez jakichkolwiek zmian. Funkcja
  7. * fun jest napisana przy użyciu instrukcji skoku goto, niepotrzebnie zagmatwana.
  8. * Dlatego masz ją napisać bez instrukcji goto, w przejrzystym stylu, stosując
  9. * wcięcia (pomoże ci w tym polecenie "format selection" z menu "edit" środowiska
  10. * Microsoft Visual Studio) i odpowiednie komentarze.
  11. *
  12. * Negatywnie będą oceniane m.i. te prace, w przypadku których:
  13. *
  14. * 1. programu nie da się uruchomić;
  15. * 2. w treści funkcji fun pozostanie choćby jedna instrukcja goto;
  16. * 3. funkcja fun będzie dawać niepoprawne wyniki;
  17. * 4. praca będzie niepodpisana;
  18. * 5. wprowadzone będą zmiany w tekście programu poza funkcją fun.
  19. *
  20. * UWAGA: testy sprawdzają funkcję fun tylko dla niewielu wartości parametrów.
  21. * Jednak funkcja fun po usunięciu goto i innych poprawkach ma działać tak samo
  22. * jak poprzednio dla WSZYSTKICH wartości parametrów. Jeżeli np. funkcja fun
  23. * zwraca wartości 1 dla liczb nieparzystych i 2 dla parzystych, to testy mogły
  24. * sprawdzać to dla wartości argumentów 1, 2, 3. I choć można napisać funkcję
  25. *
  26. * int fun(int n)
  27. * {
  28. * if( n == 1 || n == 3 ) return 1;
  29. * if( n == 2 ) retrun 2;
  30. * }
  31. *
  32. * która przechodzi pozytywnie testy, to tego rodzaju rozwiązania będą oceniane
  33. * negatywnie, bo tak napisana funkcja fun jedynie "oszukuje test" - a nie jest
  34. * refaktoryzacją przedstawionego problemu.
  35. *
  36. *******************************************************************************/
  37. /*
  38. * Definicje i pliki nagłówkowe potrzebne do działania programu
  39. */
  40. #define _CRT_SECURE_NO_WARNINGS
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43. #include <math.h>
  44. #include <locale.h>
  45.  
  46. #define BOOL int
  47. #define TRUE 1
  48. #define FALSE 0
  49.  
  50. ////////////////////////////////////////////////////////////////////////////////
  51. // Funkcja fun
  52. //
  53. // UWAGA: WPISZ IMIĘ, NAZWISKO, NUMER GRUPY i DATĘ.
  54. //
  55. // Imię:
  56. // Nazwisko:
  57. // Grupa:
  58. // Data:
  59. //------------------------------------------------------------------------------
  60. //
  61. double fun(unsigned int d)
  62. {
  63. static double real;
  64. double fact,here;
  65. volatile double value,add;
  66. register signed int n = 999 + 1;
  67.  
  68.  
  69. back:
  70. if( d > 90 ) d = 0;
  71. if( d > 360 ) d = d - 360;
  72. else
  73. goto next;
  74. goto back;
  75. next:;
  76.  
  77. real = d * 3.1415926535897932384626;
  78. real = real / 3;
  79. real = real / 3.0;
  80. real /= 2.0;
  81. real /= 5.0;
  82. real /= 2.0;
  83.  
  84. value = real;
  85. add = value;
  86. fact = 1.0;
  87. here = 1.0;
  88. ups:
  89. if (n > 0) goto fun;
  90. if (n == 0) goto nofun;
  91. if (n < 0) goto nomorefun;
  92.  
  93. fun:
  94.  
  95. here = here + 1.0;
  96. fact = fact * here;
  97. here = here + 1.0;
  98. fact = fact * here;
  99. value = 0.0 - value * real * real;
  100.  
  101. add = add + value / fact;
  102. n--;
  103.  
  104. goto ups;
  105.  
  106. nofun: goto nomorefun;
  107. nomorefun: goto willreturn;
  108. willreturn: return add;
  109.  
  110. }
  111. //
  112. // Koniec funkcji fun
  113. ///////////////////////////////////////////////////////////////////////////////
  114.  
  115.  
  116. /*
  117. * Zestaw testów sprawdzającej działanie fun - tej części NIE ZMIENIAĆ!
  118. */
  119. BOOL eq(double a, double b)
  120. {
  121. const double eps = 0.000001;
  122. return fabs(a - b) < eps;
  123. }
  124. BOOL test1() { return eq(fun( 0), 0. ); }
  125. BOOL test2() { return eq(fun( 1), 0.01745240643728352); }
  126. BOOL test3() { return eq(fun( 10), 0.1736481776669303 ); }
  127. BOOL test4() { return eq(fun( 30), 0.5 ); }
  128. BOOL test5() { return eq(fun( 60), 0.8660254037844385 ); }
  129. BOOL test6() { return eq(fun(1000), 0.); }
  130.  
  131. /*
  132. * Testowanie funkcji fun - tej części też NIE ZMIENIAĆ!
  133. */
  134. int main(void)
  135. {
  136. BOOL ok = TRUE;
  137. BOOL (*test[])() = { test1, test2, test3, test4, test5, test6 };
  138. int n = sizeof(test)/sizeof(BOOL (*)());
  139. int i;
  140. BOOL result;
  141.  
  142. setlocale(LC_ALL,"");
  143.  
  144. for( i = 0; i < n; i++ )
  145. {
  146. printf("test %d ", i+1);
  147. result = test[i]();
  148. ok = ok && result;
  149. printf("zakończył się %spowodzeniem\n",
  150. result ? "" : "nie");
  151. }
  152. if( ok )
  153. {
  154. puts("\nwszystkie testy ukończone pozytywnie");
  155. }
  156. else
  157. {
  158. puts("\nNegatywny wynik testów - są błędy w fun");
  159. }
  160.  
  161. puts("\nnaciśnij enter");
  162. getchar();
  163.  
  164. return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement