Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 8 czerwca 2026 09:54
  • Data zakończenia: 8 czerwca 2026 10:37

Egzamin zdany!

Wynik: 27/40 punktów (67,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Bitmapa jest obrazem:

A. analogowym
B. rastrowym
C. wektorowym
D. interakcyjnym
Bitmapa (mapa bitowa) to grafika rastrowa - obraz zapisany jako siatka pikseli, z których każdy ma określony kolor. Powiększanie bitmapy ujawnia piksele i pogarsza jakość (utrata ostrości). Przeciwieństwem jest grafika wektorowa, opisana wzorami matematycznymi i skalowalna bez utraty jakości. Dlatego bitmapa jest obrazem rastrowym.

Pytanie 2

W SQL, po wykonaniu przedstawionych poleceń GRANT, prawo do edytowania struktury tabeli oraz jej usunięcia zostanie przyznane

GRANT ALL ON firmy TO 'adam'@'localhost';
GRANT ALTER, CREATE, DROP ON firmy TO 'anna'@'localhost';
GRANT SELECT, INSERT, UPDATE ON firmy TO 'tomasz'@'localhost';
A. Adamowi i Annie
B. Tomaszowi i Annie
C. tylko Annie
D. Tomaszowi i Adamowi
Odpowiedź Adamowi i Annie jest poprawna ponieważ polecenie GRANT w SQL służy do przydzielania określonych uprawnień użytkownikom. W zapytaniu GRANT ALL ON firmy TO 'adam'@'localhost' Adam otrzymuje wszystkie możliwe uprawnienia do tabeli co obejmuje również możliwość zmiany struktury tabeli poprzez ALTER oraz jej usuwania poprzez DROP. Z kolei Anna dzięki poleceniu GRANT ALTER CREATE DROP również uzyskuje te same dwa kluczowe uprawnienia dotyczące zmiany struktury i usuwania tabeli. Takie przydzielanie uprawnień jest zgodne z branżowymi standardami zapewniającymi elastyczność i bezpieczeństwo w zarządzaniu bazami danych. Praktyczne zastosowanie tych uprawnień umożliwia administratorom bazy danych delegowanie odpowiedzialności za różne aspekty zarządzania bazą innym użytkownikom co jest szczególnie przydatne w dużych zespołach. Ważne jest również aby zawsze monitorować i regularnie audytować przydzielone uprawnienia aby zapewnić że użytkownicy posiadają tylko te uprawnienia które są niezbędne do wykonywania ich zadań co jest zgodne z zasadą najmniejszych uprawnień w bezpieczeństwie IT.

Pytanie 3

Jak powinien być poprawnie zapisany znacznik <img>, służący do umieszczenia na stronie internetowej obrazu rys.jpg, przeskalowanego do szerokości 120 px oraz wysokości 80 px z tekstem alternatywnym "krajobraz"?

A. <img src="rys.jpg" width="120px" height="80px" alt="krajobraz"/>
B. <img src="rys.jpg" height="120px" width="80px" info="krajobraz"/>
C. <img image="rys.jpg" width="120px" height="80px" alt="krajobraz"/>
D. <img href="rys.jpg" height="120px" width="80px" info="krajobraz"/>
Odpowiedzi, które nie są zgodne z poprawnym zapisem znacznika <img>, wykazują kilka kluczowych błędów, które wpływają na ich nieprawidłowość. W pierwszej z błędnych odpowiedzi zamiast atrybutu 'src' użyto 'image', co jest błędem w kontekście HTML. 'src' jest standardowym atrybutem, który określa źródło obrazu, podczas gdy 'image' nie jest rozpoznawane przez przeglądarki i nie prowadzi do wyświetlenia żadnej grafiki. W drugiej odpowiedzi zamiast 'alt' zastosowano 'info', co również jest nieprawidłowe, ponieważ 'alt' jest kluczowym atrybutem, który zapewnia opis alternatywny obrazu, istotny dla dostępności. Ponadto, w obu przypadkach zostały błędnie zamienione wartości 'width' i 'height', co może prowadzić do nieproporcjonalnego wyświetlania obrazów, co z kolei negatywnie wpływa na estetykę i użyteczność strony. Warto również zaznaczyć, że jednostka 'px' w kontekście atrybutów rozmiaru nie jest wymagana w HTML5, więc nawet jeśli byłoby to zastosowane w poprawny sposób, nie jest to konieczne. Te nieporozumienia mogą wynikać z braku znajomości aktualnych standardów HTML, co może prowadzić do problemów z wyświetlaniem i dostępnością treści na stronach internetowych. Zastosowanie odpowiednich atrybutów oraz ich wartości jest kluczowe dla tworzenia stron internetowych zgodnych z aktualnymi standardami i praktykami, co w dłuższym okresie przekłada się na lepsze doświadczenia użytkowników.

Pytanie 4

Który styl ustawi trzy kolumny OBOK siebie (każda na 1/3 szerokości)?

A.
.kolumny { clear: both; height: 33%; }
B.
.kolumny { float: right; height: 33%; }
C.
.kolumny { float: left; width: 33%; }
D.
.kolumny { float: left; width: 40%; }
Trzy kolumny obok siebie powstają, gdy każdy blok „pływa” w lewo i zajmuje jedną trzecią szerokości: .kolumny { float: left; width: 33%; }. Kluczowe są float (układ poziomy) i width (szerokość). Dlatego poprawny jest zapis z float: left i width: 33%.

Pytanie 5

Elementem, który odnosi się do imienia Agata w pokazanej tablicy JavaScript, jest

Ilustracja do pytania
A. Imiona[4]
B. Imiona[3]
C. Imiona['Agata']
D. Imiona[Agata]
JavaScript ma fajne tablice, które pozwalają trzymać różne wartości w jednej zmiennej. Pamiętaj, że w tablicach numerację zaczynamy od zera, więc pierwszy element to 0. W naszym przypadku mamy tablicę Imiona z pięcioma imionami: Anna, Joanna, Monika, Agata. Żeby dostać się do czwartego imienia, musisz użyć indeksu 3, czyli Imiona[3]. To standardowa zasada w JavaScript i naprawdę w wielu innych językach programowania, więc warto się tego nauczyć. W praktyce umiejętność indeksowania tablic jest bardzo ważna, zwłaszcza gdy chcesz przefiltrować, posortować albo po prostu przejść przez dane. Dlatego dobrze jest zapamiętać, jak działa indeksowanie zerowe, bo to kluczowa rzecz dla każdego, kto pracuje z danymi w tym języku.

Pytanie 6

Jak określa się część strukturalnego języka zapytań, która dotyczy tworzenia zapytań do bazy danych za pomocą polecenia SELECT?

A. SQL DDL (ang. Data Definition Language)
B. SQL DCL (ang. Data Control Language)
C. SQL DQL (ang. Data Query Language)
D. SQL DML (ang. Data Manipulation Language)
Wybór SQL DML, SQL DCL lub SQL DDL jako odpowiedzi na to pytanie wskazuje na nieporozumienie dotyczące funkcji poszczególnych podzbiorów SQL. SQL DML (Data Manipulation Language) odnosi się do poleceń, które modyfikują dane w bazie, takich jak INSERT, UPDATE i DELETE. Myląc te pojęcia, można sądzić, że polecenia te są odpowiednie do pobierania danych, co jest błędne. Z kolei SQL DCL (Data Control Language) służy do zarządzania uprawnieniami użytkowników i kontroli dostępu do danych, co również nie ma związku z formułowaniem zapytań do bazy danych. Na przykład, polecenia GRANT i REVOKE są kluczowe w kontekście DCL, ale nie mają nic wspólnego z wyciąganiem danych. SQL DDL (Data Definition Language) dotyczy definicji struktury bazy danych, czyli tworzenia, modyfikowania i usuwania tabel oraz innych obiektów bazy danych (np. CREATE, ALTER, DROP). Wybór któregokolwiek z tych podzbiorów zamiast DQL wskazuje na brak zrozumienia hierarchii i celów SQL jako całości. Zrozumienie różnic między tymi podzbiorami jest kluczowe dla skutecznego zarządzania danymi i efektywnej pracy z bazami danych. Dobrą praktyką jest zapoznanie się z pełnym zakresem możliwości SQL, aby lepiej wykorzystać jego potencjał w codziennej pracy z danymi.

Pytanie 7

Tabele: Studenci, Zapisy, Zajecia są powiązane relacją. Aby wybrać jedynie nazwiska studentów oraz odpowiadające im idZajecia dla studentów z grupy 15, należy wydać kwerendę

Ilustracja do pytania
A. SELECT nazwisko, idZajecia FROM Studenci JOIN Zapisy ON Studenci.id = Zapisy.idZajecia WHERE grupa = 15;
B. SELECT nazwisko, idZajecia FROM Studenci INNER JOIN Zapisy WHERE grupa= 15;
C. SELECT nazwisko, idZajecia FROM Studenci JOIN Zapisy ON Studenci.id = Zapisy.idStudenta WHERE grupa = 15;
D. SELECT nazwisko, idZajecia FROM Studenci INNER JOIN Zapisy ON Studenci.id = Zapisy.idStudenta;
Ta odpowiedź jest dokładnie tym, czego oczekuje się w praktycznej pracy z relacyjnymi bazami danych. Kluczowe jest tutaj poprawne połączenie tabeli Studenci z tabelą Zapisy na podstawie klucza głównego Studenci.id oraz obcego Zapisy.idStudenta. To klasyczna sytuacja, gdzie chcemy wydobyć informacje z dwóch tabel powiązanych relacją jeden-do-wielu. Dzięki użyciu JOIN oraz warunku ON określającego relację, uzyskujemy możliwość pobrania nazwisk studentów i odpowiadających im identyfikatorów zajęć. Warunek WHERE ogranicza wynik do studentów z konkretnej grupy, co jest bardzo częstym wymaganiem biznesowym np. przy generowaniu list obecności czy analizie frekwencji. Takie podejście jest czytelne, zgodne ze składnią SQL ANSI i pozwala uniknąć nieporozumień przy większych kwerendach. Moim zdaniem warto pamiętać, że stosowanie jawnych JOIN-ów zamiast łączenia 'po przecinku' czy w warunku WHERE, ułatwia późniejszą rozbudowę zapytań oraz ogranicza ryzyko tzw. 'kartesjańskiego koszmaru', czyli niekontrolowanego zwielokrotnienia rekordów. Warto też wiedzieć, że zapis ten jest optymalny wydajnościowo, bo wykorzystuje istniejące klucze i indeksy – a to podstawa dobrych praktyk w pracy z bazami danych. Generalnie, jak się opanuje ten schemat, to potem większość operacji na relacyjnych bazach danych jest dużo łatwiejsza.

Pytanie 8

Jak w PHP przypisać wartość 4 do zmiennej sesyjnej o nazwie wyborID?

A.
$_SESSION["wyborID"] = 4;
B.
session.wyborID = 4;
C.
$_SESSION[4] = wyborID;
D.
session.wyborID = {4};
Zmienną sesyjną ustawia się, przypisując wartość do tablicy $_SESSION pod kluczem o danej nazwie: $_SESSION["wyborID"] = 4;. Klucz to nazwa zmiennej, a po prawej jej wartość. Dlatego ten zapis jest poprawny.

Pytanie 9

Który semantyczny znacznik HTML5 przeznaczony jest na stopkę strony?

A.
<header>
B.
<figcaption>
C.
<aside>
D.
<footer>
Stopkę strony lub sekcji opisuje semantyczny znacznik <footer> - zwykle zawiera prawa autorskie, kontakt czy linki dodatkowe. Dlatego stopką jest <footer>.

Pytanie 10

Po wykonaniu poniższego fragmentu kodu w języku C/C++, zmiennej o nazwie zmienna2 przypisany zostanie

int zmienna1 = 158;
int *zmienna2 = &zmienna1;
A. ta sama wartość, którą zawiera zmienna1, zostanie przypisana
B. adres zmiennej o nazwie zmienna1 zostanie przypisany
C. wartość przechowywana w zmienna1 zostanie przypisana jako zamieniona na łańcuch
D. liczba w kodzie binarnym, która odpowiada wartości przechowywanej w zmienna1, zostanie przypisana
Odpowiedzi sugerujące przypisanie wartości lub konwersję na łańcuch są błędne, ponieważ mylą podstawowe pojęcia dotyczące wskaźników i zmiennych w C/C++. Przypisanie wartości do zmiennej wskaźnikowej nie odbywa się poprzez kopiowanie samej wartości przechowywanej w zmiennej, lecz przez odniesienie do jej adresu. Odpowiedź wskazująca na przypisanie tej samej wartości, co w zmienna1, nie uwzględnia faktu, że zmienna2 jest wskaźnikiem, a nie zmienną o tej samej wartości. W przypadku konwersji na łańcuch, proces ten również jest nieprawidłowy, ponieważ wskaźniki nie są interpretowane jako łańcuchy znaków, a ich użycie wymaga znajomości typów danych i konwersji w kontekście wskaźników. Ostatnia odpowiedź, mówiąca o przypisaniu liczby w kodzie binarnym, jest myląca, gdyż wskaźniki operują na adresach w pamięci, które nie są reprezentowane w sposób binarny w kontekście zmiennych. Wartości mogą być reprezentowane binarnie w pamięci, ale wskaźniki przechowują adresy, które z perspektywy programisty nie są bezpośrednio związane z wartościami binarnymi zmiennych. Prawidłowe zrozumienie wskaźników jest kluczowe dla unikania błędów w zarządzaniu pamięcią oraz w poprawnym stosowaniu struktur danych w języku C/C++.

Pytanie 11

Jak można zmodyfikować nałożone na siebie fragmenty obrazu, nie zmieniając innych elementów?

A. Wykres histogramu
B. Kanał przezroczystości
C. Przycinanie
D. Warstwy
Warstwy są kluczowym elementem w edycji grafiki komputerowej, umożliwiając precyzyjne zarządzanie różnymi elementami obrazu. Dzięki zastosowaniu warstw, użytkownik może na przykład oddzielić tło od obiektów na pierwszym planie, co pozwala na edytowanie jednego z tych elementów bez wpływu na resztę kompozycji. Zastosowanie warstw jest szczególnie przydatne w programach graficznych, takich jak Adobe Photoshop, GIMP czy CorelDRAW, gdzie umożliwia łatwą manipulację oraz efektywną organizację projektu. Dzięki warstwom można również stosować różne efekty i style, takie jak cienie, przezroczystości czy gradienty, co pozwala na stworzenie bardziej złożonych i interesujących grafik. Warto również zauważyć, że korzystanie z warstw jest zgodne z najlepszymi praktykami w branży, jako że sprzyja to lepszej organizacji pracy oraz ułatwia wprowadzanie zmian w projekcie. Uczy to również umiejętności przydatnych w pracy zespołowej, gdzie różne osoby mogą pracować nad różnymi warstwami równocześnie, co zwiększa efektywność i kreatywność procesu twórczego.

Pytanie 12

W języku JavaScript zmienna i, która ma przechowywać wynik dzielenia równy 1, powinna być zadeklarowana jako

A. var i = parseFloat(3/2)
B. var i = 3/2
C. var i = Number(3/2)
D. var i = parseInt(3/2)
Odpowiedź "var i = parseInt(3/2);" jest prawidłowa, ponieważ funkcja parseInt konwertuje podaną wartość na liczbę całkowitą, w tym przypadku wynik dzielenia 3/2 wynosi 1.5. Funkcja ta zaokrągla wynik w dół do najbliższej liczby całkowitej, co skutkuje wartością 1, która jest następnie przypisywana do zmiennej i. W praktyce, użycie parseInt jest często spotykane w sytuacjach, gdy zachodzi potrzeba uzyskania liczby całkowitej z wartości zmiennoprzecinkowej, na przykład podczas obliczeń wymagających całkowitych jednostek, takich jak liczba produktów w koszyku. Ponadto, ważne jest również, aby rozumieć, że parseInt przyjmuje drugi argument, który określa podstawę liczbową, co jest zgodne z najlepszymi praktykami programistycznymi, aby unikać niejednoznaczności w interpretacji wartości. W związku z tym, używanie parseInt w kontekście takich operacji jest zgodne z dobrymi praktykami programistycznymi i pozwala na uniknięcie nieprzewidzianych błędów w obliczeniach.

Pytanie 13

W bazie danych dotyczącej sklepu znajduje się tabela artykuły, która posiada pole o nazwie nowy. Jak można zaktualizować to pole, aby dla każdego rekordu wprowadzić wartość TRUE, stosując odpowiednią kwerendę?

A. UPDATE nowy FROM artykuły VALUE TRUE
B. INSERT INTO artykuły VALUE nowy=TRUE
C. UPDATE artykuły SET nowy=TRUE
D. INSERT INTO nowy FROM artykuły SET TRUE
Odpowiedź UPDATE artykuły SET nowy=TRUE; jest poprawna, ponieważ wykorzystuje standardową składnię SQL do aktualizacji istniejących rekordów w tabeli. Kwerenda ta zmienia wartość pola 'nowy' na TRUE dla wszystkich rekordów w tabeli 'artykuły'. Metoda ta jest szeroko stosowana w praktyce, gdyż pozwala na masową aktualizację danych w bazie bez konieczności ich usuwania czy dodawania nowych rekordów. Z uwagi na fakt, że pole 'nowy' ma być uzupełnione dla wszystkich pozycji w tabeli, użycie kwerendy UPDATE jest najefektywniejszym i najbardziej intuicyjnym rozwiązaniem. Przykład zastosowania może obejmować sytuację, w której sklep wprowadza nową kategorię produktów, które są oznaczane jako 'nowe'. Stosowanie dobrze zdefiniowanych kwerend UPDATE jest zgodne z dobrymi praktykami w zarządzaniu bazami danych, ponieważ promuje integralność danych oraz umożliwia łatwą modyfikację i kontrolę nad bazą.

Pytanie 14

Która zasada dotyczy integralności danych w bazie?

A. w relacji 1..n klucz obcy łączy się z kluczem obcym innej tabeli
B. pole klucza obcego nie może być puste
C. pole klucza podstawowego nie może być puste
D. klucz podstawowy musi mieć osobny indeks
Pozostałe zdania są nieścisłe. Klucz OBCY akurat MOŻE być pusty (gdy brak powiązania). „Osobny indeks” klucza podstawowego nie jest zasadą integralności (indeks powstaje automatycznie). W relacji 1..n klucz obcy łączy się z kluczem GŁÓWNYM innej tabeli, a nie z obcym. Zasadą jest: klucz podstawowy nie może być pusty.

Pytanie 15

Na ilustracji przedstawiono rezultat stosowania stylów CSS oraz odpowiadający mu kod HTML, który generuje ten przykład. Przyjmując, że marginesy wewnętrzne mają wartość 50 px, natomiast zewnętrzne wynoszą 20 px, styl CSS dla tego obrazu wygląda następująco

Ilustracja do pytania
A. Odpowiedź C
B. Odpowiedź D
C. Odpowiedź B
D. Odpowiedź A
Odpowiedź C jest poprawna, ponieważ zdefiniowany styl CSS zawiera wszystkie elementy odpowiadające przedstawionemu formatowaniu obrazu. Styl ten określa kolor tła jako Teal, co jest zgodne z opisem wizualnym obrazu. Dodatkowo zastosowanie solidnej czarnej ramki o grubości 4 pikseli odpowiada profesjonalnym standardom, które zapewniają wyraźne oddzielenie obrazu od reszty treści przez wyróżnienie go. Zastosowanie marginesów zewnętrznych o wartości 20 pikseli oraz wewnętrznych paddingów o wartości 50 pikseli jest zgodne z podanym założeniem, co pozwala na właściwe umiejscowienie obrazu na stronie, dając przestrzeń wokół i wewnątrz elementu. Dbałość o takie szczegóły jest kluczowa dla tworzenia responsywnych i estetycznych stron internetowych. Praktyczne stosowanie tego typu stylizacji umożliwia poprawienie czytelności oraz przyciąga uwagę użytkowników na znaczące elementy strony. Warto przy tym pamiętać o zasadzie KISS (Keep It Simple, Stupid), która zachęca do utrzymywania prostoty w projektach, co nie tylko ułatwia ich tworzenie ale też późniejsze utrzymanie.

Pytanie 16

Do poprawnego wyświetlania czego służy standard kodowania ISO-8859-2?

A. znaków specjalnych języka kodu strony
B. znaków zarezerwowanych języka opisu strony
C. symboli matematycznych
D. polskich liter (ś, ć, ń, ó, ą)
ISO-8859-2 to kodowanie ZNAKÓW tekstu, a nie symboli matematycznych czy specjalnych znaczników języka opisu strony. Jego rolą jest poprawne odwzorowanie liter narodowych - dla polszczyzny: ś, ć, ń, ó, ą i pozostałych.

Pytanie 17

W jakim celu tworzy się w tabeli klucz OBCY?

A. aby wiązać go z innymi kluczami obcymi tej samej tabeli
B. aby stworzyć formularz do wprowadzania danych
C. aby utworzyć relację (np. 1..n) z kluczem głównym innej tabeli
D. aby jednoznacznie identyfikować rekord w tabeli
Klucz OBCY tworzy się, aby ustanowić RELACJĘ między tabelami - wskazuje klucz główny innej tabeli (np. w relacji 1..n). Pilnuje też spójności powiązań. Dlatego klucz obcy służy do utworzenia relacji z kluczem głównym innej tabeli.

Pytanie 18

W języku JavaScript stworzono fragment kodu. Po uruchomieniu skryptu zmienna x

<script>
  var x = 10;
  x++;
  console.log(x);
</script>
A. Będzie równa 11 i zostanie wypisana w konsoli przeglądarki internetowej
B. Będzie równa 11 i zostanie wypisana w oknie popup
C. Będzie równa 10 i zostanie wypisana w dokumencie HTML
D. Będzie równa 10 i zostanie wypisana w głównym oknie przeglądarki internetowej
W zaprezentowanym fragmencie kodu JavaScript zmienna x jest najpierw inicjalizowana wartością 10. Następnie operator inkrementacji x++ zwiększa tę wartość o 1, co skutkuje przypisaniem zmiennej wartości 11. Operator postinkrementacji w JavaScript działa w ten sposób że najpierw zwraca aktualną wartość zmiennej a następnie ją zwiększa. W tym przypadku operacja x++ skutkuje zwiększeniem wartości x do 11. W konsoli przeglądarki wywołanie console.log(x) powoduje wyświetlenie obecnej wartości zmiennej x która wynosi 11. Użycie console.log jest standardową praktyką debugowania w JavaScript i jedną z głównych metod wyświetlania informacji w środowisku przeglądarki. Konsole przeglądarek internetowych są potężnym narzędziem dla deweloperów front-endowych umożliwiającym interaktywną pracę z kodem monitorowanie błędów oraz wydajności aplikacji. Jako najlepsza praktyka zaleca się stosowanie console.log do tymczasowego debugowania i unikanie pozostawiania tych wywołań w produkcyjnych wersjach kodu co może prowadzić do zbędnego obciążenia aplikacji i ujawnienia niepotrzebnych informacji użytkownikom końcowym. Warto również wspomnieć że zmienne deklarowane za pomocą var mają zasięg funkcyjny co oznacza że są dostępne w całej funkcji w której zostały zadeklarowane.

Pytanie 19

W środowisku PHP pobrano z bazy danych rezultat działania zapytania przy użyciu komendy mysql_query. W celu uzyskania z otrzymanej kwerendy jednego wiersza danych, konieczne jest użycie polecenia

A. mysql_field_len
B. mysql_fetch_lengths
C. mysql_fetch_row
D. mysql_list_fields
Odpowiedź 'mysql_fetch_row' jest prawidłowa, ponieważ to funkcja w PHP, która pobiera jeden wiersz danych jako tablicę numeryczną z wyników zapytania SQL. Jest to kluczowy element do pracy z danymi zwróconymi przez bazę danych, gdyż umożliwia nam iterację przez wyniki zapytania. Przykładowo, po wykonaniu kwerendy za pomocą 'mysql_query', używamy 'mysql_fetch_row', aby uzyskać pierwszy wiersz wyników: $row = mysql_fetch_row($result);. W praktyce, korzystając z tej funkcji, możemy odnosić się do poszczególnych kolumn, używając indeksów, co jest efektywne, zwłaszcza przy pracy z dużymi zbiorami danych. Warto pamiętać, że 'mysql_fetch_row' jest jedną z podstawowych funkcji w pracy z bazami danych w PHP, jednak w najnowszych projektach zaleca się korzystanie z rozszerzenia PDO lub MySQLi, które oferują lepsze zabezpieczenia oraz wsparcie dla obiektowego podejścia programowania. To także zgodne z najlepszymi praktykami w zakresie bezpieczeństwa i wydajności aplikacji webowych.

Pytanie 20

W języku SQL, aby wybrać wszystkie rekordy z tabeli B, w tym część wspólną z tabelą A, należy zastosować typ związku

Ilustracja do pytania
A. A FULL OUTER JOIN B
B. A INNER JOIN B
C. A LEFT JOIN B
D. A RIGHT JOIN B
W tym pytaniu pułapka polega na tym, że łatwo pomylić pojęcie części wspólnej z całością jednego ze zbiorów. Diagram pokazuje całą tabelę B (włącznie z przecięciem z A), a nie tylko przecięcie. W SQL typ złączenia określa, z której tabeli bierzemy wszystkie rekordy, a z której tylko te pasujące. To, że widzimy też obszar wspólny, jest naturalnym efektem działania złączeń zewnętrznych, ale nie oznacza jeszcze, że chodzi o `INNER JOIN`.
Jeśli ktoś wybiera `A LEFT JOIN B`, to zwykle wynika z myślenia „chcę część wspólną i coś jeszcze”, ale myli kierunek. `LEFT JOIN` gwarantuje wszystkie rekordy z **lewej** tabeli (A), a z prawej (B) tylko dopasowane. Diagram z pytania pokazuje dokładnie odwrotną sytuację: komplet danych z B, a z A tylko tam, gdzie istnieje relacja. `A LEFT JOIN B` odpowiadałoby sytuacji, gdzie podświetlony jest cały zbiór A i przecięcie, a nie B.
Z kolei `A INNER JOIN B` zwróciłby wyłącznie część wspólną A∩B, czyli tylko te rekordy, które mają dopasowanie po obu stronach. Na diagramie byłby wtedy zaznaczony wyłącznie środek, a nie cały zielony obszar B. To typowy błąd: utożsamianie każdego JOIN z „częścią wspólną”. INNER JOIN jest dobry, gdy interesują nas tylko powiązane dane (np. zamówienia, które mają istniejącego klienta), ale w zadaniu wyraźnie mowa o „wszystkich rekordach z B”.
`A FULL OUTER JOIN B` idzie w drugą stronę – zwraca wszystko z A **i** wszystko z B, niezależnie od tego, czy jest dopasowanie, czy nie. To byłby diagram z zaznaczonymi obiema kółkami, czyli suma zbiorów A∪B. W standardzie SQL taki typ złączenia jest opisany jako pełne złączenie zewnętrzne i stosuje się go rzadziej, np. do porównywania różnic między dwiema tabelami. Tutaj jest to za szeroki zakres danych w stosunku do pytania.
Poprawne podejście wymaga więc skojarzenia, że skoro chcemy wszystkie rekordy z tabeli B, to w zapisie `A ... JOIN B` tabela B musi być po tej stronie, która jest „obowiązkowa”. Właśnie to zapewnia `RIGHT JOIN`: pełny zestaw wierszy z prawej tabeli, plus dopasowania z lewej tam, gdzie istnieją. Świadome operowanie tymi pojęciami bardzo ułatwia projektowanie zapytań raportowych i unikanie nieoczekiwanych braków lub duplikacji danych.

Pytanie 21

Pętla zapisana w języku PHP wstawi do tablicy liczby:

$x = 0;
for ($i = 0; $i < 10; $i++)
{
    $tabl[$i] = $x;
    $x = $x + 10;
}
A. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
B. 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
C. 0, 10, 20, 30, 40, 50, 60, 70, 80, 90
D. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Gratulacje, Twoja odpowiedź jest poprawna. Pętla zaczyna się od $x = 0 i wykonuje się 10 razy ($i od 0 do 9). W każdej rundzie pętli, do tablicy $tabl dodawana jest aktualna wartość $x, a następnie $x jest zwiększane o 10. To jest tzw. pętla for, która jest jednym z najbardziej podstawowych mechanizmów programowania. Dzięki tej pętli możemy kontrolować ilość iteracji, które chcemy wykonać. W tym przypadku, iteracja odbywa się 10 razy, za każdym razem inkrementując $x o 10. Niezależnie od tego, czy korzystasz z PHP, czy innego języka, konstrukcje pętli są niezwykle ważne i warto zrozumieć ich działanie. PHP, jak wiele innych języków programowania, posiada wiele różnych typów pętli - for, while, do-while, each, które mają swoje szczególne zastosowania w zależności od kontekstu.

Pytanie 22

W języku HTML, aby stworzyć pole do wprowadzania hasła, w którym wpisywany tekst będzie ukrywany (zastępowany kropkami), należy zastosować znacznik

A. <form="password" type="password" />
B. <input type="password" />
C. <form input type="password" />
D. <input name="password" />
Odpowiedź <input type="password" /> jest poprawna, ponieważ ten znacznik HTML służy do tworzenia pola edycyjnego, w którym wprowadzane dane są maskowane. W przypadku pól do wpisywania haseł, istotne jest, aby użytkownik nie mógł zobaczyć wpisywanego tekstu, co zwiększa poziom bezpieczeństwa. W HTML, atrybut 'type' z wartością 'password' instruuje przeglądarkę, aby ukrywała znaki wprowadzane przez użytkownika, zastępując je zazwyczaj kropkami lub gwiazdkami. Przykładem zastosowania tego typu znacznika może być formularz logowania, gdzie użytkownicy wpisują swoje hasła. Dobrą praktyką jest również zastosowanie odpowiednich etykiet i walidacji, aby zapewnić, że formularz jest użyteczny i zgodny z WCAG (Web Content Accessibility Guidelines). Warto pamiętać, że bezpieczeństwo haseł powinno być również wspierane przez odpowiednie zabezpieczenia po stronie serwera, w tym haszowanie haseł oraz ochrona przed atakami typu brute force.

Pytanie 23

Które z poniższych zdań charakteryzuje grafikę wektorową?

A. Może być zapisywana w formatach JPG lub PNG
B. Służy do zapisu zdjęć cyfrowych
C. Zapisywany obraz jest opisywany za pośrednictwem figur geometrycznych umieszczonych w układzie współrzędnych
D. Jest to reprezentacja obrazu przy pomocy siatki pikseli o różnych kolorach układających się w poziomie i pionie na monitorze komputera, drukarce lub innym urządzeniu wyjściowym
Grafika wektorowa to technika obrazowania, która polega na reprezentowaniu obrazów za pomocą figur geometrycznych, takich jak punkty, linie, krzywe i wielokąty, które są zdefiniowane matematycznie i umieszczone w układzie współrzędnych. Dzięki temu obrazy wektorowe są skalowalne bez utraty jakości, co jest ich kluczową zaletą. Zastosowanie grafiki wektorowej znajduje się w wielu dziedzinach, takich jak projektowanie logo, ilustracje, animacje oraz wszędzie tam, gdzie potrzebna jest elastyczność w edycji i skalowaniu obrazów. W przeciwieństwie do grafiki rastrowej, która jest oparta na siatce pikseli, grafika wektorowa zapewnia lepszą ostrość i jakość w dowolnym rozmiarze. Dobrymi przykładami formatów wektorowych są SVG (Scalable Vector Graphics) oraz AI (Adobe Illustrator), które są standardami branżowymi wykorzystywanymi przez profesjonalnych projektantów. W praktyce, podczas projektowania, grafika wektorowa umożliwia łatwe wprowadzanie zmian kolorystycznych, kształtowych czy nawet animacyjnych bez negatywnego wpływu na jakość obrazu.

Pytanie 24

Które z poniższych twierdzeń o zasadach programowania w PHP jest poprawne?

A. Jest to język o słabej kontroli typów
B. Nazwy zmiennych zaczynają się od znaku !
C. W nazwach zmiennych nie rozróżnia się wielkości liter
D. Deklaracja zmiennych odbywa się po słowie kluczowym var
Deklaracja zmiennych w PHP odbywa się za pomocą znaku dolara ($), a nie słowa kluczowego 'var'. W przeciwieństwie do niektórych innych języków programowania, takich jak JavaScript, gdzie 'var' jest używane do deklarowania zmiennych, PHP przyjmuje inny sposób. Również w kontekście nazw zmiennych, w PHP wielkość liter ma znaczenie; zmienna $zmienna i $Zmienna są różnymi zmiennymi. To oznacza, że programiści muszą być szczególnie ostrożni przy pisaniu kodu, aby uniknąć niezamierzonych błędów. Ponadto, w PHP niektóre typy zmiennych są ściśle określone przez ich wartości, co może prowadzić do nieporozumień na temat 'słabej kontroli typów'. Ostatecznie, PHP nie jest językiem o ścisłej kontroli typów, lecz dzięki swojej słabej kontroli typów umożliwia programistom większą elastyczność w pracy z danymi. Zrozumienie tych różnic jest kluczowe dla każdego programisty PHP, aby uniknąć typowych pułapek, które mogą prowadzić do błędów w kodzie i trudności w utrzymaniu aplikacji. W praktyce, warto korzystać z dobrych praktyk, takich jak stosowanie typów w PHP 7 i nowszych, które wprowadzają możliwość określania typów dla argumentów funkcji i wartości zwracanych, co zwiększa stabilność i przewidywalność kodu.

Pytanie 25

Co oznacza pojęcie integralności referencyjnej w bazie danych?

A. Każdej wartości klucza obcego odpowiada istniejąca wartość klucza podstawowego
B. Każda encja ma klucz podstawowy o wartości unikatowej i różnej od NULL
C. Baza jest odporna na awarie sprzętu i oprogramowania
D. Wartość atrybutu należy do jego dziedziny (dozwolonego zbioru)
Integralność referencyjna to reguła pilnująca spójności powiązań między tabelami: każda wartość klucza obcego musi wskazywać na istniejący rekord tabeli nadrzędnej (na realną wartość jej klucza podstawowego) albo być pusta (NULL, jeśli dozwolone). Dzięki temu nie powstają „osierocone” rekordy wskazujące na nieistniejące dane. Dlatego poprawna jest odpowiedź o zgodności klucza obcego z kluczem podstawowym.

Pytanie 26

Które z rozszerzeń NIE jest związane z plikiem wideo?

A. GIF
B. MP4
C. MOV
D. AVI
Pozostałe rozszerzenia to formaty WIDEO: AVI, MP4 i MOV to kontenery przechowujące obraz ruchomy (zwykle z dźwiękiem). GIF jest inny - to format graficzny/animacja bez dźwięku, więc to on nie należy do plików wideo.

Pytanie 27

W przedstawionym diagramie bazy danych biblioteka, elementy: czytelnik, wypozyczenie i ksiazka są

Ilustracja do pytania
A. atrybutami.
B. krotkami.
C. encjami.
D. polami.
W diagramie bazy danych pokazanym w pytaniu elementy „czytelnik”, „wypozyczenie” i „ksiazka” to klasyczne przykłady encji. Encja w modelu relacyjnym (a dokładniej w modelu ER – Entity-Relationship) oznacza pewien typ obiektu ze świata rzeczywistego, o którym chcemy przechowywać dane w bazie. W praktyce encja odpowiada tabeli w relacyjnej bazie danych: encja CZYTELNIK → tabela czytelnik, encja KSIĄŻKA → tabela ksiazka, encja WYPOŻYCZENIE → tabela wypozyczenie. Każda z tych encji ma swój klucz główny (np. czytelnik_id, ksiazka_id, wypozyczenie_id), czyli atrybut jednoznacznie identyfikujący rekord. To jest dokładnie to, co w dobrych praktykach projektowania baz danych (np. wg standardowych metodologii ERD używanych w SQL Server, MySQL Workbench czy Oracle Data Modeler) uważa się za podstawę poprawnego modelu danych.

Moim zdaniem bardzo ważne jest rozróżnienie poziomów: encja to „typ obiektu” (tabela), atrybut to „cecha obiektu” (kolumna), a krotka/rekord to „konkretne wystąpienie obiektu” (pojedynczy wiersz). Na przykład: encja CZYTELNIK opisuje wszystkich możliwych czytelników biblioteki, atrybuty tej encji to imie, nazwisko, ulica itd., a jedna konkretna krotka w tabeli czytelnik opisuje jedną osobę, np. Jana Kowalskiego z ulicy Lipowej 5. W projektowaniu systemów bibliotecznych, systemów sprzedażowych, magazynowych czy w aplikacjach webowych z bazą danych zawsze zaczyna się właśnie od zidentyfikowania encji: klient, zamówienie, produkt, faktura itd. Dopiero potem dopisuje się atrybuty, ustala relacje (tak jak tu: czytelnik – wypożyczenie – książka) i definiuje klucze obce. To podejście jest zgodne z normalizacją i ogólnymi zasadami projektowania relacyjnych baz danych – pomaga uniknąć nadmiarowości danych i błędów logicznych w aplikacji.

Pytanie 28

<?php
$dane = fread(fopen("plik.txt", "r"), filesize("plik.txt"));
?>
Przedstawiony kod zapisany w języku PHP ma za zadanie
A. otworzyć plik plik.txt i jako wartość zmiennej dane przypisać rozmiar pliku
B. zmiennej dane przypisać wielkość pliku plik.txt
C. zapisać do pliku plik.txt wartość zmiennej dane
D. zmiennej dane przypisać zawartość pliku plik.txt
Kod z pytania wykorzystuje trzy kluczowe elementy pracy z plikami w PHP: fopen, fread i filesize. Żeby dobrze zrozumieć, dlaczego niektóre interpretacje są błędne, trzeba rozdzielić pojęcia „odczyt” i „zapis” oraz pamiętać, co tak naprawdę zwracają poszczególne funkcje. fopen z parametrem "r" otwiera plik wyłącznie do czytania. W tym trybie nie ma możliwości zapisu danych do pliku, więc każda interpretacja sugerująca, że coś jest zapisywane do pliku, stoi w sprzeczności z dokumentacją PHP. To jest częsty błąd: ktoś widzi funkcję pracującą na plikach i automatycznie myśli o zapisie, a tutaj jest tylko odczyt.
Kolejna mylna ścieżka rozumowania dotyczy funkcji filesize. Ona faktycznie zwraca rozmiar pliku w bajtach, ale w tym kodzie ten rozmiar jest użyty wyłącznie jako argument dla fread, czyli jako informacja: „ile bajtów odczytać”. Zmienna $dane nie dostaje więc wartości rozmiaru pliku, tylko wynik działania fread, czyli tekstową zawartość pliku. Rozmiar pojawia się tu tylko po to, żeby powiedzieć fread, ile danych ma pobrać z uchwytu pliku. To jest subtelna, ale ważna różnica: wartość zwracana przez filesize nie jest przypisywana bezpośrednio do $dane.
Może się też pojawić pokusa, by myśleć, że kod jednocześnie otwiera plik i „przypisuje rozmiar pliku jako wartość zmiennej”. W praktyce mamy dwie operacje: otwarcie pliku (fopen) i odczyt zawartości (fread). Otworzenie pliku nie jest celem samym w sobie, jest tylko krokiem pośrednim, koniecznym do tego, żeby fread mogło pobrać dane. Z mojego doświadczenia wynika, że uczniowie często mieszają: co zwraca uchwyt pliku, co zwraca funkcja odczytu, a co funkcja podająca rozmiar. Tutaj zwracany jest string z treścią pliku, nie liczba bajtów i nie sam uchwyt.
Podsumowując merytorycznie: w tym przykładzie nie zachodzi zapis do pliku, zmienna $dane nie przyjmuje samego rozmiaru pliku, ani też nie jest do niej wprost przypisywana wartość z filesize. Cała logika kodu prowadzi do jednego efektu – odczytania pełnej zawartości pliku plik.txt i umieszczenia jej w zmiennej $dane, co jest poprawną interpretacją zgodną ze standardowym sposobem użycia fopen i fread w PHP.

Pytanie 29

Wskaż sposób oznaczania komentarzy wielowierszowych w kodzie PHP.

A. <!-- treść komentarza -->
B. // treść komentarza
C. /* treść komentarza*/
D. / treść komentarza/
Poprawna odpowiedź to zapis w postaci /* treść komentarza */. W języku PHP taki zapis oznacza komentarz wielowierszowy, czyli taki, który może rozciągać się na kilka linii kodu. Komentarz zaczyna się znakiem /* i kończy się dokładnie sekwencją */. Wszystko, co znajduje się pomiędzy tymi znacznikami, jest ignorowane przez interpreter PHP i nie ma wpływu na działanie programu.
Można to wykorzystać np. tak:

/*
Funkcja liczy sumę dwóch liczb
Parametry:
$a – pierwsza liczba
$b – druga liczba
*/
function suma($a, $b) {
return $a + $b;
}

Z mojego doświadczenia dobrze jest używać komentarzy wielowierszowych do opisywania całych bloków logiki, np. większych funkcji, klas albo skomplikowanych fragmentów algorytmu. W dokumentacji i w dobrych projektach często spotyka się też komentarze stylizowane na PHPDoc, np.:

/**
* Zwraca sumę dwóch liczb całkowitych
* @param int $a
* @param int $b
* @return int
*/

To nadal jest zwykły komentarz wielowierszowy, tylko używany zgodnie z pewnym standardem narzędziowym. Moim zdaniem warto wyrabiać sobie nawyk pisania czytelnych komentarzy, ale jednocześnie nie przesadzać – komentarz wielowierszowy powinien wyjaśniać „dlaczego” coś jest zrobione w określony sposób, a nie przepisywać oczywistości z kodu. W praktyce w PHP używa się trzech form komentarzy: // dla jednowierszowych, # (rzadziej, ale też działa) oraz właśnie /* */ dla wielowierszowych. Znajomość tej składni to absolutna podstawa przy pracy z większymi projektami PHP, bo bez niej kod szybko staje się nieczytelny dla innych programistów.

Pytanie 30

Którego znacznika użyć, aby zgrupować elementy w jeden BLOK?

A.
<span>
B.
<param>
C.
<div>
D.
<p>
Znacznik <div> to blokowy pojemnik bez własnego znaczenia, służący do grupowania innych elementów w jeden BLOK (sekcję), który potem łatwo stylować lub pozycjonować. Dlatego do grupowania w blok służy <div>.

Pytanie 31

Program napisany w PHP ma na celu obliczenie średniej pozytywnych ocen ucznia w zakresie od 2 do 6.
Warunek selekcji ocen w pętli liczącej średnią powinien zawierać wyrażenie logiczne

A. $ocena > 2 or $ocena < 6
B. $ocena >= 2 or $ocena <= 6
C. $ocena > 2 and $ocena < 6
D. $ocena >= 2 and $ocena <= 6
Wybór odpowiedzi $ocena >= 2 and $ocena <= 6 jest poprawny, ponieważ precyzyjnie określa zakres, w jakim dopuszczalne są oceny ucznia. Operator logiczny 'and' zapewnia, że obie części warunku muszą być spełnione jednocześnie: ocena musi być większa lub równa 2 oraz mniejsza lub równa 6. Taki sposób definiowania zakresu jest zgodny z dobrymi praktykami programowania, gdzie ważne jest, aby warunki logiki były jednoznaczne i precyzyjne. Dla przykładu, w kontekście obliczania średniej, wykorzystanie tego warunku pozwala na uwzględnienie wszystkich ocen, które są zgodne z regulaminem szkoły, co jest kluczowe dla uzyskania dokładnego wyniku. W praktyce, przy implementacji tego typu logiki w PHP, możemy spotkać się z używaniem podobnych zapytań w kontekście przetwarzania danych uczniów, co podkreśla znaczenie poprawnego definiowania warunków w programach. Dodatkowo, stosowanie takich wyrażeń pozwala na łatwe rozbudowywanie kodu, gdyż łatwo można dodawać nowe warunki lub modyfikować istniejące, co wpisuje się w założenia elastyczności i czytelności kodu.

Pytanie 32

Które wyrażenie logiczne należy zastosować w języku JavaScript, aby wykonać operacje tylko dla dowolnych liczb ujemnych z przedziału jednostronnie domkniętego <-200, -100)?

