parent
2a4ba985d1
commit
6f83f9670a
@ -0,0 +1,81 @@ |
||||
Zadania domowe z zystemów budowania |
||||
=== |
||||
|
||||
Rozwiązanie zadania nr X, należy umieścić w katalogu `make/X` Waszego repozytorium Git-a. |
||||
Termin oddania rozwiązań: 25 października 2022. W każdym zadaniu można wybrać dowolny kompilator języka |
||||
C++ dostępny na `boss`ie. |
||||
|
||||
Zadanie 1. |
||||
--- |
||||
Napisz program `test.cc`, który będzie wypisywał na standardowe wyjście informację, czy został zbudowany |
||||
z flagą `-DDEBUG`. Stwórz plik `Makefile`, który będzie umożliwiał kompilację dwóch binarek: |
||||
1. `test`, która będzie kompilowana bez `-DDEBUG`, |
||||
2. `test-debug`, która będzie kompilowana z `-DDEBUG`. |
||||
|
||||
Wskazówka: https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html |
||||
|
||||
Zadanie 2. |
||||
--- |
||||
Napisz dwa programy komputerowe: |
||||
1. `smatch`, który wczytuje dwa napisy i stwierdza, czy pierwszy jest podsłowem drugiego; |
||||
1. `rotation`, który wczytuje dwa napisy i swierdza, czy są swoimi rotacjami cyklicznymi. |
||||
|
||||
Zarówno w pierwszym jak i drugim programie użyj algorytmu KMP, ale jego implementację umieść |
||||
w jednym, oddzielnym pliku. Wybierz swój ulubiony system budowania i go użyj do kompilowania |
||||
obu programów. |
||||
|
||||
Zadanie 3. |
||||
--- |
||||
|
||||
To zadanie polega na skompilowaniu i użyciu jednego z moich ulubionych programów komputerowych - `cbmc`. Znajdź jego |
||||
źródła na GitHubie, sklonuj repozytorium, skompiluj źródła na **bossie** korzystając z `CMake`, a następnie użyj tego programu, żeby |
||||
znaleźć wszystkie wartości `x` typu `int`, takie że `x == -x`. Wszystko to nagraj programem `script`, a trankypcję |
||||
sesji terminala umieść w pliku `cbmc.txt`. |
||||
|
||||
Wskazówki: |
||||
1. https://github.com/diffblue/cbmc/blob/develop/COMPILING.md |
||||
1. `man 1 script` |
||||
1. http://www.cprover.org/cprover-manual/cbmc/tutorial/ |
||||
1. Na bossie nie ma programu `mvn` (i chyba dobrze). Cóż zrobić w takiej sytuacji? |
||||
1. `cmbc` długo się kompiluje. Czy istnieje opcja zrównoleglająca kompilację, przez co trwa to krócej? |
||||
|
||||
Zadanie 4. |
||||
--- |
||||
|
||||
Napisz program, który będzie wykonywał proste operacje arytmetyczne na akumulatorze. W pierwszym wierszu wejścia |
||||
znajduje się jedna liczba całkowita - początkowa wartość akumulatora. W kolejnych wierszach znajdują się operacja |
||||
do wykonania oraz jej argument. Operacja to jedno z `+`, `-`, `*` lub `/`. Argument jest liczbą całkowitą. |
||||
Dzielenie zaokrągla do zera, a dzielenie przez zero nie wystąpi. Po wykonaniu każdej operacji należy wypisać |
||||
aktualną wartość akumulatora. |
||||
|
||||
Na przykład, dla wejścia |
||||
``` |
||||
42 |
||||
+ 5 |
||||
* 7 |
||||
- 521 |
||||
/ 4 |
||||
``` |
||||
|
||||
poprawnym wynikiem jest |
||||
``` |
||||
47 |
||||
-192 |
||||
-48 |
||||
``` |
||||
|
||||
Nie należy niczego zakładać na temat ilczby operacji do wykonania, ani wielkości liczb (czy to na wejściu, czy na |
||||
wyjściu). Można (a nawet należy) użyć biblioteki `gmp`. Wybierz jeden z systemów budowania programów napisanych w języku |
||||
`C++` (tnz. `make` albo `cmake`) i przygotuj konfigurację kompilującą Twój program (tzn. plik `Makefile` albo |
||||
`CMakeLists.txt`). Jeśli wybrałeś `make`, to do znalezienia poprawnych opcji kompilacji / linkowania użyj programu |
||||
`pkg-config` (nie chcę widzieć gołego `-lgmp` w Waszych `Makefile`'ach). Analogicznie, jeśli wybrałeś `cmake` użyj |
||||
`find_package` do znalezienia opcji kompilacji. Uwaga, to będzie trudniejsze, ale i satysfakcja większa. Program |
||||
wynikowy ma się nazywać `calc`. |
||||
|
||||
Wskazówki: |
||||
1. `man 1 pkg-config` |
||||
1. https://gmplib.org/ |
||||
1. nie ma potrzeby ręcznego kompilacji/instalowania `gmp`. Ta biblioteka jest już dostępna na `boss`ie (jak i na każdym |
||||
sensownym komputerze) |
||||
|
||||
:wq |
||||
Loading…
Reference in new issue