Komentarz dokumentujący funkcję na egzaminie INF.04: wzór z listingu w C++, C#, Javie i Pythonie
Oprogramowanie: Windows 10, Visual Studio Community 2022, Python 3.14
Nagłówek funkcji, metody i klasy według listingu z arkuszy INF.04 2021-2026: odmiany wzoru, przykłady w czterech językach i błędy kosztujące punkty.
Prawie każdy arkusz INF.04 kończy się poleceniem udokumentowania funkcji komentarzem według wzoru z listingu 1. Za kilka linijek tekstu klucz daje zwykle pięć punktów, ale wzór zmieniał się między sesjami, a klucz ocenia zgodność z kodem co do nazwy i liczby parametrów.
Wszystkie wymagania w tym tutorialu pochodzą z 21 arkuszy INF.04 z lat 2021-2026 i ich kluczy oceniania. Przykłady w C++, Javie i Pythonie zostały skompilowane i uruchomione, a przykład w C# pokazano w Visual Studio 2022 na Windows 10. W polu autora jest tu imię i nazwisko autora tutorialu - na egzaminie wpisujesz numer zdającego, czyli numer PESEL (albo numer paszportu), którym podpisujesz arkusz.
Egzaminy ZawodoweINF.04
Jak korzystać z tutoriala
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Co mówi arkusz
Kroki 1-2
Krok 1: Gdzie jest to polecenie i ile jest warte
ok. 2 min
W 16 z 21 arkuszy INF.04 z lat 2021-2026 część III („Dokumentacja aplikacji”) zaczyna się od polecenia: w kodzie źródłowym aplikacji konsolowej utwórz komentarz według wzoru z listingu 1. W pozostałych pięciu arkuszach część III to testy, a komentarza nie ma.
Klucz ocenia komentarz zwykle pięcioma kryteriami rezultatu 4 (R.4.1-R.4.5): komentarz zgodny z listingiem, nazwa i opis działania, nazwy i opisy parametrów, typ zwracany z opisem, numer zdającego. To 5 punktów za kilka linijek tekstu, każde kryterium za 1 punkt.
Typowe błędy
Komentarz ma być w aplikacji konsolowej - nagłówek w kodzie aplikacji desktopowej, mobilnej czy webowej nie jest oceniany w tych kryteriach.
Krok 2: Którą funkcję opisać
ok. 2 min
Przeczytaj pierwsze zdanie części III - arkusze różnią się tym, co trzeba opisać:
dowolną funkcję lub metodę: INF.04-01-24.06-SG („wybranej”), INF.04-02-24.06-SG, INF.04-01-24.01-SG, INF.04-01-25.06-SG, INF.04-01-25.01-SG, INF.04-01-26.06-SG („jeden nagłówek do dowolnej funkcji / metody”),
jedną metodę: INF.04-02-26.06-SG - klucz dodaje, że konstruktora nie traktuje się jako metody,
dwie metody: sortującą i szukającą (INF.04-01-21.06-SG i ten sam arkusz w styczniu 2022) - klucz wymaga, żeby nagłówek miały obie,
klasę: INF.04-03-23.06-SG, INF.04-02-23.01-SG, INF.04-02-24.01-SG (patrz krok o nagłówku klasy).
Typowe błędy
Klucze z 2025 roku mówią wprost: „Sprawdzany jest tylko jeden nagłówek”. Gdy arkusz pozwala wybrać, opisz funkcję z parametrami i wartością zwracaną - wtedy każde pole wzoru ma treść i łatwo o komplet. Gdy arkusz wskazuje funkcję, nagłówek innej funkcji nie spełni kryterium.
Etap 2: Wzór z listingu
Kroki 3-5
Krok 3: Najczęstszy wzór: listing 1 z lat 2023-2026
ok. 2 min
W większości arkuszy (INF.04-01-23.01-SG, INF.04-01-24.01-SG, INF.04-02-24.06-SG, INF.04-01-25.06-SG, INF.04-01-26.06-SG) wzór ma pięć pól. Tak wygląda w INF.04-01-26.06-SG:
nazwa funkcji:
<nazwa>
opis funkcji:
<opis co robi funkcja>
parametry:
<nazwa i opis parametru1, lub „brak”>
<nazwa i opis parametru2>
zwracany typ i opis: <nazwa typu i opis co jest zwracane lub „brak”>
autor: <numer zdającego>
Etykiety (nazwa funkcji:, opis funkcji:, parametry:...) przepisz dosłownie, a w miejsce nawiasów <> wpisz treść. Nawiasów nie zostawiaj.
Krok 4: Odmiany wzoru w innych arkuszach
ok. 2 min
Etykiety zmieniały się między sesjami. Przepisuj je z Twojego arkusza:
INF.04-01-21.06-SG i INF.04-01-22.01-SG: nazwa funkcji, parametry wejściowe (nazwa - co przechowuje), wartość zwracana, autor (numer PESEL),
INF.04-01-22.06-SG: nazwa funkcji, argumenty, typ zwracany, informacje, autor - w informacjach klucz wymaga przynajmniej nazwy algorytmu, np. „przeszukiwanie tablicy z wartownikiem”,
INF.04-01-23.06-SG: nazwa funkcji, parametry wejściowe, wartość zwracana, informacje, autor - klucz podaje przykład „wyznaczenie liczb pierwszych, sito Eratostenesa”,
INF.04-01-24.06-SG i INF.04-02-25.01-SG: nazwa, opis, parametry, zwracany typ i opis, autor,
INF.04-01-25.01-SG: nazwa metody, opis metody, parametry, zwracany typ i opis, autor,
INF.04-02-26.06-SG: nazwa, opis, parametry, zwracany typ, autor.
Kilka arkuszy pozwala napisać „metody” zamiast „funkcji”, gdy kod jest obiektowy (np. INF.04-02-24.06-SG, INF.04-01-25.06-SG, INF.04-01-26.06-SG).
Krok 5: Znaki komentarza, gwiazdki i miejsce
ok. 2 min
Listing nie ma znaków początku i końca komentarza - arkusz wyjaśnia, że „te są różne dla różnych języków programowania”. Dopisujesz je sam: komentarz wieloliniowy (/* ... */ w C++, C# i Javie) albo kilka jednoliniowych (//, a w Pythonie #). Klucze od 2024 roku wymieniają też docstring Pythona (potrójny cudzysłów).
Gwiazdki w ramce listingu nie są obowiązkowe: w styczniu 2023 arkusze piszą „liczba gwiazdek dowolna większa od 5”, od 2024 roku „liczba gwiazdek dowolna”, klucze - „nie należy brać pod uwagę liczby gwiazdek”, a listingi z czerwca 2026 nie mają ramki wcale.
Miejsce: arkusze do 2023 roku każą umieścić nagłówek nad funkcją, od 2024 roku „nad lub pod nazwą funkcji”. Nad funkcją pasuje do obu wersji, a docstring Pythona z definicji stoi pod linią def.
Etap 3: Przykłady w czterech językach
Kroki 6-11
Krok 6: C++: komentarz nad funkcją
ok. 3 min
Ta sama funkcja we wszystkich przykładach: NWD dwóch liczb algorytmem Euklidesa, z dwoma parametrami i wartością zwracaną. W C++ komentarz wieloliniowy /* ... */ stoi nad definicją funkcji:
#include <iostream>
using namespace std;
/**********************************************
nazwa funkcji:
nwd
opis funkcji:
wyznacza największy wspólny dzielnik dwóch liczb algorytmem Euklidesa
parametry:
a - pierwsza liczba całkowita dodatnia
b - druga liczba całkowita dodatnia
zwracany typ i opis: int - największy wspólny dzielnik liczb a i b
autor: Bartosz Bryniarski
**********************************************/
int nwd(int a, int b)
{
while (b != 0)
{
int reszta = a % b;
a = b;
b = reszta;
}
return a;
}
int main()
{
cout << "NWD(12, 18) = " << nwd(12, 18) << endl;
return 0;
}
Program skompilowany kompilatorem g++ wypisuje NWD(12, 18) = 6. W miejscu autora jest tu imię i nazwisko autora tutorialu - na egzaminie wpisujesz numer zdającego, czyli numer PESEL (albo numer paszportu), którym podpisany jest arkusz.
Typowe błędy
Opisuj parametry tak, jak nazywają się w kodzie (a, b). Klucz: nagłówek „musi być zgodny ze stanem faktycznym z kodu źródłowego, nawet jeżeli w kodzie są błędy logiczne (liczba pól, typy)” - zmiana nazwy parametru w kodzie wymaga poprawki komentarza.
Krok 7: C#: komentarz w Visual Studio
ok. 2 min
W C# nagłówek wygląda tak samo. Na zrzucie metoda CzyPoprawnaLiczbaKosci z przykładowego programu (rzut kośćmi, 3-10 kości) w Visual Studio 2022 - komentarz stoi nad metodą, a Visual Studio koloruje go na zielono:
/*
nazwa funkcji:
CzyPoprawnaLiczbaKosci
opis funkcji:
sprawdza, czy podana liczba kości mieści się w zakresie od 3 do 10
parametry:
liczba - liczba kości podana przez użytkownika
zwracany typ i opis: bool - true, gdy liczba jest z zakresu 3..10, inaczej false
autor: Bartosz Bryniarski
*/
public static bool CzyPoprawnaLiczbaKosci(int liczba)
{
return liczba >= 3 && liczba <= 10;
}
Zrzut ekranu po tym kroku
Krok 8: Pułapka: trzy ukośniki w Visual Studio
ok. 1 min
Gdy w Visual Studio nad metodą wpiszesz ///, edytor sam wstawi szablon komentarza XML - na zrzucie nad metodą Rzuc(int liczba, Random los): <summary>, <param name="liczba">, <param name="los"> i <returns>. To dokumentacja w formacie .NET, ale nie wzór z arkusza - nie ma w nim etykiet nazwa funkcji:, opis funkcji: ani autor:.
Typowe błędy
Kryterium R.4.1 brzmi „Komentarz jest zgodny z Listingiem 1”. Pisz zwykły komentarz /* ... */ albo // z etykietami przepisanymi z arkusza - nie szablon XML.
Zrzut ekranu po tym kroku
Krok 9: Java: komentarz nad metodą
ok. 2 min
W Javie metoda statyczna w klasie z metodą main. Komentarz /* ... */ nad metodą:
public class Nwd {
/*
nazwa funkcji:
nwd
opis funkcji:
wyznacza największy wspólny dzielnik dwóch liczb algorytmem Euklidesa
parametry:
a - pierwsza liczba całkowita dodatnia
b - druga liczba całkowita dodatnia
zwracany typ i opis: int - największy wspólny dzielnik liczb a i b
autor: Bartosz Bryniarski
*/
static int nwd(int a, int b) {
while (b != 0) {
int reszta = a % b;
a = b;
b = reszta;
}
return a;
}
public static void main(String[] args) {
System.out.println("NWD(12, 18) = " + nwd(12, 18));
}
}
Program uruchomiony w JDK 21 wypisuje NWD(12, 18) = 6. Komentarz /** ... */ (Javadoc) też jest komentarzem wieloliniowym, ale etykiety wewnątrz muszą być takie jak w listingu, a nie znaczniki @param i @return.
Krok 10: Python: docstring pod linią def
ok. 2 min
W Pythonie najwygodniej użyć docstringu - napisu w potrójnym cudzysłowie zaraz pod linią def. Klucze od 2024 roku dopuszczają go wprost („w tym przypadku opis znajduje się pod nazwą funkcji”):
def nwd(a, b):
"""
nazwa funkcji:
nwd
opis funkcji:
wyznacza największy wspólny dzielnik dwóch liczb algorytmem Euklidesa
parametry:
a - pierwsza liczba całkowita dodatnia
b - druga liczba całkowita dodatnia
zwracany typ i opis: int - największy wspólny dzielnik liczb a i b
autor: Bartosz Bryniarski
"""
while b != 0:
a, b = b, a % b
return a
print("NWD(12, 18) =", nwd(12, 18))
Docstring nie jest zwykłym komentarzem - Python zapamiętuje go jako opis funkcji. Polecenie help(nwd) w IDLE pokazuje cały nagłówek, co jest szybkim sprawdzeniem, że stoi we właściwym miejscu.
Typowe błędy
Docstring postawiony nad linią def nie jest już opisem funkcji, tylko luźnym napisem w kodzie. Jeśli wolisz pisać nad funkcją, użyj kilku komentarzy jednoliniowych zaczynających się od #. Arkusze z lat 2021-2023 wymagały nagłówka nad funkcją - przy takim arkuszu wybierz komentarze # nad def.
Zrzut ekranu po tym kroku
Krok 11: Funkcja bez parametrów i bez wyniku: „brak”
ok. 2 min
Wzór z lat 2024-2026 każe w takich miejscach wpisać „brak”: <nazwa i opis parametru1, lub „brak”> i <nazwa typu i opis co jest zwracane lub „brak”>. Przykład dla metody, która tylko wypisuje menu:
/*
nazwa funkcji:
WypiszMenu
opis funkcji:
wypisuje w konsoli listę dostępnych poleceń programu
parametry:
brak
zwracany typ i opis: void - brak, metoda nic nie zwraca
autor: Bartosz Bryniarski
*/
static void WypiszMenu()
{
Console.WriteLine("1 - rzut kośćmi, 0 - koniec");
}
Klucze INF.04-01-24.06-SG i INF.04-02-25.01-SG przyjmują przy braku wyniku „void, brak itp.”, inne - „brak”.
Typowe błędy
Puste pole po etykiecie parametry: to brak opisu - kryterium nie jest spełnione. Wpisz słowo „brak”.
Etap 4: Nagłówek klasy
Krok 12
Krok 12: Nagłówek klasy zamiast funkcji
ok. 3 min
Trzy arkusze każą opisać klasę. Wzory są różne:
INF.04-03-23.06-SG: nazwa klasy, pola (nazwa - co przechowuje), metody (nazwa, co zwraca - opis), informacje (co reprezentuje klasa), autor,
INF.04-02-23.01-SG: klasa, opis (co klasa reprezentuje), pola („wpisz tyle pól ile ma klasa”), autor,
INF.04-02-24.01-SG: klasa, opis (co klasa reprezentuje i wykonuje), metody (nazwa - co zwraca), autor.
Przykład według wzoru z INF.04-02-23.01-SG:
/*
klasa: Kosc
opis:
reprezentuje jedną kość do gry i jej ostatnio wyrzuconą wartość
pola:
wartosc - liczba oczek wyrzucona w ostatnim rzucie
los - generator liczb pseudolosowych używany do rzutu
autor: Bartosz Bryniarski
*/
class Kosc
{
private int wartosc;
private Random los = new Random();
}
Typowe błędy
Klucze liczą kompletność: „nazwy wszystkich pól klasy” (INF.04-02-23.01-SG), „nazwy tylu metod ile znajduje się w klasie” (INF.04-02-24.01-SG). Gdy po napisaniu komentarza dodasz do klasy pole lub metodę, dopisz je też w nagłówku. W Pythonie docstring klasy stoi zaraz pod linią class.
Etap 5: Zanim oddasz
Krok 13
Krok 13: Lista kontrolna przed oddaniem
ok. 2 min
Sprawdź nagłówek z kodem i z arkuszem, punkt po punkcie:
Etykiety są takie jak w listingu Twojego arkusza, a nawiasy <> zastąpione treścią.
Opisana jest funkcja, której wymaga arkusz (albo dowolna - gdy arkusz na to pozwala).
Nazwa w komentarzu jest taka sama jak w kodzie, łącznie z wielkością liter.
Opisane są wszystkie parametry, a gdy ich nie ma - wpisane „brak”.
Typ zwracany ma nazwę i opis (np. int - największy wspólny dzielnik), a przy braku wyniku - „brak”.
W polu autora jest numer zdającego z pierwszej strony arkusza.
Program nadal się kompiluje - niedomknięty komentarz /* potrafi „zjeść” resztę kodu.
Plik źródłowy z komentarzem jest skopiowany do folderu aplikacji konsolowej (poza archiwum projektu), bo egzaminator czyta właśnie ten plik.