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: 21 kwietnia 2026 21:35
  • Data zakończenia: 21 kwietnia 2026 21:53

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

W języku JavaScript trzeba zapisać warunek, który będzie prawdziwy, gdy zmienna a będzie jakąkolwiek liczbą naturalną dodatnią (bez 0) lub zmienna b przyjmie wartość z zamkniętego przedziału od 10 do 100. Wyrażenie logiczne w tym warunku ma formę

A. (a>0) && ((b>=10) && (b<=100))
B. (a>0) || ((b>=10) && (b<=100))
C. (a>0) && ((b>=10) || (b<=100))
D. (a>0) || ((b>=10) || (b<=100))
Warunek zapisany w języku JavaScript jako (a>0) || ((b>=10) && (b<=100)) jest poprawny, ponieważ spełnia wymagania dotyczące sprawdzenia, czy zmienna a jest liczbą naturalną dodatnią oraz czy zmienna b mieści się w przedziale od 10 do 100. Wyrażenie logiczne wykorzystuje operator || (alternatywa), który zwraca true, jeśli przynajmniej jeden z warunków jest spełniony. Warunek a>0 zapewnia, że zmienna a jest większa od zera, co jest zgodne z definicją liczb naturalnych dodatnich. Z kolei wyrażenie (b>=10) && (b<=100) sprawdza, czy zmienna b jest w zadanym przedziale, co jest zgodne z wymaganiami. Wartości graniczne 10 i 100 są uwzględnione dzięki operatorowi && (konjunkcja), który wymaga, aby oba warunki były prawdziwe, aby całe wyrażenie zwróciło true. W praktyce, takie podejście można wykorzystać w różnych kontekstach, np. walidacji danych wejściowych w formularzach internetowych, gdzie kluczowe jest zapewnienie, że użytkownik wprowadza poprawne wartości. Tego rodzaju wyrażenia logiczne są fundamentem programowania w JavaScript, umożliwiając tworzenie bardziej złożonych logik aplikacji. Zgodnie z dokumentacją ECMAScript, użycie operatorów logicznych jest standardowym sposobem na przetwarzanie warunków w programowaniu.

Pytanie 2

Funkcja zapisana w języku PHP ma postać jak poniżej. Jej zadaniem jest

function fun1($liczba)
{
    if($liczba % 2 == 0)
        return 1;

    return 0;
}
A. wypisanie liczby nieparzystej.
B. zwrócenie wartości 0, gdy liczba jest parzysta.
C. wypisanie liczby parzystej.
D. zwrócenie wartości 1, gdy liczba jest parzysta.
Twoja odpowiedź jest poprawna. Funkcja fun1($liczba) w PHP zwraca wartość 1, gdy liczba podana jako argument jest parzysta. Jest to wynikiem działania funkcji, której składnikami są operator modulo (%) i porównanie (==). Kod ($liczba % 2 == 0) sprawdza, czy reszta z dzielenia liczby przez 2 jest równa zero, co jest prawdą dla wszystkich liczb parzystych. Jeśli warunek jest spełniony, funkcja zwraca wartość 1. Jest to typowe i efektywne podejście do sprawdzania parzystości liczb w językach programowania. Wykorzystanie operatora modulo jest powszechną praktyką, gdyż nie tylko pozwala na realizację takiej operacji, ale również jest szybkie i nie wymaga zbyt dużego nakładu zasobów procesora. Można zastosować tę wiedzę w różnych scenariuszach - na przykład, gdy potrzebujesz przeprowadzić różne operacje na podstawie parzystości lub nieparzystości liczb.

Pytanie 3

Podany kod źródłowy ma na celu pokazanie

$liczba = 1;
while ($liczba != 0)
{
  $liczba = rand(0, 100);
  echo $liczba;
}
A. losowe liczby od 0 do 100 aż do momentu, gdy wylosowana zostanie wartość 0
B. wylosowane liczby od 1 do 99
C. liczby wprowadzane z klawiatury do momentu, gdy wczytana zostanie wartość 0
D. kolejne liczby od 1 do 100
Odpowiedzi, które sugerują, że kod generuje kolejne liczby od 1 do 100, wylosowane liczby od 1 do 99, czy też wczytane z klawiatury liczby, zawierają fundamentalne błędy w interpretacji logiki działania przedstawionego kodu. Po pierwsze, pętla while w kodzie analizowanym opiera się na losowym generowaniu liczb z wykorzystaniem funkcji rand(), a nie na sekwencyjnym przydzielaniu wartości. Kod nie generuje przyrostu numerycznego, jak sugeruje odpowiedź sugerująca liczby od 1 do 100. Ponadto, nie ma żadnej logiki, która wprowadzałaby wartości do programu z klawiatury, co całkowicie wyklucza odpowiedzi sugerujące wczytywanie liczb. Ważne jest, aby zrozumieć, że w kontekście programowania różnica pomiędzy losowym generowaniem a sekwencyjnym przydzielaniem wartości ma kluczowe znaczenie. Niepoprawne koncepcje pochodzą często z mylenia pojęć losowości i deterministycznych sekwencji, co prowadzi do błędnych wniosków. Każdy programista musi być świadomy tych różnic, aby unikać nieporozumień w kodzie, co jest istotne zarówno w codziennej praktyce programistycznej, jak i w bardziej złożonych projektach, gdzie precyzyjne działanie kodu jest kluczowe dla uzyskania oczekiwanych wyników.

Pytanie 4

Ile razy zostanie wykonana poniższa pętla w PHP?

for($i = 0; $i < 25; $i += 5) { ... }
A. 0
B. 25
C. 26
D. 5
Pętla for w PHP jest jednym z fundamentalnych narzędzi kontrolnych używanych do wykonywania powtarzających się zadań. W przedstawionym przykładzie pętli mamy następującą składnię: for($i = 0; $i < 25; $i += 5). Pętla rozpoczyna się od wartości początkowej zmiennej $i równej 0, a warunek kontynuacji pętli określa, że $i musi być mniejsze niż 25. W każdym przebiegu pętli zmienna $i zwiększa się o 5. Dzięki tej konstrukcji pętla wykona się dla wartości $i wynoszących kolejno 0, 5, 10, 15 i 20, co oznacza, że pętla zostanie wykonana dokładnie 5 razy. Takie konstrukcje są powszechnie stosowane w programowaniu do iteracyjnego przetwarzania danych, takich jak iterowanie przez tablice lub generowanie ciągów. Warto zwrócić uwagę na dobre praktyki programistyczne, które nakazują klarowność i czytelność kodu, dzięki czemu inni programiści mogą go łatwo zrozumieć i utrzymywać. Projektowanie pętli z precyzyjnie zdefiniowanymi warunkami początkowymi i końcowymi jest kluczowe dla unikania błędów logicznych, takich jak nieskończone pętle lub błędne iteracje. Użycie odpowiednich inkrementacji, jak w tym przypadku $i += 5, pozwala na kontrolowanie tempa i liczby iteracji zgodnie z zamierzonymi celami algorytmu.

Pytanie 5

Jaką wartość zwróci funkcja zao, która została zdefiniowana w języku C++, gdy zostanie wywołana z argumentem 3.55?

int zao(float x) {
    return x+0.5;
}
A. 3.5
B. 3
C. 4
D. 4.05
Funkcja zaofloat zdefiniowana w C++ przyjmuje argument typu float, a następnie zwraca go po dodaniu do niego wartości 0.5. W przypadku wywołania tej funkcji z argumentem 3.55, najpierw dodajemy 0.5, co daje nam 4.05. Następnie, w kontekście C++, funkcja ta nie została jeszcze zaimplementowana w sposób, który by zaokrąglał wynik. W rezultacie, gdybyśmy zaokrąglili wynik do najbliższej liczby całkowitej, otrzymalibyśmy 4. Takie podejście jest zgodne z zasadami zaokrąglania, które mówią, że liczby z częścią dziesiętną równą lub większą od 0.5 powinny być zaokrąglane w górę. Tego rodzaju funkcje są powszechnie stosowane w programowaniu, zwłaszcza w kontekście obliczeń finansowych i inżynieryjnych, gdzie precyzyjne zarządzanie wartościami liczbowymi jest kluczowe. Warto dodać, że w C++ istnieją standardowe funkcje, takie jak round() z biblioteki cmath, które mogą być wykorzystywane do efektywnego zaokrąglania wartości do najbliższej liczby całkowitej, co może być przydatne w wielu sytuacjach.

Pytanie 6

Jaką wartość przyjmie zmienna po wykonaniu poniższego fragmentu kodu w JavaScript?

var w=0;
var i=1;
for (i = 1; i < 50; i++)
{
    if (i%2 == 0)
        w += i;
}
A. liczbom naturalnym, które są nieparzyste i mniejsze od 50
B. liczbie naturalnych liczb parzystych większych od 50
C. suma naturalnych liczb parzystych, które są mniejsze od 50
D. suma wszystkich naturalnych liczb nieparzystych, które są większe od 50
Kod przedstawiony w pytaniu jest fragmentem programu JavaScript, który ma za zadanie zsumować wszystkie liczby parzyste mniejsze od 50. Początkowo zmienna w jest ustawiona na 0 i reprezentuje sumę, którą będziemy obliczać. Pętla for zaczyna się od i=1 i iteruje do i<50 zwiększając wartość i o 1 w każdej iteracji. Wewnątrz pętli znajduje się instrukcja warunkowa if, która sprawdza, czy liczba i jest parzysta, co oznacza, że jej reszta z dzielenia przez 2 wynosi 0. Jeśli warunek jest spełniony, liczba i jest dodawana do zmiennej w. W efekcie po zakończeniu pętli zmienna w zawiera sumę wszystkich parzystych liczb mniejszych niż 50. Przykładem praktycznego zastosowania takiego algorytmu może być sytuacja, w której musimy szybko obliczyć sumę określonego zbioru liczb spełniających dane kryterium, co jest częste w analizie danych lub generowaniu raportów. Konstrukcje takie jak pętla for i operator modulo są podstawowymi narzędziami w programowaniu, pozwalającymi na efektywne przetwarzanie danych i automatyzację złożonych operacji obliczeniowych, co jest zgodne z dobrymi praktykami w branży IT.

Pytanie 7

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. sito Eratostenesa
B. sortowanie przez wybór
C. dziel i zwyciężaj
D. słowa Fibonacciego
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 8

Ile razy zostanie wykonana zaprezentowana pętla w języku PHP, zakładając, że zmienna sterująca nie jest zmieniana wewnątrz pętli?

 for ($i = 0; $i <= 10; $i++) {
    // kod pętli
}
A. 10
B. Nieskończenie wiele
C. 0
D. 11
Prawidłowa odpowiedź wynika z analizy działania pętli for w języku PHP. W przedstawionej pętli warunek iteracji jest ustawiony na '$i <= 10', co oznacza, że pętla będzie wykonywana tak długo, jak długo zmienna $i będzie mniejsza lub równa 10. Zmienna $i jest inicjalizowana wartością 0 i inkrementowana o 1 przy każdym obiegu pętli. W efekcie, pętla będzie wykonywana dla wartości $i od 0 do 10, co daje 11 iteracji. Praktycznym zastosowaniem takiej pętli może być na przykład generowanie listy numerów lub przetwarzanie elementów w tablicy. Dobrą praktyką podczas używania pętli jest również upewnienie się, że warunek zakończenia jest poprawnie zdefiniowany, aby uniknąć niezamierzonych nieskończonych iteracji. Warto także uwzględnić możliwość modyfikowania zmiennej sterującej w ciele pętli, co może prowadzić do złożonych przypadków, ale w tym konkretnym przykładzie nie mamy takiej sytuacji.

Pytanie 9

Fragment kodu w PHP przedstawia się następująco (patrz ramka): Przy założeniu, że zmienna tablicowa $tab zawiera liczby naturalne, wynik działania programu polega na wypisaniu

Ilustracja do pytania
A. największego elementu w tablicy
B. tych elementów, które przewyższają wartość zmiennej $liczba
C. najmniejszego elementu w tablicy
D. elementu tablicy równemu wartości $tab[0]
Kod w PHP, który widzisz, robi coś fajnego – znajduje największy element w tablicy. Na początku przydzielamy zmiennej $liczba wartość pierwszego elementu z tablicy $tab. Potem przechodzimy przez wszystkie elementy tablicy za pomocą pętli foreach. W środku mamy warunek if, który sprawdza, czy aktualny element $element jest większy od tego, co mamy w $liczba. Jeśli tak, zmieniamy wartość $liczba na ten właśnie element. Gdy już skończymy pętlę, w $liczba mamy największą wartość z tablicy, a następnie to wypisujemy przez echo. Takie podejście to całkiem dobre rozwiązanie, szczególnie przy mniejszych zbiorach danych. Moim zdaniem, jest to piece of cake w programowaniu i często używane za każdym razem, gdy porównujemy różne wartości. Dobrze jest się nauczyć tej metody, bo sprawdza się w różnych sytuacjach, chociaż przy większych danych warto też pomyśleć o innych algorytmach jak sortowanie, które mogą uprościć sprawę.

Pytanie 10

Jakie dane zostaną wyświetlone po wykonaniu podanych poleceń?

bool gotowe = true;
cout << gotowe;
A. tak
B. nie
C. 0
D. 1
W języku C++ zmienne typu bool mogą przyjmować jedynie dwie wartości: true i false. Gdy zmienna typu bool zostanie wypisana przy użyciu standardowego strumienia wyjściowego cout, to domyślnie wartości true i false są konwertowane na liczby całkowite 1 i 0 odpowiednio. Dlatego w zaprezentowanym fragmencie kodu zmiennej gotowe przypisano wartość true, a następnie jej zawartość została wypisana przy użyciu cout. Wynikiem tego działania będzie wyświetlenie liczby 1 na ekranie. Jest to zgodne z domyślnym zachowaniem cout w przypadku zmiennych typu bool w C++. Aby modyfikować to zachowanie i bezpośrednio wypisywać słowa true lub false, można użyć specjalnej flagi boolalpha, która sprawia, że wartości logiczne są reprezentowane jako tekst. Jednak w podanym przykładzie nie użyto tej flagi, co prowadzi do wypisania wartości liczbowej. Takie podejście jest powszechne w wielu aplikacjach, gdzie wartości logiczne muszą być szybko zamieniane na wartości liczbowe, na przykład w obliczeniach binarnych czy przy operacjach bitowych. Poprawne zrozumienie tego mechanizmu jest kluczowe dla programistów tworzących efektywne i czytelne aplikacje w C++.

Pytanie 11

Kod JavaScript ma za zadanie szukanie wartości maksymalnej w tablicy. Wskaż błąd występujący w skrypcie.

14      max = tablica[0];
15      for (j == 1; j < 9; j++) {
16          if (max <= tablica[j]) {
17              max = tablica[j];
18          };
19      };
20      document.write("Największy element tablicy to: " + max);
A. Kod zapisany w linii 20 ma nieprawidłową składnię.
B. Warunek w linii 16 powinien być odwrócony.
C. Zastosowano operator porównania zamiast przypisania w linii 15.
D. Zmienna max ma niewłaściwie przypisaną wartość w linii 14.
W tym fragmencie kodu kluczowy problem faktycznie leży w linii 15, gdzie użyto operatora porównania `==` zamiast operatora przypisania `=`. W pętli `for` pierwsza część ma inicjalizować zmienną sterującą, czyli w JavaScripcie poprawny zapis to `for (j = 1; j < 9; j++) { ... }`. Konstrukcja `j == 1` nie ustawia wartości zmiennej, tylko porównuje bieżącą wartość `j` z liczbą 1 i zwraca wynik logiczny `true` lub `false`. W efekcie interpreter próbuje potraktować wynik porównania jako wyrażenie inicjalizujące, co jest po prostu błędem składniowym i skrypt się nie wykona. Z mojego doświadczenia to bardzo częsty błąd: programista myśli o „ustawieniu” wartości i z przyzwyczajenia wpisuje podwójny znak równości. Dlatego w językach takich jak JavaScript, C, Java trzeba mocno pilnować rozróżnienia: `=` oznacza przypisanie, `==` porównanie wartości (a `===` porównanie wartości i typu). Cała reszta algorytmu wyszukiwania maksimum jest w porządku: najpierw przypisujemy do `max` pierwszy element tablicy, potem w pętli przechodzimy kolejne elementy i jeśli aktualny element jest większy lub równy `max`, to aktualizujemy zmienną `max`. Taki schemat jest klasycznym algorytmem liniowego wyszukiwania wartości maksymalnej. W praktyce, gdy piszesz kod produkcyjny, warto dodatkowo zadbać o deklarację zmiennych (`let j = 1;`, `let max = tablica[0];`) oraz używać długości tablicy (`j < tablica.length`) zamiast stałej liczby 9, żeby kod był odporny na zmiany i łatwiejszy w utrzymaniu. W narzędziach typu ESLint często jest też reguła wychwytująca przypadkowe użycie `==` tam, gdzie spodziewane jest `=`, właśnie po to, żeby unikać takich subtelnych, ale groźnych pomyłek.

Pytanie 12

W języku JavaScript rezultat wykonania polecenia ```zmienna1 -= 1;``` będzie tożsamy z wynikiem polecenia

A. zmienna1 = zmienna1 - 0;
B. zmienna1++;
C. zmienna1--;
D. zmienna1 === zmienna1 - 1;
Odpowiedź zmienna1--; jest poprawna, ponieważ jest to skrócona forma wyrażenia zmienna1 -= 1;. Oba wyrażenia mają ten sam efekt, który polega na zmniejszeniu wartości zmiennej zmienna1 o 1. W języku JavaScript operator '--' jest operatorem dekrementacji, który zmienia wartość zmiennej o jeden w dół. Użycie tego operatora jest zgodne z dobrymi praktykami kodowania, gdyż zwiększa czytelność kodu, czyniąc intencje programisty bardziej jasnymi. Użycie dekrementacji jest powszechne w sytuacjach, gdzie iterujemy przez kolekcje z użyciem pętli, co ogranicza potrzebę stosowania bardziej skomplikowanych instrukcji. Na przykład, w przypadku pętli for, zamiast pisać for(let i = n; i > 0; i -= 1), można zastosować for(let i = n; i > 0; i--), co jest bardziej zwięzłe i zrozumiałe. W kontekście standardów kodowania, preferowanym podejściem jest używanie operatorów, które maksymalizują przejrzystość i minimalizują możliwość popełnienia błędów.

Pytanie 13

Jaki wynik wyświetli poniższy fragment kodu JavaScript?

x='Powodzenia na egzaminie';
z=x.substring(3,9);
y=z.substring(2,4);
document.write(y);
A. ze
B. wodzenia
C. owodzeni
D. wo
W przedstawionym kodzie JavaScript użyto funkcji substring aby wyodrębnić fragmenty tekstu z ciągu znaków. Początkowa zmienna x zawiera tekst Powodzenia na egzaminie. Pierwsza funkcja x.substring(3,9) zwraca fragment tekstu zaczynający się od indeksu 3 do 8 włącznie co daje fragment wodzen. Wartość ta jest przypisana do zmiennej z. Następnie funkcja z.substring(2,4) wyodrębnia fragment zaczynający się od indeksu 2 do 3 włącznie z tego nowego ciągu wodzen co daje rezultat ze. Wynik ten zostanie wypisany na ekranie przez document.write(y). Praktyczne zastosowanie metody substring polega na manipulacji tekstem co jest powszechne w web development np. do parsowania danych tekstowych lub przygotowania tekstu do wyświetlenia. Dobre praktyki obejmują użycie substring do przetwarzania danych wejściowych np. w formularzach czy przekształcanie danych użytkownika. Ważne jest zrozumienie indeksowania od zera oraz poprawne określenie zakresu aby uniknąć błędów logicznych w kodzie. W kontekście substringu warto pamiętać że drugi parametr jest ekskluzywny co oznacza że nie jest uwzględniany w wyniku. Takie detale są kluczowe dla programistów aby efektywnie zarządzać danymi tekstowymi w różnorodnych zastosowaniach.

Pytanie 14

Która z list jest interpretacją podanego kodu?

Ilustracja do pytania
A. Rys. B
B. Rys. A
C. Rys. C
D. Rys. D
Częstym błędem przy interpretacji kodu HTML jest niepoprawne rozumienie zagnieżdżania list lub ich typów. W przypadku pytania mamy do czynienia z jedną listą uporządkowaną ol która zawiera inne listy nieuporządkowane ul W niektórych odpowiedziach przewidziano błędnie że wszystkie elementy są częścią jednej listy nieuporządkowanej co nie jest zgodne z przedstawionym kodem Listy ol i ul pełnią różne role w HTML Specyfikacja HTML jasno określa że uporządkowane listy ol są używane wtedy gdy kolejność elementów ma znaczenie zaś nieuporządkowane ul gdy kolejność jest nieważna Źle zidentyfikowanie tych typów może prowadzić do błędów w prezentacji danych i wpływać na ich semantyczne znaczenie w dokumentach Aby uniknąć takich błędów warto zapoznać się z dokumentacją W3C oraz stosować się do dobrych praktyk kodowania takich jak wyraźne zagnieżdżanie list i zachowanie ich semantycznego sensu Utrzymywanie przejrzystości kodu zwiększa również jego dostępność i SEO co jest ważne w profesjonalnym tworzeniu stron internetowych

Pytanie 15

Typ zmiennych int odnosi się do wartości liczbowych

A. naturalnych
B. całkowitych
C. w systemie zmiennoprzecinkowym
D. w systemie stałoprzecinkowym
Zmienne typu int (ang. integer) w językach programowania odnoszą się do liczb całkowitych, czyli takich, które nie mają części dziesiętnej. Przykłady to liczby -3, 0, 42. Zmienne typu int są powszechnie używane w programowaniu do przechowywania danych, które wymagają całkowitych wartości, takich jak liczby porządkowe, indeksy tablic czy liczniki w pętlach. Dzięki zastosowaniu zmiennych całkowitych, programista ma możliwość wykonywania operacji matematycznych, takich jak dodawanie, odejmowanie, mnożenie i dzielenie, które są niezwykle istotne w logice aplikacji. Warto zaznaczyć, że różne języki programowania mają różne zakresy dla typu int, co oznacza, że liczby mogą mieć różne maksymalne i minimalne wartości w zależności od zastosowanej platformy. Przykładowo, w języku C++ typ int zazwyczaj zajmuje 4 bajty, co pozwala na reprezentację wartości od -2,147,483,648 do 2,147,483,647. Zrozumienie i umiejętne wykorzystanie zmiennych całkowitych to fundament programowania, który umożliwia tworzenie efektywnych algorytmów i struktur danych.

Pytanie 16

Wszelkie dane, które dostarczają informacji o innych danych, nazywane są

A. markup language.
B. databus.
C. metalanguage.
D. metadata.
Poprawna odpowiedź to „metadata”, czyli po polsku metadane. Metadane to wszystkie dane, które opisują inne dane. Można powiedzieć, że są to „informacje o informacji”. Przykład z życia: plik zdjęcia JPG. Sam obraz to dane, a takie elementy jak data wykonania, model aparatu, rozdzielczość, lokalizacja GPS, autor – to właśnie metadane zapisane np. w formacie EXIF. Podobnie w świecie WWW: w dokumencie HTML mamy sekcję <head>, a w niej znaczniki <meta>. Te znaczniki nie są wyświetlane użytkownikowi jako treść strony, ale przekazują wyszukiwarkom i przeglądarkom informacje o stronie, np. opis, słowa kluczowe, kodowanie znaków, język. To jest klasyczny przykład metadanych w praktyce. W bazach danych metadane to np. definicje tabel, typy kolumn, klucze główne, indeksy, ograniczenia. System zarządzania bazą danych przechowuje je w tzw. katalogach systemowych. Dzięki temu wie, jak interpretować rekordy, jakie są relacje między tabelami, jakie są dopuszczalne wartości. Bez metadanych dane byłyby po prostu chaotycznym zbiorem bitów, z którego niewiele da się wyciągnąć. W standardach branżowych stosuje się różne schematy metadanych, np. Dublin Core dla zasobów cyfrowych, czy schema.org dla stron internetowych, aby wyszukiwarki lepiej rozumiały zawartość. Z mojego doświadczenia warto od początku myśleć o metadanych jako o czymś, co podnosi jakość systemu: ułatwia wyszukiwanie, integrację, automatyczne przetwarzanie danych. Dobra praktyka jest taka, żeby dla ważnych zasobów (pliki, rekordy w bazie, strony WWW, API) zawsze planować strukturę metadanych: kto utworzył, kiedy, jaki typ, wersja, status. To bardzo pomaga przy utrzymaniu aplikacji, debugowaniu i rozwoju systemu.

Pytanie 17

W języku C, aby zdefiniować stałą, należy zastosować

A. #CONST
B. #INCLUDE
C. static
D. const
W języku C, aby zadeklarować stałą, należy użyć słowa kluczowego 'const'. Użycie 'const' umożliwia programiście zdefiniowanie zmiennej, której wartość nie może być zmieniana w trakcie działania programu. To podejście jest zgodne z dobrymi praktykami programowania, ponieważ pozwala na większą kontrolę nad danymi i minimalizuje ryzyko przypadkowej modyfikacji istotnych wartości. Na przykład, jeżeli chcemy zdefiniować stałą wartość liczby pi, możemy użyć: 'const double PI = 3.14159;'. Taka deklaracja zapewnia, że PI pozostanie niezmienne w trakcie działania programu. Użycie 'const' jest również istotne w kontekście bezpieczeństwa kodu, ponieważ zmniejsza prawdopodobieństwo wystąpienia błędów związanych z modyfikacją wartości, które powinny pozostać stałe. Warto również zauważyć, że używanie stałych w programowaniu zwiększa czytelność kodu, ponieważ jasno wskazuje na zamiar programisty, że pewne wartości nie powinny być zmieniane. Dodatkowo, stałe mogą być używane w kontekście makr preprocesora, co wprowadza dodatkowe możliwości zdefiniowania stałych, które mogą być używane w całym kodzie przy zachowaniu zasad programowania defensywnego.

Pytanie 18

Funkcja PHP var_dump() wyświetla informację na temat zmiennej: jej typ i wartość. Wynikiem dla przedstawionego fragmentu kodu jest:

$x = 59.85;
var_dump($x);
A. int(59)
B. array(2) { [0]=> int(59) [1]=> int(85) }
C. string(5) "59.85"
D. float(59.85)
Gratulacje, Twoja odpowiedź jest poprawna! W poprawnej odpowiedzi, wartość zmiennej $x była 59.85, co jest liczbą zmiennoprzecinkową, a więc typem tej zmiennej jest float. Funkcja PHP var_dump() służy do wyświetlania informacji o zmiennej, w tym jej typu i wartości. Zatem wynikiem jej wykonania dla zmiennej $x inicjowanej wartością 59.85 jest float(59.85). To jest jeden z przykładów, gdzie rozumienie typów danych w PHP jest kluczowe. Zrozumienie typu float pozwoli Ci na prawidłową manipulację danymi, co jest niezwykle ważne w programowaniu. Jest to szczególnie istotne, gdy porównujesz różne wartości lub przekształcasz jedne typy danych w inne. Pamiętaj, że PHP jest językiem o słabej typizacji, co oznacza, że konwersja typów może nastąpić automatycznie w niektórych kontekstach, więc zawsze warto wiedzieć, jakiego typu jest dana zmienna.

Pytanie 19

Funkcją zaprezentowanego kodu PHP jest napełnienie tablicy $tab 10 losowymi liczbami z przedziału od -100 do 100, a następnie wypisanie liczb ujemnych. Kod prezentuje się następująco:

$tab = array();
for ($i = 0; $i < 10; $i++)
{
    $tab[$i] = rand(-100, 100);
}

foreach ($tab as $x)
{
    if ($x < 0)
        echo "$x ";
}
A. kolejnymi liczbami od 0 do 9 i ich wyświetlenie
B. 100 losowymi liczbami, a następnie wypisanie liczb dodatnich
C. 10 losowymi wartościami, a następnie wypisanie liczb ujemnych
D. kolejnymi liczbami od -100 do 100 oraz wypisanie liczb ujemnych
Interpretacja kodu pod kątem generowania liczb od -100 do 100 i ich wypisywania jest błędna ze względu na niewłaściwe zrozumienie funkcji rand oraz struktury pętli. Kod generuje dziesięć losowych wartości, ale nie wypisuje wszystkich liczb z zakresu, a jedynie ujemne liczby z wylosowanego zbioru. Podobnie, przypuszczenie, że kod wypełnia tablicę kolejnymi liczbami od 0 do 9 i je wypisuje, wynika z błędnego pojmowania mechanizmu inkrementacji zmiennej i oraz przypisania losowych wartości w tablicy. Wreszcie, myśl, że kod wypełnia 100 losowymi wartościami, jest błędna, ponieważ struktura pętli została ustawiona na dziesięć iteracji i nie ma elementu, który by sugerował generowanie aż 100 elementów. Ważne jest, aby dokładnie przeanalizować strukturę kodu i zrozumieć, jakie operacje są wykonywane w ramach każdej pętli oraz jakie wartości są faktycznie manipulowane. Zrozumienie funkcji rand i poprawne rozpoznanie zakresu liczby iteracji jest kluczowe w analizie i interpretacji kodu w językach programowania takich jak PHP. Poprawne zrozumienie logiki warunkowej if umożliwia prawidłową identyfikację, jakie elementy są wypisywane na końcu procesu, co jest istotne w wielu praktycznych zastosowaniach programistycznych.

Pytanie 20

Podany poniżej kod źródłowy w języku C++ ma na celu wypisywanie dla wprowadzonych dowolnych liczb całkowitych różniących się od zera:

int main(){
    int liczba;
    cin >> liczba;
    while (liczba != 0)
    {
        if ((liczba % 2) == 0)
            cout << liczba << endl;
        cin >> liczba;
    }
    return 0;
}
A. jedynie liczby parzyste
B. liczby pierwsze
C. wszystkie liczby
D. tylko liczby nieparzyste
Kod źródłowy napisany w języku C++ ma na celu wypisywanie tylko liczb parzystych. Funkcja main() wczytuje liczbę całkowitą za pomocą cin, a następnie wchodzi w pętlę while, która trwa tak długo, jak długo wczytana liczba nie jest równa zero. Wewnątrz pętli, zastosowano sprawdzenie warunku, który definiuje, czy liczba jest parzysta, poprzez operator modulo: (liczba % 2) == 0. Jeśli wynik tego działania jest równy zero, liczba jest parzysta i zostaje wypisana na ekranie. Wszelkie inne liczby (nieparzyste) nie są wyświetlane. Przykładem praktycznego zastosowania tego kodu może być program do analizy danych liczbowych, gdzie chcemy zebrać tylko liczby parzyste do dalszej obróbki, na przykład w statystyce lub w aplikacjach finansowych. Praktyczne podejście do programowania w C++ wymaga znajomości takich konstrukcji jak pętle i warunki, co jest zgodne z najlepszymi praktykami inżynieryjnymi w branży oprogramowania.

Pytanie 21

Którą czynność gwarantującą poprawne wykonanie przedstawionego kodu Java Script, należy wykonać przed pętlą?

var text;
for ( var i = 0; i < tab.length; i++ ) {
  text += tab[i] + "<br>";
}
A. Sprawdzić czy text j est typu znakowego.
B. Zainicjować zmienną text.
C. Zadeklarować zmienną i.
D. Sprawdzić rozmiar tabeli tab.
Dobrze! Prawidłową odpowiedzią jest 'Zainicjować zmienną text'. W języku JavaScript, przed rozpoczęciem pętli, istotne jest zainicjowanie zmiennej, która będzie używana do akumulacji wyników. Zmienna 'text' w tym przypadku spełnia tę rolę. Jej prawidłowe zainicjowanie, czyli przypisanie jej początkowej wartości, zazwyczaj pustego ciągu znaków ('text = "";'), jest kluczowe dla poprawnej pracy kodu. Pozwala to na uniknięcie błędów związanych z niezdefiniowaną zmienną. Jest to standardowa procedura stosowana w wielu językach programowania, nie tylko w JavaScript. Zrozumienie i zastosowanie tej praktyki pomaga w pisaniu czystego i efektywnego kodu.

Pytanie 22

Deklarując var x="true"; w języku JavaScript, jakiego typu zmienną się tworzy?

A. String (ciąg znaków)
B. Liczbowego
C. Nieokreślonego (undefined)
D. Logicznego
Odpowiedź 'String (ciąg znaków)' jest poprawna, ponieważ w języku JavaScript zmienna zadeklarowana za pomocą 'var x="true";' przechowuje wartość typu tekstowego. Wartość 'true' jest traktowana jako ciąg znaków, ponieważ jest umieszczona w cudzysłowie. JavaScript jest językiem dynamicznie typowanym, co oznacza, że typ zmiennej jest określany w momencie przypisania wartości. W praktyce, ciągi znaków są powszechnie używane w programowaniu webowym do reprezentacji danych, takich jak teksty, komunikaty, a także do przetwarzania informacji z formularzy. Dobre praktyki obejmują użycie cudzysłowów pojedynczych lub podwójnych do definiowania ciągów, a także unikanie mieszania typów, co może prowadzić do błędów. Ważne jest, aby zawsze być świadomym typu danych, z którymi pracujemy, aby uniknąć nieoczekiwanych wyników w kodzie. Zrozumienie, jak JavaScript interpretuje różne typy danych, jest kluczowe dla efektywnego programowania oraz debugowania aplikacji.

Pytanie 23

Jak nazywa się technika sortowania, która polega na podziale zbioru na n przedziałów o równej długości, gdzie przeprowadza się sortowanie, a następnie analizuje i prezentuje posortowane elementy z tych przedziałów?

A. Sortowanie szybkie
B. Sortowanie kubełkowe
C. Sortowanie bąbelkowe
D. Sortowanie przez wybór
Sortowanie kubełkowe (ang. bucket sort) jest metodą, która dzieli dane na kilka przedziałów, zwanych kubełkami, w którym następnie dokonuje się sortowania elementów. W praktyce, dane są przypisywane do kubełków na podstawie ich wartości, co umożliwia efektywne sortowanie mniejszych zbiorów. Po posortowaniu elementów w każdym kubełku, następuje ich scalanie w jeden, posortowany zbiór. Metoda ta jest szczególnie efektywna dla danych, które są równomiernie rozłożone w ograniczonym zakresie wartości. Przykładem zastosowania sortowania kubełkowego może być sortowanie wyników testów w szkołach, gdzie wyniki są klasyfikowane w poszczególnych kubełkach odpowiadających przedziałom ocen. Takie podejście przyspiesza proces sortowania, zwłaszcza w przypadku dużych zbiorów danych, i jest zgodne z zasadami optymalizacji algorytmów, pozwala na wykorzystanie równoległego przetwarzania. W standardach branżowych sortowanie kubełkowe jest często polecane w kontekście przetwarzania danych w systemach baz danych oraz w algorytmach obliczeniowych, gdzie czas realizacji operacji sortujących jest krytyczny.

Pytanie 24

Dane są liczby całkowite różne od zera w tablicy nazwanej tab. Podany poniżej kod w języku PHP ma na celu

Ilustracja do pytania
A. zmienić wszystkie elementy tablicy na liczby o przeciwnym znaku
B. wyliczenie iloczynu wszystkich wartości w tablicy
C. obliczenie wartości bezwzględnej poszczególnych elementów tablicy
D. zmienić wartości tablicy na te zapisane w zmiennej liczba
Kod pokazany na obrazku używa konstrukcji foreach z operatorem referencji ampersand aby iterować po tablicy tab i zmieniać każdy jej element. Operator referencji & pozwala na bezpośrednią modyfikację wartości w tablicy. Instrukcja $liczba = $liczba * (-1) w pętli foreach zmienia znak każdej liczby na przeciwny co oznacza że dodatnie liczby stają się ujemne a ujemne stają się dodatnie. Dzięki temu możliwe jest szybkie odwrócenie znaków wszystkich elementów w tablicy co jest powszechnie stosowane w programowaniu aby przygotować dane do dalszych operacji matematycznych lub analizy. Unset($liczba) jest używane po pętli aby odłączyć referencję co jest dobrą praktyką zapobiegającą przypadkowym modyfikacjom przyszłych danych. Zastosowanie tego wzorca jest efektywne i pozwala na bezpieczną manipulację strukturą danych w PHP. Technika ta jest użyteczna nie tylko w kontekście matematycznym ale również w przypadkach gdzie wymagane jest szybkie przetwarzanie dużych ilości danych.

Pytanie 25

W języku JavaScript, deklaracja: ```var x=true;``` sprawia, że zmienna x ma typ

A. łańcuch znaków
B. enumeracyjny
C. logiczy
D. numeryczny
Zmienna x w JavaScript, która została zadeklarowana jako 'var x=true;', to typ logiczny, czyli boolean. W tym języku mamy dwie możliwe wartości: true (prawda) i false (fałsz). Ten typ jest naprawdę ważny, zwłaszcza gdy mówimy o warunkach w programach, bo to właśnie one są bazą dla programowania strukturalnego i obiektowego. Kiedy piszesz instrukcje if albo pętle, typ logiczny odgrywa kluczową rolę w tym, co się dzieje w programie. Fajnie jest korzystać z zmiennych logicznych, by kontrolować, co się dzieje w kodzie, a także sprawiać, że warunki są czytelniejsze. Ciekawe jest też to, że w JavaScript inne typy, jak liczby czy ciągi znaków, mogą być używane w kontekście wartości prawdziwych i fałszywych. To czyni typ logiczny bardzo elastycznym i wszechstronnym. Im lepiej rozumiesz ten typ, tym lepiej potrafisz tworzyć dynamiczne aplikacje, które dobrze reagują na różne sytuacje.

Pytanie 26

Jakie typy danych w C++ są używane do reprezentacji liczb rzeczywistych?

A. float oraz double
B. double oraz bool
C. double oraz short
D. float oraz long
Odpowiedź 'float i double' jest prawidłowa, ponieważ te dwa typy danych w języku C++ są przeznaczone do reprezentowania liczb rzeczywistych. Typ 'float' zajmuje 4 bajty pamięci i służy do przechowywania liczb zmiennoprzecinkowych o pojedynczej precyzji, co oznacza, że może reprezentować liczby z ograniczoną dokładnością. Typ 'double', z kolei, zajmuje 8 bajtów pamięci i pozwala na przechowywanie liczb zmiennoprzecinkowych o podwójnej precyzji. Dzięki temu 'double' umożliwia reprezentację znacznie większych i bardziej precyzyjnych wartości. W praktyce, typ 'float' jest często używany w sytuacjach, gdzie oszczędność pamięci jest kluczowa, na przykład w grafice komputerowej, natomiast 'double' jest preferowany w obliczeniach naukowych i inżynieryjnych, gdzie precyzja jest priorytetem. Dlatego zrozumienie różnicy między tymi typami danych oraz ich zastosowań jest niezbędne do efektywnego programowania w C++. Zgodnie z najlepszymi praktykami, programiści powinni dobierać typy danych odpowiednio do wymagań swojego projektu, zwracając uwagę na równowagę między precyzją a wydajnością.

Pytanie 27

Jak określa się element, który został oznaczony znakiem zapytania w strukturze platformy .NET, a który pozwala na tworzenie indywidualnych aplikacji z wykorzystaniem frameworków oraz na przekształcanie kompilowanego kodu pośredniego na kod maszynowy procesora znajdującego się w komputerze?