A. (liczba <= -200) && (liczba < -100)
B. (liczba >= -200) || (liczba > -100)
C. (liczba -100)
D. (liczba >= -200) && (liczba < -100)
Poprawne wyrażenie to (liczba >= -200) && (liczba < -100), bo dokładnie odwzorowuje zapis matematyczny przedziału jednostronnie domkniętego <-200, -100). W matematyce nawias kwadratowy oznacza, że granica jest włączona do przedziału, a nawias okrągły – że granica jest wyłączona. Czyli chcemy wszystkie liczby większe lub równe -200, ale jednocześnie mniejsze niż -100. W JavaScript przekłada się to właśnie na dwa porównania połączone operatorem logicznym AND, czyli &&. Warunek liczba >= -200 pilnuje dolnej granicy, a liczba < -100 pilnuje górnej, która jest otwarta. Jeśli którakolwiek z tych części będzie fałszywa, całe wyrażenie zwróci false, co jest dokładnie tym, czego oczekujemy przy opisie takiego przedziału.
W praktyce taki zapis pojawia się bardzo często, np. przy walidacji danych wejściowych, filtrowaniu wyników, ustawianiu zakresów sliderów w interfejsie użytkownika albo przy sprawdzaniu warunków w grach (np. pozycja x obiektu ma być w jakimś zakresie). Przykład w JS:
if (liczba >= -200 && liczba < -100) {
// wykonaj kod tylko dla liczb z tego zakresu
}
Moim zdaniem warto od razu wyrobić sobie nawyk zapisywania zakresów w postaci dwóch prostych porównań połączonych &&, bo to jest czytelne dla innych programistów i zgodne z powszechną praktyką w branży. W wielu językach (nie tylko JavaScript, ale też C, Java, PHP) taki schemat warunków jest standardem. Trzeba też pamiętać, że w JS nie ma osobnego operatora „przedziału”, więc zawsze rozbijamy to właśnie na takie składowe porównania logiczne.

Pytanie 33

Do czego służy polecenie mysqldump?

A. do naprawy niespójnej bazy
B. do sprawdzenia integralności bazy
C. do optymalizacji bazy
D. do utworzenia kopii zapasowej bazy
Polecenie mysqldump służy do utworzenia kopii zapasowej bazy - eksportuje strukturę i dane do pliku, umożliwiając późniejsze odtworzenie. Dlatego mysqldump tworzy kopię zapasową.

Pytanie 34

Przedstawiony kod źródłowy, zapisany w języku C++, ma za zadanie dla wprowadzanych dowolnych całkowitych liczb różnych od zera wypisać:

int main()
{
    int liczba;
    cin >> liczba;
    while (liczba != 0)
    {
        if ((liczba % 2) == 0)
            cout << liczba << endl;
        cin >> liczba;
    }
    return 0;
}
A. liczby pierwsze
B. jedynie liczby parzyste
C. wyłącznie liczby nieparzyste
D. wszystkie liczby
Wybierając odpowiedź, która mówi o liczbach pierwszych, można chyba zauważyć, że jest tu pewne nieporozumienie. Program nie ma na celu wyłapania liczb pierwszych, które zaczynają się od 2 i mają dokładnie dwa dzielniki – 1 i siebie samego. Zamiast tego, ten kod skupia się na parzystości liczb, co jest zupełnie czymś innym. Jak widać, sugerowanie, że program wypisuje wszystkie liczby, też jest błędne, bo nieparzyste liczby są po prostu pomijane. A odpowiedź dotycząca liczb nieparzystych to już w ogóle błąd, bo program nawet ich nie uwzględnia. W programowaniu ważne jest, żeby dobrze zrozumieć, co robi dany kod i jakie ma cele. To pomoże unikać błędów i nieporozumień w przyszłości.

Pytanie 35

Który z poniższych kodów XHTML sformatuje tekst zgodnie z podanym przykładem?

Ala ma kota
a kot ma Alę

A. <p>Ala ma <b>kota</b> <br/> a <b>kot</b> ma Alę</p>
B. <p>Ala ma <b>kota</b> <br/> a <i>kot</i> ma Alę</p>
C. <p>Ala ma <b>kota</i><br/> a <b>kot</b> ma Alę</p>
D. <p>Ala ma <b>kota <br /> a <i>kot</i> ma Alę</p>
Odpowiedź <p>Ala ma <b>kota</b> <br/> a <i>kot</i> ma Alę</p> jest poprawna, ponieważ zgodnie z zasadami XHTML, użycie znaczników <b> i <i> do formatowania tekstu jest odpowiednie; <b> stosowany jest do wyróżniania tekstu pogrubionego, a <i> do kursywy. W tej odpowiedzi zastosowano również poprawny znacznik <br/>, który jest samodzielnym znacznikiem i nie wymaga zamknięcia w parze. Zgodnie z dobrymi praktykami, kod XHTML powinien być poprawnie sformatowany, a każdy otwierający znacznik powinien mieć odpowiadający mu zamykający znacznik, chyba że jest to znacznik samodzielny, jak <br/>. Warto zaznaczyć, że XHTML wymaga również, aby wszystkie atrybuty były zapisane w formacie małych liter, co zostało spełnione w tej odpowiedzi. Przykład zastosowania tej wiedzy można znaleźć w tworzeniu stron internetowych, gdzie poprawne sformatowanie kodu HTML lub XHTML jest kluczowe dla prawidłowego wyświetlania treści w przeglądarkach.

Pytanie 36

Która dyrektywa w pliku php.ini decyduje o ZAPISYWANIU błędów PHP do pliku dziennika (logu)?

A.
log_errors
B.
display_errors
C.
max_execution_time
D.
memory_limit
Dyrektywa log_errors w php.ini włącza zapisywanie błędów do dziennika; współpracuje z error_log, która wskazuje plik logu. Zapis do logu jest preferowany na serwerze produkcyjnym, bo nie ujawnia błędów użytkownikom, a jednocześnie pozwala je analizować. Dlatego za zapis błędów do logu odpowiada log_errors.

Pytanie 37

Którą funkcję z menu Kolory programu GIMP użyto, w celu uzyskania efektu przedstawionego w filmie?

A. Inwersja.
B. Progowanie.
C. Krzywe.
D. Barwienie.
Wiele osób myli w GIMP-ie różne narzędzia z menu Kolory, bo na pierwszy rzut oka kilka z nich „mocno zmienia” obraz. Jednak efekt pokazany na filmie, gdzie obraz staje się dwuwartościowy (czarno-biały, bez półtonów), jest typowym działaniem funkcji Progowanie. Kluczowe jest tu zrozumienie, czym różnią się od siebie dostępne operacje. Krzywe służą do zaawansowanej korekcji tonalnej i kontrastu. Można nimi mocno przyciemnić lub rozjaśnić wybrane zakresy jasności, robić tzw. efekt kontrastu „S”, korygować prześwietlenia itd. Ale nawet przy bardzo agresywnych ustawieniach krzywych obraz nadal zawiera półtony – pojawiają się stopniowe przejścia między odcieniami, a nie ostre odcięcie na zasadzie czarne/białe. To świetne narzędzie do retuszu zdjęć, ale nie do uzyskania efektu progowania. Inwersja (Kolory → Inwersja) po prostu odwraca wartości kolorów lub jasności: jasne staje się ciemne, czerwony zmienia się na cyjan, zielony na magentę itd. To jak negatyw fotograficzny. Struktura szczegółów pozostaje identyczna, zmienia się tylko ich „biegun”. Nie pojawia się żadne odcięcie progowe, więc obraz wciąż ma pełne spektrum odcieni. W praktyce inwersja przydaje się np. przy przygotowaniu masek lub pracy z materiałami skanowanymi, ale nie generuje typowego, „plakatowego” efektu czerni i bieli jak progowanie. Barwienie z kolei (Kolory → Barwienie) służy do nadania całemu obrazowi jednolitego odcienia, zwykle po wcześniejszym sprowadzeniu go do skali szarości. Można w ten sposób uzyskać np. sepię, niebieski ton nocny albo dowolny kolorystyczny „filtr”. Jasność i kontrast lokalny pozostają bardzo podobne, zmienia się dominująca barwa. To zupełnie inna kategoria operacji niż progowanie, które pracuje na poziomie progów jasności, a nie na poziomie koloru. Typowym błędem jest patrzenie tylko na to, że „obraz bardzo się zmienił” i przypisywanie tego narzędziom takim jak krzywe czy inwersja. W pracy z grafiką warto zawsze zadać sobie pytanie: czy efekt polega na zmianie rozkładu jasności, na odwróceniu kolorów, czy na twardym podziale na dwa poziomy? Jeśli widzisz brak półtonów i ostre granice, praktycznie zawsze chodzi o progowanie, które zostało wskazane jako poprawna funkcja.

Pytanie 38

W języku JavaScript, w programowaniu obiektowym, zapis this.zawod w przedstawionym kodzie oznacza

function Uczen(){
  this.imie = "";
  this.nazwisko = "";
  this.technik = 'informatyk';
  this.zawod = function(){
    return this.technik;
  };
}
A. metodę
B. klasę
C. właściwość
D. konstruktor
Kod JavaScript używa funkcji do tworzenia obiektów, co może być mylące. Kiedy wskazujesz this.zawod, to pokazujesz, że to jest metoda, ale wybór odpowiedzi klasa jest nieprawidłowy. JavaScript nie działa z klasami jak w Javie czy C#. Klasy pojawiły się dopiero w ES6 jako taki dodatek do funkcji konstrukcyjnych. Odpowiedź metoda to w sumie strzał w dziesiątkę, bo w obiektach funkcja przypisana do właściwości to właśnie metoda, która działa na danych obiektu. Wybór konstruktor też jest błędny, bo konstruktor to specjalna funkcja do tworzenia nowych obiektów, i w naszym przykładzie to ta funkcja Uczen. Z kolei odpowiedź właściwość jest myląca, bo choć this.zawod to właściwość, która trzyma funkcję, to jest też metodą. Warto zrozumieć różnice między właściwościami a metodami, bo to jest kluczowe w programowaniu obiektowym w JavaScript.

