TOP 10 Najtrudniejszych zadan JavaScript - Egzamin INF.03
Ranking najtrudniejszych zadan z JavaScript z egzaminow INF.03
#1 -- inf03_2024_06_08 (Trudnosc: 8/10)
Temat: Wieloetapowy formularz rejestracji z paskiem postepu
Polecenie z arkusza:
- Funkcja aktywujaca: wywoływana przez wcisniecie dowolnego przycisku zakladki w bloku glownym. Ukrywa wszystkie zakladki. Pokazuje jedynie te zakladke (blok), ktorej przycisk wybrano.
- Funkcja zmieniajaca wartosc paska postepu: wywoływana po utracie focusa przez dowolne pole edycyjne. Modyfikuje wlasciwosc stylu dla pustego bloku wewnatrz bloku paska postepu, w ten sposob, ze jego szerokosc jest zwiekszana o 12%. Nalezy zabezpieczyc funkcje, aby wartosc szerokosci nigdy nie byla wyzsza niz 100%.
- Funkcja zatwierdzajaca: wywoływana po wybraniu przycisku "Zatwierdz dane". Pobiera wartosc z kazdego pola edycyjnego i pola wyboru. Wartosci wyswietlane sa w konsoli przegladarki.
Dlaczego najtrudniejsze: Zarzadzanie stanem globalnym, dynamiczne przelaczanie sekcji, addEventListener na wszystkich inputach, pasek postepu z logika procentowa. Laczy najwiecej koncepcji ze wszystkich zadan JS.
Na co zwrocic uwagę:
forEachpo tablicy stringow do ukrywania blokow -- elegancki wzorzec- Zmienna globalna
widthprzechowuje stan paska postepu addEventListener('blur', ...)-- dodawanie listenerow programistycznie na WSZYSTKIE inputyquerySelectorAll('input').forEach(...)-- iteracja po elementach DOM- Ograniczenie
if (width > 100)zeby pasek nie przekroczyl 100%
#2 -- inf03_2024_06_02 (Trudnosc: 7.5/10)
Temat: Symulacja czatu z losowymi odpowiedziami
Polecenie z arkusza:
- Funkcja wywoływana po kliknieciu przycisku Wyslij: pobierany jest tekst z pola edycyjnego i umieszczany w oknie chatu jako ostatni. Tekst jest formatowany jako wypowiedz Jolanty -- utworzony jest blok z wypowiedzia zawierajacy obraz Jolka.jpg i paragraf zgodny z tekstem wpisanym do pola edycyjnego. Jesli blok chatu jest caly wypelniony, powinien byc przewiniety do nowo wstawionej wypowiedzi.
- Funkcja wywoływana po kliknieciu przycisku "Generuj losowa odpowiedz": losowana jest wypowiedz Krzysztofa z wczesniej zadeklarowanej tablicy (9 elementow). Losowana liczba z przedzialu od 0 do 8 jest indeksem tablicy. Wypowiedz jest umieszczana w oknie chatu jako ostatnia, formatowana jako wypowiedz Krzysztofa z obrazem Krzysiek.jpg. Jesli blok chatu jest caly wypelniony, powinien byc przewiniety do nowo wstawionej wypowiedzi.
Dlaczego trudne: Dynamiczne tworzenie zlozonych elementow DOM, tablica z losowym wyborem, scrollIntoView, czyszczenie inputa.
Na co zwrocic uwagę:
createElement('div')+classList.add('message', 'jolanta')-- tworzenie elementow z klasami CSSappendChild()-- dodawanie elementow do DOMMath.floor(Math.random() * replies.length)-- losowy indeks z tablicyscrollIntoView()-- automatyczne przewijanie do nowej wiadomoscimessageInput.value = ''-- czyszczenie pola po wyslaniu- Dwie funkcje o podobnej strukturze ale roznej logice
#3 -- inf03_2025_01_06 (Trudnosc: 7/10)
Temat: Konwerter liczb dziesietnych na binarne z formatowaniem
Polecenie z arkusza:
- Wartosc, w postaci liczby dziesietnej, pobrana z pola edycyjnego, przeksztalca na system binarny
- Wyswietla w paragrafie pod przyciskiem obliczona liczbe binarna. Liczba binarna jest rozdzielona spacja na czesci (co cztery cyfry poczawszy od prawej strony) oraz zakonczona oznaczeniem kodu w postaci tekstu "(2)", zapisanym w indeksie dolnym
- Algorytm zamiany: K1: Czytaj liczba dziesietna (L). K2: Liczba binarna (B) przypisz pusty napis. K3: B przypisz L mod 2. K4: L = L/2 (zaokraglona do nizszej calkowitej). K5: Jesli L = 0 idz do K6; w przeciwnym razie idz do K3. K6: Odwroc napis B tak ze ostatnia cyfra staje sie pierwsza itd. wypisz B
Dlaczego trudne: Najtrudniejszy ALGORYTM ze wszystkich zadan -- konwersja systemow liczbowych + formatowanie co 4 bity. Wymaga myslenia matematycznego.
Na co zwrocic uwagę:
- Operator
+przed wartoscia -- konwersja stringa na liczbe % 2(modulo) -- reszta z dzielenia daje kolejne bityMath.floor(liczbaDziesietna / 2)-- dzielenie calkowite- Budowanie stringa od prawej:
liczbaBinarna = bit + liczbaBinarna - Petla
forod konca -- grupowanie co 4 znaki - Warunek brzegowy
i != 0-- zeby nie dodac spacji na poczatku <sub>2</sub>-- indeks dolny w HTML
#4 -- inf03_2024_06_12 (Trudnosc: 7/10)
Temat: Efekty graficzne na obrazkach -- filtry CSS przez JavaScript
Polecenie z arkusza:
Skrypt realizuje transformacje obrazow za pomoca wlasciwosci CSS filter:
- Transformacje obrazu 1: Gdy zaznaczono pole Blur -- filtr rozmycia (4-8 px). Gdy zaznaczono Sepia -- filtr kolorow sepii 100%. Gdy zaznaczono Negatyw -- filtr odwrocenia kolorow 100%.
- Transformacje obrazu 2: Po wcisnieciu "Kolory" -- obraz ma zdjety filtr odcieni szarosci. Po wcisnieciu "Czarno-bialy" -- filtr odcieni szarosci 100%.
- Transformacje obrazu 3: Po wcisnieciu "Zastosuj" -- filtr przezroczystosci o wartosci wskazanej suwakiem.
- Transformacje obrazu 4: Po wcisnieciu "Zastosuj" -- filtr zmiany jasnosci o wartosci wskazanej suwakiem.
Dlaczego trudne: Zaawansowane selektory CSS w JS, querySelectorAll z forEach, manipulacja CSS filter, 4 rozne funkcje.
Na co zwrocic uwagę:
querySelector("img[src='...']")-- selektor atrybutu w JSquerySelectorAll("input[name='efekt']")-- pobranie wielu elementow- CSS filters:
grayscale(),opacity(),brightness(),none - Dynamiczne wartosci z suwakow (range input) wstawiane do filtra
- Kazda funkcja obsluguje inne zdjecie i inny efekt
#5 -- inf03_2025_06_02 (Trudnosc: 7/10)
Temat: Planer zadan (To-Do List) -- dodawanie i oznaczanie jako wykonane
Polecenie z arkusza:
Skrypt napisany w JavaScript, dzialajacy na liscie punktowanej. W stanie poczatkowym jest 6 elementow listy, elementy moga byc dodawane, ale nie sa usuwane.
- Funkcja wywoływana po wcisnieciu dowolnego z przyciskow "Wykonane": przekresla tresc elementu listy zwiazanego z tym przyciskiem.
- Funkcja wywoływana po wcisnieciu przycisku "Dodaj": tworzy nowy element listy na jej koncu. Element sklada sie z: tresci pobranej z pola edycyjnego oraz przycisku o tresci "Wykonane", ktory jest formatowany tak jak reszta przyciskow w liscie i jego klikniecie powoduje wywolanie odpowiedniej funkcji.
Dlaczego trudne: Krotki kod ale laczy wiele trudnych koncepcji: createElement z osadzonym HTML, parentElement, template literals z onclick, przekazywanie this.
Na co zwrocic uwagę:
createElement("li")-- dynamiczne tworzenie elementu listy- Template literal z osadzonym
onclick='zaznaczWykonane(this)'-- HTML w JS thisw dynamicznie tworzonym HTML -- odnosi sie do kliknietego buttonaparentElement-- nawigacja w gore drzewa DOM (z buttona do li)text-decoration: line-through-- wizualne oznaczenie wykonania- Wzorzec: klikniecie na dziecko wplywa na rodzica
#6 -- inf03_2025_06_05 (Trudnosc: 6.5/10)
Temat: Koszyk drukarni -- upload pliku, obliczenie ceny
Polecenie z arkusza:
Skrypt wykonywany po stronie klienta, po kliknieciu przycisku:
- Pobiera dane z kontrolek
- Oblicza cene na podstawie liczby kopii i rodzaju papieru. Dla papieru blyszczacego cena jednostkowa wynosi 1,5 zl, dla papieru matowego -- 2 zl
- Ustala nazwe pliku z wartosci pobranej z pierwszego pola edycyjnego
- Tworzy elementy i dodaje je do bloku z sekcji prawej: element DOM dla obrazu z ustalona nazwa pliku, element DOM dla paragrafu z trescia "Liczba kopii:
", element DOM dla paragrafu z trescia "Cena: "
Dlaczego trudne: File API, zaawansowany selektor radio buttonow, dynamiczne tworzenie wielu elementow DOM, logika cenowa.
Na co zwrocic uwagę:
files[0]-- File API, dostep do wybranego plikufile.name-- pobranie nazwy plikuinput[type=radio]:checked-- selektor zaznaczonego radio buttona- Tworzenie 3 elementow DOM (img + 2x p) i dodawanie do koszyka
- Rozne ceny za rozne typy papieru
#7 -- inf03_2024_06_06 (Trudnosc: 6.5/10)
Temat: Wieloetapowa rejestracja z walidacja hasel
Polecenie z arkusza:
- Funkcja dla klikniecia przycisku z pierwszego bloku: ukrywany jest blok 1, blok 2 staje sie widoczny.
- Funkcja dla klikniecia przycisku z drugiego bloku: ukrywany jest blok 2, blok 3 staje sie widoczny.
- Funkcja dla klikniecia przycisku z trzeciego bloku: w przypadku, gdy wpisane do pol edycyjnych hasla nie sa identyczne wyswietlane jest okienko popup z komunikatem "Podane hasla roznia sie". Imie i nazwisko wpisane w pierwszym bloku sa pobrane i wyswietlone w konsoli jako napis o tresci "Witaj
".
Dlaczego trudne: querySelectorAll z forEach i indeksem, classList add/remove, przelaczanie blokow, walidacja hasel.
Na co zwrocic uwagę:
querySelectorAll('.blok')-- pobranie elementow po klasie CSSforEach((blok, index) => ...)-- forEach z INDEKSEM (drugi argument)classList.add('ukryty')/classList.remove('ukryty')-- dodawanie/usuwanie klas- Logika: ukryj wszystkie, pokaz ten o pasujacym indeksie
- Walidacja:
haslo1 !== haslo2-- porownanie dwoch pol
#8 -- inf03_2025_01_01 (Trudnosc: 6/10)
Temat: Kalkulator rat kursow komputerowych
Polecenie z arkusza:
Skrypt wykonywany po stronie klienta, na stronie raty.html po kliknieciu przycisku "Oblicz":
- Pobiera dane z kontrolek
- Ustala calkowita kwote za wybrane kursy na podstawie cen z tabeli
- Oblicza koszt jednej raty na podstawie kwoty calkowitej. Dla uproszczenia kwota calkowita jest dzielona przez podana liczbe rat
- Wyswietla pod przyciskiem w paragrafie tresc: "Kurs odbedzie sie w
. Koszt calkowity: zl. Placisz rat po zl", gdzie oznacza wybor z listy rozwijalnej, obliczona kwote calkowita, podana liczbe rat, wyliczona rate
Dlaczego trudne: Wiele typow elementow formularza (checkbox, number, select), sumowanie warunkowe, obliczenie raty, template literals.
Na co zwrocic uwagę:
.checked-- sprawdzanie czy checkbox jest zaznaczonycena += 3000-- kumulowanie wartosci (sumowanie)parseInt(cena / ile_rat)-- dzielenie calkowite (zaokraglenie w dol)- Template literals z wieloma zmiennymi
${...} - Rozne typy inputow: checkbox, number, select
#9 -- inf03_2024_06_09 (Trudnosc: 6/10)
Temat: Galeria zdjec z nawigacja (poprzednie/nastepne)
Polecenie z arkusza:
- Funkcja wyswietlajaca nastepne zdjecie: zmienia aktywne zdjecie w bloku srodkowym na nastepne (np. 1.jpg na 2.jpg). W przypadku, gdy jest wyswietlane ostatnie zdjecie: 7.jpg zmienia zdjecie na: 1.jpg.
- Funkcja wyswietlajaca poprzednie zdjecie: zmienia aktywne zdjecie w bloku srodkowym na poprzednie (np. 3.jpg na 2.jpg). W przypadku, gdy jest wyswietlane pierwsze zdjecie: 1.jpg zmienia zdjecie na ostatnie: 7.jpg.
Dlaczego trudne: Stan globalny, logika cykliczna (wrap-around), dynamiczna zmiana src.
Na co zwrocic uwagę:
- Zmienna globalna
let aktualneZdjecie = 1-- stan galerii - Logika cykliczna: jesli < 1 to wroc do 7, jesli > 7 to wroc do 1
- Dynamiczna zmiana
srcobrazka:aktualneZdjecie + ".jpg" - Dwie symetryczne funkcje (lustrzana logika)
#10 -- inf03_2026_01_09 (Trudnosc: 6/10)
Temat: Salon paznokci -- przelaczanie sekcji z podswietlaniem aktywnego przycisku
Polecenie z arkusza:
Skrypt 1: wyswietla za pomoca petli 10 obrazow o nazwach 1.jpg, 2.jpg ... 10.jpg. Kazdy obraz ma przypisana klase wzory. Po najechaniu kursorem na obraz wyswietlany jest dymek z nazwa (numerem) obrazu.
Skrypt 2: wykonywany po stronie klienta, po najechaniu kursorem na przycisk:
- Gdy kursor najedzie na przycisk "Kolor": pierwszy blok sekcji wyswietlany w postaci blokowej, pozostale usuniete. Pierwszy przycisk ma kolor tla Salmon, pozostale Crimson.
- Gdy kursor najedzie na przycisk "Ksztalt": drugi blok sekcji wyswietlany w postaci blokowej, pozostale usuniete. Drugi przycisk ma kolor tla Salmon, pozostale Crimson.
- Gdy kursor najedzie na przycisk "Wzor": trzeci blok sekcji wyswietlany w postaci blokowej, pozostale usuniete. Trzeci przycisk ma kolor tla Salmon, pozostale Crimson.
Dlaczego trudne: Zarzadzanie 6 elementami DOM jednoczesnie, synchronizacja widocznosci sekcji z kolorami przyciskow.
Na co zwrocic uwagę:
- 6 elementow DOM do ogarniecial (3 sekcje + 3 przyciski)
- Kazdy if zmienia stan WSZYSTKICH 6 elementow
display: block/none-- przelaczanie widocznoscibackgroundColor-- zmiana koloru aktywnego przycisku- Duzo kodu ale powtarzalny wzorzec -- warto pokazac jak go uproscic
Podsumowanie
Najtrudniejsze koncepcje JS na egzaminie INF.03:
addEventListener+querySelectorAll+forEach(programistyczne dodawanie zdarzen)createElement+appendChild(dynamiczne tworzenie elementow DOM)- Algorytmy matematyczne (konwersja binarna, obliczenia)
classList.add/remove(manipulacja klasami CSS)- File API (
files[0],file.name) - Stan globalny + logika cykliczna (galerie, paski postepu)