średniProgramowaniePythonC++

Funkcje w Python i C++ na Maturze z Informatyki

15 min czytania
Python, C++
Zaktualizowano: 3.11.2025

Funkcje to absolutna podstawa organizacji kodu. Pomyśl o nich jak o 'miniprogramach' lub 'przepisach', które możesz wielokrotnie wykorzystywać. Zamiast pisać 10 razy ten sam kod do obliczania NWD, piszesz go raz w funkcji nwd(a, b), a potem po prostu ją wywołujesz. Funkcja to wydzielony blok kodu, który ma swoją nazwę, przyjmuje jakieś dane wejściowe (nazywane parametrami) i może (ale nie musi) zwrócić jakiś wynik (za pomocą słowa kluczowego return). Jest to najważniejsze narzędzie do dzielenia skomplikowanych problemów na mniejsze, zarządzalne kawałki. Zamiast jednego, gigantycznego skryptu, piszesz czytelny kod złożony z małych, logicznych funkcji: wczytaj_dane(), przetworz_dane(), zapisz_wyniki().

Dlaczego to ważne? Na maturze czysty, podzielony na funkcje kod jest łatwiejszy do debugowania i pisania. Co ważniejsze, wiele zadań maturalnych (np. Matura 2024, Maj) wprost prosi o napisanie funkcji o określonej specyfikacji. Musisz biegle umieć definiować funkcje, przekazywać do nich argumenty i odbierać od nich wyniki za pomocą return. To klucz do modułowego i poprawnego rozwiązywania zadań.

Teoria

Funkcja to nazwany blok kodu, który wykonuje się tylko wtedy, gdy jest wywołany. Kapsułkuje logikę. Parametry to zmienne zadeklarowane w definicji funkcji (np. def dodaj(a, b)). Argumenty to konkretne wartości, które podajesz podczas wywołania (np. dodaj(5, 3)). Słowo kluczowe return natychmiast kończy działanie funkcji i odsyła wartość w miejsce wywołania.

Jak to działa?

  1. Krok 1: Definicja Funkcji. W Pythonie zaczynasz od def nazwa_funkcji(parametr1, parametr2):. W C++ musisz określić typ zwrotny: typ_zwrotu nazwa_funkcji(typ1 parametr1) {}.
  2. Krok 2: Parametry (Wejście). To zmienne 'wewnętrzne' funkcji. a i b w def dodaj(a, b): istnieją tylko wewnątrz tej funkcji.
  3. Krok 3: Ciało Funkcji. To wcięty blok kodu (Python) lub kod w nawiasach {} (C++), który wykonuje całą logikę.
  4. Krok 4: Zwracanie Wartości (Wyjście). return x wysyła wartość x na zewnątrz. Funkcja kończy działanie w tym momencie.
  5. Krok 5: Wywołanie Funkcji. Aby użyć funkcji, piszesz jej nazwę z argumentami w nawiasach, np. wynik = dodaj(10, 20). Program 'wskakuje' do funkcji, wykonuje ją i 'wraca' z wartością.
  6. Krok 6: Funkcje void (Python: None). Funkcja, która nic nie zwraca (np. tylko coś wypisuje), w C++ ma typ void. W Pythonie taka funkcja automatycznie zwraca specjalną wartość None.

Złożoność: Nie dotyczy. Złożoność zależy od tego, co robi funkcja. Samo wywołanie funkcji ma pewien mały, stały narzut czasowy (O(1)), ale na maturze jest on pomijalny.

Implementacja

Definiowanie i zwracanie wartości (`return`)

Python
# 1. Funkcja, która przyjmuje parametry i zwraca wartość
def dodaj(a, b):
    suma = a + b
    return suma

# Wywołanie funkcji
wynik_dodawania = dodaj(5, 3)
print(f"Wynik: {wynik_dodawania}") # Wynik: 8

# 2. Funkcja, która nic nie zwraca (zwraca None)
def powitaj(imie):
    print(f"Cześć, {imie}!")

# Wywołanie funkcji
wynik_witania = powitaj("Anna")
print(f"Wynik funkcji 'powitaj': {wynik_witania}") # Cześć, Anna! 
                                               # Wynik funkcji 'powitaj': None

Funkcja `dodaj` *zwraca* wynik, który możemy przypisać do zmiennej. Funkcja `powitaj` tylko *wypisuje* coś na ekran, a sama w sobie nie ma wartości (zwraca `None`). To kluczowa różnica.

Funkcja jako narzędzie maturalne (np. `czy_pierwsza`)

