Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*******************************************************************************
- *
- * Sprawdzian umiejętności programowania: programowanie strukturalne.
- *
- * Rozwiązując ten test masz zmienić treść definicji funkcji fun. Wszystkie pozo-
- * stałe fragmenty programu muszą pozostać i to bez jakichkolwiek zmian. Funkcja
- * fun jest napisana przy użyciu instrukcji skoku goto, niepotrzebnie zagmatwana.
- * Dlatego masz ją napisać bez instrukcji goto, w przejrzystym stylu, stosując
- * wcięcia (pomoże ci w tym polecenie "format selection" z menu "edit" środowiska
- * Microsoft Visual Studio) i odpowiednie komentarze.
- *
- * Negatywnie będą oceniane m.i. te prace, w przypadku których:
- *
- * 1. programu nie da się uruchomić;
- * 2. w treści funkcji fun pozostanie choćby jedna instrukcja goto;
- * 3. funkcja fun będzie dawać niepoprawne wyniki;
- * 4. praca będzie niepodpisana;
- * 5. wprowadzone będą zmiany w tekście programu poza funkcją fun.
- *
- * UWAGA: testy sprawdzają funkcję fun tylko dla niewielu wartości parametrów.
- * Jednak funkcja fun po usunięciu goto i innych poprawkach ma działać tak samo
- * jak poprzednio dla WSZYSTKICH wartości parametrów. Jeżeli np. funkcja fun
- * zwraca wartości 1 dla liczb nieparzystych i 2 dla parzystych, to testy mogły
- * sprawdzać to dla wartości argumentów 1, 2, 3. I choć można napisać funkcję
- *
- * int fun(int n)
- * {
- * if( n == 1 || n == 3 ) return 1;
- * if( n == 2 ) retrun 2;
- * }
- *
- * która przechodzi pozytywnie testy, to tego rodzaju rozwiązania będą oceniane
- * negatywnie, bo tak napisana funkcja fun jedynie "oszukuje test" - a nie jest
- * refaktoryzacją przedstawionego problemu.
- *
- *******************************************************************************/
- /*
- * Definicje i pliki nagłówkowe potrzebne do działania programu
- */
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <locale.h>
- #define BOOL int
- #define TRUE 1
- #define FALSE 0
- ////////////////////////////////////////////////////////////////////////////////
- // Funkcja fun
- //
- // UWAGA: WPISZ IMIĘ, NAZWISKO, NUMER GRUPY i DATĘ.
- //
- // Imię:
- // Nazwisko:
- // Grupa:
- // Data:
- //------------------------------------------------------------------------------
- //
- double fun(unsigned int d)
- {
- static double real;
- double fact,here;
- volatile double value,add;
- register signed int n = 999 + 1;
- back:
- if( d > 90 ) d = 0;
- if( d > 360 ) d = d - 360;
- else
- goto next;
- goto back;
- next:;
- real = d * 3.1415926535897932384626;
- real = real / 3;
- real = real / 3.0;
- real /= 2.0;
- real /= 5.0;
- real /= 2.0;
- value = real;
- add = value;
- fact = 1.0;
- here = 1.0;
- ups:
- if (n > 0) goto fun;
- if (n == 0) goto nofun;
- if (n < 0) goto nomorefun;
- fun:
- here = here + 1.0;
- fact = fact * here;
- here = here + 1.0;
- fact = fact * here;
- value = 0.0 - value * real * real;
- add = add + value / fact;
- n--;
- goto ups;
- nofun: goto nomorefun;
- nomorefun: goto willreturn;
- willreturn: return add;
- }
- //
- // Koniec funkcji fun
- ///////////////////////////////////////////////////////////////////////////////
- /*
- * Zestaw testów sprawdzającej działanie fun - tej części NIE ZMIENIAĆ!
- */
- BOOL eq(double a, double b)
- {
- const double eps = 0.000001;
- return fabs(a - b) < eps;
- }
- BOOL test1() { return eq(fun( 0), 0. ); }
- BOOL test2() { return eq(fun( 1), 0.01745240643728352); }
- BOOL test3() { return eq(fun( 10), 0.1736481776669303 ); }
- BOOL test4() { return eq(fun( 30), 0.5 ); }
- BOOL test5() { return eq(fun( 60), 0.8660254037844385 ); }
- BOOL test6() { return eq(fun(1000), 0.); }
- /*
- * Testowanie funkcji fun - tej części też NIE ZMIENIAĆ!
- */
- int main(void)
- {
- BOOL ok = TRUE;
- BOOL (*test[])() = { test1, test2, test3, test4, test5, test6 };
- int n = sizeof(test)/sizeof(BOOL (*)());
- int i;
- BOOL result;
- setlocale(LC_ALL,"");
- for( i = 0; i < n; i++ )
- {
- printf("test %d ", i+1);
- result = test[i]();
- ok = ok && result;
- printf("zakończył się %spowodzeniem\n",
- result ? "" : "nie");
- }
- if( ok )
- {
- puts("\nwszystkie testy ukończone pozytywnie");
- }
- else
- {
- puts("\nNegatywny wynik testów - są błędy w fun");
- }
- puts("\nnaciśnij enter");
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement