W Pascalu istnieją dwa podstawowe rodzaje podprogramów: funkcje i procedury. Kluczowa, egzaminacyjnie istotna różnica dotyczy zwracania wartości.
Funkcja (FUNCTION) zawsze zwraca dokładnie jedną wartość określonego typu. Typ wyniku jest podany w nagłówku funkcji, a sam wynik jest ustawiany w ciele funkcji przez przypisanie do nazwy funkcji (np. "NazwaFunkcji := wynik"). Dzięki temu wywołanie funkcji może być elementem wyrażeń arytmetycznych i logicznych, np. w obliczeniach lub warunkach.
Procedura (PROCEDURE) służy do wykonania czynności (np. wypisanie tekstu, zapis do pliku, modyfikacja struktur danych), ale nie zwraca wartości przez nazwę. Procedury nie używa się jako "wartości" w wyrażeniu. Ważny niuans: procedura może "oddać" dane przez modyfikację parametrów przekazanych przez referencję (VAR) lub przez zmianę zmiennych globalnych, ale to nie jest to samo co zwrócenie wyniku funkcji.
Dlaczego pozostałe odpowiedzi są niepoprawne?
- "Do funkcji i procedur można przekazywać zarówno zmienne, jak i wartości." — to opis cechy wspólnej: oba typy podprogramów mogą przyjmować parametry, w tym przekazywane przez wartość lub przez referencję (VAR). Nie jest to różnica.
- "Procedura i funkcja mogą mieć dowolną liczbę parametrów." — również cecha wspólna: zarówno funkcja, jak i procedura mogą mieć 0, 1 lub wiele parametrów, zależnie od potrzeb.
- "Funkcja i procedura różnią się tylko nazwą, nie funkcjonalnością." — fałsz: różnią się semantyką wywołania i rolą w programie; funkcja jest źródłem wartości, procedura jest instrukcją wykonującą działanie.
Wskazówka do nauki: jeśli podprogram ma być użyty "po prawej stronie" w obliczeniach lub w warunku — zwykle powinien być funkcją. Jeśli ma wykonywać operację bez potrzeby pojedynczego wyniku — zwykle procedurą.