KWALIFIKACJA ELM6 - TEST WIEDZY NR 1

PYTANIE NR 7.
Otrzymujesz następujący fragment kodu do programowania urządzenia mechatronicznego:
int setParam(int paramValue) {
  if (paramValue < 0 || paramValue > 100) {
    return -1;
  }
  // Ustawianie parametru...
  return 0;
}
Jakie jest prawidłowe działanie funkcji setParam?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Funkcja sprawdza, czy argument paramValue mieści się w zakresie 0–100. Gdy wartość jest mniejsza od 0 lub większa od 100, zwraca -1 (sygnał błędu). W przeciwnym razie przechodzi dalej (tu: "ustawianie parametru…") i zwraca 0, co oznacza poprawne wykonanie.

Pełne wyjaśnienie:

Pokazany kod prezentuje typowy wzorzec z programowania (także w systemach wbudowanych i mechatronice): walidację danych wejściowych oraz zwracanie kodu statusu.

Najpierw wykonywana jest kontrola zakresu:

  • Jeśli paramValue < 0 lub paramValue > 100, funkcja natychmiast kończy działanie i zwraca -1. To sygnał, że podano wartość spoza dopuszczalnego przedziału.
  • Jeśli warunek nie zachodzi, oznacza to, że paramValue jest w zakresie 0–100 (łącznie z wartościami granicznymi 0 i 100). Wtedy kod przechodzi do miejsca opisanego komentarzem "Ustawianie parametru…" i zwraca 0, co w wielu konwencjach oznacza powodzenie.

Dlaczego odpowiedź "Ustawia parametr na wartość od 0 do 100, a w przypadku błędu zwraca -1." pasuje do kodu? Ponieważ wprost wynika z instrukcji if: wartości spoza przedziału są odrzucane zwrotem -1, a wartości poprawne dopuszczają kontynuację (ustawienie parametru jest zasugerowane komentarzem) i kończą się zwrotem 0.

Pozostałe odpowiedzi są błędne, bo:

  • Stwierdzenie, że ustawiana jest tylko wartość -1 lub 0, myli kody zwrotne z wartością parametru. -1 i 0 to wartości zwracane przez funkcję, a nie docelowa nastawa.
  • Teza o "dowolnej wartości" ignoruje kontrolę zakresu, która jednoznacznie blokuje wartości mniejsze od 0 i większe od 100.
  • Opis przedziału od -1 do 0 nie ma uzasadnienia w warunku; -1 jest kodem błędu, a 0 kodem sukcesu, natomiast parametr (wg założenia) ma być w zakresie 0–100.

W praktyce mechatronicznej takie sprawdzanie chroni urządzenie przed przyjęciem niebezpiecznych nastaw (np. prędkości, mocy, wypełnienia PWM) i ułatwia diagnostykę: kod wywołujący może zareagować na -1, np. zgłosić błąd lub utrzymać poprzednią wartość parametru.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zwrócenie -1 jest tu kodem statusu oznaczającym błąd (najczęściej: niepoprawny argument). Funkcja przerywa działanie od razu po wykryciu wartości spoza zakresu i informuje wywołującego, że nie należy kontynuować ustawiania parametru.
Operator || oznacza alternatywę: błąd ma wystąpić, gdy wartość jest mniejsza od 0 lub większa od 100. Gdyby użyć &&, warunek byłby praktycznie niemożliwy do spełnienia jednocześnie i walidacja nie działałaby poprawnie.
Akceptowane są wartości z przedziału 0–100 włącznie. Kod odrzuca tylko te, które spełniają paramValue < 0 albo paramValue > 100. To oznacza, że 0 i 100 przechodzą walidację i prowadzą do zwrócenia 0.
W pokazanym fragmencie widać jedynie walidację i zwrócenie kodu. Komentarz "Ustawianie parametru…" sugeruje, że w pełnej wersji w tym miejscu byłby kod zapisujący nastawę (np. do zmiennej, rejestru lub pamięci), ale nie jest on pokazany.
Zwrócenie 0 to częsta konwencja oznaczająca, że operacja zakończyła się powodzeniem. W tym przypadku 0 oznacza: argument był w dopuszczalnym zakresie i funkcja mogła wykonać dalszą część (np. ustawienie parametru) bez błędu.
Najprościej sprawdzić wynik i zareagować na błąd, np.: jeśli funkcja zwróci wartość ujemną, nie zmieniać nastaw, zgłosić alarm lub zapisać kod diagnostyczny. Jeśli zwróci 0, można kontynuować pracę układu, zakładając, że parametr został przyjęty.
Typowe pomyłki to: odczytanie || jakby oznaczało "i", mylenie kodu zwrotnego z ustawianą wartością parametru oraz przeoczenie znaków < i > (np. uznanie, że wartości graniczne 0 i 100 są błędne, choć nie są).
Stosuje się ją wszędzie tam, gdzie parametr jest procentem lub skalą umowną, np. wypełnienie PWM, poziom mocy, procent otwarcia zaworu czy intensywność sterowania. Walidacja zapobiega wysłaniu do urządzenia wartości, która mogłaby spowodować nieprawidłową pracę.
W systemach wbudowanych i sterownikach mechatronicznych często wybiera się kody zwrotne (jak 0 i -1), bo są proste, przewidywalne i nie wymagają mechanizmu wyjątków. Wyjątki bywają wygodne w aplikacjach wysokopoziomowych, ale mogą komplikować deterministykę czasu działania.
Można zastosować różne kody ujemne dla różnych problemów (np. inny kod dla zbyt małej i zbyt dużej wartości) albo zwracać typ wyliczeniowy (enum) opisujący status. Inną opcją jest zapisanie dodatkowej informacji do zmiennej diagnostycznej lub struktury wyniku.
info

To pytanie poprawnie rozwiązuje 67% zdających egzamin. średnie

Specjaliści zwracają uwagę: "Funkcja sprawdza, czy argument paramValue mieści się w zakresie 0–100."

Źródła:

  • ISO/IEC 9899:2018 (C18), rozdział 6.8.4 (instrukcja return) oraz 6.5.14 (operator ||)
  • cppreference.com: "Logical OR operator" https://en.cppreference.com/w/c/language/operator_logical (dostęp: 2026-03-02)
  • cppreference.com: "return statement" https://en.cppreference.com/w/c/language/return (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja języka C/C++ dotycząca instrukcji if, operatorów logicznych i return
  • Materiały o wzorcach obsługi błędów: kody zwrotne vs wyjątki
  • Ćwiczenia z czytania krótkich funkcji walidujących (range checking) w systemach wbudowanych

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego