3.4 KiB
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 bossie.
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:
test, która będzie kompilowana bez-DDEBUG,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:
smatch, który wczytuje dwa napisy i stwierdza, czy pierwszy jest podsłowem drugiego;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:
- https://github.com/diffblue/cbmc/blob/develop/COMPILING.md
man 1 script- http://www.cprover.org/cprover-manual/cbmc/tutorial/
- Na bossie nie ma programu
mvn(i chyba dobrze). Cóż zrobić w takiej sytuacji? cmbcdł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:
man 1 pkg-config- https://gmplib.org/
- nie ma potrzeby ręcznego kompilacji/instalowania
gmp. Ta biblioteka jest już dostępna nabossie (jak i na każdym sensownym komputerze)
:wq