Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.33 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. int fun(int p, int q)
  62. {
  63.     int a, b, s;
  64.     s = 0;
  65.     if( p <  0 )
  66.     goto a1;
  67.     if( p == 0 )
  68.     goto a2;
  69.     if( p >  0 )
  70.     goto a3;
  71. a1: a = -p;
  72.     goto a4;
  73. a2: a =  0;
  74.     goto a4;
  75. a3: a = +p;
  76.     goto a4;
  77. a4: p = a;
  78.     if( q <  0 )
  79.     goto b1;
  80.     if( q == 0 )
  81.     goto b2;
  82.     if( q >  0 )
  83.     goto b3;
  84. b1: b = -q;
  85.     goto b4;
  86. b2: b =  0;
  87.     goto b4;
  88. b3: b = +q;
  89.     goto b4;
  90. b4: q = b;
  91. c1: if( a == 0 )
  92.     goto c2;
  93.     p = a / 10;
  94.     p = p * 10;
  95.     p = a - p;
  96.     s = s + p;
  97.     a = a / 10;
  98. c2: a = a;
  99.     if( b == 0 )
  100.     goto c3;
  101.     q = b / 10;
  102.     q = q * 10;
  103.     q = b - q;
  104.     s = s - q;
  105.     b = b / 10;
  106. c3: b = b;
  107.     if( a )
  108.     goto c1;
  109.     if( b )
  110.     goto c1;
  111.     return
  112.     s != 0;
  113. }
  114. //
  115. // Koniec funkcji fun
  116. ///////////////////////////////////////////////////////////////////////////////
  117.  
  118.  
  119. /*
  120. * Zestaw testów sprawdzającej działanie fun - tej części NIE ZMIENIAĆ!
  121. */
  122. BOOL test1() { return fun(111,111) ==  0; }
  123. BOOL test2() { return fun(112,111) ==  1; }
  124. BOOL test3() { return fun(0,1)     ==  1; }
  125. BOOL test4() { return fun(1,0)     ==  1; }
  126. BOOL test5() { return fun(0,0)     ==  0; }
  127. BOOL test6() { return fun(30,102)  ==  0; }
  128. BOOL test7() { return fun(-5,122)  ==  0; }
  129.  
  130. /*
  131. * Testowanie funkcji fun - tej części też NIE ZMIENIAĆ!
  132. */
  133. int main(void)
  134. {
  135.     BOOL ok = TRUE;
  136.     BOOL (*test[])() = { test1, test2, test3, test4, test5, test6, test7 };
  137.     int n = sizeof(test)/sizeof(BOOL (*)());
  138.     int i;
  139.     BOOL result;
  140.  
  141.     setlocale(LC_ALL,"");
  142.  
  143.     for( i = 0; i < n; i++ )
  144.     {
  145.         printf("test %d ", i+1);
  146.         result = test[i]();
  147.         ok = ok && result;
  148.         printf("zakończył się %spowodzeniem\n",
  149.             result ? "" : "nie");
  150.     }
  151.     if( ok )
  152.     {
  153.         puts("\nwszystkie testy ukończone pozytywnie");
  154.     }
  155.     else
  156.     {
  157.         puts("\nNegatywny wynik testów - są błędy w fun");
  158.     }
  159.  
  160.     puts("\nnaciśnij enter");
  161.     getchar();
  162.  
  163.     return 0;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement