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