Wyniki egzaminu

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

Egzamin niezdany

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

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Po wykonaniu poniższego kodu na konsoli zostanie wyświetlona liczba:

int a = 0x73;
cout << a;
A. 115
B. 0
C. 108
D. 73

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wartość 0x73 w kodzie oznacza liczbę zapisaną w systemie szesnastkowym (heksadecymalnym). To bardzo często wykorzystywana notacja w programowaniu, szczególnie gdy pracuje się z pamięcią, kodowaniem kolorów lub niskopoziomową obsługą sprzętu. 0x73 to po prostu 7 * 16 + 3, co daje 115 w systemie dziesiętnym. Gdy taki zapis przekażesz do cout, kompilator automatycznie prezentuje tę wartość jako liczbę w systemie dziesiętnym, czyli właśnie 115. Szczerze mówiąc, moim zdaniem warto jak najczęściej ćwiczyć odczytywanie i zamianę wartości pomiędzy systemami liczbowymi, bo to się naprawdę przydaje przy analizie kodu, debugowaniu czy choćby rozumieniu dokumentacji technicznej. Taka umiejętność jest praktycznie niezbędna w embedded, ale i w zwykłym C++ można czasem natknąć się na takie zapisy – szczególnie w kodzie legacy. Osobiście uważam, że dobrze od razu rozpoznawać takie zapisy i nie tracić czasu na kalkulatory. Warto też pamiętać, że podobnie działają inne systemy: np. 0b1101 to binarny, a 0x to zawsze heksadecymalny. W standardzie C++ zapis z prefiksem 0x jest w pełni poprawny i zalecany przy pracy z wartościami bitowymi. Fajnie, jak ktoś łapie takie rzeczy od razu, bo później w pracy nad większymi projektami to ogromne ułatwienie.

Pytanie 2

Co to jest CSS Grid?

A. Biblioteka komponentów wizualnych dla aplikacji webowych
B. Dwuwymiarowy system układu elementów na stronie opary na siatkach
C. Metoda optymalizacji plików CSS dla lepszej wydajności strony
D. Format plików graficznych obsługiwany przez CSS3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CSS Grid to nowoczesny, dwuwymiarowy system układu elementów na stronie internetowej, który umożliwia projektantom i deweloperom łatwe i elastyczne tworzenie skomplikowanych układów. Dzięki CSS Grid możemy definiować zarówno kolumny, jak i wiersze, co pozwala na precyzyjne umieszczanie elementów w kontekście całego układu. Przykładem zastosowania CSS Grid może być stworzenie responsywnej galerii zdjęć, gdzie można łatwo zmieniać liczbę kolumn w zależności od szerokości ekranu. CSS Grid jest zgodny z najnowszymi standardami W3C i stał się kluczowym elementem w nowoczesnym web designie. Dzięki właściwościom takim jak grid-template-areas, grid-template-columns, czy grid-auto-rows, projektanci mogą w intuicyjny sposób organizować treści, co poprawia zarówno estetykę, jak i użyteczność stron. Ponadto, korzystanie z CSS Grid pozwala na zmniejszenie zależności od zewnętrznych bibliotek JavaScript do układania elementów, co podnosi wydajność i usprawnia proces tworzenia stron.

Pytanie 3

Wskaż algorytm sortowania, który nie jest stabilny?

A. sortowanie przez wstawianie
B. sortowanie przez zliczanie
C. sortowanie szybkie
D. sortowanie bąbelkowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Sortowanie szybkie (Quick Sort) to algorytm, który faktycznie nie jest stabilny w swojej podstawowej wersji. To znaczy, jeśli w kolekcji są dwa identyczne elementy pod względem klucza sortowania, po wykonaniu Quick Sort ich kolejność względem siebie może się zmienić. Z moich doświadczeń wynika, że to może mieć znaczenie, na przykład gdy sortujemy obiekty według jednego pola, ale chcemy zachować kolejność według innego – czasem w praktyce, np. przy obsłudze rekordów w bazach danych, stabilność sortowania gwarantuje spójność wyników. Quick Sort jest jednak bardzo popularny, bo ogólnie działa bardzo szybko i jest efektywny pamięciowo, stąd często go się używa tam, gdzie stabilność nie jest wymagana. W niektórych implementacjach można próbować uczynić Quick Sort stabilnym, ale wymaga to dodatkowych zabiegów i nie jest standardem – biblioteki standardowe (np. C++ std::sort) właśnie z tego powodu nie gwarantują stabilności Quick Sorta. W praktycznych projektach, jeśli zależy Ci na stabilności, lepiej użyć sortowania przez wstawianie lub przez zliczanie. Sortowanie bąbelkowe i przez wstawianie są wręcz typowe do nauki stabilnych algorytmów, a sortowanie przez zliczanie nawet dla dużych zbiorów cały czas pilnuje kolejności równych elementów. Quick Sort jest świetny, ale warto znać jego ograniczenia, szczególnie w aplikacjach biznesowych albo pracy z dużymi, złożonymi strukturami danych.

Pytanie 4

Jakie będzie działanie przedstawionych dwóch równoważnych fragmentów kodu źródłowego?

Kod w React:

function Heading(props) {
    return (
        <h1> {props.title} </h1>
    );
}

// w metodzie render
return (
    <Heading title="Egzamin zawodowy" />
);

Kod w Angular:
// heading.component.ts
import {Component} from '@angular/core';
@Component({
    selector: 'app-heading',
    templateUrl: './heading.component.html',
    styleUrls: ['./heading.component.css']
})

export class HeadingComponent {
    title:String = "Egzamin zawodowy";
    ...
}

// heading.component.html
<h1>{{title}}</h1>
A. Nadany tytuł strony: "Egzamin zawodowy"
B. Wyświetlony na stronie tekst w akapicie: "Egzamin zawodowy"
C. Nadany tytuł każdego elementu HTML: "Egzamin zawodowy"
D. Wyświetlony na stronie tekst w nagłówku: "Egzamin zawodowy"

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Dokładnie tak – zarówno w React, jak i w Angularze, oba te fragmenty kodu mają za zadanie wyświetlić tekst „Egzamin zawodowy” w nagłówku HTML, czyli w tagu <h1>. To jest klasyczna praktyka w aplikacjach frontendowych. W React przekazujesz wartość props.title do komponentu Heading i renderujesz ją w elemencie <h1>. W Angularze tworzysz pole klasy o nazwie title i korzystasz z interpolacji {{ title }} w szablonie HTML – efekt jest identyczny. Taki sposób podejścia odzwierciedla zasadę jednokierunkowego przepływu danych i rozdzielania logiki od prezentacji, co jest jedną z podstaw nowoczesnych frameworków. Bardzo często nagłówki jak <h1> są wykorzystywane nie tylko dla estetyki, ale i poprawy dostępności oraz SEO strony – roboty wyszukiwarek właśnie z tych tagów czerpią wiedzę o głównym temacie widoku. Spotykałem się wielokrotnie z sytuacjami, gdzie ktoś próbował „upiększać” nagłówki za pomocą CSS, ale zapominał o semantyce i kończył z brakiem <h1> w kodzie – to błąd! Dobrą praktyką jest zawsze korzystanie z odpowiednich tagów HTML. Takie podejście sprawia, że kod jest czytelny, łatwiej go utrzymać i jest bardziej przyjazny dla wszystkich, także osób korzystających np. z czytników ekranu. Poza tym, takie komponenty są świetne do wielokrotnego użytku – możesz przekazać różne wartości „title” do różnych nagłówków strony, nie pisząc tego samego kodu od nowa. Moim zdaniem to jedna z podstawowych, ale bardzo ważnych technik, które każdy frontendowiec powinien ogarniać.

Pytanie 5

Jakie jest oznaczenie normy międzynarodowej?

A. CE
B. EN
C. PN
D. ISO

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
ISO (International Organization for Standardization) to międzynarodowa organizacja zajmująca się opracowywaniem i wdrażaniem standardów technicznych. Oznaczenie ISO wskazuje, że produkt lub usługa spełnia międzynarodowe normy jakości i bezpieczeństwa, co ułatwia handel oraz współpracę na arenie międzynarodowej. Normy ISO obejmują szeroki zakres dziedzin, takich jak zarządzanie jakością (ISO 9001), zarządzanie środowiskowe (ISO 14001) czy bezpieczeństwo informacji (ISO 27001). Certyfikacja ISO buduje zaufanie klientów i zwiększa konkurencyjność firmy na rynku globalnym.

Pytanie 6

Które zdarzenie w JavaScript jest wywoływane po całkowitym załadowaniu strony?

A. document.ready
B. page.complete
C. window.render
D. window.onload

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Odpowiedź "window.onload" jest poprawna, ponieważ zdarzenie to jest wywoływane, gdy cała strona, w tym wszystkie obrazy, skrypty i style, zostały całkowicie załadowane. Jest to niezwykle istotne w kontekście programowania w JavaScript, ponieważ pozwala na pewność, że wszystkie zasoby są dostępne, zanim podejmiemy jakiekolwiek działania na elementach DOM. Przykładowo, jeśli chcemy zmienić zawartość elementu na stronie lub dodać do niej interaktywne funkcje, musimy upewnić się, że cały dokument jest już w pełni załadowany. Dobrym przykładem zastosowania jest sytuacja, kiedy po załadowaniu strony chcemy zainicjować jakieś skrypty, które manipulują elementami DOM, na przykład dodanie zdarzeń do przycisków lub animacji. Współczesne standardy wskazują na stosowanie tego zdarzenia w połączeniu z innymi metodami, jak np. "DOMContentLoaded", co pozwala na bardziej efektywne zarządzanie ładowaniem zasobów. Warto zaznaczyć, że chociaż "window.onload" jest użyteczne, w wielu nowoczesnych aplikacjach front-end używa się frameworków, które mogą oferować bardziej zaawansowane mechanizmy zarządzania cyklem życia aplikacji.

Pytanie 7

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

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 8

W języku Python, jak nazywa się funkcja, która jest wykonywana automatycznie, gdy obiekt jest niszczony?

A. __str__
B. __init__
C. __del__
D. __repr__

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W Pythonie funkcja <code>__del__</code> to metoda destruktora, która jest wywoływana, gdy obiekt jest niszczony. Jest to część procesu zarządzania pamięcią, gdzie interpreter Pythona automatycznie usuwa obiekty, które nie są już potrzebne, aby zwolnić pamięć. <code>__del__</code> pozwala na wykonanie dodatkowych czynności przed ostatecznym usunięciem obiektu, takich jak zamknięcie plików czy połączeń sieciowych. Warto jednak pamiętać, że użycie <code>__del__</code> nie jest zalecane do zarządzania zasobami, ponieważ może prowadzić do trudnych do zdiagnozowania błędów, szczególnie gdy obiekty są usuwane w nieprzewidywalnym momencie. Zamiast tego, lepiej jest używać menedżerów kontekstu (z instrukcją <code>with</code>), które zapewniają bardziej kontrolowane i bezpieczne zwalnianie zasobów. Przykładowo, otwierając plik za pomocą <code>with open('plik.txt', 'r') as f:</code>, masz pewność, że plik zostanie zamknięty poprawnie po zakończeniu bloku kodu, niezależnie od tego, czy wystąpił błąd.

Pytanie 9

Które z wymienionych sformułowań najlepiej definiuje oprogramowanie typu ransomware?

A. Oprogramowanie uniemożliwiające dostęp do danych w celu wymuszenia zapłaty
B. Programy zbierające prywatne dane bez zgody użytkownika
C. Oprogramowanie stosowane do realizacji ataków DDoS
D. Złośliwe aplikacje wyświetlające reklamy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Oprogramowanie typu ransomware to rodzaj złośliwego oprogramowania, które ma na celu zablokowanie dostępu do danych użytkownika, a następnie wymuszenie okupu w zamian za ich przywrócenie. Ransomware działa na zasadzie szyfrowania plików na zainfekowanym urządzeniu, co uniemożliwia użytkownikowi korzystanie z danych. Po dokonaniu szyfrowania, ofiara otrzymuje wiadomość z żądaniem okupu, zazwyczaj w kryptowalutach, które mają na celu anonimowość transakcji. Przykłady ransomware to oprogramowanie takie jak WannaCry oraz Petya, które spowodowały globalne ataki, skutkując znacznymi stratami finansowymi dla wielu organizacji. Zgodnie z definicjami i standardami, takimi jak NIST (National Institute of Standards and Technology), ransomware jest klasyfikowane jako jedno z najpoważniejszych zagrożeń dla bezpieczeństwa informacji. Warto również zauważyć, że ransomware rozwija się, a jego twórcy stosują różne techniki, aby zwiększyć skuteczność ataków, takie jak wykorzystywanie luk w oprogramowaniu oraz phishing, aby zainfekować systemy użytkowników.

Pytanie 10

Jakie znaczenie ma określenie "klasa zaprzyjaźniona" w kontekście programowania obiektowego?

A. Klasa, w której wszystkie komponenty są publiczne
B. Klasa, która nie ma możliwości zawierania metod statycznych
C. Klasa, która ma dostęp do prywatnych i chronionych elementów innej klasy
D. Klasa, która może być dziedziczona przez inne klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Klasa zaprzyjaźniona (ang. 'friend class') to klasa, która ma dostęp do prywatnych i chronionych składowych innej klasy, dzięki specjalnej deklaracji 'friend' wewnątrz tej klasy. Jest to kluczowe narzędzie w programowaniu obiektowym, które umożliwia ściślejszą współpracę między klasami, jednocześnie zapewniając hermetyzację kodu w miejscach, gdzie jest to wymagane. Używanie klas zaprzyjaźnionych umożliwia bardziej efektywne zarządzanie zależnościami między klasami, co jest istotne w dużych projektach programistycznych. Klasy zaprzyjaźnione są często stosowane w bibliotekach standardowych i frameworkach, pozwalając na eleganckie rozwiązania problemów związanych z ukrywaniem implementacji i udostępnianiem tylko niezbędnych fragmentów kodu innym komponentom systemu.

Pytanie 11

Jakie jest zastosowanie języka XAML przy tworzeniu aplikacji desktopowych?

A. Do optymalizacji działania aplikacji
B. Do projektowania graficznego interfejsu użytkownika
C. Do obsługi zdarzeń klawiatury
D. Do zarządzania bazami danych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
XAML (Extensible Application Markup Language) to język znaczników wykorzystywany w technologii WPF (Windows Presentation Foundation) oraz UWP (Universal Windows Platform) do projektowania graficznego interfejsu użytkownika (GUI). XAML pozwala na definiowanie układów, przycisków, etykiet oraz innych elementów interaktywnych w aplikacjach desktopowych. Dzięki XAML, projektowanie interfejsu jest intuicyjne, a kod interfejsu jest oddzielony od logiki aplikacji, co sprzyja przejrzystości projektu. XAML wspiera animacje, style i szablony, co umożliwia budowę nowoczesnych, dynamicznych aplikacji. Jego elastyczność i możliwość współpracy z C# sprawiają, że XAML jest niezastąpiony w środowisku Windows.

Pytanie 12

Jakie środki ochrony zbiorowej najlepiej chronią kręgosłup w warunkach pracy biurowej?

A. Regulowanie poziomu oświetlenia w biurze
B. Korzystanie z regulowanych krzeseł i biurek
C. Ograniczenie hałasu w pomieszczeniu
D. Umieszczanie monitorów na wysokości oczu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Używanie regulowanych foteli i biurek to jeden z najlepszych sposobów na zapobieganie problemom z kręgosłupem w pracy biurowej. Ergonomiczne fotele pozwalają na dostosowanie wysokości siedziska, podparcia lędźwiowego oraz kąta nachylenia oparcia, co zapewnia optymalne wsparcie dla kręgosłupa i zmniejsza ryzyko bólu pleców. Regulowane biurka umożliwiają zmianę pozycji pracy – z siedzącej na stojącą – co redukuje obciążenie kręgosłupa i poprawia krążenie krwi. Ergonomia stanowiska pracy to kluczowy element profilaktyki zdrowotnej, który minimalizuje ryzyko dolegliwości związanych z długotrwałą pracą w jednej pozycji.

Pytanie 13

Jakie narzędzie może zostać wykorzystane do automatyzacji testów aplikacji internetowych?

A. Visual Studio Code
B. Selenium
C. Blender
D. Postman

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Selenium to jedno z najpopularniejszych narzędzi do automatycznego testowania aplikacji webowych. Umożliwia symulowanie interakcji użytkownika z przeglądarką, takich jak kliknięcia, wypełnianie formularzy, przewijanie stron i nawigowanie po witrynie. Dzięki Selenium możliwe jest testowanie aplikacji w różnych przeglądarkach (np. Chrome, Firefox, Safari) oraz na różnych systemach operacyjnych. Narzędzie to jest nieocenione w testach regresyjnych, funkcjonalnych i integracyjnych, ponieważ pozwala na automatyzację powtarzalnych czynności, co znacząco przyspiesza proces testowania. Selenium integruje się z wieloma językami programowania, w tym Python, Java i C#, co czyni je wszechstronnym i uniwersalnym narzędziem w ekosystemie deweloperskim.

Pytanie 14

Jaki typ pamięci RAM powinno się wybrać do efektywnego komputera do gier?

A. DDR4
B. DDR5
C. LPDDR4
D. DDR3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wybór odpowiedniego rodzaju pamięci RAM jest kluczowy dla osiągnięcia maksymalnej wydajności w komputerze gamingowym. DDR5, najnowszy standard pamięci dynamicznej RAM, oferuje znaczące ulepszenia w porównaniu do swoich poprzedników. Główne różnice dotyczą prędkości, efektywności energetycznej oraz pojemności. DDR5 może oferować prędkości sięgające 8400 MT/s, co przyczynia się do szybszego transferu danych, co ma bezpośredni wpływ na wydajność gier i aplikacji wymagających wysokiej przepustowości. Ponadto, DDR5 wprowadza architekturę, która pozwala na zwiększenie ilości pamięci w jednym module, co umożliwia konfiguracje do 128 GB na pojedynczy moduł, co jest niezwykle korzystne dla graczy korzystających z bardziej wymagających tytułów. Przykłady gier, które potrafią w pełni wykorzystać możliwości DDR5 to Cyberpunk 2077 czy Call of Duty: Warzone, gdzie wydajność pamięci jest kluczowym elementem w uzyskiwaniu płynności rozgrywki. Stosowanie DDR5 nie tylko poprawia wydajność, ale również zwiększa przyszłościowość sprzętu, co sprawia, że jest to najlepszy wybór na dzisiejszym rynku komputerów gamingowych.

Pytanie 15

Jak zostanie przedstawiony poniższy kod XAML?

Ilustracja do pytania
A. Rysunek 3
B. Rysunek 1
C. Rysunek 4
D. Rysunek 2

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W przedstawionym kodzie XAML widoczna jest struktura składająca się z kilku elementów UI ułożonych w pionowym StackLayout co skutkuje wyświetleniem ich w pionowej kolejności. Pierwszym elementem jest Entry z placeholderem Imię a kolejnym Entry z placeholderem Nazwisko co determinuje obecność dwóch pól tekstowych tak jak w Rysunku 4. Następnie w kodzie znajduje się poziomy StackLayout z etykietą Zgoda RODO i przełącznikiem ustawionym na wartość true co oznacza że przełącznik jest domyślnie włączony. To również odpowiada widokowi na Rysunku 4. Kolejny element to Slider z ustawionymi kolorami MinimumTrackColor i MaximumTrackColor co pozwala na zmianę koloru paska suwaka co również jest widoczne w Rysunku 4. Na końcu znajduje się Button z tekstem Zapisz i jest to jedyny przycisk w całym układzie co także zgadza się z Rysunkiem 4. Rozumienie kodu XAML i jego renderowania jest kluczowe w tworzeniu aplikacji mobilnych ponieważ pozwala na precyzyjne określenie wyglądu i funkcjonalności interfejsu użytkownika i jest zgodne z najlepszymi praktykami w projektowaniu UI.

Pytanie 16

Z jakiej kolekcji powinno się korzystać, aby przechowywać informacje związane z elementem interfejsu użytkownika w taki sposób, aby ten element był informowany przez kolekcję o dodaniu, usunięciu lub zmianie jej zawartości?

A. KeyedCollection
B. ReadOnlyCollection
C. Collection
D. ObservableCollection

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
ObservableCollection to zdecydowanie najlepszy wybór w sytuacji, gdy zachodzi potrzeba powiadamiania elementów interfejsu użytkownika o zmianach w kolekcji. W praktyce, kiedy pracujesz np. z WPF, UWP albo MAUI, to ObservableCollection automatycznie informuje UI o dodaniu, usunięciu czy modyfikacji elementów. Wszystko dzięki temu, że implementuje interfejs INotifyCollectionChanged. Moim zdaniem praktyczne zastosowanie jest mega – gdy masz np. listę produktów, która wyświetla się użytkownikowi, to po prostu dokładasz lub usuwasz elementy z ObservableCollection i nie musisz ręcznie odświeżać widoku. Framework sam ogarnia powiązanie danych, bo kolekcja emituje zdarzenia CollectionChanged. Takie podejście jest spójne z zasadami MVVM i ogólnie promowane przez Microsoft w oficjalnych dokumentacjach. Często spotkać można rozwiązania, gdzie ktoś używa zwykłej List lub Collection, ale wtedy tracisz te automatyczne powiadomienia i pojawia się masa kodu-boilerplate. Szczerze mówiąc, nie widzę sensu kombinować z innymi kolekcjami, jeśli zależy Ci na dynamicznym, responsywnym UI. ObservableCollection to po prostu standard branżowy w .NET, jak dla mnie nie ma lepszej opcji na takie zastosowania.

Pytanie 17

Które z poniższych NIE jest typem wartości zwracanej przez funkcję w języku JavaScript?

A. Method
B. Number
C. Object
D. Undefined

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W języku JavaScript funkcje mogą zwracać różne typy wartości, takie jak obiekty, liczby czy typ undefined. Wśród wymienionych opcji, 'Method' nie jest typem wartości zwracanej przez funkcję. W rzeczywistości, metoda w JavaScript to funkcja przypisana do obiektu. Jeżeli definiujemy funkcję wewnątrz obiektu, to możemy ją nazwać metodą tego obiektu, ale nie jest to typ wartości. Przykładowo, jeżeli mamy obiekt o nazwie 'person' i metodę 'greet', która zwraca powitanie: const person = { name: 'Jan', greet: function() { return 'Cześć, ' + this.name; } }; W powyższym przypadku, 'greet' jest metodą, ale jej wartością zwracaną jest typ string, co jest typowym zachowaniem funkcji. Dobrą praktyką jest zrozumienie różnicy między funkcjami a ich zastosowaniami w obiektach, co pozwala na lepsze projektowanie kodu oraz ukierunkowanie na zasady programowania obiektowego, które są kluczowe w JavaScript.

Pytanie 18

Który z wymienionych typów stanowi przykład typu znakowego?

A. string
B. char
C. boolean
D. float

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Typ 'char' to przykład typu znakowego, który przechowuje pojedynczy znak (litera, cyfra, symbol). W językach takich jak C++, Java czy C, typ 'char' zajmuje jeden bajt pamięci i jest podstawą do obsługi operacji tekstowych oraz przetwarzania danych wejściowych. Typy znakowe są często wykorzystywane do manipulacji łańcuchami tekstowymi, przechowywania kodów ASCII i pracy z danymi wejściowymi. Znaki są podstawowym elementem budowy tekstów i mogą być łączone w tablice (ciągi znaków) lub przetwarzane indywidualnie.

Pytanie 19

W jakiej okoliczności należy umieścić poszkodowanego w pozycji bezpiecznej?

A. Gdy poszkodowany cierpi na krwotok zewnętrzny
B. Gdy poszkodowany jest nieprzytomny, ale oddycha
C. Gdy poszkodowany nie oddycha
D. Gdy poszkodowany jest świadomy, lecz ma uraz kończyny

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pozycja bezpieczna (czyli pozycja boczna ustalona) to jedno z kluczowych narzędzi w udzielaniu pierwszej pomocy. Stosuje się ją wtedy, gdy poszkodowany jest nieprzytomny, ale oddycha samodzielnie i nie ma podejrzenia urazu kręgosłupa. Chodzi przede wszystkim o zabezpieczenie dróg oddechowych przed ewentualnym zadławieniem np. przez ślinę, krew czy wymiociny. Niby proste, ale w praktyce często ludzie mają wątpliwości, czy powinni ruszać nieprzytomną osobę. Ja sam widziałem jak ktoś bał się tego zrobić, bo nie był pewny, czy to bezpieczne. Moim zdaniem lepiej tu działać niż zwlekać – oczywiście, jeśli nie podejrzewasz złamania kręgosłupa. Ważne jest, by pozycję bezpieczną stosować dopiero po sprawdzeniu oddechu – to naprawdę podstawa i tak uczą na wszystkich szkoleniach BLS według standardów Europejskiej Rady Resuscytacji. Przykład z życia: ktoś zasłabł na przystanku, jest nieprzytomny, ale oddycha. Przekręcasz go na bok, głowa odchylona, żeby język nie zablokował gardła – i masz spokój, dużo zmniejszone ryzyko uduszenia. Warto też pamiętać, że trzeba regularnie monitorować stan poszkodowanego, bo sytuacja może się pogorszyć, wtedy przechodzisz do resuscytacji. Pozycja bezpieczna to taki złoty środek kiedy nie musisz jeszcze reanimować, ale musisz chronić życie przez zabezpieczenie oddechu.

Pytanie 20

Co to jest CI/CD w kontekście rozwoju oprogramowania?

A. Ciągła integracja i ciągłe dostarczanie - praktyki automatyzujące proces wdrażania kodu
B. Component Isolation/Component Deployment - izolacja i wdrażanie komponentów aplikacji
C. Customer Interface/Customer Design - projektowanie interfejsów zorientowane na klienta
D. Code Implementation/Code Delivery - metodyka implementacji i dostarczania kodu

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
CI/CD, czyli ciągła integracja i ciągłe dostarczanie, to zbiór praktyk i narzędzi stosowanych w rozwoju oprogramowania w celu automatyzacji procesów budowy, testowania i wdrażania aplikacji. CI polega na regularnym integrowaniu kodu do wspólnego repozytorium, co pozwala na wczesne wykrywanie błędów i konfliktów. Umożliwia to zespołom deweloperskim wykrywanie problemów w kodzie na wczesnym etapie, co znacząco przyspiesza cykl rozwoju. CD natomiast odnosi się do automatyzacji procesu wdrażania aplikacji na środowiska produkcyjne, co minimalizuje czas potrzebny na dostarczenie nowych funkcji do użytkowników. Przykłady praktycznego zastosowania CI/CD obejmują użycie narzędzi takich jak Jenkins, GitLab CI, czy CircleCI, które umożliwiają automatyczne uruchamianie testów oraz wdrażanie aplikacji na różnych platformach. Dobre praktyki w CI/CD obejmują tworzenie małych i częstych aktualizacji, co pozwala na łatwiejsze zarządzanie projektami i szybsze reagowanie na potrzeby klientów.

Pytanie 21

Jakie rozwiązanie jest najbardziej odpowiednie przy projektowaniu aplikacji, która ma funkcjonować na różnych systemach operacyjnych?

A. Koncentrowanie się wyłącznie na estetyce aplikacji
B. Opracowanie dedykowanego kodu dla każdej platformy
C. Wykorzystanie technik responsywnego projektowania interfejsu
D. Pełne dopasowanie aplikacji do systemu Windows

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wykorzystanie technik responsywnego projektowania interfejsu to obecnie jedno z najskuteczniejszych rozwiązań, jeśli chodzi o tworzenie aplikacji działających na różnych systemach operacyjnych. Moim zdaniem, to podejście daje największą elastyczność i wygodę zarówno dla użytkownika, jak i dla samego zespołu developerskiego. Responsywność nie sprowadza się tylko do zmiany rozmiaru okna, ale także do automatycznego dostosowania elementów interfejsu do różnych rozdzielczości, DPI czy nawet gestów obsługiwanych przez konkretne urządzenia. Dzięki temu aplikacja może wyglądać i działać spójnie niezależnie od tego, czy uruchamiana jest na Windowsie, MacOS, Linuksie czy nawet na mobilnych systemach operacyjnych. W praktyce często korzysta się z frameworków takich jak Flutter, React Native albo Electron, które już "z pudełka" oferują narzędzia do tworzenia responsywnych, wieloplatformowych aplikacji. Branżowe standardy, szczególnie te, które dotyczą UX/UI (na przykład wytyczne Material Design czy Human Interface Guidelines od Apple), mocno podkreślają wagę responsywności i uniwersalności rozwiązań. Co ciekawe, dobrze zaprojektowana responsywna aplikacja jest też łatwiejsza w utrzymaniu i rozwoju, bo zamiast kilku osobnych wersji kodu, mamy jedną, dobrze przemyślaną bazę. To oszczędza czas, zasoby i minimalizuje ryzyko powstawania błędów. Sam przećwiczyłem wiele takich przypadków i widać, że inżynieria oprogramowania idzie właśnie w stronę uniwersalnych, "adaptacyjnych" rozwiązań.

Pytanie 22

Który z poniższych procesów jest wyłącznie związany z kompilowaniem kodu?

A. Real-time translation of instructions
B. Generating an executable file
C. Detection of logical errors during program execution
D. Executing code step by step

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Generowanie pliku wykonywalnego to jeden z najważniejszych kroków w kompilacji. Kiedy kod źródłowy zostaje przetworzony na język maszynowy, kompilator tworzy plik binarny, który można uruchomić na odpowiednim systemie operacyjnym. Taki plik jest samodzielny, więc nie trzeba go za każdym razem kompilować od nowa przy uruchamianiu. Dzięki kompilacji można też zoptymalizować kod, co jest mega ważne, zwłaszcza przy większych projektach. W przeciwieństwie do interpretacji, gdzie kod działa na bieżąco, kompilacja pozwala wyłapać błędy wcześniej i poprawić wydajność aplikacji. Moim zdaniem, to naprawdę spora zaleta!

Pytanie 23

Które z wymienionych środowisk programistycznych jest rekomendowane do developing aplikacji w języku Python z użyciem frameworka Django?

A. PyCharm
B. Android Studio
C. Unity
D. XCode

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
PyCharm to jedno z najbardziej zaawansowanych środowisk programistycznych (IDE) dedykowanych do tworzenia aplikacji w języku Python. Jest to narzędzie preferowane przez programistów korzystających z frameworka Django, który jest popularnym rozwiązaniem do budowy aplikacji webowych. PyCharm oferuje rozbudowane wsparcie dla Django, umożliwiając szybkie tworzenie projektów, integrację z bazami danych oraz wygodne debugowanie aplikacji. IDE zapewnia również możliwość uruchamiania serwerów deweloperskich, podglądu zmian w czasie rzeczywistym oraz automatyczne uzupełnianie kodu, co znacząco zwiększa efektywność pracy nad aplikacjami webowymi. Dzięki PyCharm programiści mogą łatwo zarządzać migracjami bazy danych, tworzyć modele i szablony, co sprawia, że jest to narzędzie nieocenione w ekosystemie Django.

Pytanie 24

Który z komponentów interfejsu użytkownika umożliwia użytkownikowi wprowadzanie danych tekstowych?

A. Przycisk
B. Dialog wyboru pliku
C. Pasek narzędziowy
D. Pole tekstowe

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pole tekstowe to element interfejsu użytkownika, który pozwala użytkownikowi na wprowadzanie danych tekstowych. Jest to jeden z najczęściej używanych komponentów UI w aplikacjach desktopowych, mobilnych i webowych. Pole tekstowe umożliwia wprowadzanie haseł, adresów e-mail, wiadomości i innych danych. W nowoczesnych aplikacjach często zawiera walidację, która sprawdza poprawność wpisywanych danych w czasie rzeczywistym. Dzięki swojej elastyczności, pola tekstowe mogą być wykorzystywane w różnorodnych formularzach, ankietach i systemach rejestracji użytkowników, co czyni je nieodzownym elementem aplikacji o dowolnym przeznaczeniu.

Pytanie 25

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. B
B. D
C. C
D. A

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
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 26

W wyniku realizacji zaprezentowanego kodu na ekranie pojawią się:

int tablica[10];

for (int i = 0; i < 10; i++) {
    if (i % 3 != 0)
        std::cout << tablica[i] << ", ";
}
A. elementy z indeksów tablicy, które są podzielne przez 3
B. elementy tablicy o indeksach: 1, 2, 4, 5, 7, 8
C. wszystkie elementy tablicy, które mają wartość nieparzystą
D. wszystkie elementy tablicy, które są wielokrotnością 3

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tym zadaniu najważniejsze było zrozumienie warunku if oraz sposobu działania instrukcji for. Kod przechodzi po wszystkich elementach tablicy o 10 pozycjach, ale wyświetla tylko te, dla których indeks nie jest podzielny przez 3. Sprawdzenie tego realizuje się przez resztę z dzielenia: i % 3 != 0. Czyli dla i=0,3,6,9 warunek nie zostanie spełniony, więc te elementy zostaną pominięte. Zostaną więc wyświetlone elementy o indeksach 1, 2, 4, 5, 7, 8. To jest bardzo popularny patent w programowaniu, kiedy chcemy pominąć pewne elementy w tablicy lub kolekcji na podstawie prostego warunku logicznego. Często używa się podobnych konstrukcji przy analizie danych, np. przy wykluczaniu co któregoś rekordu z przetwarzania, czy też przy operacjach na grafach lub macierzach. Moim zdaniem warto zapamiętać taki sposób sprawdzania, bo pozwala pisać kod bardziej czytelny i łatwy do modyfikacji. Z mojego doświadczenia, gdy programuje się coś na konkursy albo optymalizuje zadania, takie triki z modulo przyspieszają proces myślowy. Dodam jeszcze, że domyślne wartości w tablicy typu int nie są zainicjalizowane, więc wynik jest zależny od środowiska, ale w tym pytaniu chodzi tylko o indeksy, nie wartości.

Pytanie 27

Który z podanych terminów najlepiej odnosi się do składnika statycznego w klasie?

A. Pole lub metoda, która jest przypisana do klasy, a nie do jej instancji
B. Funkcja, która wywołuje destruktor danej klasy
C. Metoda z dostępem ograniczonym tylko do tej samej klasy
D. Zmienna lokalna wewnątrz danej klasy

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Składnik statyczny klasy to pole lub metoda, która należy do klasy jako całości, a nie do konkretnego obiektu. Oznacza to, że istnieje tylko jedna kopia składnika statycznego współdzielona przez wszystkie obiekty tej klasy. Przykład w C++: `class Licznik { public: static int liczbaObiektow; }`. Zmienna `liczbaObiektow` przechowuje liczbę utworzonych instancji klasy i jest wspólna dla wszystkich obiektów. Składniki statyczne są często używane do implementacji liczników, zarządzania zasobami lub przechowywania danych globalnych w obrębie klasy.

Pytanie 28

Jakie są główne różnice między środowiskiem RAD (Rapid Application Development) a klasycznymi IDE w odniesieniu do aplikacji mobilnych?

A. RAD pozwala na szybsze budowanie aplikacji dzięki narzędziom do wizualnego designu i automatycznego generowania kodu
B. RAD koncentruje się wyłącznie na procesie debugowania aplikacji
C. RAD działa tylko na urządzeniach z systemem iOS
D. RAD nie obsługuje interfejsu użytkownika

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
RAD (Rapid Application Development) umożliwia szybsze tworzenie aplikacji mobilnych dzięki narzędziom do wizualnego projektowania i automatycznego generowania kodu. RAD koncentruje się na iteracyjnym podejściu do rozwoju oprogramowania, w którym prototypy są budowane i testowane w krótkich cyklach, co pozwala na szybkie dostosowywanie aplikacji do zmieniających się wymagań użytkowników. W kontekście aplikacji mobilnych, RAD skraca czas tworzenia poprzez graficzne narzędzia do budowy interfejsów, gotowe komponenty oraz integrację z backendem. Frameworki RAD, takie jak OutSystems, Mendix czy Flutter, pozwalają na szybkie wdrażanie i modyfikację aplikacji mobilnych, co znacząco zwiększa efektywność programistów.

Pytanie 29

Jakie znaczenie ma poziom dostępności AAA w WCAG 2.0?

A. Dostosowanie tylko do użytkowników mobilnych
B. Średni standard dostępności
C. Najwyższy poziom dostępności
D. Najnizszy poziom dostępności

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Poziom dostępności AAA w WCAG 2.0 oznacza najwyższy standard dostępności, który ma na celu zapewnienie, że treści internetowe są dostępne dla wszystkich użytkowników, w tym osób z różnymi rodzajami niepełnosprawności. WCAG, czyli Wytyczne dotyczące dostępności treści internetowych, są międzynarodowym standardem, który definiuje, jak tworzyć dostępne treści. Poziom AAA obejmuje wszystkie wytyczne z poziomów A i AA oraz dodatkowe wymagania, które są bardziej rygorystyczne. Przykładem może być konieczność zapewnienia alternatywnych opisów dla wszystkich mediów, w tym dla materiałów wideo i audio, a także użycie odpowiednich kontrastów kolorystycznych. W praktyce oznacza to, że strony internetowe muszą być projektowane z myślą o właściwej nawigacji, dostępnym oprogramowaniu czytającym oraz dostosowanych formatach tekstowych, które są łatwe do przetwarzania przez osoby z różnymi ograniczeniami. Wdrożenie poziomu AAA jest wyzwaniem, ale przyczynia się do bardziej inkluzywnego środowiska online.

Pytanie 30

Klasa Mieszkaniec zawiera atrybuty: imie, nazwisko, ulica, nrDomu, rokUrodzenia. W tej klasie umieszczono opisane poniżej konstruktory (zapisano jedynie typy argumentów). Do tworzenia obiektu za pomocą konstruktora kopiującego wykorzystany będzie konstruktor określony w punkcie

A. Mieszkaniec(string, string, string, int, int);
B. Mieszkaniec(string, string);
C. Mieszkaniec();
D. Mieszkaniec(Mieszkaniec&);

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Konstruktor kopiujący to taka fajna metoda, która pozwala nam stworzyć nowy obiekt, będący kopią innego obiektu tej samej klasy. To naprawdę ważny element w programowaniu obiektowym, bo dzięki niemu możemy tworzyć nowe instancje bez konieczności ręcznego wpisywania wartości pól. Taki konstruktor kopiujący dba o to, żeby dane były spójne i integralne, co jest super istotne, zwłaszcza przy obiektach, które mają wskaźniki lub potrzebują dynamicznie przydzielanej pamięci.

Pytanie 31

Jakie jest zadanie interpretera?

A. analiza składni całego programu przed jego uruchomieniem
B. optymalizacja większej części kodu, aby przyspieszyć jego wykonanie
C. tłumaczenie kodu na kod maszynowy
D. wykonywanie skryptu krok po kroku

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Interpreter to takie narzędzie, które wykonuje kod linijka po linijce. Działa to tak, że odczytuje program napisany w języku wysokiego poziomu, weryfikuje co tam w nim siedzi i od razu realizuje polecenia, co sprawia, że można fajnie testować kod. Na przykład w Pythonie można łatwo sprawdzić różne fragmenty kodu, co jest mega pomocne przy pisaniu i poprawianiu oprogramowania. Wiesz, od kompilatora różni się tym, że kompilator przetwarza cały kod od razu, tworząc kod maszynowy, który później działa na komputerze. Dzięki temu interpreter jest bardziej elastyczny, można szybko przetestować nowe pomysły, ale z drugiej strony, czasami nie działa tak efektywnie jak skompilowane programy, bo każda linia kodu jest analizowana na bieżąco. Więc w przypadku dużych i wymagających aplikacji lepiej sprawdzają się kompilatory, ale interpreter to skarb, zwłaszcza w nauce i prototypowaniu.

Pytanie 32

Jak nazywa się wzorzec projektowy, do którego odnosi się ta definicja?

Wzorzec projektowy należący do grupy wzorców strukturalnych. Służy do ujednolicenia dostępu do złożonego systemu poprzez wystawienie uproszczonego, uporządkowanego interfejsu programistycznego, który ułatwia jego użycie.
Źródło Wikipedia. Wolna encyklopedia
A. Fasada
B. Dekorator
C. Prototyp
D. Kompozyt

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wzorzec projektowy Fasada jest jednym z kluczowych wzorców strukturalnych używanych w inżynierii oprogramowania. Jego głównym celem jest uproszczenie i ujednolicenie interakcji z złożonym systemem poprzez wystawienie uproszczonego i uporządkowanego interfejsu programistycznego. Fasada ukrywa złożoność systemu, zapewniając jednolity punkt dostępu do zestawu funkcji lub klas. W praktyce fasada jest używana do tworzenia prostych interfejsów dla bardziej złożonych bibliotek lub systemów, co ułatwia ich użycie przez programistów. Na przykład w systemie bankowym fasada może zintegrować różne usługi jak autoryzacja płatności, zarządzanie kontami i generowanie wyciągów, oferując jeden interfejs do ich obsługi. Fasada wspiera dobre praktyki poprzez promowanie niskiej zależności i wysokiej spójności. Zmiany w wewnętrznym działaniu systemu są mniej widoczne na zewnątrz, co zwiększa elastyczność systemu. Fasada jest zgodna z zasadą projektowania SOLID, zwłaszcza z zasadą pojedynczej odpowiedzialności, umożliwiając lepsze zarządzanie kodem i jego utrzymanie. Jej użycie jest powszechne w systemach złożonych, gdzie upraszczanie interfejsów jest kluczowe dla efektywności programistycznej i skalowalności systemu.

Pytanie 33

Jakie jest podstawowe zadanie funkcji zaprzyjaźnionej w danej klasie?

A. Umożliwienie funkcji dostępu do prywatnych atrybutów klasy
B. Dodawanie nowych instancji do klasy
C. Ograniczenie widoczności atrybutów klasy
D. Generowanie kopii pól obiektu w innej klasie

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Funkcja zaprzyjaźniona umożliwia dostęp do prywatnych i chronionych składowych klasy, z którą jest zaprzyjaźniona. To mechanizm, który pozwala na utrzymanie hermetyzacji, jednocześnie umożliwiając wybranym funkcjom lub klasom bezpośredni dostęp do wewnętrznych danych innej klasy. Funkcje zaprzyjaźnione często są stosowane do operacji, które wymagają dostępu do wewnętrznych danych klasy, ale nie powinny być jej metodami, np. operacje arytmetyczne lub porównawcze na obiektach tej klasy.

Pytanie 34

Który fragment kodu ilustruje zastosowanie rekurencji?

Blok 1:
int fn(int a) {
  if(a==1) return 1;
  return fn(a-1)+2;
}
Blok 2:
int fn(int a) {
  if(a==1) return 1;
  return (a-1)+2;
}
Blok 3:
int fn(int a) {
  if(a==1) return 1;
  return fun(a-1)+2;
}
Blok 4:
int fn(int a) {
  if(a==1) return 1;
  return 2;
}
A. Blok 2
B. Blok 3
C. Blok 4
D. Blok 1

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Blok 1 to typowy przykład rekurencji, czyli sytuacji, gdy funkcja wywołuje samą siebie z innym argumentem (tutaj fn(a-1)). Takie podejście pojawia się w programowaniu bardzo często, szczególnie przy rozwiązywaniu problemów, gdzie rozwiązanie można rozbić na mniejsze, podobne zadania. W Bloku 1 mamy tzw. przypadek bazowy (if(a==1) return 1), czyli moment, w którym dalsza rekurencja się zatrzymuje – bez tego każdy program rekurencyjny skończyłby się przepełnieniem stosu i błędem. Moim zdaniem, dobrze rozumiana rekurencja to jedna z podstaw algorytmiki – spotyka się ją choćby przy obliczaniu silni, ciągu Fibonacciego czy w algorytmach przeszukiwania struktur drzewiastych, np. w operacjach na drzewach binarnych. W praktyce branżowej warto wiedzieć, że rekurencja bywa bardzo elegancka i skraca kod, ale trzeba ją stosować z głową – łatwo przekroczyć limity stosu przy zbyt głębokim wywołaniu albo zapomnieć o przypadku bazowym, przez co program nie kończy działania. W standardach wielu języków (np. C, Java) rekurencja jest narzędziem jak każde inne, ale zawsze powinna być projektowana z myślą o czytelności i efektywności rozwiązania. Często spotykam się z sytuacją, gdzie początkujący próbują wszystko rozwiązywać rekurencyjnie, a to nie zawsze jest optymalne – niektóre problemy lepiej rozwiązać iteracyjnie, choćby ze względu na wydajność. W tym konkretnym kodzie zastosowanie rekurencji jest klasyczne i poprawne, więc zdecydowanie jest to dobry wzór do nauki.

Pytanie 35

Jakie z poniższych narzędzi wspomaga projektowanie interfejsu użytkownika w aplikacjach mobilnych?

A. PyCharm Debugger
B. Narzędzie do zarządzania bazami danych
C. Kompilator Javy
D. Android Studio Layout Editor

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Android Studio Layout Editor to narzędzie umożliwiające projektowanie interfejsu użytkownika aplikacji mobilnych w sposób wizualny, za pomocą metody 'przeciągnij i upuść'. Layout Editor pozwala na szybkie tworzenie responsywnych interfejsów, które automatycznie dostosowują się do różnych rozmiarów ekranów i rozdzielczości. Dzięki niemu programiści mogą łatwo dodawać elementy UI, takie jak przyciski, pola tekstowe, listy czy obrazy, oraz dostosowywać ich właściwości bez konieczności pisania dużych fragmentów kodu XML. Narzędzie to jest kluczowe dla szybkiego prototypowania aplikacji oraz iteracyjnego podejścia do budowy interfejsu użytkownika w środowisku Android Studio.

Pytanie 36

Na ilustracji pokazano fragment emulacji iOS z elementem kontrolnym. Który fragment kodu XAML opisuje ten element?

