KWALIFIKACJA INF2 + INF3 - CZERWIEC 2008

PYTANIE NR 11.
W kodzie źródłowym programu zastosowano procedurę z parametrami formalnymi.


Procedure Zadanie (Var a, b, c: Byte; Var x: Word);



W momencie wywołania procedury następuje przekazywanie parametrów przez
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Słowo kluczowe Var w nagłówku procedury w Pascalu/Delphi oznacza przekazywanie argumentu przez referencję.
Dzięki temu procedura operuje na oryginalnej zmiennej (nie na kopii), więc zmiany wykonane wewnątrz procedury są widoczne po jej zakończeniu. W podanej deklaracji wszystkie parametry mają Var.

Pełne wyjaśnienie:

W językach z rodziny Pascal/Delphi sposób przekazywania parametrów wynika bezpośrednio z deklaracji parametrów formalnych.

Przekazywanie przez referencję zachodzi wtedy, gdy parametr jest poprzedzony słowem kluczowym Var. Oznacza to, że do procedury trafia odwołanie do tej samej zmiennej, która została użyta jako argument wywołania. W praktyce procedura może zmienić jej wartość, a efekt będzie widoczny także po powrocie z procedury.

Przekazywanie przez wartość (bez Var) polega na utworzeniu kopii argumentu w parametrze lokalnym. Modyfikacje wykonane w procedurze dotyczą wtedy tylko tej kopii i nie zmieniają oryginalnej zmiennej wywołującej.

W pokazanej deklaracji: Procedure Zadanie (Var a, b, c: Byte; Var x: Word); zarówno grupa a, b, c, jak i parametr x mają poprzedzające je Var. To przesądza, że w momencie wywołania procedury wszystkie te argumenty są przekazywane przez referencję.

Dlaczego pozostałe odpowiedzi nie pasują?

  • "wartość" byłaby poprawna, gdyby przy parametrach nie było Var (czyli procedura dostałaby kopie).
  • "wskaźnik" to inne pojęcie: wskaźnik jest osobnym typem/daną, którą zwykle deklaruje się jawnie. Samo Var nie oznacza, że przekazujesz wskaźnik jako wartość.
  • "stałą" wiąże się z parametrami tylko do odczytu (np. Const), a nie z możliwością modyfikacji argumentu.

Wskazówka egzaminacyjna: jeśli w nagłówku widzisz Var, myśl "procedura może zmienić argument"; jeśli Var nie ma, myśl "procedura pracuje na kopii".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Var oznacza przekazywanie przez referencję. Procedura dostaje dostęp do tej samej zmiennej, którą podano jako argument, więc zmiany w środku procedury wpływają na wartość po wywołaniu. To typowy sposób, gdy procedura ma "zwrócić" wynik przez parametr.
Sprawdź nagłówek procedury/funkcji: brak Var zwykle oznacza przekazywanie przez wartość (kopia argumentu), a obecność Var oznacza przekazywanie przez referencję (operacja na oryginalnej zmiennej). To wynika bezpośrednio ze składni Pascala/Delphi.
Bo parametr Var nie jest niezależną kopią. Jest powiązany z argumentem wywołania, więc przypisanie do parametru w procedurze jest w praktyce przypisaniem do tej samej zmiennej "na zewnątrz". Skutek uboczny jest zamierzony i bywa potrzebny w wielu algorytmach.
Nie w sensie pojęciowym. Var określa sposób przekazania parametru (referencyjnie), a wskaźnik jest osobnym typem danych, który zwykle deklaruje się jawnie. W zadaniach egzaminacyjnych "przez wskaźnik" nie jest poprawnym określeniem mechanizmu Var.
Najczęściej przejdziesz na przekazywanie przez wartość: procedura otrzyma kopię argumentu. Wtedy modyfikacje parametru w procedurze nie zmienią oryginalnej zmiennej wywołującej. To dobra praktyka, gdy procedura ma tylko odczytywać dane i nie powinna mieć skutków ubocznych.
Gdy procedura ma zmodyfikować przekazane zmienne (np. zamienić wartości dwóch zmiennych, zaktualizować licznik, zwrócić kilka wyników). Czasem używa się Var także dla wydajności, aby nie kopiować dużych struktur, ale trzeba uważać na niezamierzone zmiany danych.
Najczęściej myli się Var z wskaźnikiem, albo zakłada, że "domyślnie" zawsze jest przekazywanie przez wartość i ignoruje Var w nagłówku. Inny błąd to traktowanie "referencji", "adresu" i "przez zmienną" jako różnych mechanizmów, choć w tym kontekście opisują to samo.
Nie. Określenie "stałą" dotyczy parametrów tylko do odczytu (często spotyka się dyrektywę Const), a Var wiąże się z możliwością modyfikacji argumentu (referencja). Jeśli w pytaniu jest Var, właściwa odpowiedź dotyczy referencji, nie stałości.
Parametr formalny jest w definicji procedury (np. w nawiasie w jej nagłówku). Argument to konkretna zmienna lub wartość podana podczas wywołania. W kontekście Var ważne jest, że argumentem musi być zmienna, bo procedura ma dostać do niej odwołanie.
Ćwicz na krótkich przykładach: napisz procedurę z parametrem bez Var i z Var, wywołaj ją na tej samej zmiennej i porównaj wyniki. Zapamiętaj regułę: Var → modyfikacje widoczne na zewnątrz, brak Var → modyfikacje dotyczą kopii.
info

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

Specjaliści zwracają uwagę: "W podanej deklaracji wszystkie parametry mają Var."

Źródła:

  • Free Pascal Reference Guide: rozdział "Procedure and Function parameters" (value/var/const/out), https://www.freepascal.org/docs-html/ref/refse42.html - dostęp 2026-02-27
  • Free Pascal User's Guide: część o języku i deklaracjach procedur/funkcji (parametry), https://www.freepascal.org/docs-html/user/userse19.html - dostęp 2026-02-27
  • Embarcadero DocWiki (Delphi): "Parameter directives (var, const, out)", https://docwiki.embarcadero.com/RADStudio/en/Parameters_(Delphi) - dostęp 2026-02-27

Materiały:

  • Dokumentacja Free Pascal: rozdział o parametrach (value/var/const/out)
  • Dokumentacja Delphi/Object Pascal: opis parametrów var/const/out
  • Ćwiczenia: krótkie programy pokazujące różnicę między parametrem przez wartość a parametrem Var

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego