Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik informatyk
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 23 kwietnia 2026 08:46
  • Data zakończenia: 23 kwietnia 2026 09:00

Egzamin zdany!

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

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

Jak wygląda poprawny zapis znaczników, który jest zgodny z normami języka XHTML i odpowiada za łamanie linii?

A. </br/>
B. </ br>
C. <br/>
D. <br/>
Zapis samozamykającego się znacznika <br/> jest poprawny zgodnie z standardem XHTML, który wymaga, aby znaczniki, które nie mają zawartości, były zapisane w sposób, który jednoznacznie wskazuje na ich samozamykającą się naturę. W XHTML każdy znacznik powinien być zamknięty, co oznacza, że nawet tagi samo zamykające się, takie jak <br/>, muszą zawierać ukośnik przed zamknięciem znacznika. Daje to pewność, że parsery XHTML poprawnie interpretują kod, co jest szczególnie ważne w kontekście obsługi różnorodnych przeglądarek, które mogą różnie reagować na błędnie sformatowany kod. Przykładem zastosowania <br/> jest łamanie linii w tekstach, gdzie chcemy uzyskać efekt nowego wiersza bez tworzenia nowego bloku, co jest typowe w celu zachowania struktury dokumentu HTML. Dobrą praktyką jest zawsze stosowanie poprawnych form zapisów zgodnych z obowiązującymi standardami, co nie tylko wpływa na poprawność działania kodu, ale również na jego czytelność i długoterminową utrzymywaność.

Pytanie 2

Jakie są odpowiednie kroki w odpowiedniej kolejności, które należy podjąć, aby nawiązać współpracę pomiędzy aplikacją internetową po stronie serwera a bazą danych SQL?

A. wybór bazy, zapytanie do bazy, nawiązanie połączenia z serwerem baz danych, wyświetlenie na stronie WWW, zamknięcie połączenia
B. zapytanie do bazy, wybór bazy, wyświetlenie na stronie WWW, zamknięcie połączenia
C. wybór bazy danych, nawiązanie połączenia z serwerem baz danych, zapytanie do bazy - wyświetlane na stronie WWW, zamknięcie połączenia
D. nawiązanie połączenia z serwerem baz danych, wybór bazy, zapytanie do bazy - wyświetlane na stronie WWW, zamknięcie połączenia
Analizując niepoprawne odpowiedzi, można zauważyć, że każda z nich zawiera fundamentalne błędy w kolejności operacji. W przypadku pierwszej odpowiedzi, zaczynanie od zapytania do bazy danych bez wcześniejszego nawiązania połączenia z serwerem jest nie tylko niepraktyczne, ale wręcz niemożliwe. System nie jest w stanie wykonać jakiegokolwiek zapytania, jeśli nie istnieje aktywne połączenie, co prowadzi do błędów wykonania. W drugiej odpowiedzi również występuje błąd, polegający na wysyłaniu zapytania przed wybraniem bazy danych. W rzeczywistości, aby system mógł poprawnie zrealizować zapytanie, musi najpierw wiedzieć, z jaką bazą ma do czynienia. Ostatnia z niepoprawnych odpowiedzi, która sugeruje wybór bazy danych przed nawiązaniem połączenia, również jest błędna, ponieważ nie można wybrać bazy bez aktywnego połączenia z serwerem. W praktyce, każda z tych odpowiedzi nie uwzględnia kluczowych zasad dotyczących zarządzania połączeniami z bazami danych, takich jak zasady dotyczące transakcji oraz efektywnego zarządzania zasobami, co jest niezbędne w kontekście wydajnych aplikacji internetowych.

Pytanie 3

Technika projektowania algorytmów, która polega na dzieleniu problemu na dwa lub więcej mniejszych podproblemów, aż do momentu gdy fragmenty staną się na tyle proste, że można je rozwiązać bezpośrednio, to

A. słowa Fibonacciego
B. sito Eratostenesa
C. dziel i zwyciężaj
D. sortowanie przez wybór
Metoda "dziel i zwyciężaj" jest jedną z podstawowych technik projektowania algorytmów, która polega na rozwiązywaniu problemów poprzez dzielenie ich na mniejsze, bardziej zarządzalne podproblemy. Proces ten można opisać w trzech krokach: dzielenie, rozwiązywanie i łączenie wyniku. W praktyce oznacza to, że algorytm najpierw dzieli dany problem na dwa lub więcej podproblemów, następnie rozwiązuje każdy z nich osobno, a na końcu łączy zebrane rozwiązania, aby uzyskać odpowiedź na pierwotny problem. Przykładem może być algorytm sortowania szybkim (Quicksort), który wykorzystuje tę metodę poprzez wybór pivota, podział zbioru na mniejsze części i rekurencyjne sortowanie. Kolejnym przykładem jest algorytm mnożenia dużych liczb, taki jak algorytm Karatsuby. Dziel i zwyciężaj jest również stosowane w zaawansowanych technikach optymalizacji i w algorytmach wyszukiwania, co czyni tę metodę niezwykle uniwersalną i efektywną w wielu dziedzinach informatyki.

Pytanie 4

Jakie polecenie HTML poprawnie odwzorowuje przedstawioną hierarchiczną strukturę tekstu, która została wyświetlona przez przeglądarkę w następujący sposób: Rozdział 1 tekst Podrozdział 1.1 tekst Podrozdział 1.2?

A. <ul><li>Rozdział 1<li>tekst<li>Podrozdział 1.1<li>tekst<li>Podrozdział 1.2</ul>
B. <big>Rozdział 1</big>tekst<big>Podrozdział 1.1</big>tekst<big>Podrozdział 1.2</big>
C. <h1>Rozdział 1</h1><p>tekst</p><h2>Podrozdział 1.1</h2><p>tekst</p><h2>Podrozdział 1.2</h2>
D. <h1>Rozdział 1<p>tekst<h2>Podrozdział 1.1<p>tekst<h2>Podrozdział 1.2
Pierwszy z zaproponowanych kodów posiada poważne błędy, ponieważ nie zamyka tagów <p> oraz <h2>. Poprawne HTML wymaga, aby wszystkie otwarte tagi były odpowiednio zamknięte, co czyni kod nieczytelnym dla przeglądarek i może prowadzić do nieprzewidywalnych wyników wyświetlania. Druga propozycja definiuje strukturę jako listę nieuporządkowaną, co jest nieadekwatne w kontekście przedstawionej hierarchii nagłówków. Lista nieuporządkowana (<ul>) ma na celu grupowanie elementów, a nie definiowanie nagłówków i podrozdziałów, co narusza zasady semantyki HTML. Ostatnia odpowiedź używa tagu <big>, który nie jest zalecany w nowoczesnym HTML, gdyż nie ma on semantycznego znaczenia i nie wpływa na SEO w sposób pożądany. Ponadto, tag <big> nie zapewnia struktury dokumentu, a jedynie zmienia rozmiar tekstu, co jest niewłaściwe w kontekście hierarchii treści. Wszelkie te błędy nie tylko wpływają negatywnie na czytelność strony, ale również mogą obniżać jej pozycjonowanie w wynikach wyszukiwania.

Pytanie 5

Jakie informacje można uzyskać na temat normalizacji tej tabeli?

