INF.03-03-26.01-SGStyczeń 2026 · 42 kroki · ok. 71 min · 38 kryteriów z klucza
Rozwiązanie krok po kroku: Witryna matematyczna pola figur (Wersja podstawowa)
Rozwiązanie buduje witrynę matematyczną „Pola figur”: najpierw animację GIF z pięciu kwadratów wyciętych z jednego obrazu, potem dwie strony z tym samym nagłówkiem, menu i stopką - index.html z dużą figurą, dwiema klikanymi miniaturami i kalkulatorem pola oraz kolo.html z animacją i wzorem na pole koła zapisanym znakiem specjalnym Π i indeksem górnym. Do tego styl z pseudoelementem ::first-letter i cieniem miniatur oraz dwa skrypty JavaScript: zmiana dużej figury po kliknięciu miniatury i obliczenie pola trójkąta albo prostokąta - zależnie od tego, która figura jest wybrana.
Kroki idą zdanie po zdaniu za treścią arkusza - przy każdym jest polecenie z arkusza, a kod pokazuje dokładnie te linie, które je spełniają. Skrypty są najpierw pisane najprościej, jak robi to uczeń na egzaminie (onclick w HTML, getElementById, innerHTML), a na końcu zostają przerobione na wersję z prawdziwych projektów: nasłuchiwacze zdarzeń zamiast atrybutów, sprawdzenie danych i czytelny wynik.
To jest wersja podstawowa. W zakładce „Nowoczesny kod (grid)” jest drugi sposób rozwiązania tego samego arkusza: układ na siatce CSS, kolory w zmiennych i skrypt w osobnym pliku z nasłuchiwaczami zdarzeń od pierwszej linii - obie wersje są zgodne z kluczem.
Grafiki pochodzą z prawdziwego archiwum pliki2 (załącznik do arkusza, hasło w treści zadania). Obrazy figur są w formacie BMP - 1d.bmp, 2d.bmp, 1m.bmp, 2m.bmp zostają bez zmian, dokładnie jak każe arkusz. Oba skrypty sprawdzono w prawdziwej przeglądarce na oryginalnych plikach BMP.
Jak liczą się punkty. Klucz ma 38 kryteriów (R.1.1 - R.5.8), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 29 punktów - można stracić 9 kryteriów i nadal zdać. Przy każdym kroku jest napisane, które kryteria spełnia; egzaminator ocenia spełnienie kryteriów z klucza, nie zgodność z tym kodem.
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie, pliki i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Rozwiązuję samodzielnie” chowa rozwiązanie kroku - najpierw własna próba, potem odsłonięcie.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Animacja
Kroki 1-3 · po tym etapie masz 4 z 38 kryteriów (pkt)
Krok 1: Pięć klatek 200 × 200 px wyciętych z klatki.jpg
Kryteria: ,
R.1.1 Animacja kolo.gif ma wymiary 200 px na 200 px
R.1.2 W animacji zastosowany przynajmniej jeden kwadrat z grafiki klatki.jpg
ok. 5 min
Polecenie z arkusza
Każdą klatką animacji jest jeden kwadrat z grafiki klatki.jpg, razem to pięć klatek animacji. Wymiary każdej klatki: 200 px na 200 px
Rozpakuj pliki2.7z (hasło *M@tem@tyk@6 - gwiazdka na początku, trzy małpy zamiast „a”) i załóż folder z numerem zdającego. Obraz klatki.jpg ma 1122 × 220 px, a każdy z pięciu niebieskich kwadratów - około 205 × 204 px. W GIMP-ie tworzysz nowy obraz 200 × 200 px i dla każdego kwadratu: narzędzie zaznaczania prostokątnego z ustalonym rozmiarem 200 × 200, zaznaczenie w środku kwadratu, Kopiuj, w nowym obrazie Wklej jako nową warstwę. Pięć warstw w kolejności od lewej (ostatnia warstwa na dole listy to pierwsza klatka) - to pięć klatek z ilustracji 1. Brzegi kwadratów z cienką ramką wypadają poza zaznaczenie, a napis i koło mieszczą się w całości.
Typowe błędy
Klatka większa niż 200 × 200 px (np. cały kwadrat z ramką albo skalowanie całego obrazu) daje animację o złych wymiarach - klucz sprawdza dokładnie 200 × 200.
Podgląd strony po tym kroku
Krok 2: Pętla i opóźnienie 1 s: zrzut parametry.jpg
Kryteria:
R.1.4 Ustawiono opóźnienie między klatkami na 1 sekundę, co jest udokumentowane zrzutem ekranu - plik parametry.jpg , na którym widoczny jest cały obszar ekranu z paskiem zadań
ok. 3 min
Polecenie z arkusza
Animacja jest powtarzana w nieskończoność, opóźnienie między klatkami 1 sekunda. Udokumentuj ustawienie parametrów animacji za pomocą zrzutu ekranu o nazwie parametry.jpg. Nie kadruj zrzutu. Powinien on obejmować cały ekran monitora, z widocznym paskiem zadań.
Plik → Eksportuj jako, nazwa kolo.gif. W oknie eksportu GIF zaznaczasz Jako animację i Pętla (powtarzanie w nieskończoność), opóźnienie 1000 ms (1 sekunda), Jedna klatka na warstwę (zastąp) i pole Użyj opóźnienia wprowadzonego powyżej dla wszystkich klatek. To ostatnie jest ważne: GIMP czyta też opóźnienie z nazwy warstwy (np. „Warstwa (100ms)”) i bez tego zaznaczenia nazwa warstwy wygrywa z wartością 1000. Zanim klikniesz Eksportuj, robisz zrzut całego ekranu z tym oknem i zapisujesz go jako parametry.jpg. Obraz w podglądzie kroku to odtworzenie tego okna z ustawieniami z arkusza - na egzaminie zrzut obejmuje cały ekran z paskiem zadań.
Typowe błędy
Bez zaznaczonego „Jako animację” GIMP zapisuje tylko jedną, spłaszczoną klatkę.
Podgląd strony po tym kroku
Krok 3: Animacja kolo.gif
Kryteria:
R.1.3 Animacja składa się z pięciu klatek wyświetlanych jedna po drugiej, po ostatniej klatce jest wyświetlana pierwsza
ok. 1 min
Polecenie z arkusza
Animację zapisz jako kolo.gif
Eksportuj - powstaje kolo.gif: 5 klatek 200 × 200 px, każda po 1000 ms, po ostatniej znów pierwsza. Litery napisu „KOŁO” po kolei robią się czerwone, a koło miga na żółto i czerwono. Sprawdź plik, otwierając go w przeglądarce.
Podgląd strony po tym kroku
Etap 2: Strona HTML
Kroki 4-22 · po tym etapie masz 17 z 38 kryteriów (pkt)
Krok 4: Plik index.html w HTML5
ok. 2 min
Polecenie z arkusza
Składa się ze strony głównej index.html oraz podstrony kolo.html. Cechy wspólne dla obu stron: zapisane w języku HTML5
Zacznij od strony głównej: deklaracja <!DOCTYPE html> i szkielet. Podstronę kolo.html zrobisz jako kopię gotowej strony głównej - mają ten sam nagłówek, menu i stopkę.
R.2.1 W plikach index.html lub kolo.html znajduje się deklaracja HTML5 <!DOCTYPE HTML> i deklaracja języka zawartości witryny: polski np. <html lang="pl">
ok. 1 min
Polecenie z arkusza
Zadeklarowany polski język zawartości witryny
Atrybut lang="pl" w znaczniku <html> - razem z deklaracją HTML5 to jedno kryterium klucza.
Krok 9: Bloki: nagłówek, główny z trzema blokami, stopka
Kryteria:
R.2.3 W sekcji body zdefiniowany jest podział na bloki za pomocą semantycznych znaczników HTML5: header, main->nav+section+aside, footer (dopuszcza się stosowanie bloków pomocniczych)
ok. 2 min
Polecenie z arkusza
Podział strony na bloki zrealizowany za pomocą semantycznych znaczników bloków języka HTML5 tak, aby po uruchomieniu w przeglądarce układ bloków na stronie był zgodny z ilustracją 4. Zawartość bloku głównego: bloki nawigacyjny, sekcji i boczny
Klucz wymaga wprost header, main z nav, section i aside w środku i footer (R.2.3). Kolejność w <main> to kolejność z ilustracji 4: od lewej menu, figura, kalkulator. W tym arkuszu dwie ilustracje mają numer 4 - układ bloków i wynik dla trójkąta; tutaj chodzi o układ.
R.2.5 W bloku nawigacyjnym umieszczona jedna lista punktowana z dwoma elementami, zastosowane znaczniki <ul> i <li>
ok. 2 min
Polecenie z arkusza
Lista punktowana (nieuporządkowana) z dwoma odsyłaczami o treści „Prostokąt i trójkąt”, prowadzący do strony index.html oraz „Okrąg i koło”, prowadzący do strony kolo.html
Lista nieuporządkowana to <ul>, każdy punkt to <li> z odnośnikiem <a href> w środku. Adresy względne (index.html, kolo.html) - obie strony leżą w tym samym folderze. Drugi odnośnik zadziała, gdy powstanie kolo.html.
Zawartość bloku sekcji strony index.html: Obraz 1d.bmp z tekstem alternatywnym „Figura”
Duży trójkąt na start. Obraz dostaje id="figure" - po tym identyfikatorze Skrypt 1 znajdzie go i podmieni plik, a Skrypt 2 sprawdzi, która figura jest wybrana. Znacznik <br> kończy linię: miniatury mają stać poniżej.
R.2.6 Na stronie głównej w bloku sekcji umieszczone grafiki z tekstem alternatywnym: 1d.bmp , "Figura"; 1m.bmp , "Wybierz trójkąt"; 2m.bmp , "Wybierz prostokąt" (dopuszcza się dla obrazów 1m i 2m przycisk z obrazem)
R.3.6 Do grafik 1m.bmp i 2m.bmp przypisana jest klasa
ok. 2 min
Polecenie z arkusza
Poniżej obok siebie dwa obrazy: 1m.bmp z tekstem alternatywnym „Wybierz trójkąt” oraz 2m.bmp, z tekstem alternatywnym „Wybierz prostokąt”. Kliknięcie dowolnego z tych obrazów uruchamia skrypt 1. Do obu obrazów należy przypisać tę samą klasę
Dwa <img> w jednej linii - obrazy są elementami liniowymi, więc stają obok siebie. Oba dostają class="choice": jedna reguła .choice w CSS nada im cień i zaokrąglenie. Obsługę kliknięcia dopiszesz razem ze Skryptem 1.
R.2.4 W bloku nagłówkowym umieszczony <h2>: "Pola figur płaskich", w nawigacyjnym <h3> "MENU", na stronie głównej <h3> "Pole prostokąta / pole trójkąta" oraz w stopce <p> z numerem zdającego
ok. 1 min
Polecenie z arkusza
Zawartość bloku bocznego strony index.html, rozkład elementów zgodny z ilustracją 2: Nagłówek trzeciego stopnia o treści: „Pole prostokąta / pole trójkąta”
Drugi <h3> na stronie. Z tym krokiem są wszystkie nagłówki i akapit z kryterium R.2.4: <h2> w nagłówku, dwa <h3> i <p> w stopce.
R.3.7 Przynajmniej jedna etykieta jest powiązana z polem edycyjnym
ok. 2 min
Polecenie z arkusza
Etykieta „Bok prostokąta / podstawa trójkąta:” oraz pole edycyjne powiązane z etykietą
<label for="sideA"> łączy się z polem po jego id - kliknięcie napisu ustawia kursor w polu. Pole liczbowe (type="number"), bo będziesz mnożyć. Na ilustracji 2 pole stoi pod etykietą, stąd <br> za nią.
R.2.7 Na stronie głównej umieszczone dwa pola edycyjne oraz przycisk Oblicz
ok. 1 min
Polecenie z arkusza
Przycisk „Oblicz”, którego wciśnięcie powoduje wywołanie skryptu 2
<button> poza formularzem niczego nie wysyła - zrobi tylko to, co każe mu skrypt. Obsługę wciśnięcia dopiszesz razem ze Skryptem 2. Na stronie są już dwa pola edycyjne i przycisk (R.2.7).
R.2.8 Na podstronie umieszczona animacja/grafika z kołem, z tekstem alternatywnym "koło"
R.3.3 Wybranie odnośnika "Prostokąt i trójkąt" otwiera stronę główną, "Okrąg i koło" otwiera podstronę
ok. 2 min
Polecenie z arkusza
Zawartość bloku sekcji strony kolo.html: Animacja kolo.gif z tekstem alternatywnym „koło”
Zapisz index.html jako kolo.html - przychodzą razem wszystkie cechy wspólne obu stron: nagłówek strony, styl, menu i stopka. W sekcji zamiast trzech obrazów figur wstawiasz animację z alt="koło". Teraz oba odnośniki menu działają: „Prostokąt i trójkąt” otwiera stronę główną, „Okrąg i koło” - podstronę (R.3.3).
R.2.9 Na podstronie umieszczony paragraf o treści: Pole koła: P = Π * r2
ok. 2 min
Polecenie z arkusza
Zawartość bloku bocznego strony kolo.html: Paragraf o treści „Pole koła: P = Π * r2”. Litera Pi (Π) powinna być zapisana za pomocą znaku specjalnego; oznaczenie potęgi powinno znajdować się w indeksie górnym.
Kalkulator z bloku bocznego zamieniasz na jeden akapit. Litera Π to znak specjalny z tabeli 1 arkusza (encja nazwana; to samo daje Π), a potęga w indeksie górnym to znacznik <sup>: r<sup>2</sup>.
⚠️ Sprzeczność w arkuszu: polecenie i tabela 1 każą użyć wielkiej litery Π (Π), a ilustracja 3 pokazuje małą π (π), poprawną matematycznie we wzorze na pole koła. Klucz CKE przyjmuje Π - na egzaminie punkt daje wersja z klucza.
Typowe błędy
Wpisanie „r2” zwykłym tekstem albo litery π wklejonej ze schowka nie spełnia wymagań arkusza: potęga ma być w <sup>, a Pi - znakiem specjalnym.
Kroki 23-33 · po tym etapie masz 28 z 38 kryteriów (pkt)
Krok 23: Plik styl.css: krój Garamond
Kryteria:
R.4.1 styl domyślny dla wszystkich selektorów (*): krój czcionki Garamond, serif (dozwolona tylko taka kolejność)
ok. 1 min
Polecenie z arkusza
Domyślnie, dla wszystkich selektorów: krój czcionki Garamond, w przypadku braku serif
Selektor *. Kolejność krojów ma znaczenie: najpierw Garamond, na końcu rodzina zapasowa serif - klucz dopuszcza tylko taką. Podgląd wraca na stronę główną.
styl.cssCSSnowy plik
* {font-family: Garamond, serif;}
Podgląd strony po tym kroku (index.html)
Krok 24: Nagłówek i stopka
Kryteria: ,
R.4.3 kolor czcionki: blok nagłówkowy i stopka - biały
R.4.7 odstęp między literami: blok nagłówkowy i stopka - letter-spacing: 3px;
ok. 2 min
Polecenie z arkusza
Wspólne dla bloku nagłówkowego i stopki: kolor tła Navy, biały kolor czcionki, wyrównanie tekstu do środka, marginesy wewnętrzne 5 px, odstępy między literami 3 px
Jedna reguła dla dwóch selektorów. Odstępy między literami to letter-spacing - na ilustracji 2 „P o l a f i g u r” jest rozstrzelone.
R.4.2 kolor tła: blok nagłówkowy i stopka - Navy, blok nawigacyjny i boczny - DodgerBlue, blok sekcji - SkyBlue
R.4.4 szerokość: blok nawigacyjny i boczny - 35%, blok sekcji - 30% (width lub grid-template- columns lub flex) wysokość: blok nawigacyjny, boczny oraz blok sekcji - 500px
ok. 1 min
Polecenie z arkusza
Dodatkowo dla bloku sekcji: kolor tła SkyBlue, szerokość 30%, wyrównanie tekstu do środka
35% + 30% + 35% = 100%. Wyrównanie do środka działa też na obrazy, bo są elementami liniowymi - figura i miniatury stoją na środku sekcji. Ta reguła zamyka kryteria kolorów tła i wymiarów bloków.
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z ilustracją 4 w arkuszu egzaminacyjnym (prawidłowo zastosowano właściwości CSS decydujące o układzie bloków na stronie, np. float i clear albo display flex albo grid albo position)
ok. 2 min
Polecenie z arkusza
Podział strony na bloki zrealizowany za pomocą semantycznych znaczników bloków języka HTML5 tak, aby po uruchomieniu w przeglądarce układ bloków na stronie był zgodny z ilustracją 4
Arkusz nie mówi, jak postawić trzy bloki w rzędzie - wybierasz display: flex na <main>: dzieci kontenera flex stają obok siebie w kolejności z HTML-a, a stopka sama zostaje pod spodem. Przy float trzeba by pamiętać o clear: both dla stopki (R.3.1).
Typowe błędy
Bloki, które na siebie zachodzą (sprawdzane w inspektorze), zabierają punkt za układ, nawet gdy strona „na oko” wygląda dobrze.
Krok 31: Pierwsza litera nagłówka dwa razy większa
Kryteria:
R.4.9 pseudoelement first-letter dla nagłówka trzeciego stopnia: rozmiar czcionki 200%
ok. 2 min
Polecenie z arkusza
Dla selektora nagłówka trzeciego stopnia: pierwsza litera nagłówka ma rozmiar czcionki 200%
Pseudoelement ::first-letter wybiera pierwszą literę tekstu elementu - bez dodatkowego <span> w HTML-u. „M” w „MENU” i „P” w „Pole prostokąta” rosną dwukrotnie, jak na ilustracji 2.
R.4.10 styl klasy przypisanej do grafik 1m.bmp i 2m.bmp : box-shadow: 5px 5px 10px DimGray; zaokrąglenie rogów 10px, marginesy zewnętrzne 5px, kursor pointer
ok. 2 min
Polecenie z arkusza
Dla klasy przypisanej do grafik 1m.bmp i 2m.bmp: cień przesunięty o 5 px w pionie i poziomie, rozmycie 10 px kolor DimGray, zaokrąglenie rogów 10 px, marginesy zewnętrzne 5 px, kursor pointer.
Selektor klasy z kropką: .choice. box-shadow: 5px 5px 10px DimGray - przesunięcie w poziomie, w pionie, rozmycie, kolor. cursor: pointer zmienia strzałkę w rączkę: użytkownik widzi, że miniaturę da się kliknąć.
Kroki 34-40 · po tym etapie masz 38 z 38 kryteriów (pkt)
Krok 34: Skrypt 1: funkcja zmieniająca dużą figurę
Kryteria:
R.5.1 Skrypt napisany w języku JavaScript i zawiera on przynajmniej jedną poprawną składniowo instrukcję wynikającą z treści zadania
ok. 2 min
Polecenie z arkusza
Skrypt 1: gdy kliknięto w obraz 1m.bmp to duży obraz powyżej ustawiany jest na 1d.bmp, gdy kliknięto w obraz 2m.bmp to duży obraz powyżej ustawiany jest na 2d.bmp
Skrypty piszesz w znaczniku <script> na końcu <body> - wtedy wszystkie elementy strony już istnieją. Jedna funkcja obsłuży obie miniatury: dostaje nazwę pliku w parametrze file i wpisuje ją do atrybutu src dużego obrazu znalezionego po id. Dzięki parametrowi nie trzeba pisać dwóch prawie identycznych funkcji.
R.5.2 Po kliknięciu w obraz 1m.bmp duży obraz zmieniany jest na 1d.bmp (trójkąt)
R.3.4 Zdefiniowane dla przynajmniej jednej grafiki zdarzenie związane z jej kliknięciem, które uruchamia funkcję skryptu (obsługa zdarzenia zdefiniowana w HTML np. onClick lub w skrypcie np.: element.addEventListener(...), element.onClick = …)
ok. 1 min
Polecenie z arkusza
Gdy kliknięto w obraz 1m.bmp to duży obraz powyżej ustawiany jest na 1d.bmp
Atrybut onclick uruchamia funkcję po kliknięciu obrazu. Nazwę pliku podajesz w apostrofach, bo cała wartość atrybutu jest już w cudzysłowach.
R.5.4 Skrypt 2 pobiera dane z dwóch pól edycyjnych
R.3.5 Zdefiniowane dla przycisku zdarzenie związane z jego wciśnięciem, które uruchamia funkcję skryptu (obsługa zdarzenia zdefiniowana w HTML np. onClick lub w skrypcie np.: element.addEventListener(...), element.onClick = …)
ok. 2 min
Polecenie z arkusza
Skrypt 2: pobiera dane z pól edycyjnych
Druga funkcja, calculate, uruchamiana atrybutem onclick przycisku (R.3.5). Wartość pola odczytujesz właściwością value - przychodzi jako tekst, np. „5”; przy mnożeniu (*) i dzieleniu (/) JavaScript sam zamieni ją na liczbę. Przy dodawaniu by tego nie zrobił: "5" + "10" to napis „510”, a nie 15 - dlatego przy dodawaniu wartości pól zawsze trzeba je najpierw zamienić na liczby.
R.5.6 Po wybraniu grafiki prostokąta skrypt liczy pole prostokąta na podstawie danych
ok. 2 min
Polecenie z arkusza
Gdy w bloku głównym wybrano prostokąt (duży obraz to 2d.bmp), to na podstawie danych jest liczone pole prostokąta (ilustracja 5)
Która figura jest wybrana, mówi atrybut src dużego obrazu. getAttribute("src") zwraca dokładnie to, co wpisano (2d.bmp); sama właściwość .src oddałaby pełny adres z http://localhost/... i porównanie by nie wyszło. Pole prostokąta to a * b.
index.htmlHTMLzmienione: 4 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Pola figur</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h2>Pola figur płaskich</h2> </header> <main> <nav> <h3>MENU</h3> <ul> <li><ahref="index.html">Prostokąt i trójkąt</a></li> <li><ahref="kolo.html">Okrąg i koło</a></li> </ul> </nav> <section> <imgsrc="1d.bmp"alt="Figura"id="figure"> <br> <imgsrc="1m.bmp"alt="Wybierz trójkąt"class="choice"onclick="changeFigure('1d.bmp')"> <imgsrc="2m.bmp"alt="Wybierz prostokąt"class="choice"onclick="changeFigure('2d.bmp')"> </section> <aside> <h3>Pole prostokąta / pole trójkąta</h3> <labelfor="sideA">Bok prostokąta / podstawa trójkąta:</label><br> <inputtype="number"id="sideA"><br> <labelfor="sideB">Drugi bok prostokąta / wysokość trójkąta:</label><br> <inputtype="number"id="sideB"><br> <buttononclick="calculate()">Oblicz</button> <pid="result"></p> </aside> </main> <footer> <p>Autor: Bartosz Bryniarski</p> </footer> <script>function changeFigure(file) {document.getElementById("figure").src = file; }function calculate() {let a = document.getElementById("sideA").value;let b = document.getElementById("sideB").value;let area;if (document.getElementById("figure").getAttribute("src") == "2d.bmp") { area = a * b; } } </script></body></html>
Podgląd strony po tym kroku (index.html)
Krok 39: Skrypt 2: pole trójkąta, także na starcie
Kryteria:
R.5.5 Po wybraniu grafiki trójkąta skrypt liczy pole trójkąta na podstawie danych
ok. 2 min
Polecenie z arkusza
Gdy w bloku głównym wybrano trójkąt (duży obraz to 1d.bmp) to na podstawie danych jest liczone pole trójkąta. Obliczenia powinny też działać dla stanu początkowego witryny (Skrypt 1 nie wykonał się ani razu), wtedy liczone jest pole trójkąta
Gałąź else obejmuje wszystko poza prostokątem: trójkąt wybrany kliknięciem i stan początkowy, w którym duży obraz to od razu 1d.bmp. Pole trójkąta to podstawa razy wysokość przez dwa.
index.htmlHTMLzmienione: 2 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Pola figur</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h2>Pola figur płaskich</h2> </header> <main> <nav> <h3>MENU</h3> <ul> <li><ahref="index.html">Prostokąt i trójkąt</a></li> <li><ahref="kolo.html">Okrąg i koło</a></li> </ul> </nav> <section> <imgsrc="1d.bmp"alt="Figura"id="figure"> <br> <imgsrc="1m.bmp"alt="Wybierz trójkąt"class="choice"onclick="changeFigure('1d.bmp')"> <imgsrc="2m.bmp"alt="Wybierz prostokąt"class="choice"onclick="changeFigure('2d.bmp')"> </section> <aside> <h3>Pole prostokąta / pole trójkąta</h3> <labelfor="sideA">Bok prostokąta / podstawa trójkąta:</label><br> <inputtype="number"id="sideA"><br> <labelfor="sideB">Drugi bok prostokąta / wysokość trójkąta:</label><br> <inputtype="number"id="sideB"><br> <buttononclick="calculate()">Oblicz</button> <pid="result"></p> </aside> </main> <footer> <p>Autor: Bartosz Bryniarski</p> </footer> <script>function changeFigure(file) {document.getElementById("figure").src = file; }function calculate() {let a = document.getElementById("sideA").value;let b = document.getElementById("sideB").value;let area;if (document.getElementById("figure").getAttribute("src") == "2d.bmp") { area = a * b; } else { area = a * b / 2; } } </script></body></html>
Podgląd strony po tym kroku (index.html)
Krok 40: Skrypt 2: wynik w akapicie pod przyciskiem
Kryteria: ,
R.5.7 Wynik jest wyświetlany pod przyciskiem
R.5.8 W skryptach zastosowana przynajmniej jedna zmienna lub funkcja oraz nazwy wszystkich funkcji i zmiennych są w języku polskim lub angielskim i odzwierciedlają cel zastosowania
ok. 2 min
Polecenie z arkusza
Wynik wyświetlany jest w paragrafie pod przyciskiem
innerHTML wpisuje wynik do pustego akapitu result. Sprawdzone w przeglądarce: 5 i 10 na starcie daje 25, po kliknięciu prostokąta 50, a po powrocie do trójkąta 25 - jak na ilustracjach 4 i 5. Nazwy funkcji i zmiennych (changeFigure, calculate, area, file) mówią, do czego służą (R.5.8).
index.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Pola figur</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h2>Pola figur płaskich</h2> </header> <main> <nav> <h3>MENU</h3> <ul> <li><ahref="index.html">Prostokąt i trójkąt</a></li> <li><ahref="kolo.html">Okrąg i koło</a></li> </ul> </nav> <section> <imgsrc="1d.bmp"alt="Figura"id="figure"> <br> <imgsrc="1m.bmp"alt="Wybierz trójkąt"class="choice"onclick="changeFigure('1d.bmp')"> <imgsrc="2m.bmp"alt="Wybierz prostokąt"class="choice"onclick="changeFigure('2d.bmp')"> </section> <aside> <h3>Pole prostokąta / pole trójkąta</h3> <labelfor="sideA">Bok prostokąta / podstawa trójkąta:</label><br> <inputtype="number"id="sideA"><br> <labelfor="sideB">Drugi bok prostokąta / wysokość trójkąta:</label><br> <inputtype="number"id="sideB"><br> <buttononclick="calculate()">Oblicz</button> <pid="result"></p> </aside> </main> <footer> <p>Autor: Bartosz Bryniarski</p> </footer> <script>function changeFigure(file) {document.getElementById("figure").src = file; }function calculate() {let a = document.getElementById("sideA").value;let b = document.getElementById("sideB").value;let area;if (document.getElementById("figure").getAttribute("src") == "2d.bmp") { area = a * b; } else { area = a * b / 2; }document.getElementById("result").innerHTML = area; } </script></body></html>
Podgląd strony po tym kroku (index.html)
Etap 5: Dobre praktyki (poza kluczem)
Krok 41 · po tym etapie masz 38 z 38 kryteriów (pkt)
Krok 41: Nasłuchiwacze zdarzeń, sprawdzenie danych i opisany wynik
ok. 4 min
Polecenie z arkusza
Przycisk „Oblicz”, którego wciśnięcie powoduje wywołanie skryptu 2. Kliknięcie dowolnego z tych obrazów uruchamia skrypt 1
Wersję z egzaminu sprawdzono w przeglądarce także na złych danych: puste pola dają wynik 0, a podstawa -4 - pole -20. Poprawki: wartości zamieniasz jawnie na liczby (Number) i liczysz tylko dla dwóch liczb większych od zera, wynik opisujesz słowami („Pole trójkąta: 25”) i wpisujesz przez textContent, który nie interpretuje HTML-a. Obsługę kliknięć przenosisz z atrybutów onclick do skryptu: addEventListener dla przycisku i pętla po miniaturach, z których każda niesie nazwę pliku w atrybucie data-figure - HTML opisuje treść, a zachowanie siedzi w jednym miejscu. Na egzaminie wystarczy wersja wcześniejsza - klucz uznaje oba sposoby obsługi zdarzeń (R.3.4, R.3.5).
index.htmlHTMLzmienione: 21 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Pola figur</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h2>Pola figur płaskich</h2> </header> <main> <nav> <h3>MENU</h3> <ul> <li><ahref="index.html">Prostokąt i trójkąt</a></li> <li><ahref="kolo.html">Okrąg i koło</a></li> </ul> </nav> <section> <imgsrc="1d.bmp"alt="Figura"id="figure"> <br> <imgsrc="1m.bmp"alt="Wybierz trójkąt"class="choice"data-figure="1d.bmp"> <imgsrc="2m.bmp"alt="Wybierz prostokąt"class="choice"data-figure="2d.bmp"> </section> <aside> <h3>Pole prostokąta / pole trójkąta</h3> <labelfor="sideA">Bok prostokąta / podstawa trójkąta:</label><br> <inputtype="number"id="sideA"><br> <labelfor="sideB">Drugi bok prostokąta / wysokość trójkąta:</label><br> <inputtype="number"id="sideB"><br> <buttontype="button"id="calculate">Oblicz</button> <pid="result"></p> </aside> </main> <footer> <p>Autor: Bartosz Bryniarski</p> </footer> <script>function changeFigure(file) {document.getElementById("figure").src = file; }function calculate() {let a = Number(document.getElementById("sideA").value);let b = Number(document.getElementById("sideB").value);let result = document.getElementById("result");if (!(a > 0 && b > 0)) { result.textContent = "Podaj dwie liczby większe od zera.";return; }if (document.getElementById("figure").getAttribute("src") == "2d.bmp") { result.textContent = "Pole prostokąta: " + a * b; } else { result.textContent = "Pole trójkąta: " + a * b / 2; } }for (let thumbnail ofdocument.querySelectorAll(".choice")) { thumbnail.addEventListener("click", function () { changeFigure(thumbnail.dataset.figure); }); }document.getElementById("calculate").addEventListener("click", calculate);// Wersja z egzaminu: onclick="changeFigure('1d.bmp')" w obrazie i onclick="calculate()" w przycisku </script></body></html>
Podgląd strony po tym kroku (index.html)
Etap 6: Oddanie pracy
Krok 42 · po tym etapie masz 38 z 38 kryteriów (pkt)
Krok 42: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowana była poprawność działania witryny. Umieść go w folderze z numerem zdającego. Nagraj płytę z rezultatami pracy.
W przeglądarka.txt wpisujesz nazwę przeglądarki, w której sprawdzasz stronę.
W folderze z numerem zdającego: 1d.bmp, 1m.bmp, 2d.bmp, 2m.bmp (bez zmian z archiwum), index.html, kolo.html, kolo.gif, parametry.jpg, przeglądarka.txt, styl.css. Nagraj płytę, sprawdź jej odczyt i opisz ją numerem zdającego.
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
To jedno z możliwych rozwiązań. Egzaminator ocenia spełnienie kryteriów z klucza odpowiedzi, a nie zgodność z tym kodem - inna, poprawna droga też daje punkty.
Autor rozwiązania: Bartosz Bryniarski. Licencja CC BY-NC 4.0 - kopiowanie i przeróbki do celów niekomercyjnych, z podaniem autora i źródła (link do tej strony) (zasady wykorzystania). Treść arkusza i klucza oceniania pochodzi z CKE.