Pytanie 39

Jaką instrukcję algorytmu ilustruje graficzna prezentacja bloku na zamieszczonym rysunku?

Ilustracja do pytania
A. Wypisz n
B. Wykonaj podprogram sortowania tablicy t
C. n ← n + 5
D. n > 20
Każda z niepoprawnych odpowiedzi wynika z błędnego rozpoznania typów bloków w diagramach przepływu. Instrukcje przypisania, takie jak n ← n + 5, są reprezentowane prostokątem i oznaczają operacje przetwarzania danych, gdzie zmienna jest modyfikowana zgodnie z określoną logiką. Ta operacja głównie pojawia się w kontekście pętli lub jako część większej sekwencji działań obliczeniowych, co jest użyteczne w algorytmach obliczeniowych i matematycznych, gdzie często modyfikujemy wartość zmiennych. Kolejny typ instrukcji, taki jak Wypisz n, jest reprezentowany przez blok wyjścia, który jest używany do komunikacji wyników algorytmu na zewnątrz. Jest to częste w raportowaniu lub debugowaniu programów, gdzie wynikiem działania algorytmu jest wyświetlenie informacji użytkownikowi. Podprogramy, takie jak sortowanie tablicy, oznaczają bloki procesów, które są reprezentowane prostokątem z podwójnymi liniami bocznymi i wskazują na wywołanie funkcji lub procedury. Takie konstrukcje są kluczowe w strukturalnym programowaniu, gdzie zadania są dekomponowane na mniejsze, zarządzalne jednostki, co prowadzi do lepszego zrozumienia i utrzymania kodu. Błędne rozpoznanie tych bloków prowadzi do nieprawidłowego zrozumienia struktury algorytmu, co może skutkować jego nieefektywnością lub błędami logicznymi w jego działaniu. Zrozumienie różnic między tymi blokami jest niezbędne do prawidłowego projektowania i implementacji algorytmów, co jest podstawą w wielu dziedzinach informatyki, takich jak inżynieria oprogramowania czy analiza danych. Dzięki temu można tworzyć efektywne i zrozumiałe rozwiązania, które spełniają wymagania użytkowników i normy branżowe.

