Każdy, kto przygotowuje się do matury z informatyki, natknął się na tajemniczy zapis w arkuszach egzaminacyjnych, który wywołuje konsternację wśród zdających. Mowa o uwadze dotyczącej funkcji wbudowanych, która regularnie pojawia się w zadaniach algorytmicznych.
W tym artykule wyjaśnimy raz na zawsze, co można, a czego nie można używać, aby nie stracić cennych punktów na egzaminie.
Funkcjami wbudowanymi nazywamy wszystkie funkcje dostępne w języku programowania i dodatkowych bibliotekach, których można używać bez konieczności ich samodzielnego implementowania. Do tej kategorii należą między innymi:
Zablokowanie funkcji takich jak sort(), min(), max() ma uzasadnienie – samodzielna implementacja np. sortowania bąbelkowego jest przecież w wymaganiach maturalnych. Ale jak mamy wczytać czy wyświetlić dane?
Przyjrzyjmy się zadaniu 3.1 z matury z 2024 roku.
Kluczowe jest sformułowanie "napisz funkcję". Oznacza to, że:
Warto traktować zapis o funkcjach wbudowanych jako wskazówkę, w którym kierunku pójść z rozwiązaniem. Wracając do wspomnianego zadania – chodziło o wyeliminowanie parzystych cyfr z liczby. W uwadze znajdziemy podpowiedź: "liczby całkowite", "dzielenie z resztą".
Rozwiązanie nasuwa się samo:
wynik = 0
pozycja = 1
while n > 0:
cyfra = n % 10
n //= 10
if cyfra % 2 == 1:
wynik += cyfra
pozycja *= 10
Zadania są skonstruowane tak, że przy solidnych podstawach programowania nie odczuwa się potrzeby użycia zakazanych operacji.
Zapis "uwagi" nie jest zawsze identyczny. W zadaniu 2.3 z matury czerwcowej 2023 mamy inną sytuację – uwaga dotyczy odwoływania się do elementów tablicy.
Wyświetlenie wartości pod danym indeksem tablicy (zarówno w C++, jak i w Pythonie) odbywa się przez podanie indeksu w nawiasie kwadratowym – i to możemy robić. Ale żeby wyświetlić element tablicy, trzeba najpierw coś do niej dodać.
Dodawanie elementów do tablicy/listy W C++ sprawa jest prosta – analogicznie odwołujemy się jak przy wyświetleniu i zmieniamy wartości za pomocą operatora przypisania.
W Pythonie większość osób od razu sięga po append(), ale czy to przypadkiem nie brzmi jak funkcja wbudowana? Dokładnie tak! Skoro w poleceniu wyraźnie napisano, co wolno używać, trzeba przypomnieć sobie, że listę w Pythonie możemy najpierw utworzyć wypełnioną zerami za pomocą mnożenia. Później możemy odczytać i zmienić dane w poszczególnych elementach. Dzięki takiemu zabiegowi kod jest zgodny ze specyfikacją.
lista = [0] * n
lista[5] = 15
Warto zwrócić uwagę na różnicę w poleceniach. W zadaniu z tablicami nie było sformułowania "napisz funkcję", tylko "zapisz w wybranej przez siebie notacji algorytm, który obliczy wartości elementów tablicy T".
Na pierwszy rzut oka może to być nieintuicyjne, ale w praktyce polecenie mówi nam, że należy napisać sam algorytm, który nie jest zamknięty w funkcji. Można myśleć o tym jako o fragmencie większego kodu – wszystkie dane są już wczytane, trzeba na nich tylko odpowiednio operować.
Ważne: tablica T nie jest daną wejściową. Polecenie opisuje tylko, co ma być wynikiem. Zatem tablicę T należy zainicjalizować w ramach rozwiązania.
Przy tablicach, po których zazwyczaj iterujemy, warto zwrócić uwagę na pętle, szczególnie w Pythonie.
Większość programistów od razu sięgnie po for i in range(len(lista)), ale uwaga – range() oraz len() to też funkcje wbudowane! Alternatywami są:
W C++ pętle można robić standardowo, ale funkcje jak length() czy size() też odpadają.
Żeby nie było za prosto, istnieją wyjątki. W zadaniu 1.2 z matury majowej 2016 musieliśmy wypisać liczbę lub komunikat.
W tym przypadku trzeba było użyć funkcji wypisującej, jak print() czy cout – było to wyraźnie zaznaczone w poleceniu.
Zasada jest prosta: jeśli autor zadania mówi, że możesz czegoś użyć, to korzystasz. Tylko wtedy jest to zgodne z zasadami.
W formule 2023: Oczywiście! Masz dostęp do komputera przez cały egzamin. Nie ma już podziału na teorię i praktykę – wszystko jest w jednym arkuszu. Możesz napisać algorytm na komputerze, sprawdzić go i przepisać do arkusza maturalnego.
W formule 2015: W części teoretycznej nie masz dostępu do komputera, więc jak coś zapiszesz, nie przetestujesz już, czy faktycznie działa.
Jeśli w zadaniu wyraźnie zakazano funkcji wbudowanych – po co chcesz coś importować? Na przykład, jeśli nie używasz cout ani cin, to w zasadzie nie korzystasz z biblioteki iostream, więc nie musisz jej importować.
Co z funkcją main() w C++?Dopisywanie funkcji main() nie jest konieczne. Polecenie jasno wskazuje, że należy napisać samą funkcję lub algorytm, a nie w pełni działający program. Rozróżniamy więc: "napisz funkcję", "algorytm" czy "program".
Kluczem do sukcesu jest dokładne czytanie poleceń i stosowanie się do zapisów w arkuszu. Pamiętaj:
Zadania maturalne są skonstruowane tak, że przy solidnych podstawach programowania nie odczuwa się potrzeby używania zakazanych funkcji. Kluczem jest zrozumienie, że ograniczenia mają sens edukacyjny – mają sprawdzić, czy potrafisz samodzielnie zaimplementować podstawowe algorytmy.
Jeśli masz jeszcze wątpliwości dotyczące konkretnych zapisów w arkuszach maturalnych, warto skonsultować się z nauczycielem lub przeanalizować więcej przykładowych zadań z poprzednich lat.