Karol Farbiś 4 years ago
parent 2a4ba985d1
commit 6f83f9670a
  1. 81
      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
Loading…
Cancel
Save