Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 8 czerwca 2026 22:08
  • Data zakończenia: 8 czerwca 2026 22:15

Egzamin niezdany

Wynik: 12/40 punktów (30,0%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Który z wymienionych poniżej wzorców projektowych można zakwalifikować jako wzorzec strukturalny?

A. Obserwator (Observer)
B. Fabryka abstrakcyjna (Abstract Factory)
C. Metoda szablonowa (Template method)
D. Fasada (Facade)
Metoda Szablonowa (Template Method) to wzorzec behawioralny, który definiuje sposób realizacji algorytmu. Fabryka Abstrakcyjna (Abstract Factory) to wzorzec kreacyjny, który koncentruje się na tworzeniu obiektów bez określania ich konkretnych klas. Wzorzec Obserwator (Observer) to wzorzec behawioralny, który umożliwia powiadamianie obiektów o zmianach stanu innego obiektu, co jest kluczowe w implementacji reaktywnych systemów, ale nie jest przykładem wzorca strukturalnego.

Pytanie 2

Narzędzie przeznaczone do rozwijania aplikacji w systemie WPf (ang. Windows Presentation Foundation) to

A. NetBeans
B. Visual Studio
C. PyCharm
D. XamarinStudio
Visual Studio to narzędzie, które według mnie jest praktycznie niezbędne do profesjonalnej pracy z WPF (Windows Presentation Foundation). WPF to technologia Microsoftu do budowania nowoczesnych, graficznych interfejsów użytkownika na platformie Windows. Visual Studio posiada wbudowane wsparcie dla projektów WPF – od kreatora nowych aplikacji, przez podpowiedzi składni XAML, aż po graficzny edytor interfejsów, tzw. designer. Na co dzień, gdy projektuję UI w WPF, doceniam funkcje takie jak live preview, debugger XAML czy możliwość natychmiastowego podglądu zmian. Z Visual Studio korzystają praktycznie wszyscy programiści .NET na świecie, bo daje ono dostęp nie tylko do edycji kodu, ale też do narzędzi takich jak NuGet, integracja z systemami kontroli wersji (np. Git), testowanie jednostkowe czy automatyczne refaktoryzacje. Warto wiedzieć, że Microsoft stale rozwija Visual Studio pod kątem WPF, dbając nie tylko o nowości w językach C# i VB.NET, ale też o wygodę pracy z XAML-em oraz wsparcie dla wzorców projektowych, takich jak MVVM. Z praktycznego punktu widzenia, jeśli chcesz tworzyć prawdziwie profesjonalne aplikacje WPF, to Visual Studio jest – moim zdaniem – bezkonkurencyjne. Często nawet początkujący szybko zauważają, jak bardzo przyspiesza ono codzienną pracę i rozwiązywanie problemów typowych dla tej technologii.

Pytanie 3

W celu wdrożenia w aplikacji internetowej mechanizmu zbierania danych statystycznych na komputerach użytkowników, można użyć

A. formulacje
B. sesje
C. buforowanie
D. ciasteczka
Ciasteczka, czyli tzw. cookies, to naprawdę podstawowy, a zarazem bardzo skuteczny mechanizm wykorzystywany w aplikacjach internetowych właśnie do zbierania i przechowywania danych statystycznych na komputerach użytkowników. Przeglądarki obsługują je praktycznie od zawsze i każda strona, która chce śledzić zachowanie odwiedzających, korzysta z cookies – choćby do zapamiętywania wizyt, identyfikowania użytkowników czy przechowywania preferencji. Co istotne, ciasteczka działają po stronie klienta, więc idealnie nadają się do przechowywania niewielkich ilości informacji bez konieczności ciągłego odpytywania serwera. W praktyce branżowej cookies są fundamentem dla narzędzi analitycznych, takich jak Google Analytics – to właśnie tam są zapisywane unikalne identyfikatory użytkowników, sesji czy kanałów ruchu. Z mojego doświadczenia mogę dodać, że jeśli ktoś kiedyś chciałby zbudować własny system analityczny, to zacznie właśnie od ciasteczek, bo są łatwo dostępne przez JavaScript i bardzo dobrze wspierane przez standardy sieciowe (np. RFC 6265). Warto też pamiętać o kwestiach prywatności i RODO, bo dzisiaj strony muszą informować użytkowników o użyciu cookies. Niemniej, jeśli chodzi o mechanizm zbierania statystyk na komputerze użytkownika, to cookies są wręcz nie do zastąpienia.

Pytanie 4

Który z warunków logicznych weryfikuje, czy zmienna całkowita x jest dodatnią liczbą składającą się z dwóch cyfr i jest podzielna przez 4?

A. (x > 9 && x < 100) && (x % 4 == 0)
B. (x > 0 && x < 100) || (x / 4 == 0)
C. (x > 9 && x < 100) || (x % 4 == 0)
D. (x > 9 || x < 100) && (x / 4 == 0)
Wydaje mi się, że często można się tu pomylić przez mylne rozumienie operatorów logicznych i arytmetycznych, szczególnie gdy chodzi o '&&' i '||'. Połączenie 'lub' zamiast 'i' (czyli operatora || zamiast &&) powoduje, że warunek przechodzi dla zbyt szerokiego zakresu liczb – np. sprawdzenie (x > 9 || x < 100) jest praktycznie zawsze prawdziwe dla większości wartości x, bo każda liczba większa od 9 lub mniejsza od 100 spełnia przynajmniej jeden z tych dwóch warunków. To nie ogranicza wyniku do liczb dwucyfrowych, tylko praktycznie do prawie wszystkich liczb całkowitych poza bardzo małym wyjątkiem. Z kolei (x / 4 == 0) to nie jest dobry sposób na sprawdzenie podzielności przez 4 – to wyrażenie zwraca prawdę tylko wtedy, gdy x mieści się w przedziale od 0 do 3, bo reszta z dzielenia (modulo) to coś zupełnie innego niż wynik dzielenia całkowitego. W takich przypadkach, zamiast sprawdzić czy liczba dzieli się bez reszty przez 4, sprawdzamy, czy daje wynik zero po dzieleniu całkowitym, co nie ma sensu w tym kontekście. Często takie błędy wynikają z braku rozróżnienia pomiędzy operatorami arytmetycznymi i logicznymi, a także nieuważnym czytaniem polecenia zadania. Operator '||' (lub) sprawia, że wymagania stają się zbyt luźne, a operator '/' sam w sobie nie sprawdza podzielności. Warto zawsze pamiętać o sprawdzaniu pełnej zgodności warunku z wymaganiami zadania – zarówno od strony zakresu liczby, jak i podzielności. Dobrą praktyką jest testowanie tych warunków na konkretnych liczbach i analizowanie wyników, bo wtedy łatwiej wychwycić takie niuanse. Z mojego doświadczenia wynika, że im bardziej przejrzysty i jednoznaczny warunek, tym mniej później błędów podczas pracy z kodem, zwłaszcza gdy trafia on do większego projektu czy zespołu, gdzie czytelność odgrywa ogromną rolę. Takie błędy pojawiają się często na egzaminach czy w pracy początkujących programistów, ale z czasem nabiera się wprawy, żeby podchodzić do nich z większą świadomością i dokładnością.

Pytanie 5

Co to jest shadow DOM?

A. Mechanizm enkapsulacji kodu HTML, CSS i JavaScript w komponenty webowe
B. Metoda renderowania grafiki 3D w przeglądarkach
C. Technika stylizacji elementów w CSS przy użyciu cieni
D. Wirtualny DOM używany przez biblioteki jak React i Vue.js
Shadow DOM to technika pozwalająca na enkapsulację kodu HTML, CSS oraz JavaScript w komponentach webowych, co jest kluczowe w kontekście tworzenia aplikacji opartych na Web Components. Dzięki zastosowaniu Shadow DOM, elementy wewnętrzne komponentu są izolowane od reszty dokumentu, co eliminuje problemy z kolizjami nazw klas CSS oraz pozwala na tworzenie bardziej modularnych i wielokrotnego użytku elementów. Przykładem zastosowania Shadow DOM mogą być komponenty interfejsu użytkownika, takie jak przyciski czy karty, które zawierają własne style i logikę, nie wpływając na globalne style strony. To podejście jest wspierane przez standardy W3C i zalecane w projektach, gdzie skala i złożoność aplikacji wymaga wysokiej wydajności i organizacji kodu. Dobrze zaprojektowane komponenty z użyciem Shadow DOM mogą znacznie uprościć rozwój i utrzymanie aplikacji webowych, czyniąc je bardziej responsywnymi i dostosowanymi do różnych środowisk.

Pytanie 6

Która z poniższych deklaracji w języku C++ poprawnie opisuje tablicę dwuwymiarową?

A. int matrix[];
B. int matrix[3][3];
C. int matrix[3];
D. int matrix[3][3][3];
Deklaracja 'int matrix[3][3];' poprawnie definiuje tablicę dwuwymiarową w języku C++. Tablice dwuwymiarowe to kluczowe narzędzie do przechowywania macierzy i danych tabelarycznych. Każdy element macierzy jest dostępny poprzez dwa indeksy, co umożliwia łatwe odwzorowanie układów współrzędnych lub plansz w grach. Tablice tego rodzaju są wykorzystywane w algorytmach obliczeniowych, grafice komputerowej oraz analizie danych. Struktura 'matrix[3][3]' tworzy siatkę 3x3, która może przechowywać 9 elementów, co czyni ją efektywnym rozwiązaniem dla problemów wymagających przestrzennych danych.

Pytanie 7

Które z wymienionych praw autorskich nie wygasa po pewnym czasie?

A. Licencje wolnego oprogramowania
B. Prawa pokrewne
C. Autorskie prawa osobiste
D. Autorskie prawa majątkowe
Autorskie prawa osobiste to rodzaj praw autorskich, które nie wygasają po upływie określonego czasu i są bezterminowe. Obejmują one prawo do autorstwa, oznaczania dzieła swoim nazwiskiem oraz sprzeciwiania się wszelkim zmianom, które mogłyby naruszać reputację twórcy. Prawa osobiste są niezbywalne, co oznacza, że nie można ich przenieść na inną osobę ani sprzedać. Nawet po śmierci twórcy, prawo do ochrony integralności jego dzieła jest respektowane. W praktyce oznacza to, że choć prawa majątkowe mogą wygasnąć (np. po 70 latach od śmierci autora), prawo do bycia uznanym za twórcę trwa wiecznie.

Pytanie 8

W jaki sposób można zmniejszyć liczbę danych zbieranych przez aplikacje mobilne?

A. Używać aplikacji bez sprawdzania ich źródła
B. Weryfikować i regulować uprawnienia aplikacji w ustawieniach
C. Nie blokować aplikacjom dostępu do lokalizacji oraz kontaktów
D. Udostępniać aplikacjom wszystkie niezbędne informacje
Dostosowanie uprawnień aplikacji w ustawieniach swojego telefonu to naprawdę dobry sposób na ograniczenie tego, co aplikacje mogą o nas wiedzieć. Wiele z nich, jak np. te do robienia zdjęć, prosi o dostęp do lokalizacji czy kontaktów, ale nie zawsze jest to potrzebne. Warto co jakiś czas sprawdzić, czy jakieś aplikacje nie mają za dużo uprawnień. Dzięki temu lepiej zabezpieczymy swoją prywatność i zmniejszymy ryzyko, że nasze dane wyciekną. Lepiej też unikać aplikacji z nieznanych źródeł, bo mogą one zbierać więcej informacji, niż byśmy chcieli.

Pytanie 9

Jak wygląda kod uzupełnienia do dwóch dla liczby -5 w formacie binarnym przy użyciu 8 bitów?

A. 00000101
B. 10000101
C. 11111101
D. 11111011
Pierwsza z niepoprawnych odpowiedzi, która przedstawia wartość 00000101, jest błędna, ponieważ jest to binarna reprezentacja liczby 5, a nie -5. Kod uzupełnieniowy do dwóch wymaga przedstawienia liczby ujemnej poprzez inwersję bitów i dodanie jedynki. Ta odpowiedź nie ma zastosowania przy obliczaniu liczb ujemnych, stąd jest niewłaściwa. Kolejna odpowiedź, 11111101, również jest nieprawidłowa. W przypadku tej liczby, zainwersowanie bitów liczby 5 dawałoby 11111010, a dodanie 1 do tej wartości prowadziłoby do 11111011, co wskazuje, że ta odpowiedź nie jest zgodna z zasadą uzupełnienia do dwóch. Ostatnia z niepoprawnych odpowiedzi, 10000101, jest również błędna, ponieważ nie odpowiada żadnej z reprezentacji liczby -5. Gdybyśmy spróbowali konwertować ją z powrotem na wartość dziesiętną, otrzymalibyśmy 133, co jest zdecydowanie niepoprawne. Warto zauważyć, że każda z tych niepoprawnych odpowiedzi wskazuje na brak zrozumienia zasad konwersji liczb ujemnych w systemie binarnym, co jest kluczowe w informatyce i programowaniu, a ich użycie w praktycznych aplikacjach mogłoby prowadzić do poważnych błędów w obliczeniach.

Pytanie 10

W zaprezentowanym kodzie stworzono abstrakcyjną klasę Figura oraz klasę Prostokąt, która po niej dziedziczy, zawierającą określone pola i konstruktory. Wskaż najprostszą implementację sekcji /* metody klasy */ dla klasy Prostokąt

Ilustracja do pytania
A. Kod 3
B. Kod 2
C. Kod 1
D. Kod 4
Niepoprawne odpowiedzi wynikają z niepełnego zrozumienia koncepcji abstrakcji i dziedziczenia w programowaniu obiektowym Klasa abstrakcyjna w języku Java definiuje metody abstrakcyjne które muszą być zaimplementowane w każdej klasie dziedziczącej Jest to kluczowa zasada która pozwala na tworzenie elastycznych i rozszerzalnych struktur kodu Odpowiedzi które nie implementują wymaganych metod Pole i Obwod w klasie Prostokąt łamią tę zasadę Kod 2 pomija implementację metody Obwod co oznacza że klasa Prostokąt pozostaje niekompletna i nie może być instancjonowana Inne podejścia jak te w Kodzie 3 zmieniają nazwę metod na LiczPole i LiczObwod co nie spełnia kontraktu zdefiniowanego przez klasę Figura ponieważ nie zachowuje integralności interfejsu klasy bazowej Próbując używać abstrakcyjnych metod z implementacją jak w Kodzie 4 łamiemy fundamentalne zasady projektowania obiektowego Zrozumienie tych koncepcji jest kluczowe przy projektowaniu aplikacji które wymagają skalowalności i łatwości utrzymania Praktykując poprawne stosowanie abstrakcji możemy tworzyć kod który jest bardziej modularny elastyczny i odporny na zmiany co prowadzi do bardziej efektywnego procesu rozwoju oprogramowania

Pytanie 11

Jaką rolę odgrywa program Jira?

A. Zarządzanie edycjami systemu operacyjnego
B. Produkcja grafik 3D
C. Planowanie, śledzenie oraz raportowanie zadań projektowych
D. Modyfikowanie arkuszy kalkulacyjnych
Jira to jedno z najpopularniejszych narzędzi do zarządzania projektami, wykorzystywane głównie w metodykach Agile i Scrum. Umożliwia planowanie, monitorowanie i raportowanie zadań projektowych na różnych etapach ich realizacji. Dzięki elastycznym tablicom kanban i sprintom, Jira pozwala zespołom programistycznym śledzić postępy, zarządzać backlogiem oraz efektywnie przydzielać zasoby. Funkcjonalności takie jak automatyzacja procesów, śledzenie błędów (bug tracking) i integracja z innymi narzędziami (np. GitHub, Bitbucket) sprawiają, że Jira jest wszechstronnym rozwiązaniem do zarządzania nawet najbardziej złożonymi projektami. Dzięki generowanym raportom i wykresom burndown, menedżerowie mogą dokładnie analizować tempo pracy i podejmować decyzje w oparciu o dane.

Pytanie 12

Jaki modyfikator dostępu umożliwia dostęp do pól klasy tylko za pomocą jej metod?

A. Public
B. Private
C. Static
D. Protected
Modyfikator `public` umożliwia dostęp do pól i metod z dowolnego miejsca w programie, co narusza zasadę hermetyzacji i ukrywania danych wewnętrznych obiektu. `protected` pozwala na dostęp do pól i metod klasy w ramach dziedziczenia, ale nie ogranicza dostępu wyłącznie do metod tej samej klasy. `static` to modyfikator, który oznacza, że pole lub metoda należy do klasy, a nie do instancji obiektu, co nie jest związane z ograniczaniem dostępu. Tylko `private` zapewnia pełną kontrolę nad dostępem do danych wewnątrz klasy.

Pytanie 13

Zasada programowania obiektowego, która polega na ukrywaniu elementów klasy tak, aby były one dostępne wyłącznie dla metod tej klasy lub funkcji zaprzyjaźnionych, to

A. polimorfizm
B. hermetyzacja
C. wyjątki
D. dziedziczenie
Hermetyzacja to taka esencja programowania obiektowego, która polega na ukrywaniu szczegółów implementacyjnych wewnątrz klasy. Dzięki temu tylko wybrane fragmenty kodu mają dostęp do danych czy metod, które faktycznie powinny być widoczne na zewnątrz. W praktyce sprowadza się to do korzystania z modyfikatorów dostępu, takich jak private, protected czy public, co jest podstawą w językach takich jak Java, C++ czy C#. Daje to ogromną przewagę, bo ochrania dane przed przypadkowymi (albo celowymi!) zmianami z zewnątrz. Z mojego doświadczenia wynika, że dobrze zaprojektowana hermetyzacja sprawia, że kod jest bardziej przejrzysty i łatwiejszy do testowania i utrzymania. Przykład? Załóżmy, że mamy klasę KontoBankowe i chcemy, żeby saldo dało się zmieniać tylko poprzez wpłatę i wypłatę, a nie żeby każdy mógł ustawić dowolną kwotę. Wtedy pole 'saldo' robimy private, a dostęp dajemy przez metody public wpłata() i wypłata(). Branżowe praktyki, np. SOLID, wręcz podkreślają wagę hermetyzacji. Ułatwia to też refaktoryzację – jeśli coś zmienisz w środku klasy, a interfejs zewnętrzny zostaje taki sam, reszta programu nawet nie zauważy. Także, moim zdaniem, bez hermetyzacji nie ma sensownego programowania obiektowego – to absolutna podstawa.

Pytanie 14

Która biblioteka JavaScript jest najczęściej używana do tworzenia testowalnych funkcji asynchronicznych?

A. Axios
B. Moment.js
C. Underscore.js
D. D3.js
Axios jest jedną z najpopularniejszych bibliotek JavaScript używanych do obsługi żądań HTTP, zwłaszcza w kontekście asynchronicznych operacji. Umożliwia łatwe tworzenie funkcji asynchronicznych, które mogą komunikować się z serwerami. Dzięki wsparciu dla obietnic (Promises), Axios pozwala na prostsze zarządzanie wynikami operacji asynchronicznych. Przykładowo, można użyć go do wykonywania zapytań do API w aplikacjach webowych. Przy pomocy Axios, developerzy mogą łatwo wysyłać żądania GET, POST i inne, a także obsługiwać odpowiedzi i błędy. Z perspektywy dobrych praktyk, Axios wspiera interceptory, które pozwalają na globalne zarządzanie zapytaniami i odpowiedziami, co jest szczególnie przydatne w dużych aplikacjach. Co więcej, Axios obsługuje również anulowanie żądań, co może być istotne w kontekście użytkowników, którzy mogą na przykład zmienić zdanie przed zakończeniem operacji. Takie cechy czynią Axios narzędziem niezwykle przydatnym w nowoczesnym programowaniu JavaScript.

Pytanie 15

Co to jest choroba związana z wykonywaniem zawodu?

A. Każda choroba, która występuje w czasie pracy
B. Choroba wynikająca z warunków pracy lub związanych z nimi czynników
C. Stan zdrowia, który uniemożliwia pracę przez okres krótszy niż tydzień
D. Choroba występująca tylko w sektorze przemysłowym
Choroba zawodowa to stan zdrowotny spowodowany warunkami pracy lub czynnikami związanymi z wykonywaną profesją. Najczęściej wynika z długotrwałego narażenia na szkodliwe substancje, hałas, promieniowanie, pyły lub wykonywanie powtarzalnych czynności. Przykładem chorób zawodowych są pylica płuc, głuchota zawodowa czy zespół cieśni nadgarstka. Kluczowym elementem w zapobieganiu chorobom zawodowym jest odpowiednia profilaktyka, szkolenia BHP oraz dostosowanie środowiska pracy do zasad ergonomii. Pracodawcy są zobowiązani do monitorowania warunków pracy i wdrażania rozwiązań minimalizujących ryzyko wystąpienia chorób zawodowych.

Pytanie 16

Jaką wartość przyjmie etykieta label po wykonaniu poniższego kodu, gdy zostanie on uruchomiony po naciśnięciu przycisku w aplikacji?

private void Button_click(object sender, routedEventArgs e) {
    int tmp = 0;
    for (int i=0; i<=100; i+=2) {
        tmp += i;
    }
    label.Content = tmp;
}
A. liczby z przedziału od 0 do 100
B. suma liczb parzystych z przedziału od 0 do 100
C. suma liczb z przedziału od 0 do 100
D. liczby parzyste z przedziału od 0 do 100
Wiele osób podczas analizy takich pytań może się zagubić, patrząc tylko pobieżnie na kod. Na przykład, ktoś mógłby pomyśleć, że wynik działania pętli for to po prostu zestaw liczb parzystych z przedziału 0–100, ale to nieprawda – kod nie wyświetla, ani nie zbiera tych liczb do żadnej kolekcji. Zamiast tego każda wartość jest sumowana do jednej zmiennej tmp, co jest dość typowym zabiegiem w programowaniu – chodzi o tzw. akumulację. Kolejna pułapka to założenie, że kod sumuje wszystkie liczby z przedziału 0–100. Gdyby tak było, inkrementacja w pętli powinna wyglądać inaczej (i++ zamiast i+=2) i wtedy rzeczywiście tmp zebrałby całą sekwencję naturalną do 100. Niektórzy mogą jeszcze sądzić, że etykieta label ma przyjąć wartości poszczególnych liczb (czyli np. wyświetlić wszystkie parzyste z zakresu), ale w rzeczywistości przypisujemy jej tylko końcowy wynik sumowania, a nie całą listę. W praktyce takie błędne rozumienie wynika czasem z tego, że nie do końca zwracamy uwagę na składnię pętli oraz na to, co tak naprawdę się dzieje w ciele tej pętli. Z mojego doświadczenia wynika, że kluczem jest tu zrozumienie, jak działa inkrementacja i jak sumujemy wartości – nie każda pętla oznacza przetwarzanie wszystkich możliwych liczb. Kod ten jest dość czytelny, ale łatwo się pomylić, jeśli pobieżnie spojrzymy na zapis for (int i=0; i<=100; i+=2). Warto więc zawsze przeanalizować dokładnie warunki pętli oraz operacje wykonywane na zmiennych w jej wnętrzu. To, co tu robimy, to klasyczna suma liczb spełniających konkretny warunek – i to jest bardzo częsty motyw w zadaniach programistycznych, także na rozmowach kwalifikacyjnych czy sprawdzianach. Praktyka pokazuje, że precyzja w analizie kodu jest dużo ważniejsza niż szybkie czytanie treści.

Pytanie 17

Który element dokumentacji technicznej jest istotny dla ustalenia metod ochrony danych w aplikacji?

A. Koncepcja interfejsu użytkownika
B. Harmonogram zarządzania zadaniami
C. System ochrony aplikacji
D. Opis architektury klient-serwer
System zabezpieczeń aplikacji to kluczowy element specyfikacji technicznej, który określa metody ochrony danych. Obejmuje on takie elementy jak szyfrowanie, kontrola dostępu, uwierzytelnianie oraz autoryzacja. Prawidłowo zaprojektowany system zabezpieczeń zapewnia ochronę przed atakami hakerskimi, nieautoryzowanym dostępem oraz utratą danych. W aplikacjach webowych i mobilnych systemy zabezpieczeń obejmują również techniki takie jak dwuskładnikowe uwierzytelnianie (2FA), zabezpieczenia API oraz regularne audyty bezpieczeństwa. Implementacja solidnych mechanizmów zabezpieczeń jest niezbędna, aby zapewnić zgodność z regulacjami prawnymi i zyskać zaufanie użytkowników.

Pytanie 18

Który z wymienionych frameworków jest charakterystyczny dla aplikacji komputerowych pisanych w C#?

A. Spring
B. Qt
C. React
D. WPF (Windows Presentation Foundation)
Qt to popularny framework do tworzenia aplikacji, ale jest przeznaczony głównie dla języków takich jak C++ i Python, a nie C#. Spring to framework do tworzenia aplikacji webowych i serwerowych w języku Java – nie jest przeznaczony do budowy aplikacji desktopowych na platformie Windows. React to biblioteka JavaScript używana do budowy interfejsów użytkownika aplikacji webowych, głównie w środowisku przeglądarki, co sprawia, że nie nadaje się do tworzenia tradycyjnych aplikacji desktopowych w języku C#.

Pytanie 19

W podanym fragmencie kodu Java wskaż, która zmienna może przechować wartość "T":

int zm1;
float zm2;
char zm3;
boolean zm4;
A. zm1
B. zm3
C. zm4
D. zm2
W kodzie zadeklarowano różne typy zmiennych z których każda ma swoje specyficzne zastosowanie i ograniczenia. Zmienna zm1 jest typu int co oznacza że może przechowywać liczby całkowite. Typ ten jest używany do reprezentacji wartości liczbowych bez części ułamkowej i jest kluczowym elementem w operacjach arytmetycznych w wielu aplikacjach. Niemniej nie jest odpowiedni do przechowywania pojedynczych znaków takich jak T ponieważ znak ten wymaga reprezentacji w postaci typu char. Zmienna zm2 została zadeklarowana jako float co oznacza że może przechowywać liczby zmiennoprzecinkowe. Typ float jest często stosowany w obliczeniach wymagających mniej precyzyjnych wartości liczbowych z ułamkami dziesiętnymi ale podobnie jak int nie nadaje się do przechowywania znaków. Zmienna zm4 jest typu boolean co oznacza że służy do przechowywania wartości logicznych true lub false. Jest to podstawowy typ danych używany w operacjach warunkowych i pętlach kontrolnych jednak nie można za jego pomocą przechowywać znaków ani żadnych innych wartości poza logicznymi. Wybór niewłaściwego typu danych do przechowywania określonych wartości jest powszechnym błędem w programowaniu i może prowadzić do trudnych do zdiagnozowania błędów w kodzie. Ważne jest aby rozwijać umiejętność prawidłowego doboru typów danych w zależności od specyficznych potrzeb aplikacji co pozwala unikać problemów związanych z niezgodnością typów i minimalizuje ryzyko błędów.

Pytanie 20

Zgodnie z informacjami zawartymi w ramce, wskaż, który z rysunków ilustruje element przypisany do klasy Badge określonej w bibliotece Bootstrap?

Ilustracja do pytania
A. A
B. C
C. B
D. D
Wybrałeś wariant B i to zdecydowanie właściwy trop. Badge w Bootstrapie to nic innego jak taki mały, liczbowy wskaźnik – najczęściej widoczny przy nazwach kategorii, powiadomieniach czy komentarzach – który sygnalizuje użytkownikowi ile czegoś się pojawiło albo ile czeka akcji do wykonania. W praktyce, taki element to nie tylko liczba w kolorowym prostokącie czy kółku, ale też bardzo czytelny komunikat do użytkownika, co się ostatnio zmieniło lub co wymaga uwagi. Właśnie dlatego, w przykładzie B, mamy niebieskie prostokąty z liczbami przy różnych sekcjach (News, Comments, Updates) – to klasyczny przykład badge’a w Bootstrapie, często stylowanego klasą .badge i powiązaną kolorystyką. Warto zwrócić uwagę, że takie badge’e są nie tylko wizualne, ale też semantyczne – są rozpoznawalne przez czytniki ekranu, co jest zgodne z dobrymi praktykami dostępności (WCAG). Stosując badge’e, zwiększamy czytelność i dostępność interfejsu użytkownika, bo od razu wiadomo, gdzie coś nowego się pojawiło. Moim zdaniem, korzystanie z badge’y to jeden z prostszych i skuteczniejszych sposobów na poprawę UX – no i są bardzo łatwe do wdrożenia, wystarczy jedna klasa CSS i gotowe.

Pytanie 21

Algorytmu Euklidesa, przedstawionego na schemacie, należy użyć do obliczenia.

Ilustracja do pytania
A. najmniejszej liczby pierwszej w danym zakresie
B. Największego Wspólnego Dzielnika
C. największego elementu w zbiorze liczb
D. Najmniejszej Wspólnej Wielokrotności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Algorytm Euklidesa to klasyczna metoda stosowana do wyznaczania największego wspólnego dzielnika (NWD) dwóch liczb całkowitych. Działa na zasadzie iteracyjnego odejmowania mniejszej liczby od większej aż do momentu, gdy obie liczby staną się równe. Wtedy ta wspólna wartość jest największym wspólnym dzielnikiem. Algorytm jest bardzo efektywny, nawet dla dużych liczb, co czyni go powszechnie stosowanym w praktycznych zastosowaniach, takich jak kryptografia czy optymalizacja komputerowa. W kryptografii, szczególnie w systemach kluczy publicznych, takich jak RSA, obliczanie NWD jest kluczowe dla generowania kluczy. Algorytm Euklidesa jest też podstawą dla bardziej zaawansowanych algorytmów, takich jak rozszerzony algorytm Euklidesa, który umożliwia obliczenie również współczynników liczbowych używanych w teoretycznych dowodach matematycznych. Jego implemetacja jest również często wykorzystywana w bibliotekach matematycznych języków programowania, co świadczy o jego uniwersalności i znaczeniu w dzisiejszej technologii.

Pytanie 22

Które z poniższych NIE jest zasadą programowania SOLID?

A. Code Reuse Principle (Zasada ponownego użycia kodu)
B. Dependency Inversion Principle (Zasada odwrócenia zależności)
C. Single Responsibility Principle (Zasada pojedynczej odpowiedzialności)
D. Open/Closed Principle (Zasada otwarte/zamknięte)

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź "Code Reuse Principle" jest prawidłowa, ponieważ nie stanowi ona jednej z pięciu zasad programowania SOLID. SOLID to akronim, który odnosi się do pięciu podstawowych zasad, które mają na celu ułatwienie tworzenia oprogramowania, które jest łatwe w utrzymaniu i rozwijaniu. W skład tych zasad wchodzą: Zasada pojedynczej odpowiedzialności (Single Responsibility Principle), Zasada otwarte/zamknięte (Open/Closed Principle), Zasada segregacji interfejsów (Interface Segregation Principle), Zasada odwrócenia zależności (Dependency Inversion Principle) oraz Zasada Liskov (Liskov Substitution Principle). Przykładowo, Zasada pojedynczej odpowiedzialności zakłada, że każda klasa powinna mieć jedną, jasno określoną odpowiedzialność, co pozwala na łatwiejsze testowanie i modyfikowanie kodu bez wpływu na inne jego części. Użycie zasad SOLID w praktyce prowadzi do lepszego rozdzielenia logiki aplikacji i ułatwia jej rozwój oraz utrzymanie, co jest kluczowe w długoterminowych projektach programistycznych.

Pytanie 23

Która z metodologii w zarządzaniu projektami umożliwia łatwe dostosowywanie się do zmieniających się potrzeb klienta?

A. Model spiralny
B. Model Waterfall
C. Kanban
D. Scrum

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Scrum to metodologia zarządzania projektami, która pozwala na elastyczne reagowanie na zmieniające się wymagania klienta. W Scrumie rozwój produktu odbywa się w iteracyjnych sprintach, a na końcu każdego z nich dostarczana jest działająca część aplikacji. Regularne przeglądy i retrospekcje umożliwiają dostosowywanie zakresu prac, co pozwala na bieżąco wprowadzać zmiany i spełniać oczekiwania klienta. Scrum promuje współpracę z interesariuszami, co zwiększa prawdopodobieństwo sukcesu projektu i dostarczenia wartościowego produktu.

Pytanie 24

Jakie jest źródło błędu w podanym kodzie przez programistę?

class Dokument {
    public string nazwa;
    protected string autor;
}
// .... w kodzie funkcji main
Dokument doc = new Dokument();
Console.WriteLine(doc.autor);
A. Inicjalizacja obiektu została błędnie zapisana.
B. Pole autor jest niedostępne z tego poziomu.
C. Brak konstruktora w definicji klasy.
D. Argumenty konstruktora powinny być przekazane podczas inicjalizacji obiektu.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Błąd związany z polem 'autor' wynika z problemu dostępu do pól prywatnych w klasie. W programowaniu obiektowym, pola prywatne (oznaczone jako private) są dostępne tylko wewnątrz danej klasy i nie mogą być bezpośrednio modyfikowane lub odczytywane z zewnątrz. Aby umożliwić dostęp do takich pól, programista powinien utworzyć odpowiednie metody dostępowe – tzw. gettery i settery. Jest to przykład hermetyzacji (encapsulation), jednego z filarów programowania obiektowego, który pozwala na kontrolę nad tym, jak dane są przechowywane i modyfikowane. Hermetyzacja zwiększa bezpieczeństwo aplikacji i zapobiega przypadkowym zmianom wartości pól obiektu.

Pytanie 25

Użycie modyfikatora abstract w definicji metody w klasie wskazuje, że

A. klasy pochodne nie mogą implementować tej metody
B. dziedziczenie po tej klasie jest niedozwolone
C. klasa ta stanowi podstawę dla innych klas
D. trzeba zaimplementować tę metodę w tej klasie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Modyfikator abstract w definicji metody jasno wskazuje, że dana klasa jest przeznaczona do dalszego dziedziczenia i stanowi coś w rodzaju szablonu dla innych klas. W praktyce – jeśli w klasie pojawia się choć jedna metoda abstract, cała klasa musi być także oznaczona jako abstract. To taki sygnał: hej, tej klasy nie da się użyć bezpośrednio, ale możesz po niej dziedziczyć i dopiero tam zaimplementować szczegóły. Moim zdaniem to bardzo wygodne, bo pozwala z góry narzucić kontrakt na klasy pochodne – mają dostarczyć własne wersje abstrakcyjnych metod. W wielu językach obiektowych, jak C# czy Java, stosowanie klas abstrakcyjnych jest powszechną praktyką przy projektowaniu rozbudowanych aplikacji, gdzie ważne jest rozdzielenie ogólnej logiki od szczegółowych implementacji. Daje to sporą elastyczność i chroni przed przypadkowymi błędami, kiedy ktoś próbowałby utworzyć obiekt klasy, która nie ma pełnej funkcjonalności. Często spotyka się to np. przy projektowaniu hierarchii typu Zwierzę → Pies/Kot, gdzie klasa Zwierzę jest abstrakcyjna i zawiera np. metodę abstract WydajDźwięk(). Dzięki temu każde konkretne zwierzę musi zaimplementować własną wersję tej metody, a całość kodu jest czytelniejsza i łatwiej ją rozwijać. Zdecydowanie warto poznać ten mechanizm, bo to fundament nowoczesnego programowania obiektowego i coś, co codziennie przydaje się w pracy programisty.

Pytanie 26

W językach C++ bądź C# termin virtual można wykorzystywać w kontekście

A. destruktorów
B. atrybutów klasy
C. metod klasy
D. funkcji zaprzyjaźnionych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Słowo kluczowe 'virtual' w C++ i C# służy przede wszystkim do deklarowania metod w klasach, które mogą być nadpisywane przez klasy pochodne. Dzięki temu mechanizmowi możliwa jest polimorfizm, czyli jedna z najważniejszych cech programowania obiektowego. Przykład z życia: gdy masz klasę bazową 'Zwierze' z wirtualną metodą 'DajGlos()', to możesz nadpisać tę metodę w klasach potomnych, takich jak 'Pies' czy 'Kot', i każdy z tych obiektów zareaguje inaczej po wywołaniu tej samej funkcji. To jest bardzo przydatne na co dzień, szczególnie gdy projektujesz rozbudowane systemy, w których klasy dziedziczą po sobie zachowania i interfejsy. Moim zdaniem, w C# sprawa jest trochę bardziej uporządkowana niż w C++, bo tam wszystko z tym 'virtual' i 'override' jest jasno określone. W C++ można się czasem nieźle pomylić, jeśli się zapomni o 'virtual', zwłaszcza przy złożonych hierarchiach dziedziczenia. Dobrą praktyką jest zawsze dodawać 'virtual' do tych metod w klasach, które przewidujesz jako bazowe, nawet jeśli na początku nie planujesz dziedziczenia. To z czasem bardzo ułatwia utrzymanie i rozwijanie kodu. Jeszcze taka ciekawostka – w C++ także destruktory mogą być wirtualne i czasem o tym się zapomina, ale na tym poziomie podstawowym, to właśnie metody klasy są tym, do czego 'virtual' najczęściej się stosuje.

Pytanie 27

W jakim celu wykorzystuje się diagram Gantta?

A. do przedstawiania funkcjonalności systemu
B. do planowania i zarządzania projektem
C. do wizualizacji powiązań między elementami systemów
D. do dokładnej analizy czasowo-kosztowej projektu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Diagram Gantta to jeden z podstawowych i – moim zdaniem – najfajniejszych narzędzi używanych w zarządzaniu projektami, zwłaszcza w budowlance, IT czy produkcji. Jest bardzo praktyczny, bo pozwala wizualnie rozplanować, jakie zadania są do wykonania, ile mają trwać i co od czego zależy. Dzięki prostemu układowi poziomych pasków na osi czasu można szybko ogarnąć całość projektu, zobaczyć które zadania się pokrywają i gdzie mogą być wąskie gardła. Branżowe standardy, np. PMBOK, zalecają korzystanie z diagramu Gantta właśnie do planowania i monitorowania postępu. Z mojego doświadczenia to narzędzie, które łączy ludzi – wszyscy od razu widzą, kto co robi i na kiedy. Fajne jest też to, że łatwo aktualizować taki diagram w miarę zmian w projekcie. Diagram Gantta pomaga też w kontroli terminowości i identyfikacji opóźnień. Jeśli ktoś kiedyś miał styczność z programami jak MS Project czy nawet prostym Excelem – na pewno widział taki wykres. Można tam nawet dodać kamienie milowe czy zależności między zadaniami (np. jedno musi się skończyć, zanim drugie się zacznie). Tak naprawdę, w profesjonalnych firmach, zarządzanie projektem bez takiego narzędzia byłoby trochę strzałem w stopę.

Pytanie 28

Jakiego typu testy są stosowane do sprawdzania funkcjonalności prototypu interfejsu?

A. Testy interfejsu
B. Testy efektywnościowe
C. Testy obciążeniowe
D. Testy zgodności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Testy interfejsu są kluczowe w procesie weryfikacji funkcji prototypu interfejsu użytkownika. Testy te koncentrują się na sprawdzeniu poprawności działania wszystkich elementów graficznych, takich jak przyciski, pola tekstowe, menu rozwijane oraz formularze. Testy interfejsu pozwalają upewnić się, że interakcje użytkownika z aplikacją przebiegają zgodnie z oczekiwaniami i nie powodują błędów w nawigacji. Dzięki nim można wykryć problemy związane z nieprawidłowym rozmieszczeniem elementów, brakiem reakcji na kliknięcia lub nieintuicyjnym działaniem, co pozwala na wczesne wdrożenie poprawek i zwiększenie użyteczności aplikacji.

Pytanie 29

Jaką kategorię własności intelektualnej reprezentują znaki towarowe?

A. Autorskie prawa majątkowe
B. Dobra niematerialne
C. Prawa pokrewne
D. Własność przemysłowa

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Znaki towarowe należą do kategorii własności przemysłowej. Ochrona znaków towarowych pozwala firmom na zabezpieczenie ich brandingu, logotypów oraz nazw produktów przed nieuprawnionym wykorzystaniem przez konkurencję. Rejestracja znaku towarowego daje właścicielowi prawo do wyłącznego używania go w celach komercyjnych i przeciwdziałania naruszeniom. Własność przemysłowa obejmuje także patenty, wzory przemysłowe i oznaczenia geograficzne, stanowiąc kluczowy element strategii ochrony marki oraz wartości firmy na rynku międzynarodowym.

Pytanie 30

Który z wymienionych elementów może stanowić część menu w aplikacji desktopowej?

A. CheckBox
B. Canvas
C. ScrollBar
D. MenuItem

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
MenuItem to podstawowy komponent, który stanowi część systemu menu w aplikacjach desktopowych. Jest to element, który pojawia się w rozwijanym menu i pozwala na wykonywanie określonych akcji, takich jak otwieranie plików, zapisywanie danych czy wywoływanie funkcji aplikacji. MenuItem jest szeroko stosowany w aplikacjach Windows w połączeniu z WPF i WinForms. Tworzenie strukturalnego menu, które ułatwia nawigację po aplikacji, jest kluczowe dla zapewnienia dobrej użyteczności i intuicyjności oprogramowania.

Pytanie 31

Jaką nazwę elementu interfejsu należy wprowadzić w pierwszej linii kodu, na miejscu <??? aby został on wyświetlony w podany sposób?

<???
    android:layout_margin="50dp"
    android:switchMinWidth="60dp"
    android:text="Zgadzasz się?"
    android:textOff="NIE"
    android:testOn="TAK" />
Ilustracja do pytania
A. RatingBar
B. Spinner
C. Switch
D. SeekBar

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Switch to bardzo charakterystyczny element interfejsu Androida, który służy do przełączania między dwoma stanami, np. włącz/wyłącz, tak/nie. Na screenie wyraźnie widać typowy suwak z okrągłym przyciskiem, który przemieszcza się na boki – dokładnie tak działa Switch. W kodzie XML także pojawiają się atrybuty takie jak text, textOff, textOn – one są właściwe właśnie dla komponentu Switch, bo pozwalają podpisać każdy ze stanów na przełączniku. Praktycznie w każdej nowoczesnej aplikacji spotyka się Switcha do wyrażania zgody, akceptacji regulaminu albo przełączania opcji (np. tryb ciemny). Z mojego doświadczenia to jest dużo wygodniejsze dla użytkownika niż klasyczne checkboxy, bo od razu widać, który stan jest aktywny – a UX-owcy też bardzo to chwalą. Warto pamiętać, że Switch ma swoje domyślne style zgodne z Material Design, więc aplikacja wygląda nowocześnie bez dodatkowej pracy. Dobrą praktyką jest wykorzystywanie Switcha właśnie wtedy, gdy potrzebujemy zmiany binarnej, a nie kilku opcji do wyboru. Jeśli ktoś myśli o bardziej zaawansowanych interfejsach, to Switch pozwala łatwo reagować na zmianę stanu w kodzie Java/Kotlin poprzez listener OnCheckedChangeListener. No i jest to jeden z tych komponentów, które naprawdę warto znać, bo są podstawą w każdym projekcie mobilnym.

Pytanie 32

Co oznacza pojęcie 'hoisting' w JavaScript?

A. Proces podnoszenia deklaracji zmiennych i funkcji na górę zakresu
B. Metoda ładowania skryptów z zewnętrznych źródeł
C. Technika optymalizacji kodu przez silnik JavaScript
D. Mechanizm zarządzania pamięcią w przeglądarce

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Hoisting to mechanizm w JavaScript, który polega na tym, że deklaracje zmiennych i funkcji są przenoszone na górę zakresu, w którym zostały zadeklarowane. Oznacza to, że możesz używać zmiennych i funkcji przed ich faktyczną deklaracją w kodzie. Na przykład, jeśli zadeklarujesz zmienną za pomocą 'var' lub funkcję, możesz odwołać się do niej wcześniej, a JavaScript zrozumie, o co chodzi. Przykład: jeśli napiszesz 'console.log(x); var x = 5;', to nie dostaniesz błędu, ponieważ 'x' jest hoistowane na górę, jednak jej wartość będzie 'undefined' do momentu przypisania jej wartości. Zrozumienie hoistingu jest kluczowe dla pisania poprawnego kodu w JavaScript, ponieważ może to prowadzić do zaskakujących rezultatów. Warto wiedzieć, że hoisting nie działa w ten sam sposób dla deklaracji 'let' i 'const'. Te zmienne są hoistowane, ale nie mogą być używane przed ich deklaracją, co prowadzi do błędu 'Temporal Dead Zone'. Dlatego zaleca się unikanie deklaracji zmiennych w sposób, który może prowadzić do nieporozumień, i zawsze deklarować zmienne na początku zakresu, w którym będą używane.

Pytanie 33

Który z wymienionych algorytmów działających na tablicy jednowymiarowej ma złożoność obliczeniową \( O(n^2) \)?

A. Sortowanie bąbelkowe
B. Sortowanie szybkie
C. Wyświetlenie elementów
D. Wyszukiwanie metodą binarną

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie bąbelkowe to taki klasyczny algorytm, który ma złożoność \( O(n^2) \). Chociaż jest dość prosty w zrozumieniu, to nie za bardzo sprawdza się w większych zbiorach danych. Działa tak, że porównuje sąsiadujące ze sobą elementy i zamienia je miejscami, jeśli są w złej kolejności. Trochę to czasochłonne, ale warto znać ten algorytm, bo pokazuje podstawy sortowania.

Pytanie 34

Przedstawiony na filmie kod napisany w języku C++ nie kompiluje się. Co należy zmienić w tym kodzie, aby proces kompilacji wykonał się bez błędów?

A. poprawnie zapisać warunek w instrukcji if w linii 11, np. sprawdz(x)==true
B. dodać deklarację funkcji sprawdz przed funkcją main
C. naprawić błąd w funkcji sprawdz, który polega na braku nawiasów {} w pętli for
D. zadeklarować zmienną sprawdz przed jej wykorzystaniem w linii 11

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź jest trafna, bo w języku C++ kompilator musi wiedzieć o istnieniu funkcji zanim zostanie ona użyta w kodzie, np. w funkcji main. Bez wcześniejszej deklaracji, kompilator nie zna sygnatury funkcji i nie potrafi zweryfikować wywołania, co skutkuje błędem typu 'implicit declaration of function'. Deklaracja funkcji to taki sygnał informujący kompilator „hej, taka funkcja będzie i będzie przyjmować takie argumenty, a zwracać taki typ”. Praktycznie rzecz biorąc, przed funkcją main wystarczy wpisać np. 'bool sprawdz(int x);', żeby wszystko grało. To szczególnie ważne przy większych projektach czy pracy w zespołach, gdzie pliki nagłówkowe z deklaracjami funkcji są standardem. Pozwala to na lepszą czytelność i porządek w kodzie – kompilator wie, czego się spodziewać, a Ty unikasz dziwnych, trudnych do znalezienia błędów. Moim zdaniem taka organizacja kodu to podstawa, szczególnie jeśli kiedyś będziesz korzystać z bibliotek lub cudzych funkcji – deklaracje są wtedy wręcz obowiązkowe. To zasada, której trzyma się większość zespołów programistycznych i, szczerze mówiąc, sam kilka razy w młodości zapomniałem o deklaracji, przez co debugowanie trwało wieki. Warto od razu wyrobić sobie taki nawyk, bo to oszczędza sporo nerwów i czasu, a kod staje się solidniejszy i bardziej profesjonalny.

Pytanie 35

Co należy zrobić w sytuacji silnego krwawienia z rany?

A. Założyć opatrunek uciskowy oraz unieść kończynę powyżej poziomu serca
B. Poczekać, aż krwawienie ustanie samoistnie
C. Nałożyć elastyczny bandaż bez ucisku
D. Przepłukać ranę wodą utlenioną i zostawić do wyschnięcia

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Założenie opatrunku uciskowego i uniesienie kończyny powyżej poziomu serca to najskuteczniejszy sposób na zatrzymanie silnego krwotoku z rany. Opatrunek uciskowy powoduje mechaniczne zamknięcie naczyń krwionośnych, co spowalnia lub całkowicie zatrzymuje wypływ krwi. Podniesienie kończyny dodatkowo zmniejsza ciśnienie krwi w obszarze rany, co ogranicza krwawienie. Ważne jest, aby nie zdejmować opatrunku, nawet jeśli przesiąknie krwią – należy dołożyć kolejną warstwę materiału. W sytuacjach ekstremalnych, gdy opatrunek uciskowy nie zatrzymuje krwawienia, można zastosować opaskę uciskową (tzw. stazę), ale tylko w ostateczności, gdy inne metody zawiodą. Takie działania mogą zapobiec wstrząsowi krwotocznemu i uratować życie poszkodowanego.

Pytanie 36

W języku C++, zakładając, że przedstawiony fragment kodu poprawnie się skompiluje i zostanie wykonany, to zmiennej liczba przypisana zostanie wartość:

int liczba = rand() % 1000;
A. rzeczywista podzielna przez 1000
B. dowolna pseudolosowa z przedziału typu int
C. pseudolosowa nie większa niż 999
D. równa 1000

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Linia kodu int liczba = rand() % 1000; w języku C++ używa funkcji rand() do generowania liczby pseudolosowej. Funkcja ta zwraca liczbę całkowitą z zakresu od 0 do RAND_MAX zdefiniowanego w standardowej bibliotece C++. Obliczenie rand() % 1000 wykonuje operację modulo na wygenerowanej liczbie, co oznacza, że wynik zawsze będzie liczbą z zakresu od 0 do 999. Jest to powszechna technika używana do ograniczenia zakresu wartości zwracanych przez funkcję rand() do konkretnego przedziału. Takie podejście jest często wykorzystywane do generowania pseudolosowych wartości całkowitych w określonym zakresie, co jest przydatne w wielu zastosowaniach, od prostych programów testowych po bardziej złożone aplikacje symulacyjne. Należy pamiętać, że funkcja rand() generuje liczby pseudolosowe, co oznacza, że sekwencja liczb będzie się powtarzać przy każdym uruchomieniu programu, chyba że zostanie zainicjowana za pomocą funkcji srand() z unikalnym ziarnem. Jest to zgodne z dobrymi praktykami, aby zapewnić różnorodność w generowanych liczbach pseudolosowych, zwłaszcza w kontekście testowania i symulacji komputerowych.

Pytanie 37

Jakie stwierdzenie najlepiej tłumaczy cel podziału programu na funkcje (metody)?

A. Eliminuje potrzebę korzystania ze zmiennych globalnych
B. Ułatwia proces debugowania oraz ponowne wykorzystanie fragmentów kodu
C. Umożliwia skrócenie kodu przez eliminację wszelkich komentarzy
D. Gwarantuje automatyczną kompilację programu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dzielenie programu na funkcje (lub metody) jest jedną z kluczowych zasad programowania strukturalnego i obiektowego. Funkcje pozwalają na podzielenie dużych bloków kodu na mniejsze, łatwiejsze do zarządzania i ponownego wykorzystania fragmenty. Dzięki temu kod jest bardziej czytelny, zrozumiały i łatwiejszy do testowania. Ułatwia to także proces debugowania, ponieważ błędy można izolować w konkretnych funkcjach, zamiast przeszukiwać cały program. Ponadto funkcje umożliwiają wielokrotne używanie tego samego fragmentu kodu, co zwiększa efektywność i eliminuje konieczność powielania kodu, zmniejszając ryzyko błędów.

Pytanie 38

Zmienna o typie logicznym może mieć następujące wartości:

A. trzy dowolne liczby naturalne
B. true, false
C. 0 oraz każda liczba całkowita
D. 1, -1

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Typ logiczny (boolean) może przyjąć jedynie dwie wartości: true (prawda) i false (fałsz). Jest to fundamentalna zasada w programowaniu, ponieważ zmienne logiczne są podstawą operacji warunkowych, pętli oraz sterowania przepływem programu. W językach takich jak C++, Java, Python i wielu innych, wartości logiczne pozwalają na budowanie złożonych struktur decyzyjnych. Dzięki nim programista może precyzyjnie kontrolować, które fragmenty kodu zostaną wykonane, co jest kluczowe w implementacji algorytmów oraz walidacji danych.

Pytanie 39

Jakie z wymienionych narzędzi służy do emulacji mobilnych urządzeń podczas developowania aplikacji?

A. Numpy
B. TensorFlow
C. Genymotion
D. Postman

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Genymotion to jedno z najbardziej zaawansowanych narzędzi do emulacji urządzeń mobilnych podczas tworzenia aplikacji na system Android. Umożliwia symulowanie działania aplikacji na różnych urządzeniach i wersjach systemu Android, co pozwala programistom na testowanie kompatybilności i wydajności aplikacji w różnych warunkach. Genymotion oferuje szybkie emulowanie, obsługę GPS, kamery oraz czujników, co czyni go niezwykle przydatnym narzędziem w procesie rozwoju aplikacji mobilnych. Dzięki wsparciu dla integracji z Android Studio, Genymotion jest popularnym wyborem wśród deweloperów tworzących aplikacje na platformę Android.

Pytanie 40

Jaką instrukcję należy wykorzystać do poprawnej deklaracji zmiennej typu string w C++?

A. int name = "Jan"
B. bool name = "Jan"
C. float name = "Jan"
D. string name = "Jan"

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Ta deklaracja 'string name = "Jan"' to naprawdę dobry sposób na zdefiniowanie zmiennej łańcuchowej w C++. Wiesz, 'string' to typ danych, 'name' to nazwa tej zmiennej, a 'Jan' to wartość, która jest jej przypisana. Typ 'string' jest częścią biblioteki <string> i daje nam wiele możliwości, gdy pracujemy z tekstem. Możemy łączyć, porównywać i modyfikować różne łańcuchy znaków bez większego problemu. To jest mega ważne w aplikacjach, które mają do czynienia z danymi tekstowymi, interfejsami użytkownika czy analizą danych, które wprowadzamy.