Ilustracja do pytania
A. <Switch IsToggled= "true" />
B. <Entry IsPassword= "true" />
C. <Slider Maximum= "255" />
D. <Stepper Increment= "1" />

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Kontrolka <Switch IsToggled= "true" /> w XAML to taki przełącznik. Ma dwa stany: włączony (true) i wyłączony (false). Można to porównać do zwykłego włącznika, tylko że w aplikacjach. Fajnie się z tego korzysta, bo pozwala szybko zmieniać ustawienia, nie trzeba nic więcej wpisywać. To jest dosyć intuicyjne dla użytkowników, więc można nim łatwo zarządzać funkcjami aplikacji.

Pytanie 37

Jakie składniki są kluczowe w dynamicznym formularzu logowania?

A. Pola tekstowe do wprowadzania danych użytkownika
B. Nagłówek HTTP
C. Plik graficzny
D. Tabela w bazie danych

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Pola tekstowe do wprowadzania danych użytkownika są kluczowym elementem dynamicznego formularza logowania. Umożliwiają one użytkownikowi wprowadzenie informacji, takich jak nazwa użytkownika i hasło, co jest niezbędne do uwierzytelnienia w systemie. Formularze HTML wykorzystują tagi <input> do tworzenia pól tekstowych, a ich interakcja z użytkownikiem może być wspierana przez JavaScript lub inne technologie frontendowe, które walidują dane i zapewniają bezpieczeństwo procesu logowania. Pola tekstowe mogą być wzbogacone o atrybuty, takie jak 'required', 'pattern' czy 'type', które dodatkowo zabezpieczają formularz i ułatwiają użytkownikowi poprawne wypełnienie danych.

Pytanie 38

Jakie są cechy biblioteki statycznej w zestawieniu z dynamiczną?

A. Zostaje dodana do pliku wykonywalnego w trakcie kompilacji
B. Może być zmieniana w czasie działania programu
C. Nie potrzebuje obecności pliku wykonywalnego
D. Jest wczytywana do pamięci podczas działania aplikacji

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Biblioteka statyczna jest dołączana do pliku wykonywalnego podczas procesu kompilacji. Oznacza to, że jej kod staje się integralną częścią aplikacji, co eliminuje konieczność ładowania jej w czasie wykonywania programu. Tego typu biblioteki charakteryzują się większym rozmiarem pliku wynikowego, ale oferują wyższą wydajność, ponieważ wszystkie funkcje są dostępne lokalnie, bez dodatkowych operacji ładowania. Przykładami bibliotek statycznych są pliki .lib w C/C++.

Pytanie 39

W zaprezentowanym kodzie stworzono abstrakcyjną klasę figura oraz klasę prostokąta, która dziedziczy po niej, zawierającą zdefiniowane pola i konstruktory. Wskaż minimalną wersję implementacji sekcji /* metody klasy */ dla klasy Prostokat:

abstract class Figura
{
    abstract double Pole();
    abstract double Obwod();
}

public class Prostokat extends Figura
{
    private double a;
    private double b;

    ... /* Konstruktory */
    ... /* Metody klasy */
}
AB
public double Pole() {
    return a * b;
}

public double Obwod() {
    return 2*a + 2*b;
}
public double Pole() {
    return a * b;
}
CD
public double LiczPole()
{
    return a * b;
}

public double LiczObwod()
{
    return 2*a + 2*b;
}
abstract double Pole()
{
    return a * b;
}

abstract double LiczObwod()
A. B
B. D
C. C
D. A

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tej sytuacji odpowiedź A to zdecydowanie najlepszy wybór. Dlaczego? Klasa Prostokat dziedziczy po abstrakcyjnej Figurze, która wymusza zaimplementowanie dwóch metod abstrakcyjnych: Pole() oraz Obwod(). W Javie (bo składnia sugeruje właśnie ją), jeżeli klasa nie zaimplementuje wszystkich metod abstrakcyjnych odziedziczonych po klasie abstrakcyjnej, sama musi być oznaczona jako abstract, a tu przecież Prostokat ma być konkretną klasą. Wersja A pokazuje dokładnie te dwie metody, z odpowiednimi nazwami, typami zwracanymi i poprawną logiką obliczeń: pole prostokąta to a * b, a obwód to 2*a + 2*b. Taki sposób pisania jest zgodny ze sztuką programowania obiektowego – spełniamy wymagania kontraktu narzuconego przez klasę bazową, implementujemy tylko to, co jest wymagane i w taki sposób, by użytkownik klasy mógł od razu wykorzystywać instancję Prostokata do obliczeń. Takie podejście bardzo ułatwia późniejsze rozbudowywanie projektu i współpracę z innymi programistami, bo każdy od razu wie, że Pole() i Obwod() są częścią wspólnego interfejsu wszystkich Figur. Moim zdaniem, w realnych projektach często się z czymś takim spotyka – jeśli tylko mamy dziedziczenie po klasie abstrakcyjnej, zawsze trzeba pamiętać o tych narzuconych metodach. Warto też zauważyć, że brak zbędnych dodatków – np. nadmiarowych metod czy zmienionych nazw – minimalizuje szansę na pomyłki i nieporozumienia w zespole. Tak w praktyce robi się solidną, czytelną bazę pod hierarchię figur geometrycznych.

Pytanie 40

Co będzie wynikiem wykonania poniższego kodu w języku C#?

string text = "hello world";
var result = string.Join("", text.Split(' ').Select(s => char.ToUpper(s[0]) + s.Substring(1)));
Console.WriteLine(result);
A. helloworld
B. Hello World
C. HelloWorld
D. HELLO WORLD

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Wynik działania przedstawionego kodu to 'HelloWorld'. Zrozumienie tego wyniku wymaga analizy poszczególnych elementów kodu. Na początku mamy zmienną tekstową 'text' z wartością 'hello world'. Następnie, tekst jest dzielony na fragmenty za pomocą metody 'Split', która rozdziela go na podstawie spacji. W efekcie otrzymujemy tablicę z dwoma elementami: 'hello' i 'world'. Następnie, za pomocą metody 'Select', każdy z tych fragmentów jest przetwarzany. Pierwszy znak każdego słowa jest konwertowany na wielką literę dzięki 'char.ToUpper(s[0])', a następnie łączony z resztą słowa ('s.Substring(1)'). Tak uzyskane fragmenty są łączone w jeden ciąg za pomocą 'string.Join("", ...)'. W rezultacie otrzymujemy 'HelloWorld', co jest zgodne z praktykami konwencji nazewniczych w programowaniu, gdzie często łączy się słowa w jeden ciąg, eliminując spacje. Dzięki temu wynik jest bardziej zwięzły i czytelny."