You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.4 KiB
81 lines
3.4 KiB
Zadania domowe z systemó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++` (tzn. `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 |