Python
def czy_pierwsza(n):
    """Sprawdza, czy liczba n jest liczbą pierwszą."""
    if n < 2:
        return False # Liczby mniejsze od 2 nie są pierwsze
    
    for i in range(2, int(n0.5) + 1):
        if n % i == 0:
            return False # Znaleziono dzielnik, więc nie jest pierwsza
    
    return True # Pętla się skończyła, nie znaleziono dzielników

# Użycie funkcji w pętli
licznik = 0
for liczba_z_pliku in [2, 3, 4, 5, 6, 7, 10, 11]:
    if czy_pierwsza(liczba_z_pliku):
        licznik += 1

print(f"Znaleziono {licznik} liczb pierwszych.") # 5

To idealny przykład użycia funkcji na maturze. Zamiast wklejać skomplikowany kod sprawdzania pierwszości do głównej pętli, 'zamykasz' go w funkcji `czy_pierwsza`. Kod staje się czysty i czytelny.

Definiowanie i zwracanie wartości (`return`)

C++
#include <iostream>
#include <string>

using namespace std;

// 1. Funkcja, która przyjmuje parametry i zwraca wartość
int dodaj(int a, int b) {
    int suma = a + b;
    return suma;
}

// 2. Funkcja, która nic nie zwraca (typ void)
void powitaj(string imie) {
    cout << "Cześć, " << imie << "!" << endl;
}

int main() {
    int wynik_dodawania = dodaj(5, 3);
    cout << "Wynik: " << wynik_dodawania << endl; // Wynik: 8
    
    powitaj("Anna"); // Cześć, Anna!
    return 0;
}

W C++ musisz jawnie zadeklarować typ zwracanej wartości (np. `int`, `string`, `bool`). Jeśli funkcja nic nie zwraca, używasz typu `void` (pustka).

Przykładowe Zadania Maturalne

Matura 2026Zadanie Zadanie Typu Maturalnego 1

Napisz funkcję suma_cyfr(n), która dla podanej liczby naturalnej 'n' obliczy i zwróci sumę jej cyfr (np. dla n=123 funkcja powinna zwrócić 6). Następnie, używając tej funkcji, znajdź i wypisz tę liczbę z pliku 'liczby.txt' (zawierającego 1000 liczb), która ma największą sumę cyfr.

