From 6f83f9670a3bc7e610fcac0d1b84330ab0944fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Farbi=C5=9B?= Date: Tue, 4 Oct 2022 20:23:54 +0200 Subject: [PATCH] make --- make.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 make.md diff --git a/make.md b/make.md new file mode 100644 index 0000000..bc06172 --- /dev/null +++ b/make.md @@ -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 \ No newline at end of file