Pytanie 40

Istnieje tabela programisci z polami: id, nick, ilosc_kodu, ocena. Wartość w polu ilosc_kodu przedstawia liczbę linii kodu, które dany programista stworzył w określonym miesiącu. Aby obliczyć całkowitą liczbę linii kodu napisanych przez wszystkich programistów, należy zastosować następujące polecenie

A. SELECT MAX(ilosc_kodu) FROM programisci;
B. SELECT SUM(ilosc_kodu) FROM programisci;
C. SELECT COUNT(programisci) FROM ilosc_kodu;
D. SELECT SUM(ocena) FROM ilosc_kodu;
Poprawna odpowiedź to "SELECT SUM(ilosc_kodu) FROM programisci;" ponieważ to zapytanie dokładnie ilustruje, jak można obliczyć sumę wszystkich linii kodu napisanych przez programistów. Funkcja agregująca SUM() służy do sumowania wartości w podanym polu, które w tym przypadku jest polem "ilosc_kodu". W kontekście relacyjnych baz danych, stosowanie funkcji agregujących jest kluczowe do analizy danych w sposób statystyczny. W praktyce, takie zapytanie może być przydatne w raportach dotyczących wydajności zespołu programistycznego, gdzie analiza sumy napisanych linii kodu pozwala na ocenę produktywności oraz identyfikację programistów, którzy mogą potrzebować wsparcia w realizacji zadań. Ponadto, zgodnie z najlepszymi praktykami SQL, warto być świadomym kontekstu zapytań, a dobór odpowiednich funkcji agregujących, takich jak SUM(), COUNT(), AVG() itp., jest niezbędny do efektywnego przetwarzania danych.