Ilustracja do pytania
A. Tabela znajduje się w pierwszej postaci normalnej
B. Tabela jest w drugiej postaci normalnej
C. Tabela znajduje się w trzeciej postaci normalnej
D. Tabela nie jest znormalizowana
Tabela przedstawiona w pytaniu nie spełnia wymogów żadnej z trzech podstawowych postaci normalnych co oznacza że nie jest znormalizowana. Pierwsza postać normalna wymaga aby wszystkie wartości w tabeli były atomowe co oznacza że kolumna Adres powinna być podzielona na kilka kolumn takich jak ulica miasto i kod pocztowy. Druga postać normalna wymaga że wszystkie atrybuty niekluczowe muszą być deterministycznie zależne od całego klucza głównego co w tym przypadku nie ma zastosowania ponieważ tabela zawiera tylko dwa atrybuty i brak jest klucza złożonego. Trzecia postać normalna eliminuje wszelkie przejściowe zależności funkcyjne pomiędzy atrybutami niekluczowymi co również nie ma zastosowania w tej prostej strukturze. Typowe błędy myślowe prowadzące do niewłaściwych wniosków mogą obejmować niepełne zrozumienie zasad atomowości danych oraz błędne założenie że nieskomplikowana struktura tabeli automatycznie spełnia zasady normalizacji. Dlatego kluczowe jest aby dokładnie rozumieć i identyfikować zależności między danymi oraz jak te zależności wpływają na integralność i efektywność bazy danych co jest szczególnie istotne w dużych systemach gdzie dane są intensywnie modyfikowane i wykorzystywane przez wiele aplikacji jednocześnie. Właściwa normalizacja pozwala na optymalizację czasu dostępu do danych oraz minimalizację redundancji co jest uznawane za dobrą praktykę w branży projektowania baz danych. W kontekście projektowania systemów informatycznych poprawna normalizacja jest nieodłącznym elementem cyklu życia projektu zapewniającym że struktura danych jest odporna na zmiany w wymaganiach użytkowników oraz skalowalna w przypadku wzrostu ilości danych do obsługi przez system. Dlatego zrozumienie i prawidłowe stosowanie zasad normalizacji jest kluczowe dla przyszłych profesjonalistów w dziedzinie IT którzy będą odpowiedzialni za projektowanie i utrzymanie złożonych systemów bazodanowych.

Pytanie 6

Wartość atrybutu w tabeli, który pełni rolę klucza głównego

A. może przyjmować wartość null (NULL)
B. nigdy nie jest innego typu niż numeryczny
C. musi być unikalna
D. jest używana do szyfrowania zawartości tabeli
Klucz podstawowy w bazach danych to coś, co naprawdę musi być unikalne, żeby każda informacja w tabeli była dobrze zidentyfikowana. Przykładowo, w tabeli 'Klienci' mamy kolumnę 'ID_klienta'. To jest dobry klucz podstawowy, bo każdy klient musi mieć swój własny numer, żeby nie było sytuacji, gdzie dwóch klientów ma ten sam identyfikator. Gdyby klucz podstawowy był taki sam dla różnych rekordów, mogłoby to wywołać spore zamieszanie przy aktualizacjach czy usuwaniu danych. Warto też pamiętać, że są takie rzeczy jak indeksy, które mogą pomóc w zapewnieniu, że klucz podstawowy jest unikalny i przyspiesza wyszukiwanie danych. Można użyć kluczy naturalnych, które mają sens w kontekście danych, albo kluczy syntetycznych, które system tworzy sam, jak na przykład GUID-y. Z mojego doświadczenia, to znajomość tych zasad naprawdę pomaga w lepszym projektowaniu baz danych.

Pytanie 7

Jakie zapytanie SQL umożliwi wyszukanie z podanej tabeli tylko imion i nazwisk pacjentów, którzy przyszli na świat przed rokiem 2002?

Ilustracja do pytania
A. SELECT * FROM Pacjenci WHERE rok_urodzenia <= 2002
B. SELECT imie, nazwisko FROM Pacjenci WHERE data_ostatniej_wizyty < 2002
C. SELECT imie, nazwisko FROM Pacjenci WHERE rok_urodzenia < 2002
D. SELECT * FROM Pacjenci WHERE rok_urodzenia LIKE 2002
To zapytanie SQL, które napisałeś, czyli SELECT imie, nazwisko FROM Pacjenci WHERE rok_urodzenia < 2002, jest całkiem trafione. Po pierwsze, używasz operatora SELECT, żeby wskazać, jakie kolumny chcesz zwrócić - czyli imię i nazwisko. To jest dokładnie to, co było potrzebne. Po drugie, warunek WHERE z rokiem urodzenia zapewnia, że do wyników dostają się tylko pacjenci, którzy przyszli na świat przed 2002 rokiem. No i to jest ważne, bo masz tutaj operator mniejszości <, który wyklucza sam rok 2002. Takie podejście jest super przydatne w bazach danych, bo pozwala na filtrowanie informacji w oparciu o lata, co często wykorzystuje się w raportach i analizach. Generalnie, dobre praktyki w SQL mówią, że warto precyzyjnie określać, jakie kolumny chcesz uwzględnić, bo to pomaga odciążyć system i zrobione zapytanie będzie działać wydajniej. Twoje zapytanie nie tylko spełnia wymagania, ale także jest optymalne, co jest naprawdę istotne w pracy z bazami danych.

Pytanie 8

Tabela Pracownicy zawiera informacje na temat pracowników różnych działów, co jest zaznaczone przez pole liczbowe dzial. Z racji tego, że zazwyczaj kwerendy dotyczą tylko działu 2, można uprościć zapytania do tej tabeli, tworząc wirtualną tabelę o nazwie Prac_dzial2 przy użyciu zapytania

A. VIEW Prac_dzial2 SELECT FROM Pracownicy WHERE dzial=2;
B. CREATE VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2;
C. VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2;
D. CREATE VIEW Prac_dzial2 AS SELECT * FROM Pracownicy WHERE dzial=2;
Wybór odpowiedzi, która nie zawiera pełnej składni SQL, prowadzi do nieporozumień w zrozumieniu, jak działa tworzenie widoków w bazach danych. Odpowiedzi takie jak 'CREATE VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2;' są błędne, ponieważ użycie słowa kluczowego 'FROM' jest niewłaściwe w kontekście definicji widoku. W standardowym SQL używa się 'AS' do określenia zapytania, które definiuje widok, co jest kluczowe dla poprawnego przetwarzania zapytania przez silnik bazy danych. Z kolei odpowiedzi, które zaczynają się od 'VIEW', takie jak 'VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2;' oraz 'VIEW Prac_dzial2 SELECT FROM Pracownicy WHERE dzial=2;', są całkowicie niepoprawne, ponieważ w SQL nie istnieje polecenie 'VIEW' jako samodzielne polecenie do tworzenia widoków. To może prowadzić do mylnego przekonania, że komendy SQL są bardziej elastyczne w kwestii składni, co nie jest zgodne z rzeczywistością. Użytkownicy powinni zawsze odnosić się do dokumentacji SQL oraz standardów, aby upewnić się, że struktura zapytań jest zgodna z wymaganiami danego systemu bazy danych. Rozumienie poprawnej składni i semantyki SQL jest podstawowym elementem efektywnego zarządzania bazami danych i kluczowym krokiem w procesie nauki oraz implementacji skutecznych rozwiązań bazodanowych.

Pytanie 9

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 and $ocena <= 6
C. $ocena >= 2 or $ocena <= 6
D. $ocena > 2 and $ocena < 6
Analiza pozostałych odpowiedzi ujawnia szereg nieporozumień dotyczących wykorzystania operatorów logicznych. W przypadku wyrażenia $ocena > 2 or $ocena < 6, pojawia się problem z interpretacją, ponieważ ta konstrukcja pozwalałaby na zaakceptowanie ocen, które są znacznie poniżej 2 lub powyżej 6. Na przykład, ocena 1 spełniałaby ten warunek, co jest absolutnie niezgodne z założeniem dotyczącym obliczania średniej pozytywnych ocen. Podobnie, w odpowiedzi $ocena >= 2 or $ocena <= 6, znowu występuje niebezpieczeństwo, gdyż oceny mniejsze niż 2 lub większe niż 6 również by przeszły, co jest w sprzeczności z oczekiwanym zakresem ocen. Odpowiedź $ocena > 2 and $ocena < 6 nie uwzględnia ocen 2 oraz 6, co znacząco zawęża zakres, a tym samym ogranicza pełen przekrój danych, które powinny być brane pod uwagę przy obliczaniu średniej. Takie błędne podejścia są rezultatem nieprecyzyjnego rozumienia logiki i zakresu danych. Kluczowe jest, aby przy definiowaniu warunków logicznych rozumieć konsekwencje używanych operatorów, co stanowi fundamentalny element programowania. Wybór odpowiednich operatorów i ich logiczne połączenie są kluczowe dla zapewnienia, że w przetwarzanych danych zostaną uwzględnione tylko te wartości, które są zgodne z ustalonymi kryteriami.

