- password-check (8 XP + 4 XP bonus)
- vector-of-shared-pointers (5 XP)
- 02.06.2021 (środa) to ostatni dzień na zebranie bonusowych punktów za punktualność
- 3 XP wpadną Ci za każde zadanie dostarczone w terminie (razem 6 punktów)
- Playlista na YT odnośnie STLa - obejrzyj ile możesz :)
- Przypomnij sobie czym jest klasa i jak się ją pisze - obejrzyj wideo Mirosława Zelenta. UWAGA! Od 22 minuty możesz zaobserwować trochę złych praktyk :D Spróbuj odgadnąć jakich.
Tworzysz moduł do sprawdzania reguł haseł, który otrzymuje dane z formularza kontaktowego z front-endu. Cały moduł to zestaw kilku funkcji. Ich deklaracje mają znaleźć się w pliku nagłówkowym validation.hpp
, a implementacje w pliku źródłowym validation.cpp
. Twoje zadania to:
-
Zdefiniuj w pliku nagłówkowym nowy typ
ErrorCode
z możliwymi wartościami dla błędów przy ustalaniu nowego hasła. Jaki typ zastosujesz?- Ok
- PasswordNeedsAtLeastNineCharacters
- PasswordNeedsAtLeastOneNumber
- PasswordNeedsAtLeastOneSpecialCharacter
- PasswordNeedsAtLeastOneUppercaseLetter
- PasswordsDoNotMatch
- Napisz funkcję
getErrorMessage()
, która przyjmie zdefiniowany typ kodu błędu i zwróci stosowny komunikat jako napis. Taka konwersjaenum
a nastring
. - Napisz funkcję
doPasswordsMatch()
, która otrzyma dwa hasła i sprawdzi czy są identyczne. Powinna zwrócić odpowiednią wartość typu bool. - Napisz funkcję
checkPasswordRules()
, która przyjmie jedno hasło i losowo zwróci jeden z kodów błęduPasswordNeedsAtLeast*
lubOk
. - Napisz funkcję
checkPassword()
. Powinna ona przyjąć dwa hasła i używać funkcjidoPasswordsMatch()
w celu określenia czy hasła się zgadzają. W przypadku gdy się nie zgadzają ma ona zwrócić kod błęduPasswordsDoNotMatch
, a w przeciwnym przypadku powinna wywołać funkcjęcheckPasswordRules()
i zwrócić kod błędu zwrócony przez nią.
- Dla ambitnych (nieobowiązkowe) - zaimplementuj w funkcji
checkPasswordRules()
prawdziwą walidację pozostałych przypadków, które są podane jako kody błędów. Wskazówka - możesz wykorzystać funkcje z nagłówka oraz algorytmystd::any_of/std::none_of
. Jeśli to dla Ciebie za trudne, zrób to po swojemu 🙂 (4 XP)
int main() {
std::string password;
std::string repeatedPassword;
std::cout << "Set new password: ";
std::cin >> password;
std::cout << "Repeat password: ";
std::cin >> repeatedPassword;
auto result = checkPassword(password, repeatedPassword);
std::cout << getErrorMessage(result) << '\n';
return 0;
}
Napisz program, który zawierać będzie 5 funkcji. Deklaracje powinny znaleźć się w pliku nagłówkowym vectorFunctions.hpp
, a implementacje w pliku źródłowym vectorFunctions.cpp
. Stwórz te pliki.
std::vector<std::shared_ptr<int>> generate(int count)
która wygeneruje wektor współdzielonych wskaźników na liczby od0
docount - 1
void print()
która przyjmievector
i wypisze wszystkie elementy ze wskaźników wektoravoid add10()
która przyjmievector
i doda do każdej liczby10
void sub10()
która przyjmie stały wskaźnik (zwykły) naint
i odejmie od tego elementu10
void sub10()
Która przyjmie wektor współdzielonych wskaźników i wywoła dla każdego elementu powyższe przeciążenie funkcjisub10()
int main() {
auto vec = generate(10);
print(vec);
add10(vec);
print(vec);
sub10(vec);
print(vec);
}