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.
 
zadania/make.md

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 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:

  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;
  2. 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
  2. man 1 script
  3. http://www.cprover.org/cprover-manual/cbmc/tutorial/
  4. Na bossie nie ma programu mvn (i chyba dobrze). Cóż zrobić w takiej sytuacji?
  5. 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
  2. https://gmplib.org/
  3. nie ma potrzeby ręcznego kompilacji/instalowania gmp. Ta biblioteka jest już dostępna na bossie (jak i na każdym sensownym komputerze)

:wq