Pytanie 10

W PHP w konstrukcji switch konieczne jest użycie

A. instrukcji default
B. konstrukcji switch(wyrażenie)
C. przynajmniej dwóch instrukcji case
D. instrukcji break po każdym przypadku case
Poprawna odpowiedź to konstrukcja switch(wyrażenie), ponieważ jest to podstawowy element składniowy w języku PHP. Instrukcja switch jest używana do porównywania wartości wyrażenia z różnymi wartościami case. W przypadku znalezienia dopasowania, wykonywana jest odpowiednia sekcja kodu. Ważne jest, aby zrozumieć, że samo utworzenie konstrukcji switch bez podania wyrażenia nie ma sensu, ponieważ nie istnieje wartość, którą można porównać. Przykład zastosowania konstrukcji switch może wyglądać następująco: switch($day) { case 'Monday': echo 'Poniedziałek'; break; case 'Tuesday': echo 'Wtorek'; break; default: echo 'Inny dzień'; }. Użycie instrukcji default jest opcjonalne, a także nie jest konieczne posiadanie przynajmniej dwóch case, aby konstrukcja była poprawna. Zastosowanie switch jest często bardziej czytelne i zorganizowane niż wiele zagnieżdżonych instrukcji if-else, co jest zgodne z najlepszymi praktykami programistycznymi, poprawiającymi zarówno zrozumiałość, jak i konserwację kodu.

Pytanie 11

Dla którego akapitu zastosowano przedstawioną właściwość stylu CSS?

border-radius: 20%;

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

A

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

B

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

C

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

D
A. B.
B. C.
C. A.
D. D.
Niestety, tym razem nie trafiłeś. Właściwość CSS 'border-radius: 20%;' naprawdę służy do zaokrąglania rogów, a na obrazku tylko akapit B ma takie zaokrąglenia. Może pomyliłeś to z czymś innym? Ważne, żeby zrozumieć, jak działa 'border-radius' – robi on krawędzie ładniejsze. Jak widzisz, '20%;' to wartość procentowa i mówi, jak bardzo te rogi mają być zaokrąglone. Widziałeś inne odpowiedzi (A, C, D), ale one nie miały tych zaokrągleń. Najlepiej zwrócić uwagę na to, jak różne style CSS wpływają na wygląd naszych elementów. W przyszłości warto się tego nauczyć, bo to naprawdę przydatne.

Pytanie 12

Który semantyczny znacznik języka HTML 5 może wystąpić tylko raz na stronie?

A. <header>
B. <article>
C. <main>
D. <section>
Poprawna odpowiedź to <main>, bo zgodnie ze specyfikacją HTML5 ten znacznik powinien pojawić się w dokumencie najwyżej raz. Element <main> reprezentuje główną, unikalną treść strony, czyli to, co jest najważniejsze dla konkretnego adresu URL. Przeglądarki, czytniki ekranu i inne narzędzia asystujące zakładają, że istnieje jedno główne miejsce, do którego użytkownik może szybko „przeskoczyć”, omijając nagłówek, menu czy stopkę. Dlatego pojedynczy <main> ma duże znaczenie dla dostępności (a11y) i użyteczności serwisu. W praktyce dobrym wzorcem jest struktura: <header> na górę, poniżej <nav> (jeśli jest), potem jeden <main>, a w nim np. <article>, <section>, <aside>, a na końcu <footer>. Wewnątrz <main> możesz mieć kilka artykułów, sekcji, nawet różne widoki aplikacji SPA, ale sam <main> jest tylko jeden. Moim zdaniem warto od początku wyrabiać sobie nawyk: dokładnie jeden <main> na stronę i absolutnie nie zagnieżdżać go wewnątrz <header>, <footer> czy <article>. To jest też zgodne z dobrymi praktykami SEO – wyszukiwarki łatwiej rozumieją, co jest esencją danej podstrony. Dodatkowo, wiele frameworków front‑endowych i systemów CMS zakłada w layoutach pojedynczy kontener na treść główną, który semantycznie powinien być właśnie <main>, a nie np. zwykłym <div id="content">. Taka semantyka sprawia, że kod wygląda czyściej, jest bardziej przyszłościowy i po prostu profesjonalny.

Pytanie 13

ALTER TABLE artykuły MODIFY cena float; Ta kwerenda ma na celu wprowadzenie zmian w tabeli artykuły.

A. zmiana nazwy kolumny cena na float
B. usunięcie kolumny cena o typie float
C. zmiana typu na float dla kolumny cena
D. dodanie kolumny cena o typie float, o ile nie istnieje
Odpowiedzi, które mówią o usunięciu kolumny albo zmianie jej nazwy, pokazują, że coś nie do końca zrozumiałeś polecenie ALTER TABLE. Jak chcesz usunąć kolumnę, to robisz to przez 'DROP COLUMN', a nie poprzez modyfikację, jak w tym przypadku. Jeśli chodzi o zmianę nazwy kolumny, to używa się polecenia 'RENAME', a nie 'MODIFY'. Takie mylne interpretacje mogą prowadzić do nieporozumień, szczególnie w zarządzaniu tabelami w bazach danych. Ważne, żeby wiedzieć, że 'ALTER TABLE artykuły MODIFY cena float;' modyfikuje istniejącą kolumnę, a nie dodaje nową. Odpowiedzi sugerujące dodawanie kolumny są w tej sytuacji po prostu błędne. W praktyce, dobrze jest znać różnice między dodawaniem, usuwaniem i modyfikowaniem, bo to fundamentalne dla zrozumienia SQL i zarządzania danymi.

Pytanie 14

Podaj definicję metody, którą trzeba umieścić w miejscu kropek, aby na stronie WWW pojawił się tekst: Jan Kowalski

Ilustracja do pytania
A. A
B. D
C. B
D. C
Poprawna odpowiedź A jest prawidłowa, ponieważ metoda osoba.dane jest zdefiniowana jako funkcja wewnątrz obiektu osoba, co pozwala na użycie słowa kluczowego this, aby odwołać się do właściwości obiektu. W JavaScript this w kontekście metody obiektu odnosi się do samego obiektu, zatem this.imie i this.nazwisko poprawnie odwołują się do właściwości imie i nazwisko obiektu osoba. Dzięki temu funkcja zwraca ciąg tekstowy Jan Kowalski, który zostaje przypisany do innerHTML elementu o id wynik. Zastosowanie this jest zgodne z dobrymi praktykami programowania obiektowego w JavaScript, ponieważ umożliwia dynamiczne odwoływanie się do właściwości obiektu w kontekście tej samej instancji. Praktyczne zastosowanie tej metody pozwala na efektywne zarządzanie danymi w obrębie złożonych aplikacji webowych, gdzie obiekty mogą mieć wiele właściwości i metod. Kluczowym aspektem jest zrozumienie, że w JavaScript this jest dynamicznie wiązane w zależności od kontekstu wywołania, co jest szczególnie ważne przy pracy z metodami i konstruktorami obiektów.

Pytanie 15

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

A. Barwienie.
B. Progowanie.
C. Krzywe.
D. Inwersja.
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 16

W CSS, aby zastosować efekt przekreślenia, a także podkreślenia dolnego lub górnego w tekście, należy użyć

A. text-indent
B. text-transform
C. text-align
D. text-decoration
Odpowiedź 'text-decoration' jest prawidłowa, ponieważ ta właściwość CSS umożliwia dodawanie różnych efektów dekoracyjnych do tekstu, takich jak przekreślenie, podkreślenie oraz nadkreślenie. Przykładowo, aby przekreślić tekst, możesz użyć następującego kodu: 'text-decoration: line-through;'. Z kolei dla podkreślenia tekstu zastosujesz 'text-decoration: underline;'. W kontekście standardów CSS3, 'text-decoration' ma na celu nie tylko estetykę, ale także poprawę czytelności, co jest kluczowe w projektowaniu responsywnych i dostępnych stron internetowych. Warto również pamiętać o dobrych praktykach, takich jak unikanie nadmiernego stosowania dekoracji, które mogą odwracać uwagę od treści. W praktyce, kontrolowanie wyglądu tekstu za pomocą 'text-decoration' pozwala na tworzenie bardziej zróżnicowanych i atrakcyjnych interfejsów użytkownika, co w efekcie może zwiększyć zaangażowanie odwiedzających stronę.

