Dopisałem kilka linijek. Proponuje skompilować i zobaczyć wyniki.
Program ML;
var p,q: integer;
b: boolean;
begin
p:=2;
q:=2;
b := ((q div p + 1) =q);
while b do begin
write(p); write(' '); write(q); write(' '); writeln(b);
p:=p-1;
b:=((q div p + 1) =q);
end;
write(p); write(' '); write(q); write(' '); writeln(b);
end.
Jak ktoś chciałby to przetestować online to polecam stronę https://www.tutorialspoint.com/compile_pascal_online.php
A wracając do pytań.
Kod jest poprawny.
Poprawna odpowiedź to b) (p zmniejszamy z 2 do 1, a q ma cały czas wartość 2).
Instrukcja b:=((q div p + 1) =q); - przypisz do zmiennej (boolowskiej b) wynik porównania (true albo false),
tutaj mamy ((2 div 2 + 1) = 2), tzn ((1 + 1) = 2), czyli (2 = 2), co daje true,
a wewnątrz while jest ((2 div 1 + 1) = 2), tzn ((2 + 1) = 2), czyli (3 = 2), co daje false,