Ilustracja do pytania
A. Biblioteka klas bazowych (BCL)
B. Infrastruktura językowa (CLI)
C. Wspólne środowisko uruchomieniowe (CLR)
D. Wspólne środowisko programistyczne (CLP)
Infrastruktura językowa (CLI) to specyfikacja definiująca standardy dla różnych komponentów platformy .NET, w tym wspólne środowisko uruchomieniowe, ale sama w sobie nie zajmuje się wykonaniem kodu. CLI określa zestaw wytycznych, które umożliwiają tworzenie kodu zgodnego z różnymi językami, lecz nie zajmuje się bezpośrednim przekształcaniem kodu pośredniego na kod maszynowy. Biblioteka klas bazowych (BCL) dostarcza zestaw klas, które ułatwiają programowanie, oferując gotowe funkcje do obsługi operacji we/wy, manipulacji danych czy pracy z siecią. BCL nie zajmuje się jednak uruchamianiem aplikacji ani kompilacją kodu. Wspólne środowisko programistyczne (CLP) jako termin nie jest częścią standardowej terminologii .NET i może być mylące. CLR jest jedynym z tych elementów, który pełni rolę środowiska wykonawczego, umożliwiając uruchamianie kodu na różnych platformach sprzętowych. Pomyłki w wyborze mogą wynikać z niedostatecznego zrozumienia ról poszczególnych komponentów w ekosystemie .NET. Zrozumienie tej struktury jest kluczowe dla efektywnego wykorzystania możliwości platformy .NET i tworzenia wydajnego, bezpiecznego oprogramowania. Analizowanie ról i funkcji poszczególnych komponentów jest istotne dla pełnego zrozumienia, jak platforma umożliwia tworzenie interoperacyjnych aplikacji w różnych językach programowania.

Pytanie 28

Warunek zapisany w JavaScript jest prawdziwy, gdy zmienna x przechowuje:

if ((!isNaN(x)) && (x > 0))
A. dowolną dodatnią wartość liczbową.
B. napis.
C. pusty napis.
D. dowolną całkowitą wartość liczbową.
Warunek z zadania jest dobrym przykładem na to, jak JavaScript łączy sprawdzanie typu z logiką biznesową i gdzie często pojawiają się nieporozumienia. Kluczowe są tu dwie rzeczy: funkcja isNaN(x) oraz operator porównania x > 0. isNaN(x) zwraca true, gdy przekazana wartość „nie jest liczbą”, a więc !isNaN(x) oznacza, że x jest liczbą lub może zostać poprawnie zinterpretowane jako liczba. To automatycznie eliminuje typowe napisy, takie jak "abc" czy "test", bo one po konwersji dadzą NaN. Dlatego odpowiedź, że warunek jest prawdziwy dla napisu jako takiego, jest myląca – zwykły string tekstowy nie przejdzie tego filtra. Pusty napis też bywa źródłem zamieszania. W JavaScript isNaN("") zwraca false, bo pusty string jest konwertowany do 0, więc !isNaN("") jest prawdą. Jednak druga część warunku, czyli (x > 0), już nie przejdzie, bo 0 nie jest większe od zera. To pokazuje, że sam fakt „nie bycia NaN” nie wystarcza, potrzebny jest jeszcze sensowny zakres wartości. Częsty błąd polega na tym, że ktoś widzi isNaN i myśli tylko w kategoriach typu, a zapomina o tej części z porównaniem. Kolejny typowy skrót myślowy to przekonanie, że skoro jest sprawdzanie „czy to liczba”, to chodzi o dowolną wartość całkowitą. Tymczasem w warunku nie ma ani słowa o tym, że liczba musi być całkowita – nie ma tu żadnego sprawdzania modulo, parsowania przez parseInt, ani Math.floor. Warunek dopuszcza zarówno 1, jak i 1.5, 3.14 czy 0.0001, byle tylko były większe od zera i nie były NaN. W praktyce w JavaScript takie podejście jest zgodne z tym, jak działa typ number – reprezentuje zarówno liczby całkowite, jak i zmiennoprzecinkowe w jednym typie. Z mojego doświadczenia większość pomyłek przy takich zadaniach wynika z mieszania pojęć „napis, który wygląda jak liczba” z „napis jako tekst” oraz z ignorowania wpływu automatycznej konwersji typów. Dlatego przy projektowaniu walidacji wejścia warto zawsze myśleć o dwóch krokach: najpierw jawnie zamieniamy dane na liczbę, potem dopiero sprawdzamy zakres i warunki biznesowe, zamiast zakładać, że isNaN załatwi wszystko za nas.

Pytanie 29

W języku skryptowym JavaScript operatory: || oraz && należą do grupy operatorów

A. przypisania.
B. arytmetycznych.
C. bitowych.
D. logicznych.
Operatory || oraz && w JavaScript wielu osobom mylą się z innymi grupami operatorów, bo wizualnie przypominają różne zapisy z innych języków i z niższych poziomów programowania. Warto to sobie dobrze poukładać, bo odróżnianie operatorów logicznych, bitowych, arytmetycznych i przypisania to absolutna podstawa przy pisaniu czytelnego kodu. Wariant bitowy w JavaScript to pojedyncze symbole: | oraz &. One działają na poziomie bitów liczby całkowitej, wykonując operacje OR i AND na poszczególnych bitach. || oraz && to zupełnie inna bajka – nie grzebią w bitach, tylko pracują na logice programu, na warunkach i przepływie sterowania. Typowy błąd myślowy polega na tym, że ktoś zna z elektroniki „AND” i „OR” na bramkach logicznych i wrzuca wszystko do jednego worka z „bitami”. W JavaScript trzeba jednak rozróżniać: podwójne znaki to logika, pojedyncze to operacje bitowe. Mylenie tych dwóch typów operatorów może prowadzić do bardzo dziwnych wyników, szczególnie gdy nagle zaczynamy dostawać liczby zamiast oczekiwanych wartości logicznych. Innym źródłem pomyłek jest utożsamianie || i && z operatorami przypisania. Operator przypisania to w czystej postaci =, a jego rozszerzenia to np. +=, -=, *=, /=, ale również |= czy &=, które łączą przypisanie z operacją bitową. Nie istnieje coś takiego jak ||= w sensie standardowego operatora logicznego przypisania w starszym JavaScript (dopiero nowsze wersje wprowadziły logiczne operatory przypisania, ale to nadal nie to samo, co zwykłe || w warunku). Z kolei operatory arytmetyczne, takie jak +, -, *, /, %, służą do obliczeń matematycznych, nie do podejmowania decyzji w kodzie. Oczywiście można ich użyć w warunku, ale nie pełnią funkcji łączenia wyrażeń logicznych. Dobra praktyka jest taka, żeby w warunkach if, while czy for używać właśnie operatorów logicznych do łączenia prostych porównań, a operatory arytmetyczne zostawić do obliczeń. Moim zdaniem, jasne rozróżnienie tych grup operatorów przekłada się na kod, który jest łatwiejszy do utrzymania i mniej podatny na dziwne, trudne do wykrycia błędy.

Pytanie 30

Zdefiniowano poniższą funkcję w PHP:

function policz($Z) {
    while($Z < 5) {
        $Z += 2 * $Z + 1;
    }
    return $Z;
}
Funkcję policz wywołano z wartością argumentu $Z = 1. Jaki rezultat zostanie zwrócony?
A. 7
B. 13
C. 4
D. 1
Twoja odpowiedź jest na miejscu. Funkcja 'policz' w PHP działa jak pętla, która powoli zwiększa wartość zmiennej $Z, dopóki nie jest większa niż 5. W każdej iteracji dodaje do niej wynik z wyrażenia 2 * $Z + 1. Zaczynamy z $Z równym 1. W pierwszej iteracji wychodzi 3 ($Z = 2 * 1 + 1), a w drugiej – 13 ($Z = 2 * 3 + 1). Kiedy $Z przekracza 5, pętla się zatrzymuje, a funkcja 'policz' zwraca 13. Rozumiejąc, jak to działa, łatwiej przewidywać, co się stanie w podobnych funkcjach.

Pytanie 31

W języku JavaScript zapisano funkcję. Co ona ma za zadanie.