Pytanie 17

Podczas tworzenia tabeli w SQL określono pole, w którym wartości muszą być unikalne. Którego atrybutu należy użyć w jego definicji?

A. UNIQUE
B. DEFAULT
C. IDENTITY
D. NOT NULL
Atrybut UNIQUE w SQL służy do zapewnienia, że wartości w danym polu są unikalne w całej tabeli. Jest to kluczowy mechanizm dla zachowania integralności danych, szczególnie w przypadkach, gdy konkretne pole powinno pełnić rolę identyfikatora lub klucza obcego. Przykładem zastosowania atrybutu UNIQUE może być tabela zawierająca dane o użytkownikach, w której adres e-mail musi być wyjątkowy dla każdego użytkownika. Definiując pole e-mail jako UNIQUE, baza danych zablokuje możliwość dodania dwóch rekordów z tym samym adresem, co chroni przed duplikacją danych. Warto pamiętać, że atrybut UNIQUE może być stosowany na wielu polach jednocześnie, co pozwala na tworzenie złożonych reguł unikalności. Przykładowo, można zdefiniować UNIQUE na kombinacji imienia i nazwiska w tabeli klientów, co zapewni, że nie pojawią się dwa identyczne wpisy dla tej samej osoby. Praktyka ta jest zgodna z zasadami normalizacji danych, które dążą do minimalizacji redundancji oraz zapewnienia spójności danych w bazie.

Pytanie 18

W skrypcie PHP konieczne jest stworzenie cookie o nazwie owoce, które przyjmie wartość jabłko. Cookie powinno być dostępne przez jedną godzinę od momentu jego utworzenia. W tym celu w skrypcie PHP należy wykorzystać funkcję:

A. setcookie("owoce","jabłko",time()+3600);
B. cookie("jabłko","owoce",3600);
C. cookie("owoce","jabłko",3600);
D. setcookie("jabłko","owoce",time()+3600);
Wybór niewłaściwej funkcji do ustawiania ciasteczka w PHP może prowadzić do nieprawidłowego działania aplikacji. Przykładowo, odpowiedzi, które używają funkcji cookie zamiast setcookie, są błędne, ponieważ w standardzie PHP nie istnieje funkcja o nazwie cookie. Dodatkowo, każda z odpowiedzi, która nieprawidłowo ustawia argumenty funkcji setcookie, wprowadza w błąd co do właściwego wykorzystania tego narzędzia. Warto zauważyć, że w odpowiedzi setcookie("jabłko","owoce",time()+3600) nie tylko zamieniono nazwy i wartości, ale także ich kolejność, co skutkuje błędnym ustawieniem ciasteczka. W PHP, pierwszy argument powinien być nazwą ciasteczka, a drugi - jego wartością. Niepoprawne podejście do tematu ciasteczek może prowadzić do problemów z przechowywaniem danych użytkowników, co jest kluczowe w kontekście UX i bezpieczeństwa aplikacji. W praktyce, przy każdym użyciu funkcji setcookie należy zwracać uwagę na to, aby przestrzegać konwencji i standardów PHP, co zapewnia nie tylko poprawność działania kodu, ale także jego czytelność oraz ułatwia późniejsze jego utrzymanie. Typowe błędy, takie jak pomylenie argumentów, mogą skutkować błędną logiką w aplikacji lub nawet brakiem możliwości zapisywania ważnych informacji w ciasteczkach. Dlatego kluczowe jest zrozumienie działania funkcji setcookie oraz przestrzeganie dobrych praktyk programistycznych.

Pytanie 19

W SQL, aby dodać kolumnę rozmiar typu znakowego o maksymalnej długości 20 znaków do tabeli Towar, należy wykonać następujące polecenie

A. ALTER TABLE Towar ADD rozmiar varchar(20)
B. ALTER TABLE Towar DROP COLUMN rozmiar varchar(20)
C. ALTER TABLE Towar ALTER COLUMN rozmiar varchar(20)
D. ALTER TABLE Towar CREATE COLUMN rozmiar varchar(20)
Aby dodać nową kolumnę do istniejącej tabeli w bazie danych SQL, właściwe jest użycie polecenia ALTER TABLE z opcją ADD. W tym przypadku, aby dodać kolumnę 'rozmiar' typu varchar o maksymalnej długości 20 znaków do tabeli 'Towar', należy napisać: ALTER TABLE Towar ADD rozmiar varchar(20). Typ danych varchar (zmienny znak) jest często stosowany do przechowywania tekstu o zmiennej długości, co czyni go idealnym do przechowywania informacji takich jak rozmiary, nazwy czy opisy. Zachowanie maksymalnej długości kolumny do 20 znaków zapewnia, że żadne dane nie przekroczą ustalonego limitu, co z kolei może pomóc w utrzymaniu integralności danych. Dodatkowo, standard SQL definiuje ALTER TABLE jako polecenie do modyfikacji istniejących obiektów w bazie danych, co czyni go kluczowym narzędziem dla administratorów baz danych. Przykładowo, po dodaniu kolumny można zaktualizować istniejące rekordy, aby wprowadzić odpowiednie dane do nowej kolumny. Warto również zaznaczyć, że różne systemy zarządzania bazami danych (DBMS) mogą mieć swoje specyficzne rozszerzenia, ale powyższa składnia jest zgodna z SQL ANSI.

Pytanie 20

Jaką cechę posiada format PNG?

A. bezstratna kompresja
B. brak wsparcia dla kanału alfa
C. zapis grafiki wektorowej
D. wsparcie dla animacji
Wybór odpowiedzi związanych z obsługą animacji jest mylny, ponieważ format PNG nie obsługuje animacji w standardowy sposób. Choć istnieje rozszerzenie o nazwie APNG (Animated PNG), które pozwala na tworzenie prostych animacji, nie jest to powszechnie akceptowany standard, co czyni PNG głównie formatem statycznym. W kontekście braku obsługi kanału alfa, warto zauważyć, że format PNG został zaprojektowany z myślą o pełnej obsłudze przezroczystości, co jest kluczowe dla wielu zastosowań graficznych. Z kolei sugerowanie, że PNG reprezentuje grafikę wektorową, jest całkowicie błędne, ponieważ ten format jest przeznaczony do obrazów rastrowych, czyli opartych na pikselach, a nie wektorowych, które są definiowane matematycznie. Typowe błędy myślowe prowadzące do takich wniosków często wynikają z niepełnej znajomości standardów formatów graficznych lub mylenia różnych typów grafik. W branży graficznej ważne jest zrozumienie właściwości formatów używanych do różnych zastosowań, a wybór niewłaściwego formatu może prowadzić do utraty jakości lub funkcjonalności obrazów.

Pytanie 21

W MySQL nadanie roli DBManager użytkownikowi pozwala na uzyskanie praw umożliwiających

A. nadzorowanie serwera
B. tworzenie kont użytkowników na serwerze oraz przypisywanie im haseł
C. wszelkie operacje na bazach danych serwera
D. wszystkie działania na bazach danych oraz użytkownikach serwera
Odpowiedź 'wszelkie operacje na bazach danych serwera' jest prawidłowa, ponieważ rola DBManager w MySQL przyznaje użytkownikowi pełne uprawnienia do zarządzania bazami danych. Obejmuje to możliwość tworzenia, modyfikowania i usuwania baz danych oraz tabel, a także wykonywania zapytań w tych bazach. Rola ta jest użyteczna w kontekście administracji bazami danych, gdzie administratorzy muszą mieć dostęp do wszystkich funkcji związanych z danymi. Przykładowo, administrator może wykorzystać tę rolę do optymalizacji wydajności baz danych poprzez indeksowanie tabel lub do tworzenia kopii zapasowych. Z perspektywy dobrych praktyk, nadawanie ról z odpowiednimi uprawnieniami powinno być przeprowadzane z rozwagą, aby zminimalizować ryzyko nieautoryzowanego dostępu i zapewnić integralność danych. Warto również pamiętać, że w MySQL można zastosować szczegółowe uprawnienia dla poszczególnych użytkowników, co pozwala na dostosowanie dostępu do konkretnych zadań w organizacji.

Pytanie 22

Podczas działania skryptu JavaScript został w konsoli wygenerowany błąd związany z działaniami na atrybucie elementu DOM. Z komunikatu wynika, że próbowano ustawić atrybut dla

Ilustracja do pytania
A. paragrafu.
B. odnośnika.
C. obrazu.
D. tabeli.
Twoja odpowiedź była prawidłowa. Błąd 'Uncaught TypeError: Cannot set property 'src' of null' jest związany z próbą przypisania wartości do atrybutu 'src' nieistniejącego elementu DOM. Atrybut 'src' jest charakterystyczny dla elementów HTML obrazu, czyli <img>, i służy do określenia źródła obrazka. Gdy masz do czynienia z błędem tego typu, najczęściej wynika to z próby manipulacji atrybutem 'src' obrazu, który nie istnieje w strukturze DOM, co może wynikać na przykład z błędu w selektorze. Pamiętaj, że przed przypisaniem wartości atrybutu, warto upewnić się, że dany element DOM faktycznie istnieje. W przeciwnym razie, jak w tym przypadku, JavaScript zwróci błąd. Zrozumienie charakterystyki błędów i potrafiące identyfikowanie ich przyczyn jest kluczowe w procesie programowania.

Pytanie 23

Aby dołączyć kod zawarty w pliku zewnętrznym do skryptu PHP, należy użyć funkcji

A. strlen()
B. include()
C. isset()
D. str_replace()
Prawidłowa funkcja to include(), bo właśnie ona służy w PHP do dołączania kodu z zewnętrznego pliku do aktualnie wykonywanego skryptu. Mechanizm jest prosty: interpreter PHP w miejscu wywołania include() wstawia zawartość wskazanego pliku tak, jakby ten kod fizycznie znajdował się w tym miejscu. Dzięki temu można dzielić aplikację na mniejsze moduły, np. osobny plik z nagłówkiem strony (header.php), stopką (footer.php), plikiem z funkcjami (functions.php) czy konfiguracją (config.php). W praktyce bardzo często spotyka się konstrukcje typu: include 'config.php'; albo include 'partials/header.php';. Moim zdaniem to jedna z podstawowych rzeczy, które trzeba opanować przy pracy z PHP, bo bez tego szybko robi się bałagan w kodzie. Warto wiedzieć, że istnieje też require(), które działa podobnie, ale przy błędzie (np. brak pliku) zatrzymuje skrypt, podczas gdy include() tylko zgłasza ostrzeżenie i próbuje lecieć dalej. Z punktu widzenia dobrych praktyk przy ważnych plikach (np. konfiguracja bazy danych) używa się częściej require_once, żeby mieć pewność, że plik został załadowany dokładnie raz i że bez niego aplikacja nie ruszy. Include() przydaje się tam, gdzie dołączany plik nie jest aż tak krytyczny, albo gdy zależnie od logiki ładujemy różne fragmenty layoutu. W nowocześniejszych projektach często stosuje się autoloading klas (np. przez Composer), ale mechanizm include/require nadal jest fundamentem i działa pod spodem. Warto też pilnować ścieżek względnych i bezwzględnych – dobrą praktyką jest bazowanie na __DIR__ lub ścieżkach konfigurowalnych, żeby uniknąć problemów po przeniesieniu projektu na inny serwer.

Pytanie 24

Z przedstawionych tabel Artykuly i Autorzy należy wybrać jedynie nazwiska autorów i tytuły ich artykułów, które zostały ocenione na 5. Kwerenda wybierająca te dane ma postać

Ilustracja do pytania
A. SELECT nazwisko, tytul FROM autorzy JOIN artykuly ON autorzy.id = autorzy_id;
B. SELECT nazwisko, tytul FROM autorzy, artykuly WHERE ocena == 5;
C. SELECT nazwisko, tytul FROM autorzy JOIN artykuly ON autorzy.id = autorzy_id WHERE ocena = 5;
D. SELECT nazwisko, tytul FROM autorzy JOIN artykuly ON autorzy.id = artykuly.id;
Gratulacje! Wybrałeś poprawne zapytanie SQL, które dokładnie odpowiada na postawione pytanie. Zapytanie 'SELECT nazwisko, tytul FROM autorzy JOIN artykuly ON autorzy.id = autorzy_id WHERE ocena = 5;' jest prawidłowe, bo łączy dwie tabele 'autorzy' i 'artykuly' za pomocą klucza obcego 'autorzy_id' w tabeli 'artykuly'. Dzięki temu uzyskujemy dostęp do nazwisk autorów i tytułów artykułów. Dodatkowo, część 'WHERE ocena = 5' filtruje wyniki tak, aby wyświetlane były tylko te rekordy, gdzie ocena wynosi 5. To jest kluczowy element, który pozwala nam skupić się tylko na tych danych, które są istotne dla pytania. W praktyce, tego typu zapytania pomagają nam w analizie wydajności autorów i jakości artykułów, co jest niezwykle ważne w branży wydawniczej.

Pytanie 25

Przedstawione zapytanie MySQL ma za zadanie

ALTER TABLE ksiazki MODIFY tytul VARCHAR(100) NOT NULL;
A. usunąć kolumnę tytul z tabeli ksiazki.
B. zmienić typ kolumny tytul w tabeli ksiazki.
C. dodać do tabeli ksiazki kolumnę tytul.
D. zmienić nazwę kolumny w tabeli ksiazki.
Zapytanie ALTER TABLE ksiazki MODIFY tytul VARCHAR(100) NOT NULL; często bywa mylone z innymi operacjami na strukturze tabeli, bo wszystkie tego typu polecenia wyglądają do siebie dość podobnie. Warto więc uporządkować, co ono dokładnie robi, a czego na pewno nie robi. W MySQL słowo kluczowe MODIFY służy do zmiany definicji istniejącej kolumny, czyli głównie jej typu danych, długości, atrybutów takich jak NOT NULL, domyślna wartość czy np. AUTO_INCREMENT. Kluczowe jest to, że nazwa kolumny pozostaje taka sama, modyfikujemy tylko jej właściwości techniczne. Częsty błąd myślowy polega na wrzucaniu do jednego worka wszystkich operacji ALTER TABLE i zakładaniu, że każde takie polecenie może np. usuwać lub dodawać kolumny. Do usuwania kolumny służy jednak zupełnie inna składnia: ALTER TABLE nazwa_tabeli DROP COLUMN nazwa_kolumny;. Tutaj nie ma słowa MODIFY, więc zapytanie z pytania na pewno nie usuwa kolumny tytul. Podobnie z dodawaniem nowej kolumny – używa się słowa kluczowego ADD, np. ALTER TABLE ksiazki ADD tytul VARCHAR(100);. W naszym przypadku kolumna tytul już musi istnieć, bo inaczej MODIFY zakończy się błędem. Pojawia się też czasem przekonanie, że MODIFY zmienia nazwę kolumny. W MySQL do zmiany nazwy wykorzystuje się ALTER TABLE ... CHANGE stara_nazwa nowa_nazwa typ;, gdzie trzeba podać zarówno starą, jak i nową nazwę oraz pełną definicję typu. W poleceniu z zadania nazwa tytul występuje tylko raz i nigdzie nie ma nowej nazwy, więc nie ma tu mowy o zmianie nazwy, a jedynie o modyfikacji typu i atrybutu NOT NULL. Dobrą praktyką w pracy z SQL jest dokładne kojarzenie słów kluczowych: ADD – dodaj, DROP – usuń, CHANGE – zmień nazwę i definicję, MODIFY – zmień definicję bez ruszania nazwy. Mylenie tych pojęć prowadzi później do niepotrzebnych błędów w migracjach bazy, a czasem nawet do utraty danych, dlatego warto mieć te różnice naprawdę dobrze poukładane w głowie.

Pytanie 26

Na przedstawionej grafice znajduje się struktura sekcji dla witryny internetowej. Przyjmując, że blok5 nie ma przypisanej szerokości, a bloki są określone w dokumencie HTML w kolejności ich numeracji, jak powinno wyglądać zdefiniowanie opływania?

Ilustracja do pytania
A. bloki 1, 2, 4 float: left; blok 3 float: right; blok 5 clear: both;
B. blok 1 float: left; bloki 2, 4 float: center; blok 3 float: right; blok 5 clear: both;
C. bloki 1, 2, 4 float: left; blok 3, 5 float: right;
D. bloki 1, 2, 3, 4 float: right; blok 5 clear: right;
Właściwe użycie float w CSS jest kluczowe do tworzenia układów stron. W pierwszej propozycji zastosowano float: left; dla bloków 1, 2, 4 oraz float: right; dla bloków 3 i 5, co jest niepoprawne, ponieważ blok 5 powinien być odseparowany od pozostałych poprzez clear: both;, aby zająć całą szerokość strony. W drugiej odpowiedzi, chociaż float: right; dla bloków 1, 2, 3, 4 może wydawać się poprawne dla niektórych stylów, blok 5 z clear: right; nie będzie działał, ponieważ nie uwzględnia float: left, które ma zastosowanie w układzie. Ostatnia odpowiedź używa float: center;, co jest nieprawidłowe, ponieważ w CSS nie istnieje taka właściwość. Elementy można centrować za pomocą innych metod, ale nie za pomocą float. Ponadto, przypisanie clear dla bloku 5 jest poprawne, ale pozostałe ustawienia float dla bloków są błędne i niezgodne z przedstawionym układem. Konsekwentne błędy często wynikają z braku zrozumienia, jak właściwości float i clear współdziałają w kontekście modelu pudełkowego w CSS.

Pytanie 27

Który z poniższych fragmentów kodu JavaScript zwróci true?

A. "abc" > "def"
B. "def" > "abc"
C. "ab" > "c"
D. "a" > "b"
W języku JavaScript porównania między ciągami tekstowymi są realizowane zgodnie z zasadami porównania leksykalnego, które opierają się na porównywaniu wartości kodów Unicode. W przypadku porównania 'def' > 'abc', JavaScript analizuje każdy znak z osobna. 'd' ma wartość Unicode 100, a 'a' ma wartość 97. Ponieważ 100 jest większe od 97, całe porównanie zwraca true. W praktyce oznacza to, że ciąg 'def' jest alfabetycznie większy niż 'abc'. Zrozumienie porównania ciągów tekstowych jest kluczowe w programowaniu, zwłaszcza w kontekście sortowania danych, filtracji oraz walidacji wejść. Aby lepiej zrozumieć te zasady, warto zapoznać się z dokumentacją ECMAScript, która precyzyjnie opisuje sposób działania operatorów porównania w różnych kontekstach. Warto również zauważyć, że porównania są wrażliwe na wielkość liter, co oznacza, że 'Z' będzie mniejsze niż 'a'.

Pytanie 28

Która funkcja języka PHP służy do zapisu danych do pliku?

A. fread()
B. readfile()
C. fgets()
D. fwrite()
Poprawna odpowiedź to fwrite(), ponieważ jest to podstawowa funkcja PHP służąca do zapisu danych do pliku. W typowym scenariuszu najpierw otwierasz plik funkcją fopen(), np. w trybie 'w' (zapis, nadpisanie) albo 'a' (dopisywanie na koniec), a dopiero potem używasz fwrite($uchwyt, $dane). Taki schemat: $fp = fopen('log.txt', 'a'); fwrite($fp, "Nowy wpis\n"); fclose($fp); to w praktyce standardowy wzorzec pracy z plikami w PHP. Moim zdaniem warto od początku wyrabiać sobie nawyk sprawdzania, czy fopen() się udało (czy nie zwróciło false) oraz czy fwrite() nie zwróciło 0 lub false, bo to jedna z podstawowych dobrych praktyk w programowaniu webowym. W kontekście aplikacji internetowych fwrite() często wykorzystuje się do zapisywania logów (np. własny prosty system logowania błędów), przechowywania prostych danych konfiguracyjnych, cache’owania wygenerowanych stron HTML do plików statycznych, a nawet do eksportu danych do plików CSV. W realnych projektach PHP zapis do pliku trzeba łączyć z odpowiednimi uprawnieniami katalogów na serwerze oraz z kontrolą błędów, żeby aplikacja zachowywała się przewidywalnie nawet wtedy, gdy system plików odmawia zapisu. Dobre praktyki mówią też, żeby nie mieszać logiki aplikacji z zapisem do pliku w losowych miejscach kodu, tylko wydzielić osobne funkcje lub klasy (np. Logger, FileStorage). fwrite() jest wtedy używane pod spodem, a reszta aplikacji tylko woła te wyższe warstwy. Warto też pamiętać o kodowaniu znaków (UTF-8) i o tym, żeby przy danych binarnych (np. obrazki, PDF-y) otwierać plik w trybie 'wb' lub 'ab'. To niby drobiazgi, ale w praktyce często decydują o tym, czy program działa stabilnie na różnych serwerach i systemach operacyjnych.

Pytanie 29

char str1[30] = 'Ala ma kota';
printf("%s", str1); 
Jakie jest źródło błędu w prezentowanym kodzie napisanym w języku C++?
A. W funkcji printf nie można używać formatowania %s.
B. Do funkcji printf przekazano za mało argumentów.
C. Napis powinien być umieszczony w cudzysłowie.
D. Napis powinien mieć dokładnie 30 znaków.
Odpowiedź wskazująca, że napis powinien być ujęty w cudzysłów jest poprawna, ponieważ w języku C/C++ napisy (łańcuchy znaków) muszą być ujęte w podwójne cudzysłowy, aby zostały prawidłowo zinterpretowane przez kompilator. W przedstawionym kodzie, zamiast użycia pojedynczych cudzysłowów, które są przeznaczone do definiowania pojedynczych znaków (char), należy użyć podwójnych, aby zdefiniować napis jako tablicę znaków. Takie podejście jest zgodne z standardami języka C i C++, gdzie łańcuchy znaków są implementowane jako tablice znaków zakończone znakiem null ('\0'). Przykładowo, poprawny sposób zapisu to: char str1[30] = "Ala ma kota";. Stosowanie odpowiednich cudzysłowów jest kluczowe w programowaniu, ponieważ może zapobiegać wielu błędom kompilacji oraz ułatwiać późniejszą edycję i zarządzanie kodem. Warto również pamiętać, że dobrym zwyczajem jest stosowanie tablic odpowiedniej wielkości, aby uniknąć nadpisywania pamięci, co może prowadzić do nieprzewidywalnych zachowań programu.

Pytanie 30

Określ rezultat działania podanego kodu PHP, jeśli zmienna tab jest tablicą. ```$tab = explode(",","jelenie,sarny,dziki,lisy,borsuki"); echo $tab[1]." ".$tab[2];```

A. jelenie sarny
B. dziki lisy
C. lisy borsuki
D. sarny dziki
Wynik działania tego kodu PHP to 'sarny dziki'. Dzieje się tak dzięki funkcji explode oraz indeksom tablicy. Funkcja explode dzieli tekst na kawałki według separatora, który w tym przypadku to przecinek. Więc, kiedy zastosujemy ją na ciągu 'jelenie,sarny,dziki,lisy,borsuki', dostaniemy tablicę, gdzie indeks 0 to 'jelenie', indeks 1 to 'sarny', indeks 2 to 'dziki', indeks 3 to 'lisy', a indeks 4 to 'borsuki'. Potem, polecenie echo wyświetla wartości z indeksów 1 i 2, które mają 'sarny' oraz 'dziki'. To całkiem praktyczne w programowaniu, zwłaszcza gdy przerabiamy i manipulujemy danymi tekstowymi. Dzięki explode łatwo dzielimy dane na mniejsze kawałki, co przydaje się w różnych sytuacjach, jak analiza danych czy robienie formularzy, a nawet w pracy z plikami CSV.

Pytanie 31

Aby zrealizować opisane czynności w JavaScript, konieczne jest umieszczenie poniższego kodu w znaczniku <script>

