Сложно понять, что нужно было сделать автору программы, но в любом случае сделано криво. Ввод и вывод организованы так, что выводимые значения сливаются с вводимыми, образуя непонятные комбинации.
Программа запрашивает некоторое значение "В", на превышение которого потом она реагирует один раз. Затем запрашивается количество чисел, которые надо ввести. Эти числа вводятся в цикле (почему это цикл while - непонятно, обычно подобные вещи делают в цикле for) и тут же выводится, т.е. программа повторяет введенное число. В случае, когда введенное число первый раз превышает "В", перед этим числом выводится значение "В". Именно для этого использована логическая переменная bol: после возникшего превышения она принимает значение false и отключает дальнейшую проверку на превышение.
program arrdiap;
var
N, A, B, i: Integer;
M: array of Integer;
begin
Write ('Введите размерность массива: ');
ReadLn (N);
SetLength (M, N);
Randomize;
for i := Low (M) to High (M) do begin
M [i] := Random (100);
Write (M [i], ' ');
end;
WriteLn;
Write ('Введите диапазон A, B: ');
ReadLn (A, B);
WriteLn;
WriteLn ('Принадлежит диапазону ', A, ' - ', B, ':');
for i := Low (M) to High (M) do begin
if (M [i] >= A) and (M [i] <= B) then
Write (M [i], ' ');
end;
ReadLn;
end.
Программа запрашивает некоторое значение "В", на превышение которого потом она реагирует один раз. Затем запрашивается количество чисел, которые надо ввести. Эти числа вводятся в цикле (почему это цикл while - непонятно, обычно подобные вещи делают в цикле for) и тут же выводится, т.е. программа повторяет введенное число. В случае, когда введенное число первый раз превышает "В", перед этим числом выводится значение "В". Именно для этого использована логическая переменная bol: после возникшего превышения она принимает значение false и отключает дальнейшую проверку на превышение.