Wskazówka: Funkcja suma_cyfr(n) powinna używać pętli while n > 0. W pętli pobieraj ostatnią cyfrę (n % 10) i dodawaj do sumy, a następnie skracaj liczbę (n = n // 10). W programie głównym wczytaj plik, iteruj po liczbach, wywołuj dla każdej swoją funkcję i szukaj maksimum.

Pokaż szkic rozwiązania
1. Zdefiniuj funkcję `suma_cyfr(n)`:
   a. `suma = 0`
   b. `while n > 0:`
   c. `  suma += n % 10`
   d. `  n //= 10`
   e. `return suma`
2. Zainicjuj zmienne `max_suma = 0` i `liczba_o_max_sumie = 0`.
3. Otwórz plik 'liczby.txt'.
4. Dla każdej linii w pliku:
   a. Wczytaj `liczba = int(linia.strip())`.
   b. Oblicz sumę cyfr: `biezaca_suma = suma_cyfr(liczba)`.
   c. Sprawdź: `if biezaca_suma > max_suma:`
   d. `  max_suma = biezaca_suma`
   e. `  liczba_o_max_sumie = liczba`
5. Wypisz `liczba_o_max_sumie`.
Matura 2024Zadanie 3.1 (Matura Maj 2024)

Nieparzystym skrótem dodatniej liczby całkowitej n nazwiemy dodatnią liczbę całkowitą m, która powstaje przez usunięcie cyfr parzystych z zapisu dziesiętnego liczby n (np. dla 294762 skrótem jest 97). Napisz funkcję, która dla dodatniej całkowitej liczby n (...) wyznaczy liczbę m - nieparzysty skrót liczby n. W zapisie funkcji możesz korzystać tylko z operacji arytmetycznych (bez konwersji na stringi).

Wskazówka: To zadanie wprost prosi o napisanie funkcji. Funkcja musi iterować po cyfrach liczby 'n' (najlepiej od końca, używając n % 10 i n //= 10). Jeśli cyfra jest nieparzysta, musisz ją 'dopiąć' na początek budowanej liczby 'm'. Użyj do tego mnożnika (potęgi 10).

Pokaż szkic rozwiązania
1. Zdefiniuj funkcję `skrot(n)`:
   a. Zainicjuj wynik `m = 0`.
   b. Zainicjuj mnożnik pozycji: `mnoznik = 1`.
   c. Rozpocznij pętlę `while n > 0:`
   d.    Pobierz ostatnią cyfrę: `cyfra = n % 10`.
   e.    Skróć `n`: `n //= 10`.
   f.    Sprawdź warunek: `if cyfra % 2 != 0:` (jeśli nieparzysta).
   g.       Dodaj cyfrę na początek budowanego wyniku: `m = m + cyfra * mnoznik`.
   h.       Zwiększ mnożnik: `mnoznik *= 10`.
   i. Zwróć `m`.

Częste Błędy

Mylenie print z return

To najczęstszy błąd. print(wynik) tylko wyświetla wartość w konsoli, ale funkcja nie zwraca tej wartości. Kod x = dodaj(2, 2) (gdzie dodaj używa print) sprawi, że x będzie równe None (w Pythonie).

Poprawka: Jeśli chcesz, aby funkcja przekazała wartość do reszty programu, musisz użyć return wynik.

Zasięg zmiennych (Scope)

Zmienna utworzona wewnątrz funkcji (zmienna lokalna) 'umiera', gdy funkcja się kończy. Nie możesz się do niej odwołać z zewnątrz. def fn(): x = 10; fn(); print(x) -> błąd!

Poprawka: Jeśli chcesz wyciągnąć wartość z funkcji, funkcja musi ją zwrócić (return x), a kod na zewnątrz musi ten wynik odebrać (wynik = fn()).

Zapomnienie o return (Python)

Jeśli funkcja Pythona dojdzie do końca i nie napotka return, automatycznie zwraca None. Jeśli zapomnisz return suma w swojej funkcji, obliczenia w programie głównym będą działać na None, co spowoduje błąd TypeError.

Poprawka: Zawsze upewnij się, że funkcja, która ma coś obliczać, kończy się poleceniem return.

C++: Zapomnienie o typie zwrotnym

W C++ każda funkcja musi mieć określony typ zwrotny (np. int, string, bool). Jeśli funkcja nic nie zwraca, musi być oznaczona jako void.

Poprawka: Zawsze zaczynaj definicję funkcji w C++ od typu, który zwraca (np. int suma_cyfr(int n) {...}).

Kluczowe Wnioski

  • Funkcje to bloki kodu wielokrotnego użytku, klucz do organizacji (zasada DRY - Don't Repeat Yourself).
  • def (w Pythonie) lub typ_zwrotu nazwa() (w C++) rozpoczyna definicję funkcji.
  • Parametry to 'zmienne-szablony' w definicji, a argumenty to 'konkretne wartości' przekazywane przy wywołaniu.
  • return natychmiast kończy funkcję i odsyła (zwraca) wartość do miejsca wywołania.
  • Funkcja, która nic nie zwraca, w C++ ma typ void, a w Pythonie automatycznie zwraca None.
  • Zmienne tworzone w funkcji są lokalne - nie istnieją poza nią.
  • Na maturze zawsze dziel skomplikowane problemy na mniejsze, logiczne funkcje.

Najczęściej Zadawane Pytania

Jaka jest dokładnie różnica między `print` a `return`?

`print()` to instrukcja wyjścia. Po prostu 'drukuje' coś na ekran, aby człowiek mógł to zobaczyć. `return` to instrukcja *wyjścia* z funkcji, która przekazuje wartość z powrotem do programu, aby mógł on jej dalej używać w obliczeniach.

Czy funkcja może zwracać wiele wartości?

W Pythonie tak! Możesz napisać `return a, b, c`. Python automatycznie 'spakuje' te wartości w jedną krotkę (tuple), którą możesz potem 'rozpakować': `x, y, z = moja_funkcja()`.

Co to jest 'parametr', a co to 'argument'?

To dwie strony tego samego. Parametr to nazwa zmiennej w *definicji* funkcji, np. `imie` w `def powitaj(imie):`. Argument to *wartość*, którą podajesz przy *wywołaniu* funkcji, np. 'Anna' w `powitaj("Anna")`.

Co się stanie, jeśli przekażę listę do funkcji i ją zmienię w środku?

W Pythonie, jeśli przekażesz listę (lub słownik) do funkcji i zmodyfikujesz ją *w miejscu* (np. przez `.append()` lub `lista[0] = 100`), ta zmiana będzie widoczna *również na zewnątrz* funkcji po jej zakończeniu. Dzieje się tak, ponieważ funkcja otrzymuje referencję (wskaźnik) do tej listy, a nie jej kopię.

Chcesz opanować wszystkie tematy maturalne?

Dołącz do kursu i zyskaj dostęp do interaktywnych lekcji, edytora kodu i setek zadań.

Powiązane Tematy