function fun1(f) {
    if (f < 0) f = f * (-1);
    return f
}
A. zwrócić wartość odwrotną do f
B. wypisać wartość odwrotną do f
C. wypisać wartość bezwzględną z f
D. zwrócić wartość bezwzględną z f
Niepoprawna odpowiedź wskazuje, że funkcja ma za zadanie zwrócić wartość odwrotną do f, lub wypisać wartość bezwzględną z f, lub wypisać wartość odwrotną do f. Te wszystkie odpowiedzi są błędne. Wartość odwrotna do f to 1/f, a nie wartość bezwzględna z f. Wypisanie wartości to inny rodzaj operacji niż jej zwrócenie. Funkcje wypisują wartość, kiedy używamy instrukcji console.log() w JavaScript. Zwrócenie wartości oznacza, że funkcja po zakończeniu swojego działania przekazuje tę wartość do miejsca, skąd została wywołana. Zwracanie wartości jest podstawą działania większości funkcji, które następnie używane są do budowy bardziej skomplikowanych algorytmów. Dlatego też ważne jest, aby dobrze rozumieć, jakie wartości są zwracane przez różne typy funkcji.

Pytanie 32

$liczba = 10;
while($liczba<50){
   echo "$liczba";
   $liczba=$liczba+5;
}
Jakie liczby zostaną wyświetlone w wyniku działania tej pętli w języku PHP?

A. 0 5 10 15 20 25 30 35 40 45 50
B. 10 15 20 25 30 35 40 45
C. 10 15 20 25 30 35 40 45 50
D. 0 5 10 15 20 25 30 35 40 45
Wynik działania pętli w języku PHP jest poprawny, ponieważ zaczyna się od wartości 10, a następnie w każdej iteracji zwiększa tę wartość o 5, aż osiągnie 50, które nie jest wliczane do wypisywanych wyników. Wartości wypisywane w trakcie działania pętli to: 10, 15, 20, 25, 30, 35, 40, 45. Wartością graniczną jest 50, która przerywa działanie pętli. Taki mechanizm jest często stosowany w programowaniu, zwłaszcza w sytuacjach, gdzie musimy iteracyjnie przetwarzać dane w określonym zakresie. Dobrą praktyką jest również upewnienie się, że warunki pętli są jasno określone, co zapobiega niepożądanym wynikom, takim jak nieskończone pętle. W PHP używamy pętli takich jak 'while', 'for' i 'foreach', które są kluczowymi elementami w programowaniu i pozwalają na efektywne przetwarzanie danych.

Pytanie 33

Przemiana kodu źródłowego wykonanego przez programistę w zrozumiały dla maszyny kod maszynowy to

A. analizowanie błędów
B. wdrażanie
C. kompilowanie
D. wykonywanie
Rozważając inne odpowiedzi, warto zauważyć, że debugowanie nie jest procesem tłumaczenia kodu źródłowego, lecz metodą identyfikacji i usuwania błędów w już skompilowanym programie. Debugger to narzędzie, które pozwala programistom na inspekcję kodu w czasie rzeczywistym, co pomaga w lokalizowaniu miejsc, w których program działa niepoprawnie. Z kolei uruchamianie odnosi się do wykonywania już skompilowanego kodu maszynowego, co również nie dotyczy procesu tłumaczenia kodu źródłowego. Implementowanie to termin oznaczający wprowadzanie funkcji czy algorytmów w kodzie źródłowym, a nie ich kompilację. Typowym błędem myślowym, który prowadzi do nieprawidłowych odpowiedzi, jest mylenie procesów programistycznych. W praktyce, zrozumienie różnicy między kompilowaniem, debugowaniem, uruchamianiem a implementowaniem jest kluczowe dla efektywnego rozwoju oprogramowania. Każdy z tych procesów ma swoje unikalne funkcje i zastosowania, a ich pomylenie może prowadzić do nieefektywności i błędów w pracy programisty.

Pytanie 34

Jaką złożoność obliczeniową posiada algorytm znajdowania elementu w nieposortowanej jednowymiarowej tablicy?

A. liniową, O(n)
B. kwadratową, O(n2)
C. stałą, O(1)
D. silnia, O(n!)
Wybierając odpowiedzi niepoprawne, można natknąć się na różne złożoności obliczeniowe, które nie odnoszą się do algorytmu wyszukiwania elementu w nieposortowanej tablicy. Złożoność kwadratowa, O(n2), dotyczy algorytmów, które muszą porównywać każdy element z każdym innym, co najczęściej występuje w algorytmach sortujących, takich jak sortowanie bąbelkowe, gdzie liczba porównań rośnie wraz z kwadratem liczby elementów. Z kolei złożoność silni, O(n!), występuje w kontekście problemów kombinatorycznych, takich jak generowanie permutacji, co oznacza, że liczba operacji wzrasta niezwykle szybko w miarę zwiększania się liczby elementów, ale nie jest odpowiednia dla prostych algorytmów wyszukiwania. Złożoność stała, O(1), sugeruje, że operacja zajmuje tę samą ilość czasu niezależnie od rozmiaru danych, co w przypadku wyszukiwania w nieposortowanej tablicy nie jest możliwe, ponieważ musimy przejrzeć co najmniej jeden element. Te błędne odpowiedzi wynikają z nieporozumień na temat działania algorytmów w kontekście różnych struktur danych oraz z mylnego utożsamiania złożoności z ich zastosowaniem. Zrozumienie różnicy między tymi złożonościami jest kluczowe dla efektywnego projektowania algorytmów oraz oceny ich wydajności w różnych scenariuszach.

Pytanie 35

$x = 0; while($x < 5) { echo "$x,"; $x++; } Wskaż instrukcję, która jest funkcjonalnie równoważna dla podanej pętli while w języku PHP.

Ilustracja do pytania
A. Instrukcja 1
B. Instrukcja 4
C. Instrukcja 3
D. Instrukcja 2
W programowaniu często spotyka się różne sposoby implementacji pętli, jednak nie wszystkie z nich są równie efektywne czy poprawne w kontekście stawianych wymagań. W przypadku zaproponowanych instrukcji for, które miałyby być równoważne funkcjonalnie do podanej pętli while, kluczowym aspektem jest zachowanie identycznych warunków początkowych, warunku końcowego oraz sposobu inkrementacji zmiennej sterującej. Podczas gdy instrukcja 3 dokładnie odwzorowuje działanie pętli while pod względem inicjalizacji wartości $x, warunku kontynuacji ($x < 5) oraz kroku inkrementacyjnego ($x++), inne opcje różnią się w tych aspektach. Instrukcja 1 zawiera podwójną inkrementację zmiennej w każdym kroku pętli, co skutkuje zbyt szybkim osiągnięciem warunku końcowego. Instrukcja 2 zmienia krok inkrementacji na $x+=2, co prowadzi do pominięcia wartości i skrócenia pętli. Instrukcja 4 modyfikuje warunek początkowy, startując z $x równym 1, zamiast 0, co również wpływa na zakres wyświetlanych wartości. Te modyfikacje mogą wprowadzać w błąd i generować nieprzewidywalne wyniki, co jest niepożądane w kontekście pisania stabilnego i przewidywalnego kodu. Zrozumienie różnic w tych implementacjach jest kluczowe dla skutecznego programowania i unikania typowych błędów, które mogą prowadzić do niezamierzonych konsekwencji w działaniu aplikacji. Dlatego ważne jest, aby każda z pętli była precyzyjnie dostosowana do zamierzonej funkcjonalności i zgodna z założonymi celami projektu, co jest podstawą dobrych praktyk w branży inżynierii oprogramowania.

Pytanie 36

Przedstawiony w ramce kod języka PHP oznacza, że zmienna $liczba2 jest

Ilustracja do pytania
A. negacją logiczną zmiennej $liczba1
B. iloczynem logicznym ze zmienną $liczba1
C. wskaźnikiem do $liczba1
D. referencją do $liczba1
Instrukcja $liczba2 = &$liczba1; w PHP oznacza, że zmienna $liczba2 staje się referencją do $liczba1. Ten znak ampersanda (&) nie jest żadnym operatorem logicznym, tylko właśnie operatorem referencji w PHP. W praktyce oznacza to, że obie zmienne wskazują na to samo miejsce w pamięci, więc przechowują dokładnie tę samą wartość. Jeżeli później w kodzie napiszesz $liczba1 = 10; to automatycznie $liczba2 też będzie miała wartość 10, i odwrotnie – zmiana $liczba2 zmieni $liczba1. Z mojego doświadczenia w PHP referencje używa się głównie wtedy, gdy chcemy, żeby funkcja modyfikowała przekazaną zmienną bez zwracania jej wyniku, albo gdy operujemy na dużych strukturach danych (tablice, obiekty) i nie chcemy kopiować ich zawartości. Przykład: function zwieksz(&$x){ $x++; } sprawi, że wywołanie zwieksz($liczba1); zmieni wartość zmiennej poza funkcją. To jest typowy, całkiem często spotykany wzorzec w starszych projektach PHP. Warto też pamiętać, że referencja w PHP nie jest tym samym, co wskaźnik w C/C++. Programista nie operuje bezpośrednio na adresach pamięci, tylko na abstrakcji zaprojektowanej przez silnik Zend. Dobra praktyka jest taka, żeby referencji używać oszczędnie i świadomie, bo nadmierne ich stosowanie utrudnia debugowanie, testowanie jednostkowe i zrozumienie przepływu danych w aplikacji. W nowoczesnym kodzie PHP częściej korzysta się z przekazywania obiektów (które zachowują się referencyjnie) oraz z czytelnego zwracania wartości z funkcji. Mimo to, rozumienie mechanizmu referencji jest bardzo ważne, bo nadal pojawia się w wielu istniejących aplikacjach webowych i w zadaniach egzaminacyjnych.

Pytanie 37

W językach programowania o układzie strukturalnym, aby przechować dane o 50 uczniach (ich imionach, nazwiskach oraz średniej ocen), konieczne jest zastosowanie

A. tablicy z 50 elementami o składowych strukturalnych
B. klasy z 50 elementami typu tablicowego
C. tablicy z 50 elementami o składowych typu łańcuchowego
D. struktury z 50 elementami o składowych typu tablicowego
Wybór niewłaściwych podejść do przechowywania informacji o uczniach często wynika z nieporozumienia dotyczącego struktury danych i ich właściwego zastosowania. Tworzenie struktury 50 elementów o składowych typu tablicowego sugeruje, że każdy element byłby tablicą, co nie odpowiada rzeczywistej naturze danych. Tego rodzaju podejście nie tylko komplikuje dostęp do informacji, ale również zwiększa ryzyko błędów w zarządzaniu danymi. Z kolei użycie tablicy 50 elementów o składowych łańcuchowych ogranicza nas do prostych typów danych, takich jak ciągi znaków, co uniemożliwia przechowywanie średniej ocen, która wymagałaby użycia innego typu danych, co narusza zasady typizacji. W przypadku klasy z 50 elementami typu tablicowego, problemem jest, że klasa powinna być używana do modelowania złożonych obiektów z zachowaniem, co nie jest konieczne w tym przypadku. Te nieścisłości pokazują typowe błędy myślowe związane z projektowaniem struktur danych. Kluczowym elementem skutecznego programowania jest zrozumienie, jak najlepiej reprezentować i przechowywać złożone dane, a także znajomość odpowiednich struktur, które umożliwią efektywne operacje na tych danych.

Pytanie 38

W języku JavaScript, aby zweryfikować, czy liczba leży w zakresie (100, 200>, należy użyć następującego zapisu:

A. If (liczba > 100 || liczba <=200)
B. If (liczba < 100 && liczba <=200)
C. If (liczba < 100 || liczba >=200)
D. If (liczba > 100 && liczba <=200)
Patrząc na błędne podejścia w odpowiedziach, można zauważyć kilka istotnych nieporozumień związanych z operatorami logicznymi i porównawczymi. Na przykład przy 'if (liczba > 100 || liczba <= 200)' użycie operatora '||' (OR) prowadzi do tego, że warunek może być spełniony nawet wtedy, gdy liczba jest poniżej 100. To znaczy, że każda liczba mniejsza niż 100 oraz każda większa niż 200 będzie się kwalifikować, co kompletnie mija się z celem. Podobnie 'if (liczba < 100 || liczba >= 200)' pomija wartości w przedziale od 100 do 200. Tutaj użycie '&&' byłoby kluczowe, bo wymaga spełnienia obu warunków jednocześnie. Trzeba też zauważyć, że 'if (liczba < 100 && liczba <= 200)' wprowadza dodatkowe zamieszanie, bo pierwszy warunek koliduje z drugim, co czyni go logicznie błędnym. Dlatego poprawne formułowanie warunków w JavaScript jest podstawą dla każdego programisty. Jakiekolwiek błędne zrozumienie operatorów może prowadzić do poważnych problemów w działaniu aplikacji, więc warto to dobrze przyswoić.

Pytanie 39

W języku JavaScript poniższy fragment funkcji ma na celu

wynik = 0;
for (i = 0; i < tab.length; i++) {
  wynik += tab[i];
}
A. dodać do każdego elementu tablicy ustaloną wartość
B. obliczyć sumę wszystkich elementów tablicy
C. wyświetlić wszystkie elementy tablicy
D. wprowadzić do każdego elementu tablicy bieżącą wartość zmiennej i
Funkcja w podanym fragmencie rzeczywiście ma na celu policzenie sumy wszystkich elementów tablicy. Przy inicjalizacji zmiennej 'wynik' na 0, kod iteruje przez każdy element tablicy 'tab' przy użyciu pętli for. W każdej iteracji do 'wynik' dodawana jest wartość bieżącego elementu tablicy, co prowadzi do skumulowania wszystkich wartości. Tego typu operacje są powszechnie stosowane w programowaniu, szczególnie w analizie danych, gdzie często zachodzi potrzeba obliczenia sumy, średniej lub innych statystyk na podstawie zebranych danych. Ważne jest również, aby pamiętać o typach danych w JavaScript – elementy tablicy powinny być liczbami, aby suma była poprawna. Zastosowanie tej techniki jest standardem w wielu algorytmach i jest fundamentalne dla zrozumienia bardziej zaawansowanych koncepcji, jak np. funkcje redukujące.

Pytanie 40

Wskaż, na czym polega błąd w kodzie napisanym w języku C++.

char str1[30] = 'Ala ma kota'; printf("%s", str1);
A. Do funkcji printf przekazano zbyt mało argumentów.
B. W funkcji printf nie można używać formatowania %s.
C. Napis powinien być umieszczony w cudzysłowach.
D. Napis powinien mieć dokładnie 30 znaków.
Podawanie błędnych informacji na temat inicjalizacji łańcucha znaków w C++ może prowadzić do poważnych nieporozumień. Wskazanie, że napis powinien mieć dokładnie 30 znaków, nie jest zasadniczo poprawne, ponieważ tablice w C++ mogą mieć zmienną długość. Ważne jest, aby łańcuch znaków był odpowiednio długi, jednak nie istnieje wymóg, aby dokładnie wypełniał całą tablicę. Mówiąc o długości, istotniejsze jest, aby nie przekraczać rozmiaru tablicy, aby uniknąć błędów pamięci. Poza tym, stwierdzenie, że do funkcji printf przekazano zbyt mało argumentów, jest mylące; w tym przypadku argumenty są poprawne, ponieważ przekazujemy jedynie jeden wskaźnik do łańcucha, co jest zgodne z formatem funkcji printf. Dodatkowo, twierdzenie, że w printf nie można stosować formatowania %s, jest całkowicie błędne. Format %s jest standardowym sposobem na wyświetlanie łańcuchów znaków w C++, co jest zgodne z dokumentacją i najlepszymi praktykami w programowaniu. Stosowanie tego formatu jest kluczowe w przypadku pracy z tekstem, a zrozumienie tej zasady jest fundamentem w nauce języka C++. Warto zatem pamiętać o właściwej inicjalizacji łańcuchów oraz o tym, jak korzystać z funkcji wejścia/wyjścia, aby unikać typowych błędów w kodzie.