Zadanie oceniane 1 #
Podstawowe elementy biblioteki standardowej #
W tym zadaniu stworzysz prosty program w C++ z użyciem klas vector i string oraz strumieni cout i cin z biblioteki standardowej.
Sklonuj repozytorium zgodnie z instrukcją z laboratorium wprowadzającego.
Po wykonaniu każdego etapu skompiluj program z użyciem komendy make w terminalu. Wyślij go do repozytorium oraz zgłoś to prowadzącemu, który go sprawdzi. Dopiero po tym przejdź do kolejnego etapu.
W sekcji Oczekiwane wyjście znajdują się linie zaczynające się od < lub >. Oznaczają odpowiednio linie wypisane przez program i wprowadzone przez użytkownika. Twój program również powinien wypisywać te symbole dla czytelności.
Pliki startowe #
Etap 1 - make i przywitanie (2 pkt)
#
Stwórz plik Makefile tak, aby kompilował program poprawnie. Kompilacja powinna wykonywać się tylko jeśli plik z kodem źródłowym został modyfikowany od momentu ostatniej kompilacji (lub jest to pierwsza kompilacja) (jako wymagania targetu pliku wykonywalnego ustaw pliki z kodem). Po wpisaniu komendy make clean plik wykonywalny usuwa się.
Plik z kodem początkowym main.cpp zawiera dyrektywy załączenia nagłówków opisujących klasy vector, string oraz strumienie standardowego wejścia (cin) oraz wyjścia (cout). Napisz program który poprosi użytkownika o pseudonim i przywita go używając tego pseudonimu.
Oczekiwane wyjście: #
< Podaj pseudonim:
> student
< Witaj, student!
Etap 2 - std::vector<std::string> (3 pkt)
#
W tym etapie użyj std::vector do przechowywania ciągów znaków std::string. Wczytaj od użytkownika maksymalną liczbę (N) przechowanych pseudonimów. Pytaj użytkownika o pseudonim i dodawaj go do wektora, a następnie wypisuj czytelnie zawartość wektora. Powtarzaj ten proces N razy.
Oczekiwane wyjście: #
< Podaj liczbę użytkowników:
> 2
< Podaj pseudonim:
> student
< Witaj, student!
< Użytkownicy: 1/2
- student
< Podaj pseudonim:
> nauczyciel
< Witaj, nauczyciel!
< Użytkownicy: 2/2
- student
- nauczyciel
Etap 3 - więcej operacji na std::vector (2 pkt)
#
Przed zakończeniem programu usuń jeden po drugim wprowadzone pseudonimy z użyciem metody .pop_back(). Pomiędzy każdym usunięciem wypisuj pozostałe pseudonimy jak w etapie 2. Poza wypisywaniem pseudonimów nie wykorzystuj w tym etapie wprowadzonego wcześniej limitu elementów.
Podpowiedź: możesz użyć metod .empty() lub .size() wektora w warunku pętli while.
Oczekiwane wyjście: #
< Podaj liczbę użytkowników:
> 2
< Podaj pseudonim:
> student
< Witaj, student!
< Użytkownicy: 1/2
- student
< Podaj pseudonim:
> nauczyciel
< Witaj, nauczyciel!
< Użytkownicy: 2/2
- student
- nauczyciel
< Usuwanie użytkowników...
< Użytkownicy: 1/2
- student
< Usuwanie użytkowników...
< Użytkownicy: 0/2
Etap 4 - więcej operacji na std::string (2 pkt)
#
Zamiast usuwać całą zawartość wektora z pseudonimami, pozwalaj użytkownikowi wybierać czy usunąć pseudonim czy zakończyć program. Przyjmuj od użytkownika “pop”, “quit” (bez cudzysłowu):
- Program usuwa ostatni pseudonim oraz wypisuje pozostałych użytkowników po otrzymaniu “pop”,
- Program kończy się po otrzymaniu “quit”,
- Program ponawia prośbę o wprowadzenie komendy po otrzymaniu czegokolwiek innego.
Program kończy się również po usunięciu ostatniego pseudonimu.
Podpowiedź: operator równości (==) na std::string porówuje zawartość ciągów znaków! (W odróżnieniu od operatora równości dla dwóch char*.)
Oczekiwane wyjście: #
< Podaj liczbę użytkowników:
> 2
< Podaj pseudonim:
> student
< Witaj, student!
< Użytkownicy: 1/2
- student
< Podaj pseudonim:
> nauczyciel
< Witaj, nauczyciel!
< Użytkownicy: 2/2
- student
- nauczyciel
< Wpisz "pop", aby usunąć użytkownika lub "quit" aby wyjść z programu:
> foo
< Wpisz "pop", aby usunąć użytkownika lub "quit" aby wyjść z programu:
> pop
< Użytkownicy: 1/2
- student
< Wpisz "pop", aby usunąć użytkownika lub "quit" aby wyjść z programu:
> quit
Etap 5 - rozbicie na pliki (1 pkt) #
Dodaj kolejną komendę “hack”, która podmienia pierwszy pseudonim w wektorze na haker. Zaimplementuj to w funkcji zawartej w osobnym pliku .cpp (pamiętaj o zawarciu jej deklaracji w osobnym pliku nagłówkowym i dołączeniu go w plikach .cpp). Powinna ona przyjmować wskaźnik na std::string. Zmodyfikuj plik Makefile, aby wciąż kompilował cały program.
Udajemy, że opcja “hack” jest tajna, więc nie jest wymieniona w wiadomości podpowiedzi.
Oczekiwane wyjście: #
< Podaj liczbę użytkowników:
> 2
< Podaj pseudonim:
> student
< Witaj, student!
< Użytkownicy: 1/2
- student
< Podaj pseudonim:
> nauczyciel
< Witaj, nauczyciel!
< Użytkownicy: 2/2
- student
- nauczyciel
< Wpisz "pop", aby usunąć użytkownika lub "quit" aby wyjść z programu:
> hack
< Użytkownicy: 2/2
- haker
- nauczyciel
< Wpisz "pop", aby usunąć użytkownika lub "quit" aby wyjść z programu:
> quit