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:
- //------------------------------------------------------------------------------
- //
- int fun(int p, int q)
- {
- int a, b, s;
- s = 0;
- if( p < 0 )
- goto a1;
- if( p == 0 )
- goto a2;
- if( p > 0 )
- goto a3;
- a1: a = -p;
- goto a4;
- a2: a = 0;
- goto a4;
- a3: a = +p;
- goto a4;
- a4: p = a;
- if( q < 0 )
- goto b1;
- if( q == 0 )
- goto b2;
- if( q > 0 )
- goto b3;
- b1: b = -q;
- goto b4;
- b2: b = 0;
- goto b4;
- b3: b = +q;
- goto b4;
- b4: q = b;
- c1: if( a == 0 )
- goto c2;
- p = a / 10;
- p = p * 10;
- p = a - p;
- s = s + p;
- a = a / 10;
- c2: a = a;
- if( b == 0 )
- goto c3;
- q = b / 10;
- q = q * 10;
- q = b - q;
- s = s - q;
- b = b / 10;
- c3: b = b;
- if( a )
- goto c1;
- if( b )
- goto c1;
- return
- s != 0;
- }
- //
- // Koniec funkcji fun
- ///////////////////////////////////////////////////////////////////////////////
- /*
- * Zestaw testów sprawdzającej działanie fun - tej części NIE ZMIENIAĆ!
- */
- BOOL test1() { return fun(111,111) == 0; }
- BOOL test2() { return fun(112,111) == 1; }
- BOOL test3() { return fun(0,1) == 1; }
- BOOL test4() { return fun(1,0) == 1; }
- BOOL test5() { return fun(0,0) == 0; }
- BOOL test6() { return fun(30,102) == 0; }
- BOOL test7() { return fun(-5,122) == 0; }
- /*
- * Testowanie funkcji fun - tej części też NIE ZMIENIAĆ!
- */
- int main(void)
- {
- BOOL ok = TRUE;
- BOOL (*test[])() = { test1, test2, test3, test4, test5, test6, test7 };
- 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