Pokazany kod realizuje klasyczną zamianę (swap) dwóch wartości z użyciem zmiennej pomocniczej. Kluczowe jest to, że parametry procedury są zadeklarowane jako var A, B: integer, czyli są przekazywane przez referencję (procedura może modyfikować zmienne użyte przy wywołaniu).
Kolejne instrukcje działają następująco:
- Pom := A; – do zmiennej lokalnej Pom kopiowana jest aktualna wartość A.
- A := B; – do A wpisywana jest wartość B (A przyjmuje "stare B").
- B := Pom; – do B wraca poprzednia wartość A, przechowana w Pom (B przyjmuje "stare A").
Po zakończeniu procedury wartości A i B są zamienione. Ponieważ były to parametry var, ta zamiana dotyczy też rzeczywistych argumentów wywołania, czyli X i Y.
Dlaczego pozostałe odpowiedzi są niepoprawne?
- Stwierdzenie o "znalezieniu mniejszej liczby i zapisaniu jej w Pom" jest błędne, bo kod nie wykonuje żadnego porównania (brak instrukcji typu if/relacji < lub >). Pom służy wyłącznie jako bufor.
- Stwierdzenie o "znalezieniu większej liczby i zapisaniu jej w X" także wymagałoby porównania, którego nie ma. X (czyli A) dostaje wartość Y (B) niezależnie od tego, która liczba jest większa.
- Stwierdzenie o "podwojeniu wartości" jest błędne, bo nigdzie nie ma operacji mnożenia przez 2 ani dodawania wartości do siebie; są tylko przypisania.
Wskazówka egzaminacyjna: przy takich zadaniach najpierw sprawdź, czy parametry są przekazywane przez referencję (var) czy przez wartość. Następnie prześledź kod "na sucho" na prostym przykładzie (np. A=1, B=2), aby zobaczyć efekt końcowy.