Ilustracja do pytania
A. A = prompt("Podaj kwalifikację: "); document.write("Kwalifikacja: "+A)
B. A << prompt("Podaj kwalifikację: "); document.write("Kwalifikacja: "+A)
C. A = alert("Podaj kwalifikację: "); document.write("Kwalifikacja: "+A)
D. A = prompt("Podaj kwalifikację: "); document.write("Kwalifikacja: ".A)
Rozważając podane odpowiedzi warto zauważyć kilka typowych błędów koncepcyjnych związanych z używaniem funkcji w JavaScript. Po pierwsze, w jednej odpowiedzi użyto kropki zamiast operatora konkatenacji przy próbie łączenia łańcuchów znaków, co jest błędne w JavaScript. W tym języku operator + jest standardowym sposobem na łączenie tekstu z wartościami zmiennych. Użycie kropki w tym kontekście jest błędne, ponieważ odnosi się do operacji obiektowych, nie do konkatenacji łańcuchów. Innym błędem jest wykorzystanie operatora <<, który w rzeczywistości służy do przesunięć bitowych, a nie do przypisywania wartości czy wywoływania funkcji. Takie pomyłki mogą wynikać z niezrozumienia różnic między operacjami bitowymi a przypisaniem wartości. Kolejna opcja sugerowała użycie alert() zamiast prompt(), co oznaczałoby wyświetlenie jedynie komunikatu bez możliwości wprowadzenia danych przez użytkownika, co nie spełnia założeń zadania polegających na pobraniu wartości od użytkownika. Wszystkie te błędne odpowiedzi wynikają z nieznajomości lub niepoprawnego użycia podstawowych funkcji i operatorów języka JavaScript co podkreśla znaczenie dokładnego zrozumienia podstaw języka oraz ich praktycznego zastosowania. Poprawne użycie prompt() i document.write() jest kluczowe w implementacji interaktywnych elementów na stronach internetowych, co pozwala na dynamiczne przetwarzanie danych użytkowników w aplikacjach webowych. Dobrze jest stosować się do standardów i dobrych praktyk, aby unikać podobnych błędów w przyszłości oraz by tworzyć aplikacje, które są zarówno funkcjonalne, jak i bezpieczne.

Pytanie 32

W języku PHP, aby otworzyć już istniejący plik lektury.txt w trybie dodawania treści, tak aby wskaźnik pliku został umieszczony na końcu tego pliku należy zastosować instrukcję

A. fopen("lektury.txt", "r")
B. fopen("lektury.txt", "a")
C. fopen("lektury.txt", "w")
D. fopen("lektury.txt", "x")
Poprawnie – w PHP tryb "a" w funkcji fopen() oznacza otwarcie pliku w trybie dopisywania (append). To dokładnie to, czego wymaga pytanie: plik ma już istnieć, a wskaźnik pliku (file pointer) ma zostać ustawiony na koniec, żeby nowa treść była dopisywana za tym, co już jest. Instrukcja fopen("lektury.txt", "a") otwiera pliki tylko do zapisu, nie nadpisuje istniejącej zawartości, tylko dokleja nowe linie na końcu. Jeśli plik nie istnieje, PHP spróbuje go utworzyć, oczywiście jeśli uprawnienia systemu plików na to pozwalają. W praktyce taki tryb stosuje się np. do prowadzenia logów, dzienników zdarzeń, prostych liczników odwiedzin albo dopisywania nowych rekordów tekstowych bez kasowania starych danych. Typowy fragment kodu może wyglądać tak: $fh = fopen("lektury.txt", "a"); fwrite($fh, "Pan Tadeusz\n"); fclose($fh); Po takim zapisie wcześniejsza zawartość lektury.txt zostaje nietknięta, a tekst „Pan Tadeusz” trafia na sam koniec pliku. Z mojego doświadczenia to jest bezpieczniejsza opcja niż tryb "w", kiedy chcemy tylko coś dopisać i absolutnie nie wolno stracić danych, które już w pliku są. Warto też pamiętać o dobrych praktykach: zawsze sprawdzamy wynik fopen() (czy nie zwrócił false), obsługujemy ewentualne błędy i po zakończeniu pracy domykamy uchwyt funkcją fclose(). W większych projektach sensowne jest też blokowanie pliku (flock) przy jednoczesnym dostępie wielu skryptów, żeby dane się nie pomieszały. Tryb "a" jest więc standardowym i zalecanym rozwiązaniem w sytuacjach, gdy trzeba dopisywać dane na końcu istniejącego pliku tekstowego.

Pytanie 33

Jakim zapisem w języku PHP można określić komentarz, który rozciąga się na wiele linii?

A. <!-- -->
B. #
C. //
D. /*  */
Wybór zapisu # jako sposobu definiowania komentarzy w PHP nie jest poprawny, ponieważ jest to sposób stosowany w innych językach programowania, takich jak Bash czy Perl, do komentowania pojedynczych linii. Komentarze w PHP, które zaczynają się od // również służą do oznaczania komentarzy, ale zaledwie dla jednej linii. Oznacza to, że w przypadku dłuższych opisów, musielibyśmy używać wielu komentarzy liniowych, co obniża czytelność kodu i może prowadzić do zamieszania. Zapis <!-- --> jest całkowicie nieprawidłowy w kontekście PHP. Ten typ komentarza jest używany w HTML i XML, a jego zastosowanie w PHP może skutkować błędami, ponieważ parser PHP nie interpretuje tego formatu jako komentarza. To może prowadzić do sytuacji, w których fragmenty kodu są błędnie analizowane przez interpreter, co skutkuje nieoczekiwanym działaniem programu. Typowe błędy myślowe, które mogą prowadzić do takich niepoprawnych wniosków, to mylenie konwencji komentarzy w różnych językach programowania lub zakładanie, że pewne zapisy są uniwersalne. W praktyce, zaleca się stosowanie odpowiednich formatów komentarzy zgodnie z ich przeznaczeniem w danym języku programowania, aby uniknąć nieporozumień i błędów w kodzie.

Pytanie 34

W języku SQL wykonano przedstawione poniżej polecenia GRANT. Kto będzie miał prawo do przeglądania danych oraz ich zmiany?

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. Anna i Tomasz
B. Tomasz i Adam
C. Adam i Anna
D. Jedynie Tomasz
Odpowiedź 'Tomasz i Adam' jest poprawna, ponieważ obaj użytkownicy mają przypisane odpowiednie uprawnienia do przeglądania oraz modyfikacji danych w bazie 'firmy'. Adam otrzymał pełne uprawnienia, co oznacza, że może przeglądać (SELECT) oraz modyfikować (INSERT, UPDATE, DELETE) dane, a także zmieniać strukturę tabel (ALTER, CREATE, DROP). Tomasz, z kolei, ma przydzielone szczegółowe uprawnienia do przeglądania danych (SELECT) oraz ich modyfikacji (INSERT, UPDATE). W praktyce, przydzielanie uprawnień w bazach danych odbywa się zgodnie z zasadą minimalnych uprawnień, co oznacza, że każdy użytkownik powinien mieć tylko te uprawnienia, które są mu niezbędne do realizacji przydzielonych zadań. Dobrą praktyką jest regularna weryfikacja przydzielonych uprawnień oraz ich dostosowywanie do zmieniających się potrzeb organizacji.

Pytanie 35

Po awarii serwera bazy danych, aby jak najszybciej przywrócić pełne działanie bazy, konieczne jest wykorzystanie

A. aktualnej wersji kopii zapasowej
B. opisu struktur danych w tabelach
C. najświeższej wersji instalacyjnej serwera
D. kompletnej listy użytkowników serwera
Aby skutecznie przywrócić działanie bazy danych po jej uszkodzeniu, kluczowe jest wykorzystanie aktualnej wersji kopii zapasowej. Kopie zapasowe są fundamentem każdego planu odzyskiwania danych i powinny być regularnie tworzone zgodnie z polityką zarządzania danymi. Przykładowo, jeśli korzystamy z bazy danych w środowisku produkcyjnym, zaleca się wykonywanie codziennych kopii zapasowych oraz pełnych kopii co tydzień. W przypadku awarii, przywrócenie systemu do stanu sprzed incydentu za pomocą najnowszej kopii zapasowej minimalizuje utratę danych i przestoje. Praktyki takie jak backup w czasie rzeczywistym (real-time backup) mogą być również rozważane, aby ograniczyć ryzyko utraty danych. W kontekście standardów branżowych, organizacje powinny stosować zasady RTO (Recovery Time Objective) i RPO (Recovery Point Objective), które pomogą w określeniu najodpowiedniejszej strategii tworzenia kopii zapasowych i ich przechowywania. Zastosowanie aktualnych kopii zapasowych jest zatem najskuteczniejszym sposobem na przywrócenie funkcjonalności bazy danych.

