|
| 1 | +# Praca domowa |
| 2 | + |
| 3 | +___ |
| 4 | + |
| 5 | +## Zadanie 1 |
| 6 | + |
| 7 | +Zaimplementuj funkcję, której zadaniem ma być wykonywanie działań arytmetycznych na dwóch liczbach. |
| 8 | + |
| 9 | +Sygnatura - `std::string calculate(const std::string& command, int first, int second)`. |
| 10 | + |
| 11 | +### Parametry |
| 12 | + |
| 13 | +* `const std::string& command` - rodzaj działania. Jedno z `add`, `subtract`, `multiply`, `divide` |
| 14 | +* `int first` - pierwsza liczba |
| 15 | +* `int second` - druga liczba |
| 16 | + |
| 17 | +### Wartość zwracana |
| 18 | + |
| 19 | +* `std::string` - wynik działania jako tekst |
| 20 | + |
| 21 | +W przypadku podania błędnego parametru `command` funkcja powinna zwrócić napis "Invalid data". |
| 22 | + |
| 23 | +### Przykłady użycia |
| 24 | + |
| 25 | +```cpp |
| 26 | +auto result = calculate("add", 2, 3); // result = "5" |
| 27 | +result = calculate("multiply", 2, 3); // result = "6" |
| 28 | +result = calculate("hello", 2, 3); // result = "Invalid data" |
| 29 | +``` |
| 30 | + |
| 31 | +### Implementacja |
| 32 | + |
| 33 | +Zmodyfikuj jedynie plik `calculate.hpp`. Reszty plików nie modyfikuj, chyba że chcesz się po prostu pobawić tym projektem :) |
| 34 | + |
| 35 | +Plik `main.cpp` zawiera funkcję główną. Jeśli chcesz manualnie przetestować swój program po skompilowaniu go uruchom `./calculate` |
| 36 | + |
| 37 | +Plik `test.cpp` zawiera testy. Testy uruchamia się wpisując `ctest -V` po skompilowaniu. Przełącznik `-V` powoduje, że wyświetlane są informacje o testach, które przeszły lub nie. |
| 38 | + |
| 39 | +___ |
| 40 | + |
| 41 | +## Zadanie 2 - Fibonacci |
| 42 | + |
| 43 | +Zaimplementuj dwie funkcje. Obie mają liczyć n-tą liczbę [ciągu Fibonacciego](https://pl.wikipedia.org/wiki/Ciąg_Fibonacciego), ale na odmienne sposoby. |
| 44 | + |
| 45 | +* iteracyjnie (z użyciem pętli) |
| 46 | +* rekurencyjnie (funkcja ma wołać samą siebie) |
| 47 | + |
| 48 | +Funkcje muszą mieć określone sygnatury: |
| 49 | + |
| 50 | +```cpp |
| 51 | +int fibonacci_iterative(int sequence); |
| 52 | +int fibonacci_recursive(int sequence); |
| 53 | +``` |
| 54 | +
|
| 55 | +___ |
| 56 | +
|
| 57 | +## Dostarczenie zadań |
| 58 | +
|
| 59 | +1. Zrób fork repo [cpp-fundamentals](https://github.com/coders-school/cpp-fundamentals) |
| 60 | +2. Ściągnij swój fork - `git clone https://github.com/YOURNICK/cpp-fundamentals.git` |
| 61 | +3. Przejdź do katalogu cpp-fundamentals - `cd cpp-fundamentals` |
| 62 | +4. Utwórz gałąź o nazwie `calculate` na rozwiązanie zadania calculate - `git checkout -b calculate` |
| 63 | +5. Przejdź do katalogu module1/homework/calculate - `cd module1/homework/calculate` |
| 64 | +6. Tutaj znajduje się szkielet programu, który musisz wypełnić. Szkielet programu zawiera już testy, które sprawdzą, czy Twoja implementacja jest poprawna. Zanim rozpoczniesz implementację wpisz następujące zaklęcia: |
| 65 | +
|
| 66 | +```bash |
| 67 | +mkdir build # tworzy katalog build |
| 68 | +cd build # przechodzi do katalogu build |
| 69 | +cmake .. # generuje system budowania wg przepisu z pliku ../CMakeLists.txt |
| 70 | +make # kompiluje |
| 71 | +ctest -V # odpala testy |
| 72 | +``` |
| 73 | + |
| 74 | +7. Zaimplementuj funkcjonalność (najlepiej po kawałku, np. zacznij od samego dodawania) |
| 75 | +8. Sprawdź, czy implementacja przechodzi testy - `make` (kompilacja) oraz `ctest -V` (uruchomienie testów) |
| 76 | +9. Zrób commit z opisem działającej funkcjonalności - `git commit -am"adding works"` |
| 77 | +10. Wróć do punktu 7 i zaimplementuj kolejny kawałek. Jeśli rozwiązanie przechodzi wszystkie testy przejdź do kolejnego punktu |
| 78 | +11. Wypchnij zmiany do swojego forka - `git push origin calculate` |
| 79 | +12. Wyklikaj Pull Request na GitHubie. |
| 80 | +13. Poczekaj chwilę na raport Continuous Integration (CI), aby sprawdzić, czy rozwiązanie kompiluje się i przechodzi testy także na GitHubie. |
| 81 | +14. Jeśli jest ✅ - brawo, rozwiązanie jest poprawne. Jeśli jest ❌ kliknij na niego i sprawdź opis błędu. Popraw go (punkty 7-11) i poczekaj na kolejny raport CI. |
| 82 | + |
| 83 | +___ |
| 84 | + |
| 85 | +## Dostarczenie kolejnych zadań |
| 86 | + |
| 87 | +Najpierw wróć na gałąź główną - `git checkout master` i postępuj od kroku 4 dla kolejnego zadania (stworzenie nowej gałęzi o innej nazwie) |
| 88 | + |
| 89 | +Możesz zaobserwować, że przełączenie się na inną gałąź spowodowało, że nie masz rozwiązania pierwszego zadania. Spokojnie, jest ono po prostu na innej gałęzi. Możesz do niego wrócić przechodząc na gałąź tego zadania - `git checkout nazwa`. |
0 commit comments