Pytanie 36

O czym informuje przeglądarkę internetową zapis <!DOCTYPE html>?

A. W dokumencie każda etykieta musi być zamknięta, nawet te samozamykające.
B. Dokument jest zapisany w wersji HTML 4.
C. W dokumencie wszystkie tagi są zapisane wielkimi literami.
D. Dokument został zapisany w języku HTML 5.
Zapisywanie <!DOCTYPE html> na początku dokumentu informuje przeglądarkę, że dokument jest napisany w HTML5, co ma istotne znaczenie dla jego poprawnej interpretacji. HTML5 wprowadza wiele nowych elementów i atrybutów, które są kluczowe dla nowoczesnych aplikacji webowych, takich jak <header>, <footer>, <article> czy <section>, a także wspiera multimedia poprzez <audio> i <video>. Dzięki deklaracji <!DOCTYPE html> przeglądarki mogą stosować najnowsze standardy, co zapewnia lepszą zgodność i wsparcie dla responsywności, co jest niezbędne w erze urządzeń mobilnych. Ponadto, HTML5 wprowadza zasady dotyczące semantyki, co może poprawić SEO (optymalizację pod kątem wyszukiwarek) i dostępność treści dla osób z niepełnosprawnościami. W praktyce oznacza to, że tworząc nową stronę internetową, warto zawsze używać tej deklaracji, aby zapewnić, że przeglądarki renderują zawartość zgodnie z aktualnymi standardami.

Pytanie 37

W hurtowni danych stworzono tabelę sprzedaz, która zawiera pola: id, kontrahent, grupa_cenowa, obrot. Jakie polecenie trzeba zastosować, aby znaleźć tylko kontrahentów z grupy cenowej numer dwa, których obrót przekracza 4000 zł?

A. SELECT sprzedaz FROM kontrahent WHERE obrot > 4000;
B. SELECT sprzedaz FROM kontrahent WHERE grupa_cenowa = 2 AND obrot > 4000;
C. SELECT kontrahent FROM sprzedaz WHERE grupa_cenowa = 2 AND obrot > 4000;
D. SELECT kontrahent FROM sprzedaz WHERE grupa_cenowa = 2 OR obrot > 4000;
Dwie niepoprawne odpowiedzi pokazują, że są pewne nieporozumienia w kwestii SQL. W pierwszej z nich używasz operatora OR, co psuje całą logikę zapytania. To sprawia, że możesz dostać kontrahentów z drugiej grupy cenowej albo tych, co mają obrót powyżej 4000 zł, a nie tylko tych, którzy spełniają oba warunki jednocześnie. W analizie danych ważne jest, żeby warunki były precyzyjne, bo inaczej wyniki mogą być nieczytelne. W kolejnej odpowiedzi widzę, że próbujesz wydobywać dane z kolumny kontrahent, co jest niepoprawne, bo kolumna to nie tabela. Musisz mieć jasność co do struktury bazy danych, żeby pisać odpowiednie zapytania. A ostatnia odpowiedź nie zawiera warunku dla grupy cenowej, więc zwróci jakieś niepełne dane. Dobrym pomysłem jest też testować swoje zapytania na mniejszych zbiorach danych, niż wdrażać je od razu w produkcji, żeby uniknąć takich błędów.

Pytanie 38

W przedstawionym kodzie PHP w miejscu kropek powinno znajdować się polecenie

Ilustracja do pytania
A. mysqli_fetch_row($zapytanie);
B. mysqli_query($zapytanie);
C. mysqli_num_fields($zapytanie);
D. mysqli_free_result($zapytanie);
Koncept mysqli_free_result wydaje się atrakcyjny gdyż służy do zwalniania pamięci zajmowanej przez zestaw wyników. Jednak jego zastosowanie w tym kontekście jest błędne ponieważ zwalnianie pamięci powinno odbywać się po zakończeniu przetwarzania danych a nie przed pobraniem wierszy. Użycie mysqli_num_fields mogłoby wprowadzić w błąd ponieważ funkcja ta zwraca liczbę kolumn w zestawie wyników a nie jest związana z pobieraniem poszczególnych wierszy danych. W kontekście iteracji po wierszach zapytania jest to nieadekwatne. Funkcja mysqli_query jest używana do wysyłania zapytań do bazy danych i zwraca wynik zapytania ale sama w sobie nie pobiera danych z zestawu wyników co w tym zadaniu jest niezbędne. Częstym błędem jest mylenie funkcji wynikowych z funkcjami wykonującymi zapytania. Kluczowym do zrozumienia jest właściwe wykorzystanie funkcji do iteracyjnego pobierania danych co wymaga rozróżnienia zadań jakie pełni każda z funkcji w kontekście przetwarzania wyników zapytań do bazy danych. Prawidłowe rozróżnianie tych funkcji pozwala na efektywne zarządzanie danymi i pamięcią co jest istotne w kontekście aplikacji webowych oraz zapewnienia ich wydajności i poprawnego działania.

Pytanie 39

Debugger to narzędzie wykorzystywane do

A. oceny szybkości działania programu
B. identyfikacji błędów w kodzie programu
C. optymalizacji pamięci zajmowanej przez aplikację
D. analizy właściwości programu
Debugger to narzędzie, które odgrywa kluczową rolę w procesie tworzenia oprogramowania, umożliwiając programistom identyfikację i naprawę błędów w kodzie. Główną funkcją debuggera jest pozwolenie na analizę działania programu na poziomie linii kodu, co umożliwia użytkownikowi śledzenie wykonania programu, monitorowanie wartości zmiennych oraz sprawdzanie logiki warunkowej. Użycie debuggera pozwala na wykrywanie błędów w czasie rzeczywistym, co jest niezwykle istotne, zwłaszcza w przypadku aplikacji, które muszą działać na różnych platformach i z różnymi danymi wejściowymi. Przykładem może być programowanie w języku Python, gdzie debugger umożliwia krokowe przechodzenie przez kod, co pomaga zrozumieć proces wykonania i zidentyfikować miejsca, gdzie występują nieprawidłowości. Dobrym zwyczajem jest korzystanie z debuggera na wczesnych etapach tworzenia oprogramowania, aby zminimalizować późniejsze problemy w fazie testowania i wdrażania.

Pytanie 40

W formularzu dokumentu PHP znajduje się pole <input name="im">. Gdy użytkownik wprowadzi tekst "Janek", aby dodać wartość tego pola do bazy danych, w tablicy $_POST będzie obecny element

A. im z następującym numerem indeksu
B. im o indeksie Janek
C. Janek o indeksie im
D. Janek z następującym numerem indeksu
Odpowiedź "Janek o indeksie im" jest prawidłowa, ponieważ w momencie, gdy użytkownik wprowadza dane do pola formularza z nazwą 'im', wartość tego pola, czyli "Janek", zostaje przypisana do elementu tablicy $_POST. W tablicy $_POST każdemu pole w formularzu przypisuje wartość pod jego nazwą (w tym przypadku 'im'). W rezultacie, klucz tablicy $_POST będzie mieć wartość 'im', a jego wartość to 'Janek'. To podejście jest zgodne z dobrymi praktykami programowania w PHP, w których dane z formularzy są przekazywane do skryptów serwerowych w sposób zorganizowany i łatwy do odczytania. Umożliwia to deweloperom efektywne przetwarzanie danych wejściowych, co jest kluczowe w aplikacjach webowych. Przykładowo, gdy tworzymy formularz rejestracyjny, możemy użyć $_POST do łatwego przechwytywania i walidacji danych użytkownika, co poprawia bezpieczeństwo i funkcjonalność aplikacji.